@mShuaiZhao
2018-03-31T13:02:16.000000Z
字数 4415
阅读 803
CNN
2017.10
前馈神经网络(Feedforward Neural Network),为人工智能领域中,最早发明的简单人工神经网络类型。在它内部,参数从输入层向输出层单向传播。有异于递归神经网络,它的内部不会构成有向环。(就是多层感知机)
微分的chain rule和简单的前馈神经网络误差反向传播模型如下图所示。
图片来自1。
本质上,现在所见的反向传播算法都是基于chain rule的。
变量与相关,又与相关,那么存在:
一些符号的定义:
:连接第层神经网络第神经元和第层神经网络第个神经元的边的权重。
:第层神经网络第个神经元的偏置量。
:第层神经网络第个神经元的activation value。
:神经元对应的activation function。
对应的,有
对于每层神经网络,定义一个权重矩阵,行、列的矩阵元素就是连接第层神经网络第神经元和第层神经网络第个神经元的边的权重。
可以将前馈神经网络的前向计算过程写为:
不失一般性,定义样本整体的loss function为平方损失函数
是神经网络的深度(总的网络层数),是当网络的输入是时网络的输出。
这里有两个假设前提
第一,loss function可以写为多个训练样本的平均,。对于单个训练样本,存在。
第二,loss function可以被表示为与神经网络的输出相关的函数。
vanilla是香草的意思,这里vanlilla backpropagation指的是由2提出来的标准的反向传播学习算法。也叫做online backpropagation,因为每次都只输入一个training pattern(一个样本)。
这个名字是无关紧要的。
进行batch learning时,仅仅进行简单的累加和平均。
反向传播算法的目的是找到误差关于权重系数和偏置系数的偏导(梯度),由此我们可以利用梯度下降(SGD等)的方法来进行权重系数和偏置系数的更新。
我们最终的目的是求得网络中误差关于其对应的权重系数和偏置系数的偏导的量化表达。即求得和。
定义为第层神经网络的第个神经元所产生的error(或称为sensitivity,敏感、扰动之意)。
有如下定义
对于输出层而言
只有当时,与才相关。
这样, 输出层的error用矩阵形式可写为
符号和matlab中的运算代表的意思相同(点乘),相同形式的两个矩阵对应位置上的元素相乘。
层的error与层的sensitivity之间的关系如下
这个公式说明了为什么误差是反向传播的,解释了文章开始的图中中为什么误差的传播与前向传播的过程相反。是前馈神经网络中误差反向传播的核心。
也可以理解为前向计算过程中,误差是逐步累积的,现在再迭代回去求每层的误差。
sensitivity关于偏置系数的偏导为
cost关于权重系数的偏导为
偷懒贴两张图
最后,这边文章最重要的参考是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.