[ANN] Perceptron

  • Artificial Neural Network (ANN)
  • 在人工智慧的領域裡Artificial Neural Network(ANN)扮演著一個很重要的角色,他是一個基於大腦神經元的架構而構成的人工類神經網路,廣泛應用在電機、資訊、醫學、環境、商業等等各領域上。

    而依造類神經網路學習的類別可分為:

    1. Supervised learning - 監督式學習
    2. Unsupervised learning - 非監督式學習
    3. Reinforcement learning - 增強式學習

    依造所要解決的問題環境不同而選擇對應的學習網路,基本的ANN資訊你可以參考wikipedia。

    http://en.wikipedia.org/wiki/Neural_network#Real_life_applications

  • Perceptron
  • 於1957年Frank Rosenblatt.在康乃爾航空實驗室時期所發表的類神經網路學習模式,是屬於監督行網路,圖形定義如下:

    將這些節點寫成數學式如下:


    x1,x2是我們的input, y1是我們的output(這只是最簡易的範例,你的input,output數量會隨著你要解決的問題而定),我們還有三個參數要控制,分別為 w1,w3,theta,也就是所謂的加權職(weight)以及Bias。要計算修改weight跟bias的值我們必須基於兩個參數,eta(學習速率)和delta(差距向量),公式如下:

    其中T代表著目標值。

    計算deltaWight並更新新的weight值。

    計算並更新新的bias值。

    根據上述的公式我們可以用程式語言去實做一個Perceptron學習模式來解決AND,OR的邏輯問題。

    Download:perceptron.c

    為了執行效率我選擇c語言來撰寫,程式碼並沒有經過最佳化,如此比較方便做公式的對照。以OR為例,input,output如下:

    • x1=0 x2=0 y=0
    • x1=0 x2=1 y=1
    • x1=1 x2=0 y=1
    • x1=1 x2=1 y=1

    我們以0.1的學習速率去跑這個程式,結果如下(僅供參考,不同的Weight初始值會有不同的解)

    經過三個epoch之後我們的perceptron已經完全學到OR的pattern,你可以將目標輸出改成AND的輸出,或者更改學習速率以觀察輸出結果。

    將perceptron的線性方程式畫在座標上類似如下。

    由圖形我們可以得知weight影響著此方程式的斜率,而bias決定著這條線離原點的距離,同時你也可以了解到bias一定介於0~0.707 (也就是根號2再除以2),如果你要再加上如下一組pattern

    • x1=-1 x2=1 y=1

    由圖形我們可以輕易的得知這是可行的,同理你也可以將上面的資料改成如下:

    • x1=1 x2=-1 y=1

    所以你絕對不可能使用這個model找到可以同時滿足下面情況的解:

    • x1=-1 x2=1 y=1
    • x1=1 x2=-1 y=1

    這時你也許也發現到這個model是不能解XOR的問題,不具隱藏層的Perceptron是不能解XOR的問題,下一次我會介紹Back-Propagation Neural Network並用它來解XOR問題。

No comments:

Post a Comment

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas