Neural Networks and deep learning 類神經網路與深度學習筆記

類神經網路、機器學習都是最近很夯的領域,網路上看到了一篇基礎中的基礎 這篇,並且以手寫辨識為例子,作者以一般大學生也能看懂的方式來撰寫,牽涉到一些數學基礎相關的也都有簡單描述,雖然已經離開校園一段時間的我也需要花了蠻多時間才能消化下來,結論是,原來經由模仿人類神經細胞的概念,利用單純數學的模型,能夠讓機器(電腦)能透過大量資料的學習,即是全新的資料,也能夠準確的推測出正確的答案(輸出)。

以下是自己對這篇文章的理解,如果有什麼問題可以提出來一起討論。

Perceptions (感知器)

感知器用來模擬人類神經細胞,神經細胞互相連接用來傳遞訊號,我們用感知器來模擬有多個輸入訊號,每個訊號有不同的權重(weight),將所有輸入訊號經過權重的加成,得到輸出訊號,另外每個感知器有一個偏移量(bias),當輸出訊號超過偏移量,輸出為1,否則為0

作者用了一個很生活的例子,假設今天要出門,但是考慮到天氣陰晴、氣溫、誰約我出門、星期幾等等的因素,我們可以決定”要”出門或”不要”出門,我們可以分別給這些因素一個權重,所以透過權重跟因素的加成,我們可以判斷,當加成結果超過多少,我們就出門,這個超過多少的數值就是偏移量,所以經過計算,我們可以決定要不要出門,而我們要不要出門,如果也是另外一個人決定要不要出門的因素,也就是說我們的輸出,變成另外一個人的輸入,這就構成了一個神經網路。

所以我們可以模擬一個網路,有很多的感知器組成,感知器的輸出是另一個感知器的輸入,調整每個權重與偏移量,會影響最後輸出的結果,可以想像成人的眼睛,如果我們要辨識一個符號,我們會將眼睛看到的每個相素讀入,我們的感知神經會調整每個神經的權重與偏移,經過感知神經網路,我們可以得到辨識的結果。

Sigmoid neurons (S神經元)

類神經網路的基本精神就是透過剛才提到的改變每個神經元輸入的權重跟偏移,讓輸出的結果能夠符合我們的預期,也就是透過訓練資料,讓網路能逐漸學習到要如何改變權重跟偏移,所以如果我們稍微改變權重或偏移,也能讓輸出能稍微改變,我們就能夠透過慢慢調整權重與偏移,讓結果能慢慢趨近我們的訓練資料。

  • 在Perception神經元中,input x為0或1,而Sigmoid的input為0~1之間的時數(例如0.521)
  • 在Perception神經元中,output為 w⋅x+b,而Sigmoid的output為σ(w⋅x+b),σ稱為sigmoid function

在Perception模型中,output = z ≡ w⋅x+b,因為原本的Perception模型,output是0或1,我們稱這種function為step function(Z>0, output=1, Z<0, output=0),因為稍微調整權重與偏移,結果可能完全不同。

0

0

我們將output視為activation function,如果將activation function改成sigmoid function,則當Z趨近無限大,output = 1,當Z趨近負無限大,則output=0,所以output變成0~1之間的實數,這表示當微調權重跟偏移,output也會跟著微調,而不是只有0或1

0

由上面公式可以得到,輸出的變化,可以由w和b的變化求得,所以藉由慢慢調整w(權重)跟b(偏移),我們可以得到預期的ouput結果變化。

A simple network to classify handwritten digits (手寫數字辨識網路)

這一段作者以實際的例子,如何設定辨識手寫數字的網路,類神經網路包含了輸入,神經元,輸出,輸入稱為input layer,中間的神經元可以有很多層,稱為hidden layer,而輸出稱為output layer,以手寫辨識的例子,每個要辨識的字母是一張28*28像素的圖片,每個像素都做為input,所以有784個input,中間的神經元暫定選擇15,而output則設定為10個,分別代表0~9。

0

但是我們知道,因為每個輸出會是0或1(或是我們可以設定>0.5表示1,為辨識成功,<0.5表示0,為未辨識),我們只需要4個輸出就可以代表10個數字,即使這樣設定也是可以的,但是學習的效果並不好,因為圖片的數字跟輸出的哪個bit該挑為1的這個關聯性並不高。

Learning with gradient descent (透過梯度下降學習)

cost function

[To be continued]

發佈留言