文章目录

  • 3. 误差反向传播法
  • 3.1 概念
  • 3.2 前期准备
  • 3.2.1 链式法则
  • a) 复合函数
  • b) 链式法则
  • 3.2.2 例子
  • 3.2.3 反向传播
  • 1) 加法反向传播
  • 2) 乘法反向传播
  • 3)ReLU层的反向传播
  • 4) Sigmoid层的反向传播
  • 5) Softmax-with-Loss层的反向传播
  • 3.2.3 随机梯度下降SGD
  • 3.3 算法推导
  • 3.3.1 前向传播计算
  • 3.3.2 计算各个层的误差
  • 1) 输出层误差
  • 2) 隐藏层误差
  • 3) 输入层误差
  • 3.3.3 计算梯度
  • 1) 均方误差的梯度
  • 2) 单个神经元梯度
  • **定义误差**
  • **公式推导**
  • 3.3.4 通用公式
  • 3.3.5 例子
  • 3.4 BP神经网络优缺点
  • 3.5 例子
  • 3.6 其他流程讲解(没写成功)
  • 3.6.1 文字流程
  • 3.6.2 矩阵讲解反向传播


3. 误差反向传播法

3.1 概念

反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称。

  • 是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。
  • 是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。
  • 该方法对网络中所有权重计算损失函数的梯度。 这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。(误差的反向传播)
  • 由于多层前馈神经网络的训练经常采用误差反向传播算法,人们也常把多层前馈神经网络称为BP网络。

梯度下降是求极值的方法

bp是求梯度的算法

3.2 前期准备

3.2.1 链式法则

a) 复合函数

复合函数是由多个函数构成的函数
3-BP算法讲解_Soft

b) 链式法则

如果某个函数由复合函数表示,则该复合函数的导数可以用构成复合函数的各个函数的导数的乘积表示。

这就是链式法则的原理,乍一看可能比较难理解,但实际上它是一个非常简单的性质。

3-BP算法讲解_反向传播_02

3-BP算法讲解_反向传播_03正好可以像下面这样“互相抵消”,所以记起来很简单。

3-BP算法讲解_反向传播_04

3-BP算法讲解_深度学习_05

3-BP算法讲解_深度学习_06

3-BP算法讲解_Soft_07

3-BP算法讲解_神经网络_08

3.2.2 例子

两个人猜数字

这一过程类比没有隐层的神经网络,比如逻辑回归,

其中马里奥代表输出层节点,左侧接受输入信号,右侧产生输出结果,哆啦A梦则代表了误差,指导参数往更优的方向调整。
由于哆啦A梦可以直接将误差反馈给马里奥,同时只有一个参数矩阵和马里奥直接相连,所以可以直接通过误差进行参数优化(实纵线),迭代几轮,误差会降低到最小。

3-BP算法讲解_神经网络_09

三个人猜数字

这一过程类比带有一个隐层的三层神经网络。
其中小女孩代表隐藏层节点,马里奥依然代表输出层节点,小女孩左侧接受输入信号,经过隐层节点产生输出结果,哆啦A梦代表了误差,指导参数往更优的方向调整。
由于哆啦A梦可以直接将误差反馈给马里奥,所以与马里奥直接相连的左侧参数矩阵可以直接通过误差进行参数优化(实纵线);
而与小女孩直接相连的左侧参数矩阵由于不能得到哆啦A梦的直接反馈而不能直接被优化(虚棕线)。
但由于反向传播算法使得哆啦A梦的反馈可以被传递到小女孩那进而产生间接误差,所以与小女孩直接相连的左侧权重矩阵可以通过间接误差得到权重更新,迭代几轮,误差会降低到最小。

3-BP算法讲解_算法_10

3.2.3 反向传播

3-BP算法讲解_神经网络_11

资料参考

https://blog.csdn.net/linxiaoyin/article/details/104123881

3-BP算法讲解_神经网络_12

反向传播的计算顺序是,将信号3-BP算法讲解_深度学习_13乘以节点的局部导数3-BP算法讲解_算法_14,然后将结果传递给下一个节点。这里所说的局部导数是指正向传播中3-BP算法讲解_算法_15的导数,也就是 y 关于 x 的导数
3-BP算法讲解_算法_14,比如,假设3-BP算法讲解_反向传播_17,则局部导数为3-BP算法讲解_神经网络_18。把这个局部导数乘以上游传过来的值(本例中为3-BP算法讲解_深度学习_13),然后传递给前面的节点。

这就是反向传播的计算顺序。通过这样的计算,可以高效地求出导数的值,这是反向传播的要点。

例子

3-BP算法讲解_深度学习_20

现在我们尝试将链式法则的计算用计算图表示出来。

3-BP算法讲解_Soft_21

反向传播向x上面的就是3-BP算法讲解_反向传播_22的结果为3-BP算法讲解_算法_23

反向传播向y下面的就是3-BP算法讲解_深度学习_24的结果为3-BP算法讲解_算法_23

3-BP算法讲解_Soft_26

1) 加法反向传播

3-BP算法讲解_反向传播_27

加法节点的反向传播:左图是正向传播,右图是反向传播。如右图的反向传播所示,加法节点的反向传播将上游的值原封不动地输出到下游

2) 乘法反向传播

3-BP算法讲解_算法_28

乘法的反向传播:左图是正向传播,右图是反向传播。乘法的反向传播会将上游的值乘以正向传播时的输入信号的“翻转值”后传递给下游。

3)ReLU层的反向传播

3-BP算法讲解_Soft_29

ReLU函数的计算图:

3-BP算法讲解_反向传播_30

ReLU 层的作用就像电路中的开关一样。正向传播时,有电流通过的话,就将开关设为ON;没有电流通过的话,就将开关设为OFF。反向传播时,开关为ON的话,电流会直接通过;开关为OFF的话,则不会有电流通过。

4) Sigmoid层的反向传播

3-BP算法讲解_Soft_31

Sigmoid函数的正向计算图如下:

3-BP算法讲解_深度学习_32

Sigmoid函数的计算图的简洁版为:

3-BP算法讲解_反向传播_33

3-BP算法讲解_反向传播_34

因此,Sigmoid函数的反向传播,只根据正向传播的输出就能计算出来

3-BP算法讲解_算法_35

Sigmoid函数被选为激活函数还有一个很重要的原因是它的导数很容易计算

3-BP算法讲解_Soft_36

5) Softmax-with-Loss层的反向传播

这里假设要进行3类分类,从前面的层接收3个输入。如下图所示, Softmax层将输入3-BP算法讲解_神经网络_37正规化,输出3-BP算法讲解_算法_38。 Cross Entropy Error层接收Softmax的输出3-BP算法讲解_神经网络_39和监督标签3-BP算法讲解_神经网络_40,从这些数据中输出损失3-BP算法讲解_反向传播_41

3-BP算法讲解_神经网络_42

Softmax层的反向传播得到了3-BP算法讲解_Soft_43这样“漂亮”的结果。由于3-BP算法讲解_算法_38是Softmax层的输出,3-BP算法讲解_反向传播_45是监督数据,所以3-BP算法讲解_Soft_43是Softmax层的输出和监督标签的差。

3.2.3 随机梯度下降SGD

更新公式3-BP算法讲解_Soft_47

3-BP算法讲解_神经网络_48

3-BP算法讲解_算法_49

3-BP算法讲解_深度学习_50是值

3.3 算法推导

首先明确,“正向传播”求损失,“反向传播”回传误差。同时,神经网络每层的每个神经元都可以根据误差信号修正每层的权重,

  • 将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;
  • 由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
  • 在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛

3.3.1 前向传播计算

  • 3-BP算法讲解_算法_51代表的是第l层的第j个神经元,与上一层3-BP算法讲解_算法_52第k个神经元输出相对应的权重
  • 3-BP算法讲解_反向传播_53代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的输出
  • 3-BP算法讲解_深度学习_56代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的输入
  • 3-BP算法讲解_深度学习_59代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的偏置
  • 3-BP算法讲解_算法_62代表权重举证,3-BP算法讲解_反向传播_63代表3-BP算法讲解_深度学习_54层输入矩阵
  • 3-BP算法讲解_Soft_65代表第l层输出矩阵,3-BP算法讲解_深度学习_66代表最终输出矩阵,3-BP算法讲解_深度学习_67代表标准答案
  • 3-BP算法讲解_深度学习_54表示神经网络的层数
  • 3-BP算法讲解_反向传播_69
  • 3-BP算法讲解_反向传播_70代表输出层第3-BP算法讲解_深度学习_71个神经元误差,3-BP算法讲解_算法_72代表隐藏层第i个神经元误差,3-BP算法讲解_深度学习_73代表输入层第3-BP算法讲解_深度学习_71个神经元误差
  • 3-BP算法讲解_反向传播_75表示输出层误差矩阵,3-BP算法讲解_深度学习_76隐藏层误差矩阵,3-BP算法讲解_神经网络_77输入层误差矩阵
  • 对于3层神经网络3-BP算法讲解_Soft_78

过程如下

  1. 如何将输入层的信号传输至隐藏层呢,以隐藏层节点c为例,站在节点c上往后看(输入层的方向),可以看到有两个箭头指向节点c,因此a,b节点的信息将传递给c,同时每个箭头有一定的权重,因此对于c节点来说,输入信号为:
    3-BP算法讲解_反向传播_79
  2. 同理,节点d的输入信号为:
    3-BP算法讲解_深度学习_80
  3. 由于计算机善于做带有循环的任务,因此我们可以用矩阵相乘来表示:
    3-BP算法讲解_深度学习_81
  4. 所以,隐藏层节点经过非线性变换后的输出表示如下:
    3-BP算法讲解_神经网络_82
  5. 同理,输出层的输入信号表示为权重矩阵乘以上一层的输出:
    3-BP算法讲解_算法_83
  6. 同样,输出层节点经过非线性映射后的最终输出表示为:
    3-BP算法讲解_Soft_84
  7. 输入信号在权重矩阵们的帮助下,得到每一层的输出,最终到达输出层。可见,权重矩阵在前向传播信号的过程中扮演着运输兵的作用,起到承上启下的功能。

统一表达式

输入表达式

3-BP算法讲解_深度学习_85,表示输出层的输入

3-BP算法讲解_深度学习_86,表示隐藏层的输入

使用的是权重计算

输出表达式

3-BP算法讲解_深度学习_87,

3-BP算法讲解_算法_88,

其中3-BP算法讲解_反向传播_89为激活函数,3-BP算法讲解_反向传播_89一般为sigmoid函数

使用的是激活函数计算

从后往前,利用链式求导法则,计算损失函数值对各参数 / 输入值 / 中间值的偏导数 / 梯度,梯度下降法需要使用反向传播来计算梯度。

在利用梯度下降法对权重矩阵等参数进行更新时,需要利用反向传播去计算损失函数对权重参数的偏导数。

3.3.2 计算各个层的误差

代价函数被用来计算ANN输出值与实际值之间的误差。

常用的代价函数是二次代价函数(Quadratic cost function):

1) 输出层误差

定义输出层误差
3-BP算法讲解_Soft_91

2) 隐藏层误差

将误差E式展开到隐层为:
3-BP算法讲解_深度学习_92

3) 输入层误差

将误差E进一步展开至输入层为:
3-BP算法讲解_反向传播_93
上面的计算过程并不难,只要耐心一步步的拆开式子,逐渐分解即可。现在还有两个问题需要解决:

误差E有了,怎么调整权重让误差不断减小?

想到使用梯度下降法进行更新权值可以达到最优,

我们知道了,怎么传递到上一层,有随机梯度下降可知道,我们还需要梯度

3.3.3 计算梯度

1) 均方误差的梯度

均方差损失函数表达式为:

3-BP算法讲解_深度学习_94

其中3-BP算法讲解_深度学习_95为输出值,3-BP算法讲解_反向传播_96为输出值,偏导数为

3-BP算法讲解_反向传播_97

2) 单个神经元梯度

更新公式3-BP算法讲解_算法_98

梯度这么来????

想要更新参数,就得计算梯度,梯度是根据误差计算的。所以先试用反向传播来传递误差


定义误差

计算各个层损失

3-BP算法讲解_Soft_99

从最后一层的误差开始计算,用3-BP算法讲解_Soft_100表示第3-BP算法讲解_反向传播_101层的单元3-BP算法讲解_Soft_102的损失,3-BP算法讲解_反向传播_103表示第3-BP算法讲解_反向传播_101层的梯度,则3-BP算法讲解_Soft_105,利用这个误差值来计算前一层的误差:
3-BP算法讲解_算法_106
于是假设λ=0,即不做任何正则化处理时:

3-BP算法讲解_深度学习_107

  • 输出层产生的错误3-BP算法讲解_Soft_108
  • 隐藏层传递的错误3-BP算法讲解_算法_109

为啥这样子呢????,请看下面的公式推导


公式推导

1. 求偏导

3-BP算法讲解_Soft_110

我们知道一点的梯度就是这里的一阶偏导,因此对w求偏导即可:

KaTeX parse error: Undefined control sequence: \part at position 29: …k}=-\eta \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_{jk}…

KaTeX parse error: Undefined control sequence: \part at position 29: …^1=-\eta \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_{ij}…

3-BP算法讲解_反向传播_111表示隐藏层权值,3-BP算法讲解_深度学习_112表示输出层权值

负号表示梯度下降,3-BP算法讲解_深度学习_113表示学习率

2.利用链式法则
KaTeX parse error: Undefined control sequence: \part at position 28: …k}=-\eta \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_{jk}…

3. 定义误差信号

为了看起来方便,我们对输出层和隐层各定义一个误差信号3-BP算法讲解_神经网络_114
KaTeX parse error: Undefined control sequence: \part at position 32: …{k}^{o}=-\frac{\̲p̲a̲r̲t̲ ̲E}{\part z^3_k}…

权值调整为
3-BP算法讲解_算法_115

4. 再次使用链式法则

KaTeX parse error: Undefined control sequence: \part at position 23: …{k}^{o}=-\frac{\̲p̲a̲r̲t̲ ̲E}{\part z^3_k}…

KaTeX parse error: Undefined control sequence: \part at position 23: …{j}^{h}=-\frac{\̲p̲a̲r̲t̲ ̲E}{\part z^2_j}…

替换变量KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part a^3_k}

3-BP算法讲解_Soft_116

KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part a^3_k}…

替换变量KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part a^2_j}
KaTeX parse error: Undefined control sequence: \part at position 8: \frac{\̲p̲a̲r̲t̲ ̲E}{\part a^2_j}…
最终
KaTeX parse error: Undefined control sequence: \part at position 79: …_k^3) \\ \frac{\̲p̲a̲r̲t̲ ̲E}{\part a^2_j}…

5. 使用上面的公式带入其中
3-BP算法讲解_深度学习_117

3.3.4 通用公式

通用公式

反向传播算法伪代码

训练集3-BP算法讲解_深度学习_118

3-BP算法讲解_反向传播_119

  • 对于训练集中的每个样本3-BP算法讲解_反向传播_120,设置输入层(Input layer)对应的激活值令3-BP算法讲解_神经网络_121
  • 前向传播,计算出所有的3-BP算法讲解_深度学习_122
  • 计算输出层产生的错误3-BP算法讲解_深度学习_123
  • 反向传播错误3-BP算法讲解_反向传播_124
  • 使用梯度下降(gradient descent),训练参数
    3-BP算法讲解_神经网络_125
    3-BP算法讲解_反向传播_126
    3-BP算法讲解_Soft_127
    3-BP算法讲解_算法_128

3.3.5 例子

3-BP算法讲解_算法_129

下面是前向(前馈)运算(激活函数为sigmoid):

3-BP算法讲解_Soft_130

下面是反向传播(求网络误差对各个权重参数的梯度):

我们先来求最简单的,求误差E对w5的导数。首先明确这是一个“链式求导”过程,要求误差E对w5的导数,需要先求误差E对out o1的导数,再求out o1对net o1的导数,最后再求net o1对w5的导数,经过这个链式法则,我们就可以求出误差E对w5的导数(偏导),如下图所示:

3-BP算法讲解_Soft_131

导数(梯度)已经计算出来了,下面就是反向传播与参数更新过程

3-BP算法讲解_算法_132

上面的图已经很显然了,如果还看不懂真的得去闭门思过了(开玩笑~),耐心看一下上面的几张图,一定能看懂的。

如果要想求误差E对w1的导数,误差E对w1的求导路径不止一条,这会稍微复杂一点,但换汤不换药,计算过程如下所示:

3-BP算法讲解_神经网络_133

3.4 BP神经网络优缺点

BP网络优点:

  1. 非线性映射能力:BP神经网络实质上实现了一个从输入到输出的映射功能,数学理论证明三层的神经网络就能够以任意精度逼近任何非线性连续函数。这使得其特别适合于求解内部机制复杂的问题,即BP神经网络具有较强的非线性映射能力。
  2. 自学习和自适应能力:BP神经网络在训练时,能够通过学习自动提取输出、输出数据间的“合理规则”,并自适应的将学习内容记忆于网络的权值中。即BP神经网络具有高度自学习和自适应的能力。
  3. 泛化能力:所谓泛化能力是指在设计模式分类器时,即要考虑网络在保证对所需分类对象进行正确分类,还要关心网络在经过训练后,能否对未见过的模式或有噪声污染的模式,进行正确的分类。也即BP神经网络具有将学习成果应用于新知识的能力。
  4. 容错能力:BP神经网络在其局部的或者部分的神经元受到破坏后对全局的训练结果不会造成很大的影响,也就是说即使系统在受到局部损伤时还是可以正常工作的。即BP神经网络具有一定的容错能力。

BP网络缺点:

  1. 局部极小化问题:从数学角度看,传统的 BP神经网络为一种局部搜索的优化方法,它要解决的是一个复杂非线性化问题,网络的权值是通过沿局部改善的方向逐渐进行调整的,这样会使算法陷入局部极值,权值收敛到局部极小点,从而导致网络训练失败。加上BP神经网络对初始网络权重非常敏感,以不同的权重初始化网络,其往往会收敛于不同的局部极小,这也是很多学者每次训练得到不同结果的根本原因。
  2. BP 神经网络算法的收敛速度慢:由于BP神经网络算法本质上为梯度下降法,它所要优化的目标函数是非常复杂的,因此,必然会出现“锯齿形现象”,这使得BP算法低效;又由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;BP神经网络模型中,为了使网络执行BP算法,不能使用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法也会引起算法低效。以上种种,导致了BP神经网络算法收敛速度慢的现象。
  3. BP 神经网络结构选择不一:BP神经网络结构的选择至今尚无一种统一而完整的理论指导,一般只能由经验选定。网络结构选择过大,训练中效率不高,可能出现过拟合现象,造成网络性能低,容错性下降,若选择过小,则又会造成网络可能不收敛。而网络的结构直接影响网络的逼近能力及推广性质。因此,应用中如何选择合适的网络结构是一个重要的问题。
  4. 应用实例与网络规模的矛盾问题:BP神经网络难以解决应用问题的实例规模和网络规模间的矛盾问题,其涉及到网络容量的可能性与可行性的关系问题,即学习复杂性问题。
  5. BP神经网络预测能力和训练能力的矛盾问题:预测能力也称泛化能力或者推广能力,而训练能力也称逼近能力或者学习能力。一般情况下,训练能力差时,预测能力也差,并且一定程度上,随着训练能力地提高,预测能力会得到提高。但这种趋势不是固定的,其有一个极限,当达到此极限时,随着训练能力的提高,预测能力反而会下降,也即出现所谓“过拟合”现象。出现该现象的原因是网络学习了过多的样本细节导致,学习出的模型已不能反映样本内含的规律,所以如何把握好学习的度,解决网络预测能力和训练能力间矛盾问题也是BP神经网络的重要研究内容。
  6. BP神经网络样本依赖性问题:网络模型的逼近和推广能力与学习样本的典型性密切相关,而从问题中选取典型样本实例组成训练集是一个很困难的问题。

3.5 例子

3-BP算法讲解_神经网络_134

3-BP算法讲解_深度学习_135

3-BP算法讲解_深度学习_136

3-BP算法讲解_神经网络_137

3-BP算法讲解_神经网络_138

3-BP算法讲解_反向传播_139

3-BP算法讲解_Soft_140

3-BP算法讲解_算法_141

3-BP算法讲解_深度学习_142

3.6 其他流程讲解(没写成功)

3.6.1 文字流程

  • 将训练集数据输入到神经网络的输入层,经过隐藏层,最后达到输出层并输出结果,这就是前向传播过程。
  • 由于神经网络的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;
  • 在反向传播的过程中,根据误差调整各种参数的值(相连神经元的权重),使得总损失函数减小。
  • 迭代上述三个步骤(即对数据进行反复训练),直到满足停止准则。

3.6.2 矩阵讲解反向传播

3-BP算法讲解_深度学习_143

  • 3-BP算法讲解_算法_51代表的是第l层的第j个神经元,与上一层3-BP算法讲解_算法_52第k个神经元输出相对应的权重
  • 3-BP算法讲解_反向传播_53代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的输出
  • 3-BP算法讲解_深度学习_56代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的输入
  • 3-BP算法讲解_深度学习_59代表在第3-BP算法讲解_深度学习_54层上,第3-BP算法讲解_反向传播_55个神经元的偏置
  • 3-BP算法讲解_算法_62代表权重举证,3-BP算法讲解_反向传播_63代表3-BP算法讲解_深度学习_54层输入矩阵
  • 3-BP算法讲解_Soft_65代表第l层输出矩阵,3-BP算法讲解_深度学习_66代表最终输出矩阵,3-BP算法讲解_深度学习_67代表标准答案
  • 3-BP算法讲解_深度学习_54表示神经网络的层数
  • 3-BP算法讲解_反向传播_69
  • 3-BP算法讲解_反向传播_70代表输出层第3-BP算法讲解_深度学习_71个神经元误差,3-BP算法讲解_算法_72代表隐藏层第i个神经元误差,3-BP算法讲解_深度学习_73代表输入层第3-BP算法讲解_深度学习_71个神经元误差
  • 3-BP算法讲解_反向传播_75表示输出层误差矩阵,3-BP算法讲解_深度学习_76隐藏层误差矩阵,3-BP算法讲解_神经网络_77输入层误差矩阵
  • 对于3层神经网络3-BP算法讲解_Soft_78

3-BP算法讲解_算法_172表示隐藏层的权值矩阵

3-BP算法讲解_Soft_173表示输出层的权值矩阵

3-BP算法讲解_反向传播_174表示偏置矩阵

  1. 既然梯度下降需要每一层都有明确的误差才能更新参数,所以接下来的重点是如何将输出层的误差反向传播给隐藏层
  2. 其中输出层、隐藏层节点的误差如图所示,输出层误差已知,接下来对隐藏层第一个节点c作误差分析。还是站在节点c上,不同的是这次是往前看(输出层的方向),可以看到指向c节点的两个蓝色粗箭头是从节点e和节点f开始的,因此对于节点c的误差肯定是和输出层的节点e和f有关。
  3. 因此对于隐藏层节点c的误差为:
    3-BP算法讲解_Soft_175
  4. 同理,对于隐藏层节点d的误差为:
    3-BP算法讲解_算法_176
  5. 为了减少工作量,我们还是乐意写成矩阵相乘的形式:
    3-BP算法讲解_神经网络_177
  6. 你会发现这个矩阵比较繁琐,如果能够简化到前向传播那样的形式就更好了。实际上我们可以这么来做,只要不破坏它们的比例就好,因此我们可以忽略掉分母部分,所以重新成矩阵形式为:
    3-BP算法讲解_Soft_178
  7. 仔细观察,你会发现这个权重矩阵,其实是前向传播时权重矩阵w的转置,因此简写形式如下:
    3-BP算法讲解_神经网络_179
  8. 不难发现,输出层误差在转置权重矩阵的帮助下,传递到了隐藏层,这样我们就可以利用间接误差来更新与隐藏层相连的权重矩阵。