您显示的方程计算(负)目标函数的梯度。价值δj是在对神经元应用激活函数之前,神经元输出的孤立变化的目标函数的变化率。的因素f'(neti)是必需的,因为它是正确的- 这是由于应用了两次链式法则- 一次是由于连接层之间权重的线性关系,再次是为了在下一层中获得梯度预激活函数。
的解释δi是“目标函数相对于网络神经元的预激活值的(负)梯度”。如果以某种方式可以更改预激活值-忽略如何更改-然后δi告诉您对目标函数的影响的线性比例,至少对于非常小的变化。
这个值通常不直接用于权重更新,但如果还有更低的层要更新,它会被更深地向后馈送到网络层,因为它可以使用相同的规则用于这些层中的权重更新。
与强激活相关的低梯度的属性是因为您之前选择了tanh作为激活函数,而不是因为您计算梯度的方式。一旦你选择了tanh,你就不能真正自由地选择不同的反向传播梯度计算。或者更确切地说,这样做不会有太多收获——而且可能会失去很多。
权重更新的目的是什么?
显示的值不是直接使用的,而是用来推导的∂J∂Wij更深层的权重梯度(其中J是你的目标函数的值)。
就你的方程式而言
∂J∂Wij=−δjyi
这非常简单,因此它已被折叠到您的增量更新规则中。但是,这样做隐藏了一些重要的事情。在反向传播期间计算的所有中间值中,∂J∂Wij是关键之一。它是目标函数相对于您可以更改的参数的梯度。
一旦你有一组渐变 ∂J∂Wij, 这可以以多种方式使用。使用delta 规则直接使用此梯度进行权重更新(如在您的等式中ΔWij=ηδjyi) 是一种基本方法。这条规则的目的是通过在你刚刚计算的方向上迈出一小步来降低目标函数的值,这将降低目标函数的值。步长需要很小(乘以一个因子η) 因为您只测量了一个点的梯度,并且不知道该关系仍然保持多大的步长 - 由于您同时在多个维度上进行类似的步骤这一事实使情况变得复杂。
与 Nesterov 动量、Adagrad、Rmsprop 优化器相比,delta 更新规则是一种相对较弱的更新方法,它们将使用计算的梯度作为输入,但会根据先前梯度的历史调整更新权重。这些优化器可以处理低但一致的梯度值并进行大量更新。
如果移除或改变这个因素,网络的行为会有什么不同?
这是不可取的,因为您将针对与您构建的前馈网络不同的网络架构进行优化。他们最可能的行为方式是发散或确定目标函数的值比您看到的更大。进行小的更改(例如最小绝对梯度)是可行的,但通常最好通过更改激活函数来始终如一地进行此类调整。
在少数极端情况下,您可能会考虑在梯度计算中“撒谎”。一个简单的情况可以认为是 ReLU 激活函数 (y=0(ifx<0),y=x(otherwise)) 其中梯度在技术上是未定义的x=0, 但可以安全地视为 0 或 1。
更常见的更新更改(例如通过动量变体、Adagrad、RMSProp 等)是按原样使用梯度,然后将更新量乘以基于历史或高阶导数估计的各种因素,因为您可以猜测,如果您将权重更新为更小或更大的数量,则梯度不会切换符号。这些方法用当梯度变小时更健壮的更新机制替换增量更新规则。