也就是說,當我們將分類問題描述成x-y平面座標時,我們關注的是從原點出來的直線,怎樣畫比較洽當。
現在我們把分類問題描述成一個Neural Node,我們關注的是,如何根據Output,調整Weight,讓下一次Output的誤差Error為最小。定義Error Function為,E = t - y。
用國中數學就可以解決簡單的分類問題了,何為要將此問題轉成Neural Network?這樣是否把問題複雜化?理由是:
- 透過最簡單的例子,理解Neural Network的基本原理,為何要用微積分的原因
- Neural Network模型可以解決更多的問題,包含分類問題。通用性,是我們程序員的最愛
x是Input,y是Output。Neural Node只是做簡單的y = w * x 運算。在x值固定為x1,w值設為w1的情況下,我們得到y1值。
y1 = w1 * x1
發現y1值和我們預期的t有一段差距
E1 = t - y1。
然後我們根據E1的值,修改w1為w2,使得
y2 = x1 * w2 = t2,這時候的E2 = 0
那麼,這和微積分有什麼關係呢?回答這個問題之前,我們要先看看Error的定義是否恰當。對於只有一個Neural Node而言,E = t - y,這是可以接受的。但對於兩個Neural Node而言,這樣定義就有問題了。
E = (t1 - y1) + (t2 - y2)
若t2 - y2 < 0,為負數,就有可能和t1 - y1 > 0為正數抵消。導致E = 0,誤判,以為找到最佳的weight。但就兩個各別的Node的來說,Output的離期望還是很遠。所以E = t - y,不是一個恰當的Error Function。那麼,什麼才是恰當的Error Function呢?
E = | t - y |
因為我們的Node進行的是線性運算,線性的意思是,Input和Output可以用直線方程式表達,即
y = ax + b
但,實際上,Neural Network是模仿生物神經細胞,神經細胞的運算,幾乎是非線性的。數學家用sigmoid function,來模擬神經細胞的運算,它是非線性的。之前有提過,sigmoid的樣子,Neural Network如何選用Sigmoid Function。在這裡,我們就簡單地,把直線畫成稍為曲線,來觀察看看。
E = t - y,會導致在w2之後,E為負數,這不是我們要的。
E = | t - y |,會讓原來w2之後的負數,轉正,但我們發現,最低點很尖銳,並不平滑。不利於我們用微分取最小值。
E = t - y,情況下,E-w是直線。
E = |t - y|,情況下,E-w是折線。
E = (t-y)^2,E-w是曲線。
這是什麼意思?這個意思是,大部份情況,我們無法訓練Neural Network,能達到100%的精確,Error始終會存在,只是盡善盡美而已。這就是為什麼,Neural Network要用到微積分的微分,就是為了要找在E-w曲線上,找到Error的最小值,如此而己。
搞不好,數學家,在發明Neural Network時,沒有想到要用微積分這件事,而是東拼西湊,發現這樣做,效果不錯,而己。若是這樣,和我們程序員,有什麼不同?
繞了一大圈,希望不要為大家造成困擾,甚至愈看愈糊塗。本人做學問,習慣按步就班,常常遇到問題,想清楚後,才敢會往下走。過了一段時間,容易忘,又要重頭來。寫部落格,主要幫助自己,能比較快回想起來當時的理解。若也能幫助大家對於某些問題的了解,那也不錯。
搞不好,數學家,在發明Neural Network時,沒有想到要用微積分這件事,而是東拼西湊,發現這樣做,效果不錯,而己。若是這樣,和我們程序員,有什麼不同?
繞了一大圈,希望不要為大家造成困擾,甚至愈看愈糊塗。本人做學問,習慣按步就班,常常遇到問題,想清楚後,才敢會往下走。過了一段時間,容易忘,又要重頭來。寫部落格,主要幫助自己,能比較快回想起來當時的理解。若也能幫助大家對於某些問題的了解,那也不錯。
-Count
沒有留言:
張貼留言