研一的时候上过深度学习的课,但是很久没复习忘得差不多了,趁着找工作准备笔试面试的机会把之前模糊的概念再复习一下。
 
 
假设初始的三层网络结构如图,其中激活函数为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,步长小的能够更好的拟合曲线,但是训练较慢,步长大的训练快,但是可能会错过最优解。
 
所以训练中一般是先用大的学习率,一段时间后将学习率逐步变小。