深度學習筆記(零)線性分類器(基礎知識)

聲明,這個系列基本是我本身的一些學習過程,方便我本身後期複習的!html

1.線性分類器

線性分類器主要由兩個部分組成:算法

  • 一個是評分函數(score function),它是一個從原始圖像到類別分值的映射函數。
  • 另外一個是失函數(loss function)也叫代價函數(cost function),它是用來量化預測獲得的分類標籤的得分與真實標籤之間的一致性。

該線性分類器能夠轉化成爲一個最優化問題,在最優化過程當中,經過更新score function的參數來最小化loss function。機器學習

2.評分函數

評分函數將圖像夫人像素值集合最終映射爲各個分類類別的得分,得分高低表明圖像屬於該類別的可能性高低。例如,有訓練集$x_i\epsilon{R^D}$,對應的標籤爲$y_i$,這裏$i=1,2,...,N$, $y_i \epsilon{1,2,...,k}$。也就是說,咱們有$N$個圖像樣本,每一個樣本的維度是$D$,共有$K$個不一樣的類別。函數

舉例來講,在CIFAR-10數據集中,咱們有一個$N=50000$的訓練集,每一個圖像有$D=32*32*3=3072$個像素,而$k=10$(狗,貓,汽車等)。咱們定義評分函數$f:R^D\to{R^K}$,該函數是原始圖像像素到分類類別分值的映射。學習

這裏,咱們從以個最簡單的機率函數開始,一個線性映射:$f(x_i,W,b) = Wx_i+b$測試

where, 每一個樣本$x_i$大小爲$D*1$,矩陣$W$(大小爲$K*D$),向量$b$(大小爲$D*1$),爲該函數的參數。一樣以CIFAR-10數據爲例,$x_i$包含了第$i$個圖像的全部像素信息,這些信息被拉成爲一個$3072*1$的向量,$W$的大小爲$10*3072$,$b$的大小爲$10*1$。所以,3072個像素值做爲輸入輸入函數,函數輸出10個分值結果。參數 $W$ 被稱爲權重(weight),參數 $b$ 稱爲誤差(bias),誤差影響輸出值,但並不和原始數據產生關聯。優化

須要注意的是:spa

  •  一個簡單的矩陣乘法$Wx_i$就能夠有效評估$K$個不一樣的分類器(每一個分類器對應一個類別),其中每一個類別是 $W$ 的一個行向量。
  • 咱們認爲輸入數據$(x_i,y_i)$是給定且不可改變的,但參數$W$ 和  $b$ 可控制改變的。咱們的目標就是經過設置這些參數,使得計算出來的分類分值狀況和訓練集衆圖像的真實類別標籤相符。
  • 該方法相對於 KNN 算法的優點在於,訓練數據是用來學習參數$W$ 和  $b$ 的,一旦訓練完成,訓練數據就能夠丟棄了。對於一個測試圖像,咱們簡單地將其輸入函數,並基於計算的分類分值進行分類便可。
  • 最後,注意咱們只要作一個矩陣乘法和一個矩陣加法就能對測試數據分類,這也比 KNN方法快多了。

理解線性分類器

線性分類器計算圖像中3個顏色通道中全部像素值與 權重的矩陣乘法,從而獲得分類分值。根據咱們對權重設置的值,對於圖像中某些位置的某些顏色,函數表現出喜愛或者厭惡(根據每一個權重的符號而定)。舉個例子,能夠想象「船」分類就是被大量的藍色包圍(對應的就是水)。那麼「船」分類器在藍色通道上的權重就有不少的正權重(它們的出現提升了「船」分類的分值),而在綠色和紅色通道上的權重爲負的就比較多(它們的出現下降了「船」分類的分值)。orm

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

誤差和權重的合併技巧

實際操做中,咱們經常將 $W$ 和 $b$ 合二爲一。回憶一下,分類評分函數定義爲:$f(x_i,W,b) = Wx_i+b$。

通常經常使用的方法是把兩個參數放到同一個矩陣中,同時 $x_i$ 向量就要增長一個維度,這個維度的數值是常量 1,這就是默認的誤差維度。這樣新的公式就簡化成下面這樣:

$f(x_i,W) = Wx_i$

仍是以CIFAR-10爲例,$x_i$的大小變成了 $3073*1$,而不是$3072*1$了,多出了包含常向量1的一個維度。$W$ 的大小變成了 $10*3073$。$W$ 這多出來的這一列對應的就是誤差值$b$,具體見下圖:

圖像數據預處理

在上面的例子中,全部的圖像都是使用原始像素值(從0到255)。在機器學習中,對應特徵作歸一化(normalization)處理是常見套路。在圖像分類的例子中,圖像上的每個像素能夠看做一個特徵(feature)。

在這些圖片的例子中,該步驟意味着根據訓練集全部的圖像計算出一個平均像素值,而後每一個圖像都減去這個平均值,這樣圖像的像素就大約分佈在[127,127]之間了。下一個常見步驟是,讓全部數值分佈的區間變成[-1,1]。零均值的中心化是很重要的。

這並無改變你的圖像信息,並且更利於數值優化。

 

 3. 損失函數

上面咱們定義來從圖像像素值到所屬類別的評分函數(score function),該函數的參數是權重矩陣$W$。在函數中,數據 $(x_i,y_i$ 是給的的,不能修改。但咱們能夠調整權重矩陣這個參數,使得評分函數的結果與訓練數據集中圖像的真實類別一致,既評分函數在正確的分類位置應當獲得最高的評分(score)。

回到以前那張貓的圖像分類例子,它有針對「貓」,「狗」,「船」三個類別的分數。咱們看到例子中權重值很是差,由於貓分類的得分很是低(-96.8),而狗(437.9)和船(61.95)比較高。咱們將使用損失函數(loss function/代價函數(cost function來衡量咱們對結果的不滿意程度。直觀地講,當評分函數輸出結果與真實結果之間差別越大,損失函數輸出越大,反之越小。

 多類支持向量機損失 Multiclass Support Vector Machine Loss

損失函數的具體形式多種多樣。這裏,咱們介紹了經常使用的多類別支持向量機(SVM)損失函數。該損失函數想要SVM在正確分類上的得分始終比不正確分類上的得分高出一個邊界值 $\Delta$。咱們能夠把損失函數想象成一我的,這位SVM先生(或者女士)對於結果有本身的品位,若是某個結果能使得損失值更低,那麼SVM就更加喜歡它。

具體的:樣本 $i$ 中包含圖像像素 $x_i$ 和類別標籤 $y_i$。輸入圖像經過score function $f(x_i,W)$ 來計算不一樣分類類別的分值。那麼針對這個樣本的多類別SVM損失函數定義以下:

$L_i=\sum_{j\neq{y_i}}max(0, f_j-f_{y_i}+\Delta)$

 例如:假設有三個分類類別,圖片 $x_i$ 經過評分函數獲得的分值爲 [13, -7, 11]。假設第一個類別正確,即$y_i=0$,同時假設 $\Delta$ 是10。那麼 $L_i=max(0, -7-13+10) + max(0, 11-13+10) = 8$。簡而言之,SVM的損失函數想正確分類類別 $y_i$ 的分數比不正確的類別分數要高,並且至少要高 $\Delta$ ,若是不知足這點,則開始計算損失值。

在結束這一小結前,還必須提一下這個有關0的閾值函數:$max(0,-)$,它常被稱爲折葉損失(hinge loss)。有時候會聽到人們使用平方折葉函數SVM(即 L2-SVM)。它使用的是 $max(0,-)^2$,將更強烈(平方地而不是線性地)地懲罰過界的邊界值。不使用平方是更標準的版本,可是在某些數據集中,平方折葉損失會工做得更好。能夠經過交叉驗證來決定到底使用哪一個。

咱們對於預測訓練集數據分類標籤的狀況總有一些不滿意的,而損失函數就能將這些不滿意的程度量化。

多類SVM」想要」正確類別的分數比其餘不正確分類類別的分數要高,並且至少高出 $\Delta$ 邊界值。若是其餘分類分數進入了紅色的區域,甚至更高,那麼就開始計算損失。若是沒有這種狀況,損失值爲0.咱們的目標是找到一些權重,它們可以讓訓練集中的數據樣例知足這些限制,也可以讓總的損失值儘量的低。

正則化(Regularization

上面的損失函數有一個問題。假設有一個數據集和一個權重 $w$ 可以正確地分類每一個數據(即全部的邊界都知足,對於全部的 $i$ 都有 $L_i$ = 0),問題在於這個 $W$ 並不惟一。咱們想象一下,當 $\lambda{ > 1}$ 時,任何 $\lambda{M}$ 都能使 損失值爲0,由於這個變化將全部的分值的大小都均等地擴大了,全部它們的差值也擴大了。舉個例子,若是一個正確分類的分值和距離它最近的錯誤分類的分值的差距是15,對 $W$ 乘以2將使得差距變成30。

咱們但願能向某些特定的權重 $W$ 添加一些偏好,對於其餘權重則不添加,以此來消除模糊性。這一點的實現方法是向損失函數增長一個正則化懲罰(regularization penalty) $R(W)$ 部分。最經常使用的正則化懲罰是 L2 範數,L2 範數經過對全部參數進行逐元素的平方懲罰來抑制大數值的權重:

$R(W) = \sum_k{\sum_l{W_{k,l}^2}}$

上面的表達中,將 $w$ 中全部元素平方後求和。注意:正則化函數不是數據的函數,僅基於權重。包含正則化懲罰後就可以給出完整的多類別 SVM 損失函數了,它由兩個部分組成:數據損失(data loss),即全部樣本的平均損失,以及正則化損失(regularization loss)

$L=\frac{1}{N}\sum{L_i}+\lambda{R(W)}$

Softmax分類器

Softmax中將折葉損失(hinge loss)替換爲交叉熵損失(cross-entropy loss)。公式以下:

$L_i=-log{\frac{e^{f_y}}{\sum_j{e^{f_j}}}}$

 這裏咱們能夠對比下SVM的損失函數。

針對一個數據點,SVM和Softmax分類器的不一樣處理方式的例子。兩個分類器都計算了一樣的分值向量 f(本節中是經過矩陣乘來實現)。不一樣之處在於對 中分值的解釋:SVM分類器將它們看作是分類評分,它的損失函數鼓勵正確的分類(本例中是藍色的類別2)的分值比其餘分類的分值高出至少一個邊界值。Softmax分類器將這些數值看作是每一個分類沒有歸一化的對數機率,鼓勵正確分類的歸一化的對數機率變高,其他的變低。SVM的最終的損失值是1.58,Softmax的最終的損失值是0.452,但要注意這兩個數值沒有可比性。只在給定一樣數據,在一樣的分類器的損失值計算中,它們纔有意義。

 

總結以下:

  • 定義了從圖像像素映射到不一樣類別的分類評分的評分函數。在本節中,評分函數是一個基於權重  和誤差  的線性函數。
  • 與kNN分類器不一樣,參數方法的優點在於一旦經過訓練學習到了參數,就能夠將訓練數據丟棄了。同時該方法對於新的測試數據的預測很是快,由於只須要與權重  進行一個矩陣乘法運算。
  • 介紹了誤差技巧,讓咱們可以將誤差向量和權重矩陣合二爲一,而後就能夠只跟蹤一個矩陣。
  • 介紹了圖像預處理操做,0均值與同方差操做。
  • 定義了損失函數(介紹了SVM和Softmax線性分類器最經常使用的2個損失函數)。損失函數可以衡量給出的參數集與訓練集數據真實類別狀況之間的一致性。在損失函數的定義中能夠看到,對訓練集數據作出良好預測與獲得一個足夠低的損失值這兩件事是等價的。
相關文章
相關標籤/搜索