在说BP算法前先说一下梯度下降法。当神经网络的层数和神经元数量较多时,为了找到神经网络中最优的一组参数,需要一个可靠的、时间上可行的方法去调整神经网络中的参数。
本文中使用的图片来自李宏毅的“一天搞懂深度学习”。
首先引入神经网络中的Loss函数,Loss函数用来表征神经网络输出和预计输出之间的误差。一条训练数据的误差可如下图表示:
总误差即所有误差的和:
对于误差L,计算误差L对权重W的偏导数,不断缩小该偏导数。首先随机设置神经网络中的参数,然后根据设置的初始参数不断缩小误差对参数的偏导数,是参数对误差的影响降到最低,而下降的路线则选取误差函数L对参数W的梯度方向,该过程可以从下图直观的理解:
从以上过程中可以看出对对参数W调整的过程,而对参数调整的幅度根据设定的学习率“ ”来确定。下图同样是对参数W调整过程。
假设参数只有和
,误差函数简单记为
,可以从三维上简单理解一下该过程:
在理想状态下可能是如上图一般,根据梯度顺利的更新参数。而现实中梯度下降发会遇到“ 下降到局部稳定点(极小值点)的状况 ”,这样就不能保证使用梯度下降法求得的全局的最小值点,同样以二维参数为例可以比较清楚的理解该情况:
在李宏毅的“一天搞懂机器学习”的文章中用了一个比较无聊的例子来描述这个情况,就像是在玩帝国时代时无法看清整个地图一样,梯度下降法也不能“看清”Loss函数的全局情况。
而BP算法其实就是一个高效率计算的方法。CSDN现在的公式太难输入了,一会我把手稿传上来看一看吧。
传的图片太多会审核,一会新开一篇博客,在这个后面加个链接。