本週基本沒時間看論文了,一直在搬磚。。。
不過這周倒是看了一波hinton對BP算法的反思的各種解讀。這自是引起了很多的關注,但不可否認BP算法目前爲止真的很work,所以想好好回顧下BP算法。
來來來,接下來我們就來推導推導:
- 首先來看看最後一個hidden layer到輸出層的梯度計算:
- 中間層的梯度計算:
- 鏈接輸出的第一個hidden layer的梯度計算:
上述方程式中由最後一層的權重更新梯度最簡單,而前面層級的更新梯度則需要向前推導,這一推導的過程借用鏈式法則可以很容易的求解了。
但我們知道,在CNN中,本層的輸入是上一層的多個輸入,一如下圖所示:
可以看到,梯度計算依然是反向傳播,無論是單輸入還是多輸入。
接下來我們來看看多個輸出的情況。
你看吧,手推公式真的很爽啊~~~~可以看到,具有多個輸出的神經元權重更新依賴於所有可能路徑上的導數。
在反向傳播的過程中,最方便的是計算神經網絡輸出端的誤差,我們會把這一誤差反向傳播並且沿着反向路徑加權。當我們傳播到了一個神經元,可以將經權重反向傳播過來的誤差乘以神經元的導數,然後就可以同樣的方式反向傳播誤差,一直追溯到輸入端,這就是BP的思想了。
手推有利於理解BP,但隨着中間層的加深,需要有更簡潔的方式來簡化推導,於是就出現了誤差信號的定義了:
這麼推導下來,可以看到BP算法的強大了吧~~~
最後,在知乎上看到一篇作爲入行數年的專業科研工作者,你每週看幾篇 paper 的文章,覺得值得學習哈。