由於 圖像分類問題 使我們很難靠 演算法 + 特徵 去辨識每個種類,因此只有靠機器自行學習
常見於機器學習中的 KNN,由於KNN 本身的問題,所以對於計算機視覺的效果不是那麼好 因此目前主流是 CNN,而 線性分類 則是神經網路的基礎
最後也說明了如何尋找 超參數
如果沒有特別註明,所有圖片皆是從 該課程的 投影片出來的
與人不同,計算機看到的都是數字,因此圖像分類問題有幾個難點
這些問題造成我們很難使用明確的程式碼來告訴機器如何辨識圖片 即便某些物體能夠找出固定的特徵,但是如果要新增一個類別,就要再次為那個類別量身打造特徵及演算法 這是件耗時耗力的工作
因此,近年來,由於數據量的增多以及計算資源的提升 使得我們可以直接使用 data 去訓練 model (數據驅動),而後使用 model 來預測圖片
機器學習其中一個常見的學習方法便是 KNN 其主要算法是
上圖我們發現 當 k = 1 時非常不平滑,這也是其缺點 k = N 可以緩解這問題 且 可以加上 權重等等
而白色的區域則是因為有多個相等的多數表決結果(例如 A B C 各一票)
距離選擇是根據對隱含 function 的假設 常見的有 L1 、 L2 兩種
L1 曼哈頓距離 - 旋轉使 L1 距離改變 如果向量中的一些值有特殊的意義,建議用 L1
L2 歐式距離 - 旋轉不使 L2 距離改變 如果不知其中元素的意義,建議用 L2
如果知道向量元素的實際意義, L1 “可能” 比 L2 好
KNN 在圖像分類上很少用,因為
例如右邊三張圖片都有相同的 L2 loss KNN 另一個問題是維度災難 因為只有資料在空間中密集,KNN才具意義,不然可能空間相鄰很遠,但因資料稀少,所以是最近的,因此說是一樣的類別。 但如果要保持這種密集程度,資料就要指數倍成長,這非常困難
此外KNN 的訓練時間 O(1) 但測試時間是 O(N),這也是他的缺點,因為這個特性,使得他比較無法跑在嵌入式系統等小電腦中
http://vision.stanford.edu/teaching/cs231n-demos/knn/
超參數 (Hyperparameters) 是指不能從資料中學到的參數 例如 KNN 中的 k 或 距離 function
如何選擇參數
數據集的收集對於深度學習很重要,請確定 train / Validation / test 三個資料集都是使用相同方式在相同時間長度蒐集的資料,通常會先一次蒐集完所有資料,再隨機劃分數據集
如果選定了模型,可以重新在整個訓練集上訓練,會增加一些正確率
線性分類對於深度學習而言,就如同積木城堡的積木,不僅是基礎,也能夠自由拆裝
底下是最簡單的線性函式 x 是輸入 W 以及 b 是參數 我們的目標是要調整 W 跟 b 使這個函式能夠輸出正確的 label $f = Wx + b$
例如 對於 CIFAR10 這個資料集而言,輸入是 32 * 32 的圖片,輸出是類別,總共有 10 個類別 因此我們的輸入大小會是 32 * 32 * 3(3 是R G B 三色),輸出是 10 個類別的分數,我們將取分數最大的類別作為這張圖片的預測結果
因為可以逆向計算,所以這裡透過逆向計算做可視化 可以得到
我們發現有些類別 (例如馬) 出現了不存在的圖片 (雙頭馬) 這是因為線性分類的限制,每個類別只能學到一個模板,所以可能是取平均 但是這在神經網路就沒這限制 這部分我不是很確定@@ by @sappy
從空間上來看,線性分類就是對維度空間的切割
因此無法很好的處理下面三張圖