一、前言
反向传播算法(back propagation,简称BP模型)是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。
误差反向传播算法系统解决了多层神经网络隐含层连接权学习问题,人们把采用这种算法进行误差校正的多层前馈网络称为BP网。BP神经网络具有任意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或(Exclusive OR,XOR)和一些其他问题。
从结构上讲,BP网络具有输入层、隐藏层和输出层;
从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。
二、神经网络
神经网络就是一个"万能的模修正函数+误差修正函数",每次根据训练得到的结果与预想结果进行误差分析,进而修改权值和阈值,一步一步得到能输出和预想结果一致的模型。
举一个栗子:比如某厂商生产一件产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,从而产出让消费者更满意的产品,这就是神经网络的核心。
三、误差反向传播例子
3.1.两个人猜数字
这一过程类比没有隐层的神经网络,比如逻辑回归,其中马里奥代表输出层节点,左侧接受输入信号,右侧产生输出结果。
哆啦A梦则代表了误差,指导参数往更优的方向调整。
由于哆啦A梦可以直接将误差反馈给马里奥,同时只有一个参数矩阵和马里奥直接相连,所以可以直接通过误差进行参数优化(实纵线),迭代几轮,误差会降低到最小。
3.2.三个人猜数字
这一过程类比带有一个隐层的三层神经网络。
其中小女孩代表隐藏层节点,马里奥依然代表输出层节点,小女孩左侧接受输入信号,经过隐层节点产生输出结果,哆啦A梦代表了误差,指导参数往更优的方向调整。
由于哆啦A梦可以直接将误差反馈给马里奥,所以与马里奥直接相连的左侧参数矩阵可以直接通过误差进行参数优化(实纵线);
而与小女孩直接相连的左侧参数矩阵由于不能得到哆啦A梦的直接反馈而不能直接被优化(虚棕线)。
但由于反向传播算法使得哆啦A梦的反馈可以被传递到小女孩那进而产生间接误差,所以与小女孩直接相连的左侧权重矩阵可以通过间接误差得到权重更新,迭代几轮,误差会降低到最小。
四、误差反向传播
4.1前向传播
- 1.如何将输入层的信号传输至隐藏层呢,以隐藏层节点c为例,站在节点c上往后看(输入层的方向),可以看到有两个箭头指向节点c,因此a,b节点的信息将传递给c,同时每个箭头有一定的权重,因此对于c节点来说,输入信号为:
- 2.同理,节点d的输入信号为:
-
3.由于计算机善于做带有循环的任务,因此我们可以用矩阵相乘来表示:
-
4.所以,隐藏层节点经过非线性变换后的输出表示如下:
-
5.同理,输出层的输入信号表示为权重矩阵乘以上一层的输出:
-
6.同样,输出层节点经过非线性映射后的最终输出表示为:
-
7.输入信号在权重矩阵们的帮助下,得到每一层的输出,最终到达输出层。可见,权重矩阵在前向传播信号的过程中扮演着运输兵的作用,起到承上启下的功能。
4.2反向传播
- 1.既然梯度下降需要每一层都有明确的误差才能更新参数,所以接下来的重点是如何将输出层的误差反向传播给隐藏层。
- 2.其中输出层、隐藏层节点的误差如图所示,输出层误差已知,接下来对隐藏层第一个节点c作误差分析。还是站在节点c上,不同的是这次是往前看(输出层的方向),可以看到指向c节点的两个蓝色粗箭头是从节点e和节点f开始的,因此对于节点c的误差肯定是和输出层的节点e和f有关。
- 3.因此对于隐藏层节点c的误差为:
-
4.同理,对于隐藏层节点d的误差为:
-
5.为了减少工作量,我们还是乐意写成矩阵相乘的形式:
-
6.你会发现这个矩阵比较繁琐,如果能够简化到前向传播那样的形式就更好了。实际上我们可以这么来做,只要不破坏它们的比例就好,因此我们可以忽略掉分母部分,所以重新成矩阵形式为:
-
7.仔细观察,你会发现这个权重矩阵,其实是前向传播时权重矩阵w的转置,因此简写形式如下:
8.不难发现,输出层误差在转置权重矩阵的帮助下,传递到了隐藏层,这样我们就可以利用间接误差来更新与隐藏层相连的权重矩阵。
参考:https://www.sohu.com/a/168767295_826434