[关闭]
@mShuaiZhao 2018-03-31T13:02:16.000000Z 字数 4415 阅读 803

backpropagation

CNN 2017.10


前馈神经网络的反向传播算法

1. 图例和符号规范

前馈神经网络(Feedforward Neural Network),为人工智能领域中,最早发明的简单人工神经网络类型。在它内部,参数从输入层向输出层单向传播。有异于递归神经网络,它的内部不会构成有向环。(就是多层感知机)

微分的chain rule和简单的前馈神经网络误差反向传播模型如下图所示。

nn_1

微分的chain rule和简单的前馈神经网络模型

图片来自1

本质上,现在所见的反向传播算法都是基于chain rule的。
变量相关,又与相关,那么存在:

一些符号的定义:

:连接第层神经网络第神经元和第层神经网络第个神经元的边的权重。

nn_2

边的权重示意

:第层神经网络第个神经元的偏置量。

nn_3

神经元的偏置量示意

:第层神经网络第个神经元的activation value。
:神经元对应的activation function。
对应的,有

对于每层神经网络,定义一个权重矩阵行、列的矩阵元素就是连接第层神经网络第神经元和第层神经网络第个神经元的边的权重

可以将前馈神经网络的前向计算过程写为:

不失一般性,定义样本整体的loss function为平方损失函数

是神经网络的深度(总的网络层数),是当网络的输入是时网络的输出。

这里有两个假设前提

第一,loss function可以写为多个训练样本的平均,。对于单个训练样本,存在

第二,loss function可以被表示为与神经网络的输出相关的函数。

2. Vanilla Backpropagation

vanilla是香草的意思,这里vanlilla backpropagation指的是由2提出来的标准的反向传播学习算法。也叫做online backpropagation,因为每次都只输入一个training pattern(一个样本)。

这个名字是无关紧要的。
进行batch learning时,仅仅进行简单的累加和平均。

反向传播算法的目的是找到误差关于权重系数和偏置系数的偏导(梯度),由此我们可以利用梯度下降(SGD等)的方法来进行权重系数和偏置系数的更新。
我们最终的目的是求得网络中误差关于其对应的权重系数和偏置系数的偏导的量化表达。即求得
定义为第层神经网络的第个神经元所产生的error(或称为sensitivity,敏感、扰动之意)。

有如下定义


可以单纯把其当做一个数学符号(或者“代号”)。

对于输出层而言



只有当时,才相关。
这样, 输出层的error用矩阵形式可写为

符号和matlab中的运算代表的意思相同(点乘),相同形式的两个矩阵对应位置上的元素相乘。

层的error与层的sensitivity之间的关系如下

这个公式说明了为什么误差是反向传播的,解释了文章开始的图中中为什么误差的传播与前向传播的过程相反。是前馈神经网络中误差反向传播的核心。

也可以理解为前向计算过程中,误差是逐步累积的,现在再迭代回去求每层的误差。




公式(11)中是因为只有当的时候二者才相关,其余情况都等于0。

sensitivity关于偏置系数的偏导为


cost关于权重系数的偏导为


3. 算法实现

偷懒贴两张图

nn_5

反向传播算法(batch learning)

nn_6

反向传播算法(online learning)

最后,这边文章最重要的参考是3。可以去里面找更多的细节,3也提供了用python实现的简单的前向神经网络的框架,https://github.com/mnielsen/neural-networks-and-deep-learning

参考文献

1 Y. LeCun, Y. Bengio, G. Hinton. (2015). Deep learning.

2 D.E. Rumelhart and J.L. McClelland. Parallel Distributed Processing, volume 1. MIT Press, 1986.

3 http://neuralnetworksanddeeplearning.com/chap2.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注