我目前正在尝试采用 Adam 的二阶矩项 v_t,并将其用作成本函数中的附加项。我怎样才能实现这样的事情:
Cost = Cross Entropy + v_t*some_function(weights)
这可以在 python 中完成吗?或者我是否必须编写自己的 C++ 代码才能完成此操作?这在像 Keras 这样的框架中也很容易实现吗? 这是我试图添加到 keras 中的成本函数的代码:
def my_loss(y_pred, y_true, current_weights, v_t):
normal_loss=K.categorial_cross_entropy(y_pred,y_true)
additional_term=K.dot(K.square(current_weights - K.some_function(current_weights)), v_t)
return normal_loss + additional_term
最佳答案
无论您使用什么框架执行此操作,这都会有问题。具体来说,我们从 ADAM paper相关行:
g_t = d Cost / d weights
v_t = beta2 * v_{t-1} + (1 - beta2) g_t^2
现在,如果您要将 v_t 包含在 Cost 中,这将是一个隐式方程:
g_t = d Cross Entropy / d weights + d (v_t*some_function) / d weights
v_t = beta2 * v_{t-1} + (1 - beta2) g_t^2
注意 v_t 如何出现在两个等式中。我们可以将其扩展为更清晰
v_t = beta2 * v_{t-1} + (1 - beta2) [d Cross Entropy / d weights + d (v_t*some_function) / d weights]^2
您可以尝试精确地解决这个问题,但这样做您将不得不使用某种形式的隐式求解器,这在计算上会非常昂贵。一种方法是 fixed point iteration .
关于python - 使用第二动量作为新成本函数的一部分? (Tensorflow 和/或 keras),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44893395/