斯坦福CS231n李飛飛計算機視覺之線性分類上

  • 線性分類器簡介
  • 線性評分函數
  • 闡明線性分類器 譯者注:上篇翻譯截止處
  • 損失函數
    • 多類SVM
    • Softmax分類器
    • SVM和Softmax的比較
  • 基於Web的可交互線性分類器原型
  • 小結

線性分類

上一篇筆記介紹了圖像分類問題。圖像分類的任務,就是從已有的固定分類標籤集合中選擇一個並分配給一張圖像。我們還介紹了k-Nearest Neighbor (k-NN)分類器,該分類器的基本思想是通過將測試圖像與訓練集帶標籤的圖像進行比較,來給測試圖像打上分類標籤。k-Nearest Neighbor分類器存在以下不足:

 

  • 分類器必須記住所有訓練數據並將其存儲起來,以便於未來測試數據用於比較。這在存儲空間上是低效的,數據集的大小很容易就以GB計。
  • 對一個測試圖像進行分類需要和所有訓練圖像作比較,算法計算資源耗費高。

概述:我們將要實現一種更強大的方法來解決圖像分類問題,該方法可以自然地延伸到神經網絡和卷積神經網絡上。這種方法主要有兩部分組成:一個是評分函數(score function),它是原始圖像數據到類別分值的映射。另一個是損失函數(loss function),它是用來量化預測分類標籤的得分與真實標籤之間一致性的。該方法可轉化爲一個最優化問題,在最優化過程中,將通過更新評分函數的參數來最小化損失函數值。

從圖像到標籤分值的參數化映射

該方法的第一部分就是定義一個評分函數,這個函數將圖像的像素值映射爲各個分類類別的得分,得分高低代表圖像屬於該類別的可能性高低。下面會利用一個具體例子來展示該方法。現在假設有一個包含很多圖像的訓練集x_i\in R^D,每個圖像都有一個對應的分類標籤y_i。這裏i=1,2...N並且y_i\in 1...K。這就是說,我們有N個圖像樣例,每個圖像的維度是D,共有K種不同的分類。

舉例來說,在CIFAR-10中,我們有一個N=50000的訓練集,每個圖像有D=32x32x3=3072個像素,而K=10,這是因爲圖片被分爲10個不同的類別(狗,貓,汽車等)。我們現在定義評分函數爲:f:R^D\to R^K,該函數是原始圖像像素到分類分值的映射。

線性分類器:在本模型中,我們從最簡單的概率函數開始,一個線性映射:

\displaystyle f(x_i,W,b)=Wx_i+b

在上面的公式中,假設每個圖像數據都被拉長爲一個長度爲D的列向量,大小爲[D x 1]。其中大小爲[K x D]的矩陣W和大小爲[K x 1]列向量b爲該函數的參數(parameters。還是以CIFAR-10爲例,x_i就包含了第i個圖像的所有像素信息,這些信息被拉成爲一個[3072 x 1]的列向量,W大小爲[10x3072],b的大小爲[10x1]。因此,3072個數字(原始像素數值)輸入函數,函數輸出10個數字(不同分類得到的分值)。參數W被稱爲權重(weights)b被稱爲偏差向量(bias vector),這是因爲它影響輸出數值,但是並不和原始數據x_i產生關聯。在實際情況中,人們常常混用權重參數這兩個術語。

需要注意的幾點:

  • 首先,一個單獨的矩陣乘法Wx_i就高效地並行評估10個不同的分類器(每個分類器針對一個分類),其中每個類的分類器就是W的一個行向量。
  • 注意我們認爲輸入數據(x_i,y_i)是給定且不可改變的,但參數Wb是可控制改變的。我們的目標就是通過設置這些參數,使得計算出來的分類分值情況和訓練集中圖像數據的真實類別標籤相符。在接下來的課程中,我們將詳細介紹如何做到這一點,但是目前只需要直觀地讓正確分類的分值比錯誤分類的分值高即可。
  • 該方法的一個優勢是訓練數據是用來學習到參數Wb的,一旦訓練完成,訓練數據就可以丟棄,留下學習到的參數即可。這是因爲一個測試圖像可以簡單地輸入函數,並基於計算出的分類分值來進行分類。
  • 最後,注意只需要做一個矩陣乘法和一個矩陣加法就能對一個測試數據分類,這比k-NN中將測試圖像和所有訓練數據做比較的方法快多了。
預告:卷積神經網絡映射圖像像素值到分類分值的方法和上面一樣,但是映射(f)就要複雜多了,其包含的參數也更多。

理解線性分類器

線性分類器計算圖像中3個顏色通道中所有像素的值與權重的矩陣乘,從而得到分類分值。根據我們對權重設置的值,對於圖像中的某些位置的某些顏色,函數表現出喜好或者厭惡(根據每個權重的符號而定)。舉個例子,可以想象“船”分類就是被大量的藍色所包圍(對應的就是水)。那麼“船”分類器在藍色通道上的權重就有很多的正權重(它們的出現提高了“船”分類的分值),而在綠色和紅色通道上的權重爲負的就比較多(它們的出現降低了“船”分類的分值)。

————————————————————————————————————————

 

一個將圖像映射到分類分值的例子。爲了便於可視化,假設圖像只有4個像素(都是黑白像素,這裏不考慮RGB通道),有3個分類(紅色代表貓,綠色代表狗,藍色代表船,注意,這裏的紅、綠和藍3種顏色僅代表分類,和RGB通道沒有關係)。首先將圖像像素拉伸爲一個列向量,與W進行矩陣乘,然後得到各個分類的分值。需要注意的是,這個W一點也不好:貓分類的分值非常低。從上圖來看,算法倒是覺得這個圖像是一隻狗。

 

————————————————————————————————————————

將圖像看做高維度的點:既然圖像被伸展成爲了一個高維度的列向量,那麼我們可以把圖像看做這個高維度空間中的一個點(即每張圖像是3072維空間中的一個點)。整個數據集就是一個點的集合,每個點都帶有1個分類標籤。

 

既然定義每個分類類別的分值是權重和圖像的矩陣乘,那麼每個分類類別的分數就是這個空間中的一個線性函數的函數值。我們沒辦法可視化3072維空間中的線性函數,但假設把這些維度擠壓到二維,那麼就可以看看這些分類器在做什麼了:

——————————————————————————————————————————

 

圖像空間的示意圖。其中每個圖像是一個點,有3個分類器。以紅色的汽車分類器爲例,紅線表示空間中汽車分類分數爲0的點的集合,紅色的箭頭表示分值上升的方向。所有紅線右邊的點的分數值均爲正,且線性升高。紅線左邊的點分值爲負,且線性降低。

 

—————————————————————————————————————————

從上面可以看到,W的每一行都是一個分類類別的分類器。對於這些數字的幾何解釋是:如果改變其中一行的數字,會看見分類器在空間中對應的直線開始向着不同方向旋轉。而偏差b,則允許分類器對應的直線平移。需要注意的是,如果沒有偏差,無論權重如何,在x_i=0時分類分值始終爲0。這樣所有分類器的線都不得不穿過原點。

將線性分類器看做模板匹配:關於權重W的另一個解釋是的每一行對應着一個分類的模板(有時候也叫作原型)。一張圖像對應不同分類的得分,是通過使用內積(也叫點積)來比較圖像和模板,然後找到和哪個模板最相似。從這個角度來看,線性分類器就是在利用學習到的模板,針對圖像做模板匹配。從另一個角度來看,可以認爲還是在高效地使用k-NN,不同的是我們沒有使用所有的訓練集的圖像來比較,而是每個類別只用了一張圖片(這張圖片是我們學習到的,而不是訓練集中的某一張),而且我們會使用(負)內積來計算向量間的距離,而不是使用L1或者L2距離。

————————————————————————————————————————

 

將課程進度快進一點。這裏展示的是以CIFAR-10爲訓練集,學習結束後的權重的例子。注意,船的模板如期望的那樣有很多藍色像素。如果圖像是一艘船行駛在大海上,那麼這個模板利用內積計算圖像將給出很高的分數。

 

————————————————————————————————————————

可以看到馬的模板看起來似乎是兩個頭的馬,這是因爲訓練集中的馬的圖像中馬頭朝向各有左右造成的。線性分類器將這兩種情況融合到一起了。類似的,汽車的模板看起來也是將幾個不同的模型融合到了一個模板中,並以此來分辨不同方向不同顏色的汽車。這個模板上的車是紅色的,這是因爲CIFAR-10中訓練集的車大多是紅色的。線性分類器對於不同顏色的車的分類能力是很弱的,但是後面可以看到神經網絡是可以完成這一任務的。神經網絡可以在它的隱藏層中實現中間神經元來探測不同種類的車(比如綠色車頭向左,藍色車頭向前等)。而下一層的神經元通過計算不同的汽車探測器的權重和,將這些合併爲一個更精確的汽車分類分值。

偏差和權重的合併技巧:在進一步學習前,要提一下這個經常使用的技巧。它能夠將我們常用的參數Wb合二爲一。回憶一下,分類評分函數定義爲:

\displaystyle f(x_i,W,b)=Wx_i+b

分開處理這兩個參數(權重參數W和偏差參數b)有點笨拙,一般常用的方法是把兩個參數放到同一個矩陣中,同時x_i向量就要增加一個維度,這個維度的數值是常量1,這就是默認的偏差維度。這樣新的公式就簡化成下面這樣:

\displaystyle f(x_i,W)=Wx_i

還是以CIFAR-10爲例,那麼x_i的大小就變成[3073x1],而不是[3072x1]了,多出了包含常量1的1個維度)。W大小就是[10x3073]了。W中多出來的這一列對應的就是偏差值b,具體見下圖:

————————————————————————————————————————

偏差技巧的示意圖。左邊是先做矩陣乘法然後做加法,右邊是將所有輸入向量的維度增加1個含常量1的維度,並且在權重矩陣中增加一個偏差列,最後做一個矩陣乘法即可。左右是等價的。通過右邊這樣做,我們就只需要學習一個權重矩陣,而不用去學習兩個分別裝着權重和偏差的矩陣了。

 

—————————————————————————————————————————

圖像數據預處理:在上面的例子中,所有圖像都是使用的原始像素值(從0到255)。在機器學習中,對於輸入的特徵做歸一化(normalization)處理是常見的套路。而在圖像分類的例子中,圖像上的每個像素可以看做一個特徵。在實踐中,對每個特徵減去平均值來中心化數據是非常重要的。在這些圖片的例子中,該步驟意味着根據訓練集中所有的圖像計算出一個平均圖像值,然後每個圖像都減去這個平均值,這樣圖像的像素值就大約分佈在[-127, 127]之間了。下一個常見步驟是,讓所有數值分佈的區間變爲[-1, 1]。零均值的中心化是很重要的,等我們理解了梯度下降後再來詳細解釋。

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