1. 程式人生 > >Lecture 3 線性分類筆記(二)

Lecture 3 線性分類筆記(二)

內容列表

  • 線性分類器簡介
  • 線性評分函式
  • 闡明線性分類器
  • 損失函式
    • 多類SVM
    • Softmax分類器
    • SVM和Softmax的比較
  • 基於Web的可互動線性分類器原型
  • 小結

注:中文翻譯出自知乎專欄“智慧單元”,在其基礎上增加了個人批註

損失函式 Loss function

在上一節定義了從影象畫素值到所屬類別的評分函式(score function),該函式的引數是權重矩陣***W***。在函式中,資料(xiyi)是給定的,不能修改。但是我們可以調整權重矩陣這個引數,使得評分函式的結果與訓練資料集中影象的真實類別一致,即評分函式在正確的分類的位置應當得到最高的評分(score)。 批註

:原文在這裡用的是“are consistent with”,並不是“得到最高的評分”,我看了整集視訊,沒有任何一個地方明確地說是得分最高的表示最接近的類別,但是每一處都表現出,確實是得分最高的類別才是演算法分類的類別)

回到之前那張貓的影象分類例子,它有針對“貓”,“狗”,“船”三個類別的分數。我們看到例子中權重值非常差,因為貓分類的得分非常低(-96.8),而狗(437.9)和船(61.95)比較高。我們將使用損失函式(Loss Function)(有時也叫代價函數Cost Function或目標函式Objective)來衡量我們對結果的不滿意程度。直觀地講,當評分函式輸出結果與真實結果之間差異越大,損失函式輸出越大,反之越小。

多類支援向量機損失

Multiclass Support Vector Machine Loss

損失函式的具體形式多種多樣。首先,介紹常用的多類支援向量機(SVM)損失函式。SVM的損失函式想要SVM在正確分類上的得分始終比不正確分類上的得分高出一個邊界值

\Delta

。 我們可以把損失函式想象成一個人,這位SVM先生(或者女士)對於結果有自己的品位,如果某個結果能使得損失值更低,那麼SVM就更加喜歡它。

讓我們更精確一些。回憶一下,第i個數據中包含影象xi的畫素和代表正確類別的標籤yi。評分函式輸入畫素資料,然後通過公式

f(x_i,W)

來計算不同分類類別的分值。這裡我們將分值簡寫為s

。比如,針對第j個類別的得分就是第j個元素:

s_j=f(x_i,W)_j

。針對第i個數據的多類SVM的損失函式定義如下:

L_i = \sum_{j\neq y_i} \max(0, s_j - s_{y_i} + \Delta)

批註:看原視訊的時候,這個 sj 和 syj,越看越懵逼,其實很簡單,syj是唯一的,它是對應分類目標在正確的類別下的打分,在Li的計算過程中,他是不變的,而sj是對應的其他的類別的打分,他是一個向量)

舉例:用一個例子演示公式是如何計算的。假設有3個分類,並且得到了分值

s=[13,-7,11]

,其中第一個類別是正確類別,即

y_i=0
s_{y_i}=13
s_j=[-7, 11]

。同時假設

\Delta=10

(後面會詳細介紹該超引數)。上面的公式是將所有不正確分類

j\not=y_i

加起來,所以我們得到兩個部分:

L_i=max(0,-7-13+10)+max(0,11-13+10)

批註:看到這裡,我發現這個講義和PPT不一致,視訊中老師把這個Δ值叫做“安全邊界”,它並不是我們常說的bias,視訊中的安全邊界取得是1,它是一個超引數,既然是超引數就是需要根據實際情況來進行調優的,調優的原理是啥,下面這一段做了講解,這個值要怎麼取,希望後面能講解到,我們從上面的計算結果來看,安全邊界的取值對是否有損失的影響很大。從SVM的原來來看,SVM是用一個超平面來分類,這個超平面距離每個分類都有一個邊界,這兩者是不是同一個東西?)

可以看到第一個部分結果是0,這是因為[-7-13+10]得到的是負數,經過max(0,-)函式處理後得到0。這一對類別分數和標籤的損失值是0,這是因為正確分類的得分13與錯誤分類的得分-7的差為20,高於邊界值10。而SVM只關心差距至少要大於10,更大的差值還是算作損失值為0。第二個部分計算[11-13+10]得到8。雖然正確分類的得分比不正確分類的得分要高(13>11),但是比10的邊界值還是小了,分差只有2,這就是為什麼損失值等於8。簡而言之,SVM的損失函式想要正確分類類別 yi 的分數比不正確類別分數高,而且至少要高Δ (delta)。如果不滿足這點,就開始計算損失值。

批註:這裡,為什麼明明打分預測是正確的,還要計算損失呢?僅僅是舉個例子,還是說必須要這樣?)

那麼在這次的模型中,我們面對的是線性評分函式

f(x_i,W)=Wx_i

,所以我們可以將損失函式的公式稍微改寫一下:

L_i=\sum_{j\not=y_i}max(0,w^T_jx_i-w^T_{y_i}x_i+\Delta)

其中 wj 是權重 W 的第j行,被轉置為列向量。然而,一旦開始考慮更復雜的評分函式f公式,這樣做就不是必須的了。

在結束這一小節前,還必須提一下的是關於閥值為0的函式:max(0,-),它常被稱為折葉損失(hinge loss)。有時候會使用平方折葉損失SVM(即L2-SVM),它使用的是max(0, -)2,將更強烈(平方地而不是線性地)地懲罰過界的邊界值(使損失的離散性增強)。不使用平方是更標準的版本,但是在某些資料集中,平方折葉損失會工作得更好。可以通過交叉驗證來決定到底使用哪個。

我們對於預測訓練集資料分類標籤的情況總有一些不滿意的,而損失函式就能將這些不滿意的程度量化。

image

多類SVM希望正確類別的分類分數比其他不正確分類類別的分數要高,而且至少高出安全邊界(delta)。如果其他分類分數進入了紅色的區域,甚至更高,那麼就開始計算損失。如果沒有這些情況,損失值為0。我們的目標是找到一些權重,它們既能夠讓訓練集中的資料樣例滿足這些限制,也能讓總的損失值儘可能地低。

正則化(Regularization):上面損失函式有一個問題。假設有一個數據集和一個權重集W能夠正確地分類每個資料(即所有的邊界都滿足,對於所有的i都有Li = 0)。問題在於這個***W***並不唯一:可能有很多相似的***W***都能正確地分類所有的資料。一個簡單的例子:如果W能夠正確分類所有資料,即對於每個資料,損失值都是0。那麼當 λ > 1 時,任何數乘 λ***W*** 都能使得損失值為0,因為這個變化將所有分值的大小都均等地擴大了,所以它們之間的絕對差值也擴大了。舉個例子,如果一個正確分類的分值和舉例它最近的錯誤分類的分值的差距是15,對 W 乘以2將使得差距變成30。

換句話說,我們希望能向某些特定的權重 W 新增一些偏好,對其他權重則不新增,以此來消除模糊性。這一點是能夠實現的,方法是向損失函式增加一個正則化懲罰(regularization penaltyR(W)部分。最常用的正則化懲罰是L2正規化,L2正規化通過對所有引數進行逐元素的平方懲罰來抑制大數值的權重:

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

上面的表示式中,將 W 中所有元素平方後求和。注意正則化函式不是資料的函式,僅基於權重。包含正則化懲罰後,就能夠給出完整的多類SVM損失函數了,它由兩個部分組成:資料損失(data loss),即所有樣例的的平均損失Li,以及正則化損失(regularization loss)。完整公式如下所示:

L=\underbrace{ \frac{1}{N}\sum_i L_i}_{data \  loss}+\underbrace{\lambda R(W)}_{regularization \ loss}

將其展開完整公式是:

L=\frac{1}{N}\sum_i\sum_{j\not=y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_k \sum_l W^2_{k,l}

其中,N是訓練集的資料量。現在正則化懲罰新增到了損失函式裡面,並用超引數 λ 來計算其權重。該超引數無法簡單確定,需要通過交叉驗證來獲取。

除了上述理由外,引入正則化懲罰還帶來很多良好的性質,這些性質大多會在後續章節介紹。比如引入了L2懲罰後,SVM們就有了最大邊界(max margin)這一良好性質。(如果感興趣,可以檢視CS229課程)。

其中最好的性質就是對大數值權重進行懲罰,可以提升其泛化能力,因為這就意味著沒有哪個維度能夠獨自對於整體分值有過大的影響。

批註:是不是說用L2正規化之後,大數就更大了?我只知道正則化是防止過擬合,而過擬合是因為樣本的離散型導致的。原視訊中,老師講解的正則化的引入是把一個多項式的擬合曲線降冪,使之成為一個線性的擬合函式從而減小模型的複雜度。)

舉個例子,假設輸入向量

x=[1,1,1,1]

兩個權重向量

w_1=[1,0,0,0]
w_2=[0.25,0.25,0.25,0.25]

那麼

w^T_1x=w^T_2=1

兩個權重向量都得到同樣的內積,但是***W***1的L2懲罰是1.0,而***W***2的L2懲罰是0.25。因此,根據L2懲罰來看,W2更好,因為它的正則化損失更小。從直觀上來看,這是因為***W***2的權重值更小且更分散。既然L2懲罰傾向於更小更分散的權重向量,這就會鼓勵分類器最終將所有維度上的特徵都用起來,而不是強烈依賴其中少數幾個維度。在後面的課程中可以看到,這一效果將會提升分類器的泛化能力,並避免過擬合。

批註:關於這個例子。視訊中有如下講解:如果使用L1正則化,W1會好一些,如果使用L2正規化,L2會好一點。但是老師沒有延伸開將,只是說L1正規化更關注的是稀疏解,它傾向於讓大部分W元素接近0,即使少部分資料偏離於0較遠也沒關係,而L2考慮的是W的整體分佈)

需要注意的是,和權重不同,偏 差沒有這樣的效果,因為它們並不控制輸入維度上的影響強度。因此通常只對權重W正則化,而不正則化偏差b。在實際操作中,可發現這一操作的影響可忽略不計。最後,因為正則化懲罰的存在,不可能在所有的例子中得到0的損失值,這是因為只有當 W=0 的特殊情況下,才能得到損失值為0。

程式碼:下面是一個無正則化部分的損失函式的Python實現,有非向量化和半向量化兩個形式:

def L_i(x, y, W):
  """
  unvectorized version. Compute the multiclass svm loss for a single example (x,y)
  - x is a column vector representing an image (e.g. 3073 x 1 in CIFAR-10)
    with an appended bias dimension in the 3073-rd position (i.e. bias trick)
  - y is an integer giving index of correct class (e.g. between 0 and 9 in CIFAR-10)
  - W is the weight matrix (e.g. 10 x 3073 in CIFAR-10)
  """
  delta = 1.0 # see notes about delta later in this section
  scores = W.dot(x) # scores becomes of size 10 x 1, the scores for each class
  correct_class_score = scores[y]
  D = W.shape[0] # number of classes, e.g. 10
  loss_i = 0.0
  for j in xrange(D): # iterate over all wrong classes
    if j == y:
      # skip for the true class to only loop over incorrect classes
      continue
    # accumulate loss for the i-th example
    loss_i += max(0, scores[j] - correct_class_score + delta)
  return loss_i

def L_i_vectorized(x, y, W):
  """
  A faster half-vectorized implementation. half-vectorized
  refers to the fact that for a single example the implementation contains
  no for loops, but there is still one loop over the examples (outside this function)
  """
  delta = 1.0
  scores = W.dot(x)
  # compute the margins for all classes in one vector operation
  margins = np.maximum(0, scores - scores[y] + delta)
  # on y-th position scores[y] - scores[y] canceled and gave delta. We want
  # to ignore the y-th position and only consider margin on max wrong class
  margins[y] = 0
  loss_i = np.sum(margins)
  return loss_i

def L(X, y, W):
  """
  fully-vectorized implementation :
  - X holds all the training examples as columns (e.g. 3073 x 50,000 in CIFAR-10)
  - y is array of integers specifying correct class+
  (e.g. 50,000-D array)
  - W are weights (e.g. 10 x 3073)
  """
  # evaluate loss over all examples in X without using any for loops
  # left as exercise to reader in the assignment

在本小節的學習中,一定要記得SVM損失採取了一種特殊的方法,使得能夠衡量對於訓練資料預測分類和實際分類標籤的一致性。還有,對訓練集中資料做出準確分類預測和讓損失值最小化這兩件事是等價的。

接下來要做的,就是找到能夠使損失值最小化的權重了。

實際考慮

設定Delta:你可能注意到上面的內容對超引數 Δ 及其設定是一筆帶過,那麼它應該被設定成什麼值?需要通過交叉驗證來求得嗎?現在看來,該超引數在絕大多數情況下設為 Δ =1.0 都是安全的。超引數 Δ 和 λ 看起來是兩個不同的超引數,但實際上他們一起控制同一個權衡:即損失函式中的資料損失和正則化損失之間的權衡。理解這一點的關鍵是要知道,權重 W 的大小對於分類分值有直接影響(當然對他們的差異也有直接影響):當我們將 W 中值縮小,分類分值之間的差異也變小,反之亦然。因此,不同分類分值之間的邊界的具體值(比如Δ=1或Δ=100)從某些角度來看是沒意義的,因為權重自己就可以控制差異變大和縮小。也就是說,真正的權衡是我們允許權重能夠變大到何種程度(通過正則化強度 λ 來控制)。

與二元支援向量機(Binary Support Vector Machine)的關係:在學習本課程前,你可能對於二元支援向量機有些經驗,它對於第i個數據的損失計算公式是:

L_i=Cmax(0,1-y_iw^Tx_i)+R(W)

其中,C是一個超引數,並且

y_i\in\{-1,1\}

可以認為本章節介紹的SVM公式包含了上述公式,上述公式是多類支援向量機公式只有兩個分類類別的特例。也就是說,如果我們要分類的類別只有兩個,那麼公式就化為二元SVM公式。這個公式中的C和多類SVM公式中的 λ 都控制著同樣的權衡,而且它們之間的關係是

C\propto\frac{1}{\lambda}

批註:正比關係)

備註:在初始形式中進行最優化。如果在本課程之前學習過SVM,那麼對kernels,duals,SMO演算法等將有所耳聞。在本課程(主要是神經網路相關)中,損失函式的最優化的始終在非限制初始形式下進行。很多這些損失函式從技術上來說是不可微的(比如當x=y時,max(x,y)函式就不可微分),但是在實際操作中並不存在問題,因為通常可以使用次梯度。

批註:這裡就不是很明白了)

備註:其他多類SVM公式。需要指出的是,本課中展示的多類SVM只是多種SVM公式中的一種。另一種常用的公式是One-Vs-All(OVA)SVM,它針對每個類和其他類訓練一個獨立的二元分類器。還有另一種更少用的叫做All-Vs-All(AVA)策略。我們的公式是按照Weston and Watkins 1999 (pdf)版本,比OVA效能更強(在構建有一個多類資料集的情況下,這個版本可以在損失值上取到0,而OVA就不行。感興趣的話在論文中查閱細節)。最後一個需要知道的公式是Structured SVM,它將正確分類的分類分值和非正確分類中的最高分值的邊界最大化。理解這些公式的差異超出了本課程的範圍。本課程筆記介紹的版本可以在實踐中安全使用,而被論證為最簡單的OVA策略在實踐中看起來也能工作的同樣出色(在 Rikin等人2004年的論文In Defense of One-Vs-All Classification (pdf)中可查)。

Softmax分類器

SVM是最常用的兩個分類器之一,而另一個就是Softmax分類器,它的損失函式與SVM的損失函式不同。對於學習過二元邏輯迴歸分類器的讀者來說,Softmax分類器就可以理解為邏輯迴歸分類器面對多個分類的一般化歸納。SVM將輸出

f(x_i,W)

作為每個分類的評分(因為無定標,所以難以直接解釋)。與SVM不同,Softmax的輸出(歸一化的分類概率)更加直觀,並且從概率上可以解釋,這一點後文會討論。在Softmax分類器中,函式對映

f(x_i;W)=Wx_i

保持不變,但將這些評分值視為每個分類的未歸一化的對數概率,並且將折葉損失(hinge loss)替換為交叉熵損失(cross-entropy loss)。公式如下:

Li=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}})

或等價的

L_i=-f_{y_i}+log(\sum_je^{f_j})

批註:關於log函式,一般文獻裡面直接寫log有可能底數是2、10、e,從這個等價關係來看,這裡的底是e,但是我在看視訊時,發現使用的底數是10,是不是說這個交叉熵函式用什麼底數都可以呢?)

在上式中,使用 fj 來表示分類評分向量 f 中的第 j 個元素。和之前一樣,整個資料集的損失值是資料集中所有樣本資料的損失值 Li 的均值與正則化損失***R***(W)之和。其中函式

f_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}}

被稱作 softmax 函式:其輸入值是一個向量,向量中元素為任意實數的評分值(z中的),函式對其進行壓縮,輸出一個向量,其中每個元素值在0到1之間,且所有元素之和為1。所以,包含softmax函式的完整交叉熵損失看起唬人,實際上還是比較容易理解的。

資訊理論視角:在“真實”分佈p和估計分佈q之間的交叉熵定義如下:

H(p,q)=-\sum_xp(x) logq(x)

因此,Softmax分類器所做的就是最小化在估計分類概率(就是上面的

\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

)和“真實”分佈之間的交叉熵,在這個解釋中,“真實”分佈就是所有概率密度都分佈在正確的類別上(比如:p=[0,…1,…,0]中在 yi 的位置就有一個單獨的1)。還有,既然交叉熵可以寫成熵和相對熵(Kullback-Leibler divergence)

H(p,q)=H(p)+D_{KL}(p||q)

,並且delta函式p的熵是0,那麼就能等價的看做是對兩個分佈之間的相對熵做最小化操作。換句話說,交叉熵損失函式“想要”預測分佈的所有概率密度都在正確分類上。

譯者注:Kullback-Leibler差異(Kullback-Leibler Divergence)也叫做相對熵(Relative Entropy),它衡量的是相同事件空間裡的兩個概率分佈的差異情況。

概率論解釋:先看下面的公式:

P(y_i|x_i,W)=\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

可以解釋為是給定影象資料 xi ,以W為引數,分配給正確分類標籤 yi 的歸一化概率。為了理解這點,請回憶一下Softmax分類器將輸出向量 f 中的評分值解釋為沒有歸一化的對數概率。那麼以這些數值做指數函式的冪就得到了沒有歸一化的概率,而除法操作則對資料進行了歸一化處理,使得這些概率的和為1。從概率論的角度來理解,我們就是在最小化正確分類的負對數概率,這可以看做是在進行最大似然估計(MLE)。該解釋的另一個好處是,損失函式中的正則化部分R(W)可以被看做是權重矩陣 W 的高斯先驗,這裡進行的是最大後驗估計(MAP)而不是最大似然估計。提及這些解釋只是為了讓讀者形成直觀的印象,具體細節就超過本課程範圍了。

批註:softmax函式的取值範圍是0~1,而交叉熵損失函式的取值範圍是0~正無窮,曲線是一個向下的單調函式,它其實是log函式的翻轉)

實操事項:數值穩定。程式設計實現softmax函式計算的時候,中間項

e^{f_{y_i}}

\sum_j e^{f_j}

因為存在指數函式,所以數值可能非常大。除以大數值可能導致數值計算的不穩定,所以學會使用歸一化技巧非常重要。如果在分式的分子和分母都乘以一個常數C,並把它變換到求和之中,就能得到一個從數學上等價的公式

\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}}

C的值可自由選擇,不會影響計算結果,通過使用這個技巧可以提高計算中的數值穩定性。通常將C設為

logC=-max_jf_j

。該技巧簡單地說,就是應該將向量f中的數值進行平移,使得最大值為0。程式碼實現如下:

#例子中有3個分類,每個評分的數值都很大
f = np.array([123, 456, 789])
#不妙:數值問題,可能導致數值爆炸
p = np.exp(f) / np.sum(np.exp(f)) 

# 那麼將f中的值平移到最大值為0:
f -= np.max(f)
# f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # 現在OK了,將給出正確結果

讓人迷惑的命名規則:精確地說,SVM分類器使用的是折葉損失(hinge loss),有時候又被稱為最大邊界損失(max-margin loss)。Softmax分類器使用的是交叉熵損失(corss-entropy loss)。Softmax分類器的命名是從softmax函式那裡得來的,softmax函式將原始分類評分變成正的歸一化數值,所有數值和為1,這樣處理後交叉熵損失才能應用。注意從技術上說“softmax損失(softmax loss)”是沒有意義的,因為softmax只是一個壓縮數值的函式。但是在這個說法常常被用來做簡稱。

批註:下面這段程式碼是numpy寫的一段計算交叉熵損失的例子)

np_s=np.array([3.2, 5.1, -1.7])
#np_s是通過W計算出的得分 array([ 3.2,  5.1, -1.7])

np_exp=np.exp(np_s)
#np_exp是指數化之後的結果 array([ 24.5325302 , 164.0219073 ,   0.18268352])

np_normal=np_exp/np.sum(np_exp)
#np_normal是歸一化之後的結果 array([0.12998254, 0.86904954, 0.00096793])

np_loss=-np.log10(np_normal)
#np_loss array([0.88611498, 0.06095547, 3.01415795])

SVM和Softmax的比較

下圖有助於區分這 Softmax和SVM這兩種分類器:

image

針對一個數據點,SVM和Softmax分類器的不同處理方式的例子。兩個分類器都計算了同樣的分值向量f(本節中是通過矩陣乘來實現)。不同之處在於對f中分值的解釋:SVM分類器將它們看做是分類評分,它的損失函式鼓勵正確的分類(本例中是藍色的類別2)的分值比其他分類的分值高出至少一個安全邊界值。Softmax分類器將這些數值看做是每個分類沒有歸一化的對數概率,鼓勵正確分類的歸一化的對數概率變高,其餘的變低。SVM的最終的損失值是1.58,Softmax的最終的損失值是1.04(這裡的1.04是用自然對數e來計算的,2017年春季之後的課程用的是10為底數的對數,計算出來是0.452),但要注意這兩個數值沒有可比性。只在給定同樣資料,在同樣的分類器的損失值計算中,它們才有意義。

Softmax分類器為每個分類提供了“可能性”:SVM的計算是無標定的,而且難以針對所有分類的評分值給出直觀解釋。Softmax分類器則不同,它允許我們計算出對於所有分類標籤的可能性。舉個例子,針對給出的影象,SVM分類器可能給你的是一個[12.5, 0.6, -23.0]對應分類“貓”,“狗”,“船”。而softmax分類器可以計算出這三個標籤的”可能性“是[0.9, 0.09, 0.01],這就讓你能看出對於不同分類準確性的把握。為什麼我們要在”可能性“上面打引號呢?這是因為可能性分佈的集中或離散程度是由正則化引數λ直接決定的,λ是你能直接控制的一個輸入引數。舉個例子,假設3個分類的原始分數是[1, -2, 0],那麼softmax函式就會計算:

[1,-2,0]\to[e^1,e^{-2},e^0]=[2.71,0.14,1]\to[0.7,0.04,0.26]

現在,如果正則化引數λ更大,那麼權重W就會被懲罰的更多,然後他的權重數值就會更小。這樣算出來的分數也會更小,假設小了一半吧[0.5, -1, 0],那麼softmax函式的計算就是:

[0.5,-1,0]\to[e^{0.5},e^{-1},e^0]=[1.65,0.73,1]\to[0.55,0.12,0.33]

現在看起來,概率的分佈就更加分散了。還有,隨著正則化引數λ不斷增強,權重數值會越來越小,最後輸出的概率會接近於均勻分佈。這就是說,softmax分類器算出來的概率最好是看成一種對於分類正確性的自信。和SVM一樣,數字間相互比較得出的大小順序是可以解釋的,但其絕對值則難以直觀解釋。

批註:上面這個例子就表明了一個資訊:正則化是直接作用於權重的,加入正則化之後所有的權重 W 會發生相應的變化)

在實際使用中,SVM和Softmax經常是相似的:通常說來,兩種分類器的表現差別很小,不同的人對於哪個分類器更好有不同的看法。相對於Softmax分類器,SVM更加“區域性目標化(local objective)”,這既可以看做是一個特性,也可以看做是一個劣勢。考慮一個評分是[10, -2, 3]的資料,其中第一個分類是正確的。那麼一個SVM(Δ = 1)會看到正確分類相較於不正確分類,已經得到了比邊界值還要高的分數,它就會認為損失值是0。SVM對於數字個體的細節是不關心的:如果分數是[10, -100, -100]或者[10, 9, 9],對於SVM來說沒設麼不同,只要滿足超過邊界值等於1,那麼損失值就等於0

對於softmax分類器,情況則不同。對於[10, 9, 9]來說,計算出的損失值就遠遠高於[10, -100, -100]的。換句話來說,softmax分類器對於分數是永遠不會滿意的:正確分類總能得到更高的可能性,錯誤分類總能得到更低的可能性,損失值總是能夠更小。但是,SVM只要邊界值被滿足了就滿意了,不會超過限制去細微地操作具體分數。這可以被看做是SVM的一種特性。舉例說來,一個汽車的分類器應該把他的大量精力放在如何分辨小轎車和大卡車上,而不應該糾結於如何與青蛙進行區分,因為區分青蛙得到的評分已經足夠低了。

互動式的網頁Demo

image

我們實現了一個互動式的網頁原型,來幫助讀者直觀地理解線性分類器。原型將損失函式進行視覺化,畫面表現的是對於2維資料的3種類別的分類。原型在課程進度上稍微超前,展現了最優化的內容,最優化將在下一節課討論。

小結

總結如下:

  • 定義了從影象畫素對映到不同類別的分類評分的評分函式。在本節中,評分函式是一個基於權重 W 和偏差 b 的線性函式。
  • 與kNN分類器不同,引數方法的優勢在於一旦通過訓練學習到了引數,就可以將訓練資料丟棄了。同時該方法對於新的測試資料的預測非常快,因為只需要與權重 W 進行一個矩陣乘法運算。
  • 介紹了偏差技巧,讓我們能夠將偏差向量和權重矩陣合二為一,然後就可以只跟蹤一個矩陣。
  • 定義了損失函式(介紹了SVM和Softmax線性分類器最常用的2個損失函式)。損失函式能夠衡量給出的引數集與訓練集資料真實類別情況之間的一致性。在損失函式的定義中可以看到,對訓練集資料做出良好預測與得到一個足夠低的損失值這兩件事是等價的。

現在我們知道了如何基於引數,將資料集中的影象對映成為分類的評分,也知道了兩種不同的損失函式,它們都能用來衡量演算法分類預測的質量。但是,如何高效地得到能夠使損失值最小的引數呢?這個求得最優引數的過程被稱為最優化,將在下節課中進行介紹。

拓展閱讀

下面的內容讀者可根據興趣選擇性閱讀。