张量运算的导数

时间:2019-07-11 17:12:15

标签: python machine-learning deep-learning

我正在读一本关于深度学习的书,对作者提到的其中一种想法感到有些困惑。摘自Francois Chollet的《 Python深度学习》

  

梯度是张量运算的导数。这是   导数概念到函数的泛化   多维输入:即采用张量的函数   作为输入。

     

考虑输入向量x,矩阵W,目标y和a   损失函数损失。您可以使用W来计算目标候选人   y_pred,并计算目标之间的损失或失配   候选y_pred和目标y:

     

y_pred =点(W,x)

     

损失值=损失(y_pred,y)

     

如果数据输入x和y被冻结,则可以是   解释为将W的值映射到损失的函数   值:

     

loss_value = f(W)

     

假设W的当前值为W0。然后   f在点W0的导数是张量梯度(f)(W0)   与W相同的形状,其中每个系数   梯度(f)(W0)[i,j]指示方向和大小   修改W0 [i,j]时观察到的loss_value的变化。那   张量梯度(f] [W0)是函数的梯度   f(W)= W0中的损失值。

     

您之前已经看到a的导数   单个系数的函数f(x)可解释为   f曲线的斜率。同样,gradient(f)(W0)可以是   解释为张量,描述围绕W0的f(W)的曲率。

     

基于这个原因,对于函数f(x),您几乎可以   可以通过在x中稍微移动x来减小f(x)的值   与导数相反的方向,函数f(W)为   一个张量,可以通过将W移到   与梯度相反的方向:例如,   W1 = W0-step * gradient(f)(W0)(其中step是很小的比例因子)。   这意味着与曲率相反,这在直觉上   应该使您处于曲线下方。注意比例因子步长   因为gradient(f)(W0)仅近似曲率,所以需要   当您接近W0时,就不想离W0太远。

我不明白为什么我们要从权重中减去-step *梯度(f)(W0)而不仅仅是-step,因为-step *梯度(f)(W0)表示损失,而-step是参数(即x值,即重量的微小变化)

2 个答案:

答案 0 :(得分:1)

您需要稍微改变与梯度相反的参数,以确保损耗降低。仅使用Get-ADComputer -Filter 'Name -like "BTS-ONE-LAP-*"' | FT Name不能保证损失减少。在优化中这称为梯度下降,并且有收敛证明。您可以查看有关该主题的在线教程,例如this

答案 1 :(得分:1)

该梯度告诉您要移动哪个方向,该步长将有助于控制您移动的幅度,从而使序列收敛。

我们不能只减去step。回想一下step只是一个标量数字。 W0是张量。我们不能用张量减去标量。梯度是张量,其大小与W0相同,因此可以很好地定义减法。

gradient descent上阅读可能有助于您的理解。