研一的时候上过深度学习的课,但是很久没复习忘得差不多了,趁着找工作准备笔试面试的机会把之前模糊的概念再复习一下。
假设初始的三层网络结构如图,其中激活函数为sigmod函数,损失函数C为均方误差。
首先进行前向传播:
同理,下一级:
最终的损失为:
先将链式法则中需要用到的函数列出:
然后根据链式法则,计算:
关于橙色部分的推导为:
则更新后的weights为:
其中,奇怪的希腊字母是学习率。
同理,可以计算其他所有的weights,这里再举一例:
-------------------------------------------------------------------------------------------
再从头理一遍:
前向传播的意思就是往前计算,即从x经过w到y的过程,y = wx
反向传播的意思就是往后计算,即通过y和y_out的偏差,反向推导出偏导数,来更新w成为w'的过程;
之后神经网络又通过更新了的参数w',计算y'=w'x
再反向,求出w''
……
如此循环往复,就会使得y'''''(很多')'''逐渐接近y_out
这就是BP算法。
-------------------------------
最后一个小点就是学习率(那个奇怪的希腊字母)
它控制的是参数更新的“步长”
图中黑色是要拟合的曲线,假设橙色的步长为0.001,绿色的步长为0.1,步长小的能够更好的拟合曲线,但是训练较慢,步长大的训练快,但是可能会错过最优解。
所以训练中一般是先用大的学习率,一段时间后将学习率逐步变小。