浅谈神经网络误差反向传播(BP)算法

写在前面

自己涉足深度学习领域已经有很长一段时间了,回想第一次接触各种各样陌生概念时的场景,总是为在网上四处寻找各类资料而困惑,加之自身不是一个很技术的人,直接理解算法实现源码多少有点儿费劲。久而久之,学到的东西很杂,但索性也算是明白了一些基础的知识。希望能用简单易懂且准确的语言简单记录,也尽力为更多刚刚迈入深度学习大门的朋友提供一些理解上的帮助。

神经网络的误差反向传播(BP)算法堪称是一个伟大的算法,对于后续实现并优化各类深度学习模型都具有非常重要的意义,当初自己学的时候很多概念就一直模棱两可,现在趁着有时间,把一些相关概念用最易懂的方法总结起来,方便后期回顾复习。

定义

官方给出的定义(维基百科)是这样的:误差反向传播(Backpropagation,缩写为BP)是对多层人工神经网络进行梯度下降的算法,也就是用链式法则以网络每层的权重为变数计算损失函数的梯度,以更新权重来最小化损失函数。

官方的定义确实官方,说的简单点儿,BP算法就是对一个现有的神经网络模型进行参数调优的算法,优化的过程需要结合梯度下降法一起使用。

问题来了,什么是梯度下降呢?

梯度下降

上大学的时候,有一门课叫《高等数学》,课本上告诉我们,在变量空间的某一点处,函数沿梯度方向具有最大的变化率。既然如此,那我们在优化目标函数的时候,要使目标函数尽可能小,自然是沿着梯度的反方向去更新模型参数,以此来达到我们的优化目标。

举一个非常经典的例子,下山问题。假设你站在山上的某处想要下山,最好的办法是环顾四周,看哪里的坡度最陡(梯度),就沿着哪里下山(沿着梯度的反方向),每当走到了山上的一个新的地方,继续采取上述方案,在很长时间以后,你就发现自己已经到了山的最低处。从下图的线路图中可以更好地理解。
浅谈神经网络误差反向传播(BP)算法_第1张图片

算法讲解

再说回BP算法,以一个简单的三层神经网络进行说明,网络结构如下图所示。对于每一个神经元,其包含的参数为激活函数 f i f_i fi,权重 w i w_i wi,偏置 b i b_i bi,下图中用e表示 w i x + b i w_ix+b_i wix+bi
浅谈神经网络误差反向传播(BP)算法_第2张图片

该模型的调优过程可视为不断迭代的过程,每一轮迭代包含正向传播信息和反向传播误差两个步骤。

当然,在正式开始介绍BP算法前,还是先给出BP算法的基本思想:
(1)逐层向后推进计算每一个神经元的参数和激活函数( w i w_i wi b i b_i bi f i f_i fi)。
(2)计算每一层的误差,误差的计算过程是从最后一层向前推进的。
(3)更新参数,不断迭代(1)、(2),直到满足终止条件。

正向传播信息

这一步骤即为神经网络输入数据后的前向传播过程,各神经元根据数据计算出对应的参数( w i w_i wi b i b_i bi),完成模型参数的初始化,并得到输出结果y。

反向传播误差

我们称得到的输出结果y为预测值,将其与真实值进行误差计算,得到这一轮正向传播的总误差δ。因为δ与每一个单元的参数都有关系,我们模型调优的目的就是要将每一个单元的参数设置为最佳,使得最终的总误差δ尽可能小,因此我们将总误差δ反向传播计算出每一个单元的误差 δ i δ_i δi,并对每一个单元的参数( w i w_i wi b i b_i bi)进行更新调整,更新的策略便为方才提到的梯度下降法,即通过求导计算出各个单元函数的梯度,沿着梯度的反方向更新参数。
浅谈神经网络误差反向传播(BP)算法_第3张图片

至此,每一个单元的参数得到的一次更新,单轮的迭代步骤就此完成,而我们模型的训练是一个很复杂的过程,需要进行很多轮次的迭代以调整模型参数,直到最终的目标函数满足预先设定的阈值。

梯度消失现象

当我们遇到层数较深的网络结构时,如果要对较为靠前的单元进行参数更新,可能会出现更新效果不佳的情况。因为每一层单元在求导计算梯度时,都要受到其后面一层函数的影响(链式求导),有的函数(sigmoid)的导数值小于1,多个小于1的数乘在一起就会造成趋于0的情况出现,导致这一单元的参数更新达不到预期效果,这一现象就是梯度消失。

当然,我们可以通过更换激活函数、减少网络层数等方式,解决梯度消失问题。

总结

本文用通俗易懂的语言介绍了BP算法调优模型的基本实现思路,没有负责的公式推导和实现代码,旨在用最少的精力理解算法,当然有兴趣深入学习的朋友可以查看参考资料中的文章。

BP算法作为经典的深度学习算法,还有更多有趣的内容值得大家更深入地探索。本文如有描述不周之处,还望各位海涵,欢迎各位朋友相互交流学习。

参考资料

“反向传播算法”过程及公式推导(超直观好懂的Backpropagation)
神经网络BP反向传播算法原理和详细推导流程
误差反向传播算法

你可能感兴趣的:(深度学习,神经网络)