一步一步推导反向传播
假如我们由如下的网络(这里只给出最后两层
和
)其中
是最后输出:
其中有如下定义:
注意这里的
都是矩阵或向量。其定义和吴恩达的一样,比如
代表第
。
因为反向传播是要求最后的损失对前面所有的权重的导数,然后再更新权重,所以我们的关键在于求出损失的权重的求导,上面的图中最后的输出是
,所以我们对应的损失如下:
我们将
。
我们的目的是要求
,我们可以通过链式运算:
首先由上面的损失公式,我们可以很直观的看出来
,注意这里省去了常数部分。
根据链式法则,我们可以得到
,然后再结合式1,因为
,并且
,所以
,最终我们得到如下:
我们离权重只剩下一步之遥了,同样利用链式法则,我们可以得到
,结合式子2,因为
,所以
到此为止,我们得到了损失对
的导数:
看到这里,可能心里想,这如果要好几百层怎么推呀,其实我们可以发现当我们求第
层的时候,我们会用到
层的数据,所以如果能找到规律就好了,那么我们再向下推一层看看,同理,根据链式法则,我们可以得到
,而
,所以
,所以我们得到如下:
看看我们发现了什么,我们发现第
层对
的导数和第
层对
的关系了,所以我们可以设
,所以我们有:
再根据链式法则得到对权重的导数为:
其中(
)
按照(7)这种写法,我们也可以将(4)改下如下:
所以我们就得到了我们的损失对于任意
层的权重的导数,也就是式子4_1,发现里面只存在一个
是未知的,而结合式子6,我们就能求出所有层的
。
比如我们最后一层是
层,根据
的定义得到
,因为最后一层,所以结合损失,计算得到
,可以参考式子3的计算。当计算得到第
,那么
就可以递推得到,进而带入4_1,就能得到对所有层权重的导数,进而更新权重。