Workshop 5 - KNN Algorithm

K Nearest Neighbors Algorithm | K-近鄰演算法

我們將學習 KNN 演算法的原理 , KNN 同樣是 supervised learning (監督式學習) 的一種。

訓練員需根據 AlphAI 鏡頭內圖像的 Pixel Value 來訓練/指示機械人該如何行動。

經過一連串的訓練後 , AlphAI 在行駛時將會在上圖找出 K 的最鄰近值從而作出行動。

材料 :

  • 已經在電腦安裝 AlphAI software (每一隻 AlphAI 需一台電腦)
  • 具備藍牙或Wi-Fi功能的電腦以和 AlphAI 進行溝通
  • AlphAI 機器人 (最少一隻)
  • 擁有足夠的材料建構場地

需時 :

  • 45 至 60 分鐘

開機及連接 :

→ 安裝 AlphAI software , 點擊「AlphAI」圖示以開啟軟件

→ 開啟 AlphAI 的電源 (電源掣在底部)。需時約20-30秒 , 它會輕輕移動幾步, 當它準備好連接時會亮起白光。

→ 記下 AlphAI 底板的編號 ( 應為3或4位數 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 出現時選擇 它 , 然後將它添加到您可以選擇的列表中。

→ 點擊「connection」 button 來連接你的 AlphAI 。連接後你將在右下角能看到它的電量。

連接常見問題可查閱 : AlphAI 連接常見問題

導入「Paramaters - KNN Camera」

→ 在「Parameters」中選出「load demo parameters...」然後導入「Supervised learning - KNN Camera」

Parameters 是 AlphAI 預設的 Demo Configuration setting , 方便用家直接導入使用。

行駛的原理 :

  • 在鏡頭你會看到2組數字 (pixel value) , 左方數字為鏡頭的左面 ; 右方為右面
  • 數值愈高代表愈光(在空曠地) ; 數值愈低代表愈暗(接近牆)
  • 同樣處於光源 = 向前直行 ; 一面處於光一面處於暗 --> 向光那邊轉
  1. 2組數字相約代表前方沒障礙物繼續向前行駛
  2. 右面的數字較大且左面的數字非常小 --> 代表 AlphAI 的左面有障礙物 --> 向右轉
  3. 右面的非常小且左面的數字較大 --> 代表 AlphAI 的右面有障礙物 --> 向左轉

訓練 (KNN supervised learning) :

通過單擊右側的箭頭或使用鍵盤上的方向鍵來控制機器人移動。 沒有快速前進的必要:

目標是教機器人在不撞到牆的情況下行駛。

提示 :

在訓練過程 , 無需行以高速行駛 , 你可在「max speed」中減慢速度。

為方便學習,您可以:

用手移動機器人,教它在各種情況下做出正確動作。例如放近牆壁 , 放至鏡頭2邊數值差距大的地方。

為了更有效觀察你可以 :

你可以在「Visualization」的「Camera」勾選「network input resolution」及「show background」

勾選「network resolution」能讓用家可更清楚地看到鏡頭上的 pixel value

「show background」則能清楚顯示 AlphAI 機械人在那個區域(K最近那一點)從而判斷它做出什麼動作。

K(現時的位置)將牽著最近的一點 (Nearest Neighbor) , 上圖為黃色 = 進行黃色動作(直行)

訓練後圖表應有類似的形狀。

測試和加強學習 :

在賽場完成幾圈行駛後,如果您認為您的AlphAI已經訓練有素,你可以重新點擊 「self-drive」。 如果你的機器人訓練有素,它將開始自行跟隨訓練的內容行駛!

但學習過程還沒有結束的; 即使AlphAI是自動駕駛,你也可以在它移動時通過按箭頭繼續控制它(訓練)。 例如,如果在死路走不出來,可以指令讓它轉向。

有可能遇到的問題 :

  • 場地的光暗問題 , 賽道如經過移動後 AlphAI 行駛有可能會出現誤差

延伸  - 將 KNN 的內容轉成 Neural network 顯示

首先儲存你在 KNN Algorithm 的訓練成果

打開最頂工具列的「AI」然後按「Save experience buffer」

在改變 Algorithm 後訓練會被重置 , 為了更容易作 KNN 與 Neural network 的比較 ,

我們希望兩者都 training data 都是一樣的 , 因此需儲存訓練成果。

打開「AI」然後將「algorithm」改成 neural network

打開「Visualization」將「main display」改成「state space and netowrk」

開啟「input/output values」及「keep space between neurons」

完成設定後你應看到類似的畫面 , 有保留 knn graph 並增加了 neural network

利用「load experience buffer」導入你剛才儲存的訓練成果。

導入後 experience buffer 跟 knn graph 會回覆原狀

將 network value 也開啟 , 以便分析 KNN 跟 Neural Network 的關係

啟動「self-drive」觀察 AlphAI 的行為及dashboard上的 Neural network value

在鏡頭獲取的pixel value 為 209 , 210 (空曠) 時 , 假如在 KNN algorithm 下將會是找出黃點最近的鄰居 i.e 另一個黃點

而在 Neural Network 上黃色 Output 的數值是最高的 , 因此 AlphAI 會執行 Forward 。

output 的數值是由 [ input (pixel value) * weight ]+ bias 來計算的 , 如上圖為例 :

0.82 (左面pixel value) * 4.36 ( weight)  =  3.5752

0.85 (右面 pixel value) * 3.29 (weight)  =  2.7965

Input1 + Input2 + bias = Output

3.5752 + 2.7965 + (-2.11) = 4.26 (因為dashboard只能顯示小數後的2位數 , 所以人手計算會有誤差)

經計算後可發現 KNN algorithm 的訓練數據是可以直接轉換成 neural network 使用的

加入 hidden layers :

打開「AI」Tab , 在「hidden neuron layers」輸入 50 50 , 再次導入剛才的 experience buffer

在 network 中間會加入2層各50個neuron的hidden layer ,

作用是加強後台的運算功能 , 可讓 training 更有效 ,