Saturday, October 11, 2008

[ANN] FeedForward MultiLayer Perceptron

  • FeedForward Multilayer Perceptron
  • FeedForward Multilayer Perceptron(FFMLP),是典型的unsupervised neural network,了解[ANN] BackPropagation之後,FFMLP架構就更容易懂,因為在非監督的網路基本型裡的數學模組非常單純,但是要使用FFMLP來找出合適的fitness function就相當的困難。

    這裡以最簡易的tic tac toe遊戲來展示簡易的FFMLP應用範例,在這個範例裡是使用Evolutionary Neural Network的方式來訓練,且沒有經過特別的參數調整和適應函式的使用,自然學習能力一定比監督型的較差。

    Download : Evolution_TicTacToe.zip

    網路架構如下:

    很精簡的三層架構,輸入層、隱藏層、輸出層。

    輸入層:9個nodes(因為典型tic tac toe是3x3的板子,共九格)。

    隱藏層:9個nodes(簡單的對應到輸入層)。

    輸出層:1個node(輸出值範圍為-1~+1,我們任意定義+1為優,-1為劣)。

    網路計算公式如下(跟BackPropagation類似):

    Transfer Function(Input Activity):


    a值的調整必須視網路的複雜度來決定。

    Mutation(weight跟bias的調整):

    weight跟bias的改變量,則是簡單由Gaussian Random來給予可想而知,這樣的網路要達到好的收斂值勢必有一定的困難。

    這裡的mutation並不是針對原先的neural network做調整,而是由原先的neural network突變出下一代,例如原先有10個neural network,經過mutation之後就變成20個neural network,其中新產生出來的10個neural network就是原先的子代(offspring)。

    模擬參數如下:

    • Population : 100
    • Number of opponents for each neural network: 10
    • Generation: 200
    • Value Assign: Win: +1 point, Draw: 0 point, Lose: -1 point.

    演化流程圖:

    其中Tournament Selection的對手選擇方式使用了這一篇的程式碼[EP/GP] random opponent

    範例畫面:

    下面是經過200代的演化之後,挑出第一名的網路與人類對戰的情況,正常情況下,只要你有一點點的智商,基本上你是不可能會輸給電腦,最佳預期的狀況應該是平手,下面的Cross Player是我,Circle Player是電腦,我先取得優先權下了1,1這個中心位置(最佳位置),在第七步的時候我放一個水,最後電腦與我和局收場。

    在大部分的情況下所找出來的fitness function都有缺陷,有可能只會攻擊不會防守,或者反之,要解決這個問題就要從如何找出合適的fitness function方向下手,有興趣的人可以把程式碼下回去玩玩看。

    如果你想要讓程式圖形化,可以參考這一篇的[Gtk] Gtk Go/Reversi Board Template的原始碼,改成Tic Tac Toe的板子樣式修改即可。