2017年4月18日 星期二

如何計算Neural Network的Error Function的斜率?

上一篇,我們解釋了,為何Neural Network要用到微積分,的理由。本篇探討,如何求出Error Function的斜率。

下面是Error Function斜率公式,出自於「Make Your Own Neural Network」這本書。對於非數學科班出身的我們程序員來說,有看沒有懂。所以我習慣將先將問題簡化,再去了解公式怎麼來。如何簡化?


這個公式,是表達3-Layer Neural Network的中間層的所有Node的Error Function的斜率公式,是不是有點繞口?我不管3-Layer,把問題簡化成最簡單的問題,就是在只有一個Node的情況下,求Error Function的斜率公式。此問題以下圖表示


Error Function的斜率,依weight變化而變化:


各個擊破。先處理左邊紅框的,不解釋了:


再處理右邊綠框的,這有點麻煩。


我用S代表sigmoid function。目的是求S (w*x)的斜率公式。S(x)的斜率公式,好辦。至於為何會長這樣子,我也不知道,大家可以自己想想看看。


可是S(w*x)的斜率公式呢?用微分的鏈式法則求得。鏈式法則,請參考「数学指南-实用数学手册」。推薦買一本,當作數學字典來用。


最後,把紅框和綠框合併起來,就成為Error Function的斜率公式了。通常會將2去掉,因為最後會結合Learning Rate使用,請參考前篇,Learning Rate在Neural Network的作用


為何要費那麼大的勁求Error Function的斜率公式?這樣一來,我們的程式,就可以套用這個簡單的公式去找Error的最小值。如何找?也請參考前篇,Learning Rate在Neural Network的作用

為何此斜率公式看起來那麼簡單?這是因為我們採用sigmoid function的關係。大家知道
y = e^x,微分後,還是e^x。

這就是為何數學家喜歡用e來組合各式各樣的function,就是為了方便。數學家的思維,在愉懶這一方面,是不是我們程序員一樣呢?

請大家把我推導的斜率公式,和本篇第一行從書裡抄來的斜率公式,好好做一個比較,會發掘許多有趣的東西出來。

-Count

沒有留言:

張貼留言