智慧型控制 Intelligent Control

建立感知器 Creating Perceptron

(原講義為 Matlab 手冊的英文截圖,以下改寫為中文,程式碼改成可複製的文字。)

用 newp 建立感知器 newp

net = newp(PR, S)
引數意義
PRR × 2 矩陣,每一列是一個輸入元素的最小值與最大值(共 R 個輸入元素)
S神經元個數

感知器通常使用 hardlim 轉移函數,所以它是預設值。下面建立一個感知器:單一個只有一個元素的輸入向量、一個神經元,輸入範圍為 [0 2]:

net = newp([0 2], 1);

檢視建立的網路 Inspecting the Network

inputweights = net.inputweights{1,1}
inputweights =
        delays: 0
       initFcn: 'initzero'
         learn: 1
      learnFcn: 'learnp'
    learnParam: []
          size: [1 1]
      userdata: [1x1 struct]
     weightFcn: 'dotprod'
biases = net.biases{1}
biases =
       initFcn: 'initzero'
         learn: 1
      learnFcn: 'learnp'
    learnParam: []
          size: 1
      userdata: [1x1 struct]
▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 1 節 newp),可以直接在瀏覽器執行、修改參數。⬇ 下載 NN.ipynb

可見偏權值的預設初值也是 0。

編註:原文說 dotprod「產生輸入向量與權值矩陣的乘積,並加上偏權值,得到淨輸入」。其實 dotprod 只負責 \(\mathbf{Wp}\);加上偏權值的是層的淨輸入函數 netsum。課程附檔可以佐證:NnetAnd.mat 裡 newp 建立的網路,層的 netInputFcn 是 'netsum';由它產生的 Simulink 模型 NetAndmdl.mdl 中,dotprod 方塊之後另有一個名為 netsum 的加法方塊,才把 b 加進來(見 NN2Simulink)。

(補充)以上是原講義所用工具箱版本的寫法。新版 Matlab(Deep Learning Toolbox)改用 perceptron 函數建立感知器,newp 已不建議使用。

原圖對照(取自 Matlab 手冊)
原圖
原圖
原圖
原圖