【ML】斯坦福Machine Learning反向傳播(Backpropagation)的數學推導

疫情在家閒着沒事把斯坦福Andrew Ng的機器學習裏面的數學公式都推導了一遍。其中我發現視頻中反向傳播的數學跳過了一些步驟且所用的數學符號跟其他地方不太一樣。今天來分享一下視頻中反向傳播的數學推導。

如果你喜歡看更直觀的視頻推導,請移步這裏:

B站: https://www.bilibili.com/video/BV1GK4y1s76c/

Youtube: https://www.youtube.com/watch?v=9OzLcgy1bjs

 

原視頻中介紹反向傳播的有這兩頁:

有沒有一種好像看懂又好像有點迷糊的感覺?我反正是的。。於是經過仔細看了之後我把我的糾結總結成了下面5個問題:

1. 爲什麼 g'(z^{(3)}) = a^{(3)}.*(1-a^{(3)}) ?

2. 爲什麼下面一個視頻內容說 \delta_{i}^{(l+1)}=\frac{\partial J}{\partial z_{i}^{(l+1)}} ,但是卻從 \delta^{(4)} = a^{(4)} - y 開始推導。這樣的簡化可以嗎?

3. 就算2是可以的,那爲什麼 \delta^{(3)} = (\theta^{(3)})^{T}\delta^{(4)}.*g'(z^{(3)}) ?

4. 爲什麼 \frac{\partial}{\partial \theta_{ij}^{(l)}}J(\theta) = a_j^{(l)}\delta_{i}^{(l+1)} ?

5. 爲什麼 \frac{\partial}{\partial\theta_{ij}^{l}}J(\theta) = D_{ij}^{(l)} ?

推導之前我們先來看看一些基本定義:

a_{j}^{(l)} : 第l層的第j個node的輸出

z_{j}^{(l)} : 第l層的第j個node的輸入

\delta_{j}^{(l)} : 第l層的第j個delta值

\theta_{ij}^{(l)} : 第l層的i行j列的theta值(權重值)

a^{(l)} = g(z^{(l)}) = \frac{1}{1+e^{-z^{(l)}}}

z_{j}^{(l+1)} = \sum_{k=1}^{s_{l}}} \theta_{kj}^{(l)}a_{j}^{(l)}+b

\delta_{i}^{(l+1)}=\frac{\partial J}{\partial z_{i}^{(l+1)}}

下面開始推導:

1. 爲什麼 g'(z^{(3)}) = a^{(3)}.*(1-a^{(3)}) ?

  • 因爲分式函數求導爲 (\frac{u}{v})' = \frac{u'v-uv'}{v^{2}},所以 g'(z^{(3)}) = (\frac{1}{1+e^{-z^{(3)}}})' = \frac{0-(-e^{-z^{(3)}})}{(1+e^{-z^{(3)}})^{2}} = \frac{e^{-z^{(3)}}}{(1+e^{-z^{(3)}})^{2}}
  • 因爲a^{(l)} = g(z^{(l)}) = \frac{1}{1+e^{-z^{(l)}}},所以 a^{(3)}.*(1-a^{(3)}) = \frac{1}{1+e^{-z^{(3)}}}*\frac{1+e^{-z^{(3)}}-1}{1+e^{-z^{(3)}}} =\frac{e^{-z^{(3)}}}{(1+e^{-z^{(3)}})^2}
  • 所以 g'(z^{(3)}) = a^{(3)}.*(1-a^{(3)})。同理 g'(z^{(4)}) = a^{(4)}.*(1-a^{(4)})

 

2. 爲什麼下面一個視頻內容說 \delta_{i}^{(l+1)}=\frac{\partial J}{\partial z_{i}^{(l+1)}} ,但是卻從 \delta^{(4)} = a^{(4)} - y 開始推導。這樣的簡化可以嗎?

原來這並不是簡化,推導如下:

  • 因爲 a^{(4)}=h_{\theta}(x)J = ylog(a^{(4)}) + (1-y)log(1-a^{(4)})
  • 所以 \frac{\partial J}{\partial z^{(4)}} = \frac{\partial J}{\partial a^{(4)}}\frac{\partial a^{(4)}}{\partial z^{(4)}} = [\frac{y}{a^{(4)}}+\frac{(1-y)(-1)}{1-a^{(4)}}]g'(z^{(4)})
  • = \frac{y-ya^{(4)}+ya^{(4)}-a^{(4)}}{a^{(4)}.*(1-a^{(4)})}*a^{(4)}.*(1-a^{(4)})
  • =y-a^{(4)}

值得注意的一點是在機器學習裏面(特別是在斯坦福這門課裏面logx這個表達方式底數是e,而不是通常我們看到的logx相當於底數是10。所以上面推導中有 (logx)'=\frac{1}{x} 。)

 

3. 就算2是可以的,那爲什麼 \delta^{(3)} = (\theta^{(3)})^{T}\delta^{(4)}.*g'(z^{(3)}) ?

(這裏還是用鏈式法則求導,只是多了一步加總。如果不好理解請參考本文最上方視頻中的動畫演示)

\delta_{j}^{(3)} = \sum_{k}\frac{\partial J}{\partial z_{k}^{(4)}}\frac{\partial z_{k}^{(4)}}{\partial a_{j}^{(3)}}\frac{\partial a_{j}^{(3)}}{\partial z_{j}^{(3)}} = \sum_k\delta_{k}^{(4)}\frac{\partial (\theta_{kj}^{(3)}a_{j}^{(3)}+b)}{\partial a_{j}^{(3)}}g'(z_{j}^{(3)}) = \sum_k\delta_{k}^{(4)}\theta_{kj}^{(3)}g'(z_{j}^{(3)})

向量化:

\delta_{j}^{(3)} = (\theta_{:,j}^{(3)})^{T}\delta^{(4)}.*g'(z_{j}^{(3)})

\delta^{(3)} = (\theta^{(3)})^{T}\delta^{(4)}.*g'(z^{(3)})

 

4. 爲什麼 \frac{\partial}{\partial \theta_{ij}^{(l)}}J(\theta) = a_j^{(l)}\delta_{i}^{(l+1)} ?

\frac{\partial J(\theta)}{\partial \theta_{ij}^{(l)}} = \frac{\partial J(\theta)}{\partial z_{i}^{(l+1)}}*\frac{\partial z_{i}^{(l+1)}}{\partial \theta_{ij}^{(l)}} = \frac{\partial J(\theta)}{\partial z_{i}^{(l+1)}}*\frac{\partial (\theta_{ij}^{(l)}a_{j}^{(l)}+b)}{\partial \theta_{ij}^{(l)}} = \delta_{i}^{(l+1)}a_{j}^{(l)}

 

5. 爲什麼 \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta) = D_{ij}^{(l)} ?

注意第四問跟這裏的區別在於第四問是針對單個樣本(sample)來說的,而這裏相當於對所有樣本的 a_j^{(l)}\delta_{i}^{(l+1)} 加總取平均。

加總: \Delta_{ij}^{(l)} = \sum_{k=1}^{m}a_{j}^{(l)}\delta_{i}^{(l+1)}

取平均: \frac{\partial}{\partial\theta_{ij}^{(l)}}J(\theta) = \frac{1}{m}\Delta_{ij}^{(l)} = D_{ij}^{(l)}

以上算出了j=0時的情況(也就是bias項)。對於非bias項,由於在最開始的cost function裏面還有一個正則項 \frac{\lambda}{2m}(\theta_{j,i}^{(l)})^{2},所以還必須加上一個正則項的偏導,也就是 \frac{\lambda}{m}\theta_{ij}^{(l)},所以,對於非bias項 (j不等於0) 我們有:

D_{ij}^{(l)} = \frac{1}{m}\Delta_{ij}^{(l)} + \frac{\lambda}{m}\theta_{ij}^{(l)}

(細心的同學會發現ppt裏面這裏第二項沒有除以m。我覺得這裏應該是原視頻裏面寫錯了,或者由於除不除都是一個讓你自己調的參數,所以就合併到一起考慮了。)

完結!第一次錄製這種推導視頻,如果對你有幫助麻煩點贊轉發給需要的小夥伴啊。 :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章