反向传播解析
反向传播是训练人工神经网络,特别是深度神经网络的常用方法。需要反向传播来计算梯度,我们需要调整权重矩阵的权重。通过计算损失函数的梯度来调整神经网络的神经元(即节点)的权重。为此目的,使用梯度下降优化算法。它也被称为误差的反向传播。
一个比喻可能会有帮助:想象你自己被放在一座山中,不一定是在山顶,在晚上被大雾包围。让我们进一步想象这座山在一个岛上,你想达到海平面。
- 你必须往下走,但你几乎看不到任何东西,可能只有几米。你的任务是找到你的路,但是你看不到路。你可以用梯度下降法。这意味着你正在检查你当前位置的陡度。你将沿着最陡的下降方向前进。
- 你只走了几步,然后又停下来重新定位自己。这意味着您正在再次应用前面描述的过程,即您正在寻找最陡的下降。
这样下去,你将到达一个没有进一步下降的位置,每个方向都向上。你可能已达到最低处(全局最低),但你也可能陷入一个盆地。
总之,如果在这个理论岛上随机放置很多次,你会发现向下到海平面的方法。这就是我们训练神经网络时要做的。
实际的反向传播程序
假设我们从一个简单的(线性)神经网络开始:
使用与权重关联的以下示例值:
我们有标签,即每个输出值o的目标值或期望值t。误差是目标和实际输出之间的差异:
我们稍后将使用平方误差函数,因为它具有更好的算法特性。
我们将看一下输出值o1o1,它取决于值w11w11,w21w21,w31w31和w41w41。假设计算值(o1o1)为0.92,期望值(t1t1)为1.在这种情况下,误差是
根据此误差,我们必须相应地更改传入值的权重。我们有四个权重,所以我们可以均匀地分散误差。然而,根据权重值,按比例进行比较更有意义。这意味着我们可以计算w11w11中误差e1e1的分数:
这意味着在我们的示例中:
隐藏和输出层之间的权重矩阵中的总误差如下所示:
左矩阵中的分母始终相同。这是一个缩放因子。我们可以删除它,以便计算变得更简单:
该示例已经证明了线性神经网络的基本场景的反向传播。
现在让我们回顾一下在线神经网络的反向传播(即具有激活函数)。
误差函数的推导描述了斜率。当我们希望下降时,推导描述了当权重w改变时误差E如何变化:
好吧,假设在所有输出节点ojoj(j = 1,... nj = 1,... n)上的误差函数E,其中n是输出节点的数量是:
我们可以在推导中加入这个
我们可以彼此独立地计算每个输出节点的误差,并且我们除去了总和。这是节点j的误差,例如:
应用链式法则,我们在微积分中学过的微分,在上一项中,来简化
假设一个Sigmoid激活函数,其微分很简单:
基本神经网络训练数学:
****
综上所述: