首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带你领略高逼格的“反向传播算法”在人工神经网络中的应用

什么是“反向传播算法”(backpropagation algorithm)?

人工神经网络表面误差的梯度信息可以有效地通过应用消息传递算法来计算,而这种算法就被称之为"反向传播算法"。 在反向传播期间,输入信号通过网络向前传播到输出端,然后针对目标变量计算网络误差并向后反向传播到输入。通过使用向前和向后信号来确定参数空间中的移动方向,从而降低神经网络的错误。

“反向传播算法”是如何在人工神经网络中应用的

首先,开局一张图,内容全靠。。。

如下图1演示了反向传播算法的几大主要步骤。该算法的主要概念是,对于一个给定的观测数据,我们要确定每个网络参数对于通过观测得到的预测值与目标值之间的误差的“责任”程度。 然后我们根据这个“责任”程度来调整参数,以减少神经网络的误差。

图1

为了确定这个神经网络的误差值,我们首先对观测到的输入值通过网络层进行正向传播。 这是反向传播算法的第一步,如图1-I所示。 请注意,在图中,可以将a_k视为网络输出(对于具有一个隐藏层的网络)或者将网络的其余部分(在具有多个隐藏层的网络的情况下)的隐藏层的输出视为a_k。 然而,在此我们假设索引k与网络的输出层相关联,并且因此每个网络输出由a_k表示。 同时我们还要注意一点,在执行这个向前传播步骤时,应当跟踪所有层l的前馈预激活z_l和激活a_l,因为这些将用于计算反向传播误差和误差函数梯度。

算法的第二步是计算网络输出的误差,并反向传播到输入端。 我们使用的公式是差分平方和误差函数:

我们总结所有k个输出单位的值(在这个例子中是一个)。 现在我们可以在输出节点上定义一个“错误信号”δ_k,它将反向传送到输入端。 误差信号计算如下:

因此,误差信号本质上是通过输出激活函数的梯度来加权误差函数的梯度(注意在该公式中存在z_k项,这就是为什么我们在前向传播步骤中保持它的原因)。 我们可以通过将δ_k传递给输出层权w_jk,在所有输出节点上求和,并将结果通过隐层g_j'(z_j)处的激活函数的梯度传递,来继续向输入反向传播错误信号。 (图1-II)。 执行这些操作会导致隐藏层的反向传播错误信号δ_j:

对于具有多个隐藏层的神经网络,该误差在反向传播过程可以继续在层j-1,j-2,...中进行。反向传播算法的步骤III是使用正向信号a_(l-1)和反向误差信号δ_l来计算误差函数相对于每个层l处的模型参数的梯度。 如果考虑在层l处的模型权重w_(l-1,l)作为将正向信号a_(l-1)链接到误差信号δ_l(图1-III),则误差函数的梯度是:

我们可以发现这个结果与神经科学里的Hebbian学习概念密切相关。 因此,通过简单地跟踪从下方馈送到该层中的正向传播的激活值,并且通过向后传播的误差信号送达这些激励函数中来加权这些激活值,可以有效地计算从上层传送过来的误差函数相对于每层模型权重的梯度。那么偏置参数呢? 事实证明,除了用于偏差的“前馈激活”始终为+1(参见图2)之外,还应用了相同的用于权重的梯度法则。 因此,层l的偏置梯度就是下式:

图2

反向传播算法的第四步也是最后一步是根据步骤III中计算的梯度更新模型参数。 当我们慢慢改变指向参数空间中的方向,错误函数的值将增加。 因此,当更新模型参数时,我们应该选择相反的方向。 我们应该在这个方向上走多远呢? 这通常由用户定义的步长(又称learning rate)参数η来确定。 在给定参数梯度和步长的情况下,对给定层的权重和偏差进行相应更新:

为了训练ANN,通过观察许多“输入值 - 目标值对”并更新参数迭代地重复以上和图1中概述的四个步骤,直到网络的误差达到可接受的低值,参数停止更新(收敛),或者设定参数更新次数已经达到。有些读者可能会发现反向传播的步骤有点特别。 然而,这些步骤是与优化问题的演算相结合,因此,有兴趣的读者可以深入了解一下推导过程,以便在数学和反向传播算法之间建立联系。

炸猪排

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180122G0NBYV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券