2017年3月18日 星期六

Neural Network如何選用Sigmoid Function?

為了搭上AI的熱潮,開始寫一些相關文章,因為除了本人對它感興趣之外,也是最近非碰不可,不然就落伍了。Neural Network為何不用Step Function?大家可以自己找書來看。有一本書,「Make Your Own Neural Network」,有不錯的解釋。

本篇要探討的是,如何挑選一個可以取代Step Function的Sigmoid Function?這個問題,似乎是有點吹毛求疵,因為專家說,使用Sigmoid Function就沒錯了,聽專家的話,就對了。但我就是好奇,發明Neural Network的人是如何知道要用Sigmoid Function?應該不是憑空想出來的。

南宋哲學家,朱熹,提倡「格物致知」。我的解釋是,光聽專家的意見,或看書是不夠的,要用批判的心態去質疑。因為透過書或專家的解釋,那是二手的,有時候自己會以為書上寫的很清楚,會容易誤以為自己真的了解,嚴重者是獲得錯誤的知識,而產生錯誤的認知,可能會影響一輩子。所以,沒有去做一些「格物致知」功夫,書讀再多也是枉然。

講了這麼多,無非是想大家知道,本人不是沒事找渣,是為了「格物致知」。古代人「格」事物,能用的工具有限。現代人,可以用的工具就很多了。

剛開始去理解Sigmoid Function時,發現有兩個部份要「格」,公式和曲線圖。更進一步「格」,發現,公式不是目的,曲線圖才是目的。發明Neural Network的人,認為Step Function太陡了,需要一個平滑的曲線。如果我是發明Neural Network的人,憑自己的才智,無法馬上想到公式,而是先畫出一個心目中希望出現的曲線出來,然後再從這個曲線,找出能夠套用它的公式。可能不只一個公式,但盡量找到一個簡單的公式給大家或電腦用。

當然,我看過這個公式長什麼樣子,已經先知道答案了,所以從曲線「格」出公式,有作幣的嫌疑。但從「格」的過程,可以幫助我了解公式的原理,而不光是死記公式。

首先,把想要的曲線畫出來。希望的曲線是,保留Step Function的大部份特性,亦即x<<0時y=0、x=0時y=1/2、x>>0時y=1,但是要平滑。



然後就用下面的表格,把公式「格」出來。



先把 y = 0, 1/2, 1 放到表格的第一列,從這一列開始「格」公式。經過步驟1和2之後,產生表格的第3列,公式就快浮出水面了。於是這個問題,就簡化為,找格∞, 1, 0的公式,這就是經由步驟3後,產生表格的第4列。

印象中,很像之前學過的y = e^x,不過它的值倒過來,是0, 1, ∞。這就是經由步驟4,產生的第5列。而符合第5列的公式,就是e^x,這就是步驟5的結果。為何選e?不選其它的數字?這可能是e有些有趣的特性,導致大部份的數學家喜歡使用它來建立公式。

接下來,我們就往表格的上方走。經由步驟6,產生e^(-x),因為它是左右對稱的。最後是步驟7,將e^(-x)放進右下角那塊存放∞, 1, 0值的區域。於是,Sigmoid Function就被「格」出來了。

在「Make Your Own Neural Network」這本書提到,Step Function有Threshold,可是Sigmoid Function似乎沒有考慮到Threshold?這是我的疑點,下次再去「格」它。

本篇,是我去「格」Sigmoid Function的心路歷程。當然,講給大家聽,就變成「二手」的。其中一個目的,是希望讓大家知道,如何「格物致之」。當然,大家還是要去質疑,其中的對錯。

-Count

沒有留言:

張貼留言