前馈神经网络与反向传播算法
对比循环神经网络RNN, 更能体会前馈神经网络的这一特性
在RNN中,存在一层循环神经元,信号在自身进行递归,而前馈神经网络中信号是层层传递的,从输入层依次传输到输出层。
对于前馈神经网络而言,其参数训练的过程通过反向传播算法来实现。反向传播,对应的英文为Back proprgation, 与前馈神经网络中信号的正向传递相对应,图示如下
反向传播算法将均方误差作为模型训练的代价函数,本质上是梯度下降法。和信号从输入层到隐藏层到输出层的正向传播相反,误差值从输出层传递到隐藏层再到输入层,这也是其名称中反向传播的由来。
下面通过一个实际的例子来感受下反向传播算法,神经网络结构如下
在输入层和隐藏层中,每一层都添加了一个值为1的神经元,这样的神经元称之为bias, 类比线性拟合中随机误差对应的常数项。首先随机初始化各条边的权重值,结果如下
神经网络训练的目标是调整各条边的权重,使得模型输出值与真实值o1,o2的误差最小。类比机器学习,这个目标可以用损失函数来定量描述,这里采用均方根误差。
根据初始权重值,通过正向传播,可以计算隐藏层h1和h2的值,这里激活函数采用sigmod函数,计算过程如下
接着计算输出层的输出
根据输出层的计算结构和真实值的差异,可以计算损失函数的值
接下来进行反向传播,对于神经网络而言,由于其参数很多,损失函数的求解通过梯度下降法来实现。以w5这个权重为例,根据链式法则,其偏导数如下
依次计算链式展开的各个子项,结果如下
学习率设定为0.5,则更新后的w5参数值计算如下
其他隐藏层的权重值计算过程是一样的,隐藏层计算完之后,再传播到输入层,按照同样的方式来调整输入层的权重。在每次迭代中,信号正向传播,利用更新后的权重值来计算输出层的总体误差,然后误差反向传播,依次更新更层神经元对应的权重值。