為何Neural Network要用到微積分?
但為何會用到線性代數?是為了讓程式比較好寫。並且,只有一個Node不需要線性代數,多個Node才需要。
我們先考慮一個Node的情況:
為了要調整Weight,去找Error Function的最小值,我們用w對E做微分:
這個公式的由來,請參考此篇:
如何計算Neural Network的Error Function的斜率?
接下來,用Gradient Descent方法,調整weight,程式會這樣寫。
w = w + △w
每次微調weight的量為:
為何weight的微調量會是負的?以及Learning Rate的作用為何?請參考:
Learning Rate在Neural Network的作用
前面說過,只有一個Node是不需要線性代數,所以先從簡單的2*2 Node開始,將線性代數拉進來:
上圖,我們觀察到,2*2 Node之間,穿插了4個△w ,套用上面的公式,這4個△w 用下面4條式子表示:
可以用Matrix表達這4條式子。對Matrix的基本運算不熟的人,可以上網去搜,去堆敲,可以發現,其實沒什麼大不了的。不過就是將4條式子,改用簡精的1條式子表達而己,其運算方式,和運算量,都沒變:
再整理一下:
再強調一次,這裡的e和E,雖然都叫Error,卻是完全不同的功能。前篇有提醒過大家:
Back-Propagating Errors
將來,我會把Back-Propagating Error加進來,去推導完整的3-Layer Neural Network公式。這樣,大家用這些公式,應該就知道如何Coding了。
當然,這些公式,不是我發明的。只是從程序員的角度,改一下書中的符號,除了能幫助理解,也為了將來Coding方便。因為有時候,書中的符號會讓人混淆,如將e和E混合使用,造成理解錯誤。所以自己定義符號,然後再重新推導公式一遍,就像Coding要遵循Coding Standard一樣,這樣一來,有了推導的過程,就能清楚了解事物的原理。這一段是題外話。
-Count
沒有留言:
張貼留言