S5. 入侵偵測 | Intruder Detection
實驗 - 入侵檢測 Lab -Intruder Detection
你需要的知識 :
- 監督式學習的基礎認識
- ultrasound(超音波)及sonar(聲納)的運作原理
- 關於sequences(序列)和 function derivatives(函數導數)的概念
- 演算法的基礎
你需要的硬件 :
- 已經在電腦安裝 AlphAI software
- 具備藍牙或Wi-Fi功能的電腦以和 AlphAI 進行連線
- 擁有 AlphAI 機器人及充電電池
介紹
你可能已經注意到在一些學習中 , 特別是那些會使用相機的學習都會添加 layers of Intermediate neurons (中間神經元層)。我們將向你展示一個簡單例子 , 它會演示 Intermediate layers of neurons (中間層神經元) 可以帶來的差異。我們將會使用機器人的 ultrasound sensor (超音波感應器) 作為入侵者探測器。
手動編輯連接 | MANUALLY EDITING CONNECTIONS
目標 :
- 透過自己創建連接(Connection)來理解簡單2層的神經網絡( 2-layer neural network) [輸入及輸出 | input and output]
編輯網絡連接 | Editing network connections
- 開啟 AlphAI 的電源 (電源掣在底部)。需時約20-30秒 , 它會輕輕移動幾步, 當它準備好連接時會亮起白光。同時記下 AlphAI 底板的編號 ( 應該3位數 e.g 197 )
- 選擇以WiFi 或 藍牙接駁 ( 當超過4個 AlphAI 或房間已有多個 WiFi 網絡時 , 建議使用藍牙接駁)
Wi-Fi : | 藍牙 : |
---|---|
- 將電腦連接至 AlphAI 的 Wi-Fi :找出以 AlPHAI 開頭並以機械人編號結尾的 Wi-Fi 網絡 : 密碼與Wi-Fi名稱相同 (包括大小寫)- 在「Tools」工具欄中選擇「wifi」 | - 在 「Tools」工具欄中選擇「Bluetooth」,選擇相應的 AlphAI (對應機身編號)- 如果你的 AlphAI 不在列表中 , 點擊「pari a new robot via Bluetooth」並在該 AlphAI 出現時選擇 它 , 然後將它添加到您可以選擇的列表中。 |
4. 在機器人的前方放置一幅約 30cm 的牆壁或類似的平面物件 (例如盒子)。
5. 點擊「AlphAI」圖示以開啟軟件
6. 在 "Parameters" 選擇導入 "demo parameters" 然後選擇 "supervised learning - intruder detection" 。 configuration.
7. 按「Connect」連接 AlphAI , 成功的話會看到電池電量。
在底下的欄中選擇「Manual Edit」 , 以自行編輯網絡連線。輸入會轉化成網絡並用上面的圖示表示 , 對應於 Ultrasonic sensor 測量的距離 , 輸出則是機器人的2個可能動作。由此可見網絡是由層所組成的 , 輸入層由一個神經元組成 , 輸出層則由 2個神經元組成。
8. 點擊黑線並連至「STOP」圖示 , 建立連繫。(成功的話會變紅色)
9. 將滑鼠擺放至線上的數值 , 使用滑鼠上的滾輪或輸入數字來改變數值。輸入的數值跟連接的數值對輸出的操作有什麼影響 ? [請在下面填寫你的答案]
小總結 | Take home message:
神經網絡是由一組按層組織的神經元組成 。每一層可以有一個或更多的神經元。
在 AlphAI 的展示中 , 神經元會被視為網絡中的一個節點(node)並擁有數值。
神經元互相連接時的數值稱為 weights (權重)。
在更複雜的網絡上神經元可以透過多個傳入連接 , 它的的數值是由輸入數值加權後(weights)的總和 , 如圖所示。
10. 連接至「beep」圖示以創建另一個連接 , 然後開啟「self-drive」mode。
11. 改變連接的數值 , 讓「stop」輸出的數值大於「beep」 , 機器人會怎樣 ?
12. 在「beep」output 重覆一樣的操作 , 機器人現在會怎樣選擇 ? 試總結機器人是怎樣選擇要做的動作。
小總結 | Take home message:
機器人會選擇最活躍的神經元。
加入入侵者 | Adding the intruder
我們將加入一個「入侵者」供機器人進行偵測。可使用平面物體 , 例如 : 盒子或智能電話。如果你沒有其他物件 , 你也可以用手來進行測試 , 只是效果可能會不好。
13. 現在 , 嘗試更改連接的 weights , 讓機器人偵測到入侵者在它與牆壁之間時響起「beep」聲 (如下圖的設定) , 你將發現這是不可能的 , 我們會探索原因。即使我們把入侵者移走 , 機器人都會繼續響起「beep」,為何會這樣 ?
該神經網絡的唯一輸入是計算距離的超音波(ultrasound).透過這個距離 . 網絡將計算並預測2種可能動作(beep , stops | 嗶嗶聲或停止) 中每一個計算預測的可能性有多大 , 並且將保留具最大可能性的預測動作。
我們可以做的是繪製這2個動作的預測曲線 (下面會提及) , 作為超音波接收距離的函數。對於已知的距離 , 我們可以通過查看那條曲線疊在另一條曲線上來知道選擇了什麼動作。如果有入侵者的話 , 超音波返回的距離會更短 , 所以可從中推斷一開始時上面的是"remain motionless | 保持不動"所對應的曲線 (stop) , 然後另一條是對應 "beeps"的曲線。因此我們可以推斷在"stop"之間是有機會混雜"beeps"的動作 , i.e 機器人會繼續響起「beep」
14. 將輸入與輸出「Stop」圖示的連接設成 1 (可使用鍵盤改變數值) , 並將另一個連接設成2。
15. 根據這些數值 , 嘗試繪製出它的預期曲線圖表 ,曲線代表每個輸出神經元數值作為輸入 xdistance 的 function(函數)的意思。你將以紅色繪製 「stop」動作並以y1表示 , 藍色繪製「beep」動作並以 y2顯示。
你可以在「Visualization」的「action values」選擇「Network and state space」來檢查你所繪畫的預測曲線是否正確。
神經偏差 | NEURAL BIAS
學習目標 :
- 了解什麼是神經偏差及其興趣
- 手動修改網絡以檢測障礙物
Neural bias :
- 我們希望確保兩條預測線在原點以外的其他地方相交。 我們可以在每級別的每條線上引入什麼參數來做到這一點? (想想定義一條線的參數:我們現在缺少哪一個?)
A : neural bias
2. 假如 「self-drive」mode仍處於開啟狀態的話 ,請先停用它。在「AI」Tab中勾選「neurons have bias」。
註 : 你最初可能會看不到這個選項 ; 假如發生這個情況 , 請到「Parameters」選擇「Display Mode」再改成「Advanced 或 Expert」 , 你的神經網絡將會有全新的顯示 , 如下圖 :
3. 在你來看 , 神經元所出現的新數值 ( +1.00 ) "stop" 和 (-1.00) " beep" 對應於什麼?
4. 在 AlphAI software 的界面中 , 將滑鼠鼠標定位到神經元的數值上調整偏差值(values of baises), 以重現你所需的預測曲線。你可以到「Visualization」tab中選擇「Network and Stat Space」(如下圖), 重新開啟「self-drive」以檢查你我機器人是否在有入侵者時才會發出"beep"聲。
neural bias(神經偏差) 能改寫兩條預測線之間的比例關係從而讓用家做出更靈活的預測模型。換句話說 , 這種偏差(bias)會提前給予神經元一些建議(advance) 以使它不會總是偏向選擇相同的動作。
5. 現在將入侵者擺在機器人和牆壁之間 , 但這次以45度擺放入侵者 , 如下圖 :
6. 觀察 ultrasonic sensor 顯示的距離數值。你會怎樣解釋這些數值 ? 參考之前做過的預測曲線 , 為何這次機器人沒有發出"beep"聲?
7. 到目前為止 , 我們有2個決策區域(decision zones)。在新配置下決策區域會變成多少個 ?
設定隱藏層 | SETTING UP THE HIDDEN LAYER
學習目標 :
- 修改網絡以檢測不同方向的障礙物。
- 了解神經網絡的中間層的興趣
中間層 | Intermediate layers :
為了能夠獲取這個數量的決策區域 , 我們將引入中間神經元層來複雜化整個模型。
中間層具有非線性激活的函數(nonlinear activation functions) , 這給予預測曲線能變成其他形狀(除了直線) , 因此可以產生超過2個不同的區域。
Take home message:
激活函數的靈感來自於信息傳遞過程中激活生物神經元(biological neurons)。 事實上,在大腦中,當訐號達到或超過某個閾值時,生物神經元會反過來會產生神經衝動(nerve impulse),通過穿過軸突和末端分支(axon and terminal ramifications)來激活其他神經元。 下圖說明了生物神經元(左)和人工神經元(右)之間的類比:
神經元的最終輸出值是激活函數之前看到的圖像的加權總和。
1. 在「AI」Tab , parameter intermediate neuron layers 上輸入「2」, 並保持選取「neurons have bias」及維持「Manual Editing」mode。你會得到一個擁有額外2層神經元層且連接初始化為0的神經網絡 , 如下圖 :
中間層的神經元數量是任意的 , 這裡我們選擇 2 便足夠滿足我們的情況 , 同時不會讓模型變得過於複雜以使用家能更容易理解。
2. 中間神經元激活函數的選擇可能取決於要使網絡達到的目標。在 「Parameters」中的「display mode」改為「expert」。你現在能夠在「AI」Tab中按下「activation function」以查看不同的激活功能 , eg : relu , heaviside
我們將選擇一個簡單的函數 , 以便我們可以更簡單地以手動方式調整神經網絡 , 在「activation function」中選擇「heaviside」。
3. 將連接每個中間神組元(在輸出神經元前的那個)設成1 , 將交叉連接設為 0, 然後將輸出神經元的 bias 設為0 (如下圖) 。這可確保網絡的輸出暫停會等同中間神經元的數值 , 以便能夠讓它在 dashboard 上圖像化讓用家能看到。你可以在 「Visualization」tab 中取消「Fill graph areas」並轉為「Stat space」以更好地查看曲線圖。
將入境者並行擺放然後利用 bias 或不使用 bias 或入侵者來測試你的網絡。如果無法評估的話 , 你可按「reset network」重置整個網絡。
簡單來說 :
通過引入非線性(non-linearities) , 神經網絡的中間層或「隱藏層」(Intermediate or "hidden" layers)可使模型變得更加靈活和準確。這些非線性是由於激活函數處理在層出口的數值所產生的。我們使用了 Heaviside 來簡化練習 , 但在現實中 sigmoid 和 Leaky ReLU 才是比較常用的。
通過引入非線性,神經元的中間或“隱藏”層使我們的模型更加靈活和準確。 這些非線性是由於激活函數在層的出口處調節神經元的值。 我們使用 Heaviside 來簡化練習,但通常使用 sigmoid 和 Leaky ReLU 等函數
機器學習 | MACHINE LEARNING
學習目標 :
- 了解神經網絡學習的原理
- 自動訓練/教導網絡有效地偵測障礙物
學習自動化 | Learning Automation
正如我們在上一倍份中看到的 , 你在透過自行改變連接權重(connection weights)的數值和神經偏差(neural biases)以獲得結果時 , 可能會讓模型變得更複雜 , 這在網絡的實際情況下更是如此 , 比我們現正研究的簡單情況來得更為複雜 。這就是為什麼我們會使用演算法(例如 gradient descent | 梯度下降) 來自動化調整這些參數 , 這將會是在這一部份開發。
1. 停用「Manual Editing」及「self-drive」 以讓機器人手動學習並同保開啟「learning」。在學習過程中 , 可視化連接權重( connection weights) , biases (偏差) 和相應預測曲線的演變。在「AI」tab中的「activation function」選擇「LeakyReLU」。
2. 不要在機器人和牆壁之間擺放任何東西。我們希望告訴機器人這種情況是正常的 : 按下「Stop」action icon 讓機器人不發出嗶嗶聲 (beeps) 。
3. 將入侵者擺放至機器人跟牆壁之間 , 並跟牆壁平行排列 , 然後按「beep」action icon
4. 將入侵者以另一個角度擺放(例如 : 45度面向機器人) , 然後點擊「beep」action icon
5. 完成這個訓練後 , 重新啟動「self-drive」。檢查機器人是否對上述三種情況都做出相對的反應。如果不是 , 你可通過點擊「reset AI」重新訓練。
6. 複製軟件上給出的預測曲線至下方圖表 , 把決策區域以顏色填滿。
7. 你觀察到幾多個區域 ? 這乎合你的預期嗎 ? 試解釋你的說法。
Take home message:
為了更新連接的權重以提高最佳動作的機率 , 我們依靠一個稱為 LOSS FUNCTION(損失函數)的標準。它的目的是量化網絡輸出的估計值與實施輸出之間的誤差。作為廣泛使用的 LOSS FUNCTION , 我們有 mean quadratic (平均二次誤差) 及 cross-entropy(交叉熵)
這引入到完善化的問題。目標是最小化這個 loss fucntion。廣泛使用的演算法是 gradient descent(梯度下降)。後者使讓我們能夠找出函數的最小值(找出數值從而最小化我們的 loss function).你將有機會在 " Programming of neurons" 這個課題中嘗試為該演算法進行編程。
總結 :
在監督式學習中 , 我們總是需要訓練數據來進行神經網絡的學習 , 然後進入測試階段來評估模型的品質。
神經網絡的原理是是基於人腦內學習和交流神經元。
神經偏差(Neural bias)助於控制神經元的激活值,從而可以考慮更多的情況。
添加中間神經元可以更徹底地處理信息,特別是利用非線性函數進行處理。