neural network神經網路 back prop 反向傳播 微分推導(1)

Elton's note
6 min readSep 15, 2022

--

在開始閱讀之前

如果還不是很熟悉神經網路的架構的話

可以看看Andrew ng 在coursera 上的課程 複習一下(它可以免費旁聽,可以去把第三週全部看完,如果時間充裕的話最好連第二週也看一下,等等也會用到一點,當然如果你很熟神經網路和logistic regression的話就都不用看了)

為了方便起見,接下來的文章會依照Andrew Ng 影片裡的表示方式來寫

除此之外,youtube 上的這支影片

也有手把手教你 如何用python 從0 開始做出一個神經網路

如果之前沒有程式經驗的話也建議先照著這支影片實作過一次

神經網路整體的架構相信在看過上面兩支影片之後都會很清楚了,所以這篇文章只會著重在反向傳播的微分推導上

Backpropagation proving

在這裡 我假設大家已經完全熟悉神經網路的架構了

在談神經網路之前,先來看看logistic regression

Andrew Ng 在這支影片中介紹了如何對logistic regression 進行backprop(反向傳播)

而事實上,logistic regression 可以被視為是一種單層的神經網路,

所以只要搞懂了logistic regression的backprop原理,神經網路的backprop就不會變得這麼難了

所以現在就讓我們來推導一次吧(我會補足andrew影片裡省略的微分步驟)

logistic regression recap

(x是input ,6(Z)是sigmoid function,L 是 logistic 的 Lost function)

圖(一)

我們的目標是要求出 dL/dW1, dL/dW2, dL/db ,進而進行下面的gradient descent

注意在這裡為了方便起見 把 dL/dW1 簡化成 dW1 來表示(python變數比較好打, 接下來也會用這種簡化的表示式,小心別搞混了)

dL/da 推導

back prop 的概念是 從右到左

所以為了要求出 圖(一) 最左邊的 dW1, dW2, db ,我們必須先求出最左邊的da才行

對log微分的公式 d(log(x))/dx = 1/x

好,現在我們有了dL/da,接下來便可以來求 dL/dz 了

用dL/da 來 求出dL/dz

雖然看起來像是在往回跳,但其實是往前跳喔

現在來求dL/dz

利用微積分的連鎖率,可以求出

我們在剛才已經求出 dL/da ,所以現在我們唯一要求的只有da/dz

6(z) (logistic function) 的微分有點複雜,大概是整個推導裡面最麻煩的部分,不過只要這關過了,接下來就輕鬆了喔,詳細的式子大概是下面這樣子

對分數微分的公式

對exponentail 微分的公式

6(z) (logistic function) 的微分

所以我們求出了dL/da 和 da/dz ,把他們相乘就得到dL/dz了,讚讚

利用dL/dz一口氣求出dW1, dW2,db

現在我們已經有了 dL/da 和 dL/dz

運用 dL/dz 我們可以很輕鬆的求出 dL/dW1 , dL/dW2, dL/db

就這樣 我們完成了 logistic regression 的 back prop

和Andrew Ng 在影片裡寫的式子完全相同

接下來,我會運用相同的思路

來推導出神經網路的back prop

因為文章現在有點長,所以我把它貼在下一篇文章

神經網路反向傳播 推導(2) 裡面

記得要繼續看下去

--

--