神经网络学习4【误差传递与权重更新】

1. 误差反馈

1.1 误差反馈校正权重矩阵

可以理解,输出和误差都是多个节点共同作用的结果,那么该如何更新链接权重?
《神经网络学习4【误差传递与权重更新】》
思考一下,得到误差后,该怎么分配?平均分的话是否会有失公平?毕竟我们在之前的学习中了解到,前一层每个节点的贡献都是不一样的。考虑极端情况,当某权重为0时,它对下一个节点的贡献为0;这时如果误差仍然平均分配显然是不那么合适的。
但我们很容易想到这个标准:较大链接权重的连接分配更多的误差。
《神经网络学习4【误差传递与权重更新】》
将同样的思想扩展到多个节点。如果我们拥有100个节点链接到输出节点,那么我们要在这100条链接之间,按照每条链接对误差所做贡献的比例(由链接权重的大小表示),分割误差。
我们使用权重,将误差从输出向后传播到网络中。我们称这种方法为反向传播。

1.2 多个输出节点反向传播误差

《神经网络学习4【误差传递与权重更新】》
第一个输出节点的误差标记为e1 = ( t1 – o1)。
按照所连接链接的比例,也就是权重w 1,1 和w2,1 ,对误差e 1 进行分割。同理,按照权重w 1,2 和w 2,2 的比例分割e2 。

《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》

1.3 反向传播误差到更多层中

《神经网络学习4【误差传递与权重更新】》
将输出误差标记为eoutput ,将在输出层和隐藏层之间的链接权重标记为who 。通过将误差值按权重的比例进行分割,我们计算出与每条链接相关的特定误差值。采用与隐藏层节点相关联的这些误差ehidden ,再次将这些误差按照输入层和隐藏层之间的链接权重wih 进行分割。
《神经网络学习4【误差传递与权重更新】》
如果神经网络具有多个层,那么我们就从最终输出层往回工作,对每一层重复应用相同的思路。
《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》
具有实际数字的3层网络中,误差如何向后传播:

《神经网络学习4【误差传递与权重更新】》
进一步向后工作:
《神经网络学习4【误差传递与权重更新】》

1.神经网络通过调整链接权重进行学习。这种方法由误差引导,误差就是训练数据所给出正确答案和实际输出之间的差值。
2.简单地说,在输出节点处的误差等于所需值与实际值之间的差值。
3.与内部节点相关联的误差并不显而易见。一种方法是按照链路权重的比例来分割输出层的误差,然后在每个内部节点处重组这些误差。

1.4 使用矩阵乘法进行反向传播误差

计算的起始点是在神经网络最终输出层中出现的误差。
《神经网络学习4【误差传递与权重更新】》
为隐藏层的误差构建矩阵。

《神经网络学习4【误差传递与权重更新】》
可以观察到,最重要的事情是输出误差与链接权重wij 的乘法。这些分数的分母是一种归一化因子。如果我们忽略了这个因子,那么我们仅仅失去后馈误差的大小。也就是说,可以使用简单得多的
e1* w1,1 来代替e1* w1,1/ ( w1,1 + w2,1)。
《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》
因此,我们得到所希望的矩阵,使用矩阵的方法来向后传播误差:
《神经网络学习4【误差传递与权重更新】》

反向传播误差可以表示为矩阵乘法。
无论网络规模大小,这使我们能够简洁地表达反向传播误差。
前向馈送信号和反向传播误差都可以使用矩阵计算而变得高效。

2.更新权重

2.1 梯度下降法

目前我们已经完成了让误差反向传播到网络的每一层,我们的目的是要使用误差来指导如何调整链接权重,从而使得神经网络更适合这个样本集,输出更准确的答案。
如果我们将复杂困难的函数当作网络误差,那么找到最小值就意味着最小化误差。这样我们就可以改进网络输出。如此我们就可以理解要用梯度下降法来更新权重的意义所在了。
可以从梯度的物理意义上直观理解,就像是在三维地形中,在曲面的任意一点放置一个静止的小球,在重力作用下小球会向下滚动,那么初始时刻,小球滚动的方向一定是该点周围下降最明显的地方,即负梯度方向。但最终小球会在摩擦力和重力作用下停下,可以想象,这必是一个“凹谷”,也就是这个三维曲面的(局部)极小值。
《神经网络学习4【误差传递与权重更新】》

但如果这个地形非常复杂,我们掉入的仅仅是这个点周围某个“凹谷”,而非整个地形中最低(即我们所要求的最小值)呢?该如何解决这个问题?
《神经网络学习4【误差传递与权重更新】》
首先,采用梯度下降法,我们必须选择一个起点。
《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》
这一次,我们所在之处的斜率为正,因此我们向左移动。
为了避免超调,避免在最小值的地方来回反弹,就要改变步子大小,这是一个必要的优化。
《神经网络学习4【误差传递与权重更新】》
回想刚刚的问题,如果恰好掉入了错误的山谷怎么办?记得我们刚刚讲的随机选择起点吗?我们可以随机取,并且多次取,尽可能地,把错误的结果过滤掉。多次训练神经网络,确保并不总是终止于错误的山谷。
不同的起始点意味着选择不同的起始参数,在神经网络的情况下,这意味着选择不同的起始链接权重。
《神经网络学习4【误差传递与权重更新】》
像这样的尝试,终究会带领我们走进正确的山谷。

2.2 误差函数

那么,梯度下降法所作用的误差函数应该如何构造呢?像我们之前那样,目标值 – 真实值 = 误差?但这种情况下的误差会有正负,一旦我们求和,就有可能得到非常趋近于0的结果,这会让我们误以为误差很小。
误差函数如何构造?看下表:
《神经网络学习4【误差传递与权重更新】》

第三种选择是差的平方,即(目标值-实际值)^ 2 。我们更喜欢使用第三种误差函数,而不喜欢使用第二种误差函数,原因有以下几点:

  • 使用误差的平方,我们可以很容易使用代数计算出梯度下降的斜率。
  • 误差函数平滑连续,这使得梯度下降法很好地发挥作用——没有间断,也没有突然的跳跃。
  • 越接近最小值,梯度越小,这意味着,如果我们使用这个函数调节步长,超调的风险就会变得较小。

下图显示了两个链接权重,这次,误差函数是三维曲面,这个曲面随着两个链接权重的变化而变化。
《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》
这个表达式表示了当权重wj,k 改变时,误差E是如何改变的。这是误差函数的斜率,也就是我们希望使用梯度下降的方法到达最小值的方向。

下为推导过程:
《神经网络学习4【误差传递与权重更新】》
《神经网络学习4【误差传递与权重更新】》

《神经网络学习4【误差传递与权重更新】》
第一部分就是(目标值-实际值)。在sigmoid中的求和表达式也很简单,就是进入最后一层节点的信号,我们可以称之为ik ,这样它看起来比较简单。这是应用激活函数之前,进入节点的信号。最后一部分是前一隐藏层节点j的输出。
同理,得到输入层和隐藏层之间权重调整:
《神经网络学习4【误差传递与权重更新】》
权重改变的方向与梯度方向相反,我们用数学的形式来表达这个因子。
《神经网络学习4【误差传递与权重更新】》

(和之前在线性分类器里学到的是不是原理相同?
《神经网络学习4【误差传递与权重更新】》
new A = old A + ΔA)

更新后的权重wj,k 是由刚刚得到误差斜率取反来调整旧的权重而得到的。正如我们先前所看到的,如果斜率为正,我们希望减小权重,如果斜率为负,我们希望增加权重,因此,我们要对斜率取反。符号α是一个因子,这个因子可以调节这些变化的强度,确保不会超调。我们通常称这个因子为学习率。同理,这个表达式不仅适用于隐藏层和输出层之间的权重,而且适用于输入层和隐藏层之间的权重。
由于学习率只是一个常数,并没有真正改变如何组织矩阵乘法,因此我们省略了学习率α。
《神经网络学习4【误差传递与权重更新】》

1.神经网络的误差是内部链接权重的函数。
2.改进神经网络,意味着通过改变权重减少这种误差。
3.直接选择合适的权重太难了。另一种方法是,通过误差函数的梯度下降,采取小步长,迭代地改进权重。所迈出的每一步的方向都是在当前位置向下斜率最大的方向,这就是所谓的梯度下降。
4.使用微积分可以很容易地计算出误差斜率。

2.3 误差更新成功范例

《神经网络学习4【误差传递与权重更新】》
更新隐藏层和输出层之间的权重w1,1 。当前,这个值为2.0。
《神经网络学习4【误差传递与权重更新】》

  1. 第一项(tk-ok )得到误差e 1 = 0.8。
  2. S函数内的求和Σj wj,k oj 为(2.0×0.4)+(3.0 * 0.5)= 2.3。
  3. sigmoid 1/(1 + e-2.3) 为0.909。中间的表达式为0.909 *(1-0.909)=0.083。
  4. 由于我们感兴趣的是权重w1,1 ,其中j=1,因此最后一项oj 也很简单,也就是oj = 1 。此处,oj 值就是0.4。
  5. 将这三项相乘,最后我们得到-0.0265。

如果学习率为0.1,那么得出的改变量为- (0.1 * -0.02650)= +0.002650。因此,新的w1,1 就是原来的2.0加上0.00265等于2.00265。

    原文作者:照妖镜!
    原文地址: https://blog.csdn.net/HUSHLALA/article/details/119715478
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞