2017年4月17日 星期一

為何Neural Network要用到微積分?

為何Neural Network要用到微積分?這要從上一篇的分類問題,Training Simple Classifier,講起。上一篇的分類問題,我們以x-y軸的平面座標來解釋,x代表width,y代表length。於是,我們用國中數學的知識,就足以了解分類問題的原理。



現在,我把分類問題,從 x-y平面座標,轉換成最簡單的Neural Network問題,就是一個Neural Node。

也就是說,當我們將分類問題描述成x-y平面座標時,我們關注的是從原點出來的直線,怎樣畫比較洽當。

現在我們把分類問題描述成一個Neural Node,我們關注的是,如何根據Output,調整Weight,讓下一次Output的誤差Error為最小。定義Error Function為,E = t - y。

用國中數學就可以解決簡單的分類問題了,何為要將此問題轉成Neural Network?這樣是否把問題複雜化?理由是:

  1. 透過最簡單的例子,理解Neural Network的基本原理,為何要用微積分的原因
  2. Neural Network模型可以解決更多的問題,包含分類問題。通用性,是我們程序員的最愛
現在,從一個Neural Node的角度來看待分類問題。我們關注的是計算下一個Weight值,讓Error最小。



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

因為E和w會變動,我們把它們之間的關係 ,畫成平面座標如下。



那麼,這和微積分有什麼關係呢?回答這個問題之前,我們要先看看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 |

如此一來,E-w 曲線就會長這樣子。快要接近問題的核心了。



因為我們的Node進行的是線性運算,線性的意思是,Input和Output可以用直線方程式表達,即

y = ax + b

但,實際上,Neural Network是模仿生物神經細胞,神經細胞的運算,幾乎是非線性的。數學家用sigmoid function,來模擬神經細胞的運算,它是非線性的。之前有提過,sigmoid的樣子,Neural Network如何選用Sigmoid Function。在這裡,我們就簡單地,把直線畫成稍為曲線,來觀察看看。



下面三張圖,由左至右,選用不同的Error Function,而有不同的E-w曲線。



E = t - y,會導致在w2之後,E為負數,這不是我們要的。
E = | t - y |,會讓原來w2之後的負數,轉正,但我們發現,最低點很尖銳,並不平滑。不利於我們用微分取最小值。
E = (t - y)^2,可以讓最低點變成平滑,這樣有利於微分取最小值。為何此Error Function可以製造平滑曲線?交給數學家證明。但我們可以拿直線的例子來觀察,的確是如此,如下面三張圖。



E = t - y,情況下,E-w是直線。
E = |t - y|,情況下,E-w是折線。
E = (t-y)^2,E-w是曲線。

各位不相信,可以拿下面這張表,自己畫畫看,就可以相信我說的。



最後,各位有沒有觀察到,為何上面舉的例子,最低點都在E = 0的位置?實際情況是,不見得會出現E = 0的情況,如下圖。


這是什麼意思?這個意思是,大部份情況,我們無法訓練Neural Network,能達到100%的精確,Error始終會存在,只是盡善盡美而已。這就是為什麼,Neural Network要用到微積分的微分,就是為了要找在E-w曲線上,找到Error的最小值,如此而己。

搞不好,數學家,在發明Neural Network時,沒有想到要用微積分這件事,而是東拼西湊,發現這樣做,效果不錯,而己。若是這樣,和我們程序員,有什麼不同?

繞了一大圈,希望不要為大家造成困擾,甚至愈看愈糊塗。本人做學問,習慣按步就班,常常遇到問題,想清楚後,才敢會往下走。過了一段時間,容易忘,又要重頭來。寫部落格,主要幫助自己,能比較快回想起來當時的理解。若也能幫助大家對於某些問題的了解,那也不錯。

-Count

沒有留言:

張貼留言