2017年5月7日 星期日

如何寫出3-Layer Neural Network程式?

這裡總結一下,我閱讀完「Making Your Neural Network」Part 1 後的心得。此書共有3個Part:Part 1講Neural Network的原理,Part 2講用Python實作Neural Network,Part 3講Neural Network的應用。

個人認為,只要有足夠的程式設計基礎,並且徹底了解Part 1,那就夠了。至於Part 2和Part 3,有空再看。換言之,若沒有了解Part 1基礎原理,寫再多的Neural Network程式,對知識的長進,沒有多大幫助。

如何確定是否真的搞懂Part 1?一個方法就是,用數學公式當作程式語言,將3-Layer Neural Network重新推導一遍。

下圖是我們建立的,3-Layer Neural Network:


注意,我用程序員最常用的迴圈符號i, j, k,來表達第1層、第2層、第3層的Node、Input、Output、Training Data和Weight。有i, j, k符號做為結尾的,大部份是Matrix,如xi, wij, yk。

First Layer Node: ni
  Input: xi
  Output: xi
  Function: f(x) = x

Second Layer Node: nj
  Input: xi
  Output: xj
  Weight: wij
  Function: f(x) = Sigmoid (x)

Third Layer Node: nk 
  Input: xj
  Output: yk 
  Weight: wjk
  Function: f(x) = Sigmoid (x)

Training Data: tk

將第3層Node的Error,套在Gradient Descent,算出第2層到第3層的weight的微調量:


此公式的推導過程,請參考:
為何Neural Network要用到線性代數?

將此微調量,套在Back-Propagating Errors,算出第2層的Error:


將第2層Node的Error,套在Gradient Descent,算出第1層到第2層的weight的微調量:


有了,這些weight的微調量,就可以更新2層到第3層和第1層到第2層的weight了:


反復執行,直到找到Error Function,E = Sum ((tk-yk)^2),輸出最小的值為止。

-Count


沒有留言:

張貼留言