CS231n李飛飛CV課程輔導筆記(2):KNN

大家好,我是爲人造的智能操碎了心的智能禪師。

計算機視覺,在人工智能領域的重要性,我想應該不用過多介紹了。

全球最大的專注於大數據分析、數據倉庫和整合營銷管理解決方案的供應商之一的Teradata, VP Atif Kureishy 預言人工智能的未來,是機器人和計算機視覺的雙巨頭時代。因爲可供CV大展拳腳的領域,太多了。

計算機視覺領域,李飛飛的地位是毋庸置疑的。她在斯坦福的計算機視覺課程 CS231n,也成爲學習計算機視覺的必看教材。

網易雲課堂已經加上了中文字幕。大家可以點擊文末閱讀原文鏈接觀看視頻。

當然光看視頻好像也還是缺點兒什麼。於是禪師找到了一位“過來人”,分享他的課堂筆記,權當做課外輔導吧。大家可以看完視頻後,回來看這些筆記。

全文大約2500字。讀完可能需要2周時間

一個圖像分類器如果用 Python 寫出來的樣子會是像這樣的:

因此目標很簡單,就是利用一系列的算法,把上面所謂的 magic processes 解開,最後實現目標識別的效果。傳統的方式是我們人爲的用很多條件約束去規範和描述一個物體屬性的特徵,然而這個方法既沒辦法普及,更沒辦法提升效率,因此我們使用“數據”去規範數據本身:

  1. 蒐集圖像裏面的像素格和標籤作爲數據集裏面的數據
  2. 用機器學習的技巧去訓練分類器
  3. 使用新的圖像資料去評估這個分類器的準確率

寫出來的程式就像這個樣子:

利用不同標尺之間的差值來比對圖像

但是當我們在使用 K-Nearest 方法去辨識物體的時候,一般不挑臨近只差“一個像素單位”的距離,距離比一還要大的話結果出來會更爲平滑。不過這個方法到了現在已經沒有被用在實際應用上了,其中的壞處很多,包含了:

  1. 計算時間特長
  2. 計算標尺與鄰近特定距離標尺之間的關係並不會給我們帶來什麼太有用的訊息
  3. 這個方法就像以每個訓練數據點爲中心上放上一個對比圖象,並用這個放上去的點的面積去分割原始圖像,因此如果我們希望這個方法準確度高,放的點的“密度”就要足夠大,不然就會失去這個方法的準確性

拿着張圖當舉例,雖然是同一個人的照片被動了不同的手腳,但是 K-Nearest Neighbor 結果出來的確實一樣的。

有兩個方法可以計算這個所謂“Distance Matrix”:

在 L1 的這個 case 裏面,用這個方法判定的數據歸類的邊界會更趨向於貼近座標系的軸來分割所屬區域,而 L2 的話相對來說於座標系的關聯度沒那麼大,所以比較不會有這種情況。

Hyperparameter

在機器學習裏面可能會有很多這種參數,他們不是通過重複的動作被“訓練”出來的,而是根據設計者(我們人)的經驗總結出來的一個可能會讓整個效果更好的參數。因此我們一般設定他們之前會問自己兩個問題:

  1. 什麼樣的 k 值能夠被最好的使用得出最棒的結果(k 值指的是不同屬性數據間最近的 k 個點的距離)
  2. 什麼樣的“步距”是最恰當的距離

以下幾種方式可以設定 Hyperparameter(簡稱 HP)

  1. 找出一個 HP 是最爲擬合已經有的數據的,有極高的準確率與重合性。但是結果顯示,通常這樣的結果都是過擬合的結果,在新來的數據面前,很難繼續有好的擬合效果。e.g. 一個人被認定爲有眼睛鼻子嘴巴的特徵,過擬合白話地說就是機器“太較真”了,只認定展示給他看有眼睛鼻子嘴巴的那纔是個人,今天來了個眼睛被頭髮遮住的人,於是機器就說這不是人,顯然他過擬合了
  2. 把一大塊數據分成訓練用的和測試用的兩部分,找出在訓練中表現最好的 HP ,然後把這個結果套到測試集裏面。但是一般而言這個結果也不怎麼好,因爲訓練出來的 model 我們最主要關心的是它面向新的 data 時的表現,現有的只是一個我們用來預測的依據與手段
  3. 把一大塊數據分成三份:訓練,驗證,測試。在訓練集中找出最恰當的 HP,然後放到驗證集做進一步確認與修改,最後得出的結果放到測試集去跑分看成績。現實上這是一個比較好的解決方案
  4. 交叉驗證法(也是最有公信力,準確性的一種方法),但是不適用於深度學習框架,因爲數據量太大了。把整塊數據分成若干份留一塊給測試集,然後隨機取一塊作爲驗證集,剩下的 n-2 塊全部作爲訓練集找最好的 HP,找到後放到驗證集去,剩下的步驟如第三種方法,最後等所有的塊都當過驗證集後,把所有結果取平均得到最後的結果。雖然這個結果準確,但是耗費太大的計算資源,是個只有理論上可行的方法

K-Nearest Neighbors 方法總結

  1. 圖像分類器的建立過程中,我們從圖片訓練集與標籤開始,預測測試集的圖像該是什麼樣子
  2. 他預測的方法是根據鄰近的訓練樣本
  3. 標尺的距離與 k 值都是一種 Hyperparameters
  4. 從驗證集中被測試好的 HP只在最後放到測試集測試一次

線性分類器 Linear Classification

這就是現在主流被廣泛應用到 CNN的方法, f(x, W) = Wx + b。 一個圖像信息被看作是一個“圖片的長”“圖片的寬”“光的三原色的量”的三維矩陣,每一個像素點作爲一個信號源放入到 x 的位置,經過一個權重 W 把 x 的重要性凸顯出來,加上一個獨立的修正量 b ,最後得出一個值用來評分。就像下面這張圖所顯示的意思。

然而,線性分類器在一個類別裏面只能學習一個模板,例如一個類是用來分辨汽車的,就不能再訓練它來分辨動物。如果這種情況出現的話,那新加入的動物圖像數據就會和已有的汽車數據宗和起來,最後得出一個他們共同的四不像答案,一般來說是不好的。

缺點

當遇到高維度向量的時候,線性分類器就會失去原有厲害的分類魔力。

每次只要遇到可以分佈在不同區域的數據的時候,例如上面的例子,沒有一張圖裏面的數據分佈是可以靠直接用一條線切開左右兩邊數據達到分類效果的,那麼線性分類器就會陷入難題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章