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

教學目標 :

本節的目標是熟悉 K nearest neighbors algorithm (KNN) 並找出 K 的鄰近值 , 以最大限度地減少決策中的錯誤並改善機器人的導航/行動。

基本原理是機器人的目標是在不撞牆或不被障礙物阻擋的情況下行駛最遠距離。AlphAI 將在一個被紅色牆壁建成的賽道行駛。

介紹 :

機器學習及監督式學習

機器學習 (Machine Learning) 是人工智能的其中一個分支 , 目的是為電腦 / 計算機提供學習的機會。

電腦/計算機並不聰明, 它只會執行任務。它會以程式中的描述而做什麼以及如何做 , 這稱為編程。

機器學習更有利於處理複雜主題而傳統編程其有機會在途中達到它的局限性。構建一個驅動汽車程式是非常複雜的 , 這是因為要處理的可能案例(樣本)數目是無限的....機器學習會以不同方式去處理這個問題。它並不會去描述要做什麼 , 而是通過「觀察」實驗自學如何駕駛。

機器學習 : 賦予電腦/計算機無需編程就能學習的能力。

根據輸入學習演算法採用的實驗數據 , 它會自行推導出一個操作假設。它將會在最新的事件中採用最新的假設 , 並隨著時間,經驗完善它的假設。

機器學習分為三種 :

  • 監督式學習 | Supervised Learning
  • 非監督式學習 | Unsupervised learning
  • 強化學習 | Reinforcement Learning

監督式學習是最常見的。這涉及為學習演算法提供成對(X,Y)的訓練數據集(training set) , X 為預測變數(或輸入數據) , Y為觀察結果 (決策)。基於訓練集(training set) , 演算法將會找到一個數學函數 (mathematical function) , 它能夠將 X 轉成 Y (最佳情況下)。換句話說 , 該演算法將找出函數 F 讓 YF(X) 算式成立。

因此 , 在情況 X 下 , 演算法會得知決策 Y 是必要會執行的。

AlphAI 機器人的學習情況及數據集

在實際上必需詳細說明 X situations (情況)及預期的 Y decisions (決策)。

我們建議使用的案例是將 AlphAI 放至紅色場地(賽道(上移動。目標是讓它在不接觸/撞到牆壁的情況下自由移動。

為此機器人必須能夠做到以下的決策 :

為了做出決策 , 必需提供反饋以獲取數據( data or training set)。

這是由 sensor 提供的。這裡做出的選擇是透過使用相機。從相機的圖像區域中提取兩個稱為 super-pixel 的區域 (2者負責「看」不同部份)。由於白色軌道和紅色牆壁之間的對比 , 每個像素(pixel)的紅色會隨著機器人愈接近紅色牆壁而增加 , 相反在大路上行駛白色像素就會增加 ; 紅色下降。

活動一 . 透過圖中的 superpixel 圖像推判出 AlphAI 的行動

以上都是簡單化的案例 , 實際上要很少出現的。為了能夠在任何情況下都能做出決策 , 是有必要獲得大量的紅色像素數值。

AlphAI 相機的圖像大小是 48*64 pixelsin 。它的位置及幾何形狀是由下圖定義的 :

The K nearest neighbors algorithm, KNN

我們將仔細研究一個在機器學習演算法中眾所周知的一個演算法 :  K nearest neighbors algorithm, 簡稱 KNN。它的優點是非常簡單 , 因此能為學習監督式學習提供一個良好的基礎。

它的概念是使用大量的數據去「教導機器」去解決某類型的問題。當數據能以 2 維空間中的點表示時,那演算法就會特別直觀,因此螢幕上顯示。有見及此 , 我們將選擇只有2個的 sensor inputs (輸入感應器) , 即是相機的 2 " super-pixel" , 它能讓機器人定位牆壁的位置並讓它能在不撞到牆壁下在場地上循環移動。

在第一階段(一般稱為訓練階段) , 我們會為機器人提供與數據點(2 " super-pixels") 有所連繫的決策。在第二階段 , 機器人將能夠自行移動。機器人遇到的每一種情況中 , 它在大部份情況下都會選擇在學習階段記錄的數據點中與 K 個最為接近的鄰居的那個行動。

這種監督式學習算法可以根據數據與構成訓練數據的現有數據的接近程度來對新數據(raw input data)進行分類。新數據會考慮到 K 鄰居 (k neighbors) , 最接近 K , 從而將新數據分為那個分類。對於離散數據 , 例同在平面或空間中的點 , 將會使用 Euclidean distance (歐氏距離)來選擇最近的鄰居 , 但也可以因應不同情況而選擇不同方法 , 例如數據放在棋盤或網格上就可以使用 Manhattan distance (曼哈頓距離)。這個演算法有趣的地方在於K 的選擇 : 假如數據太小演算法會變得過於敏感導致數據錯誤或遺失數據 , 假如太多則有機會考慮到不應該考慮的數據。

訓練機器人 :

準備活動環境

→ 開啟 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 出現時選擇 它 , 然後將它添加到您可以選擇的列表中。

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

--> 在「Settings」 > 「Parameters」導入「Supervised Learning -  KNN camera」。

注意 : 對於這種情況,為了獲得最佳對比度,你可以在地板上放置一張白色膠墊,請確保場地的光線照明均勻。

測試階段 :

  • 接駁 AlphAI
  • 取消選取 「self-drive」mode
  • 假如 AlphAI 沒被擋住 , 按向前直行
  • 假如 AlphAI 被擋住 , 按轉左或轉右

每個新的行動/操作都會在右面的圖表上畫上一個新點。這些點的 x/y 代表左/右面鏡頭的 superpixel , 而每個點的顏色則代表該點選擇什麼動作 (紫色 > 向右轉 , 白色 > 向前直行 , 綠色 > 向左轉 )。 這稱為訓練數據 。這個階段對 AI 應夠正常運作是非常重要的。假如訓練數據參差不齊的話 ,  AlphAI 將無法做出令人滿意的結果。

當機器人駛近牆壁時 pixels (像素) 會變暗(數字變小) 。正常來說當左面的 pixel 是暗的 , 機器人就需向右轉 ; 相反當右面的 pixel 是暗的 , 你就需右左轉。

當你在圖表中有3個明確區域時就可以停止訓練了。(你可以在 Visualization 中勾選 show background 來顯示區域)

重新開啟 「self-deive」mode 並開始測試階段。在測試進行時 , 請不要猶豫用手來移動機器人,並在圖表中點數較少的區域添加點(數據)。

測試階段

如果機器人訓練有素,它將能夠自行避開邊緣及障礙。 相反,如果訓練不當或場地的光度不均勻,機器人會做出一些不適當的動作。

請注意 :

為了讓機器人做出最好的行動 , 我們需要測試不同數值的 K 。到「AI」再前往「number of neighbors」中改變 K 的數值。

一個好的 k 值可以允許機器人在未探索的區域中表現得更好。

當機器人訓練有素並且測試運行順利,你就可以繼續進行活動。

  1. 比較 k=1 , k=3 , k=10 及 k=30 時機器人的行為表現。然後就你看到的結果 , 嘗試決定 K 的數值以最小化錯誤的影響並給予機器人最佳的行為表現 i.e. 在不撞牆下行駛最大的距離。
  2. 現在你應能理解演算法 , 嘗試以最小的數據訓練機器人在不撞到牆壁下轉向。

首先通過繪製行駛地圖來製作出理論化的版木。要繪製那些區域 ? 要在那些位置擺放點去達成它 ? 將這些點輸入至軟件後再對它進行測試。你的理論模型有否成功 ? 或者你要對那個部份進行修改 ? 使用這種方法的機器人有什麼局限性 ?

提示 : 你可以用手移動機器人來選擇你要教它的點。

注意 : 你可以只使用3個點就能訓練到機器人在不撞牆的情況下在賽道上移動。

延伸 :

假如你有多餘的時間進行實驗 , 改變演算法去觀察 KNN 與它的分別。其他的演算法有更快的學習能力嗎 ? 你認為還有其他演算法可以學習更複雜的任務嗎 ?

總結 :

KNN 演算法使用訓練數據的Eculiden distance 決策化後變成全新數據。它最主要的優點是它非常簡單 , 並且可以以2-D形式在螢幕顯示。另一方面 , 當數據愈大愈多時 ,  某些類型的數據(例如人臉識別) Eculiden distance 就不是最適合作使用。

學到的概念 :

監督式學習 : 向機器人提供穩定的數據集及演算法 , 它能夠通過更接近以前所做的事情來將其決策推廣到以前不知道的情況。

Nearest neighbor algorithm | 最近鄰演算法: 通過實現計算距離或在列表中搜索最小值等的經典演算法,我們將發現可以自行編寫機器學習程序

影片示範 :