智慧型控制 Intelligent Control

NNtool:AND 閘感知器

老師錄製的操作示範:用 Neural Network Toolbox 的圖形介面 NNtool 建立並訓練一個感知器,學會 AND 閘。結果存在附檔 NnetAnd.mat。

▶ 在 Colab 開啟原課程的 MATLAB 程式已改寫成 Python 筆記本(第 5 節 AND 閘,直接讀 NnetAnd.mat),可以直接在瀏覽器執行、修改參數。⬇ 下載 NN.ipynb

附檔內容 What Is in NnetAnd.mat

(以下讀取附檔整理,為補充)NnetAnd.mat 有三個變數:訓練資料 p、t 與訓練好的網路 NetAnd。

$$\mathbf p = \begin{bmatrix} 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 \end{bmatrix},\qquad \mathbf t = \begin{bmatrix} 0 & 0 & 0 & 1 \end{bmatrix}$$
屬性值說明
輸入範圍[0 1; 0 1]兩個輸入,各為 0~1
層1 個神經元,hardlim,淨輸入函數 netsum單一感知器
權值、偏權值初始化initzero初值 0
學習函數learnp感知器學習規則
訓練函數 trainFcntrainc(epochs 100、goal 0)逐筆循環訓練
誤差函數 performFcnmae平均絕對誤差
訓練後的權值\(\mathbf W = [2\ \ 1]\)、\(b = -3\)決策邊界 \(2p_1 + p_2 - 3 = 0\)
00.5100.51(0.95, 0.23)p1​p2​NnetAnd.mat 存的網路:W = [2 1]、b = −3黃線 2p₁ + p₂ − 3 = 0只有 (1, 1) 在線上(n = 0 → a = 1)NetAndmdl.mdl 以常數輸入(0.95, 0.23) 測試:n = −0.87 → a = 0實心=目標 1,空心=目標 0

這組權值正是感知器學習規則互動示範中,AND 從 0 開始、依序輸入學到的結果(第 6 回合收斂)。檢查四個輸入:(0,0)、(0,1)、(1,0) 的淨輸入分別為 −3、−2、−1,輸出 0;(1,1) 的淨輸入為 0,因為 hardlim(0) = 1,輸出 1,四個都對。分界線剛好通過 (1,1),對雜訊沒有任何餘裕;若要更穩健,可以再把 b 往負方向調一點(例如 b = −2.5),但感知器規則一旦全部分對就停止,不會自己去找這種「中間」的邊界。

訓練好的網路可以轉成 Simulink 模型,見下一頁 NN2Simulink。