1. 程式人生 > >影象的線性分類器(感知機、SVM、Softmax)

影象的線性分類器(感知機、SVM、Softmax)

  本文主要內容為 CS231n 課程的學習筆記,主要參考 學習視訊 和對應的 課程筆記翻譯 ,感謝各位前輩對於深度學習的辛苦付出。在這裡我主要記錄下自己覺得重要的內容以及一些相關的想法,希望能與大家多多交流~

1. 線性分類器簡介

  這部分所介紹的線性分類器,實際上指的是感知機,並且實際上是一個單層的感知機。對於感知機的部分,在之前的《<神經網路與深度學習>讀書筆記》中已經有所介紹了,在這篇文章的第一部分我簡單的介紹了感知機。那裡的感知機只有一個輸出 z ,而這裡的感知機雖然也是一層的感知機,但是輸出卻比之前的筆記中介紹的要多,具體有多少個輸出單元,根據資料的類別數確定。感興趣的小夥伴可以點選連結跳轉至那部分進行溫習,本文的餘下部分將不會對已經總過的知識再次總結。

  在這裡認為線性分類器(即感知機)主要有兩部分組成:一個是評分函式(score function),它是原始影象資料到類別分值的對映。另一個是損失函式(loss function),它是用來量化預測分類標籤的得分與真實標籤之間一致性的。該方法可轉化為一個最優化問題,在最優化過程中,將通過更新評分函式的引數來最小化損失函式值。

  其中需要注意的是,這裡所謂的評分函式實際上就是計算的過程(落到具體細節就是權重矩陣 W)。下面我們將從評分函式與損失函式兩個方面先進行介紹,在介紹兩種具體的分類器,SVM 與 Softmax。

2. 評分函式

2.1 評分函式的定義

  評分函式將影象的畫素值對映為各個分類類別的得分,得分高低代表影象屬於該類別的可能性高低。在假設有一個包含很多影象的訓練集 x

iRD ,每個影象都有一個對應的分類標籤 yi。這裡 i=1,2...N並且 yi1...K。這就是說,我們有 N 個影象樣例,每個影象的維度是 D,共有 K 種不同的分類。舉例來說,在CIFAR-10中,我們有一個N=50000的訓練集,每個影象有D=32x32x3=3072個畫素,而K=10,這是因為圖片被分為10個不同的類別(狗,貓,汽車等)。

  現定義評分函式如下

f(xi,W,b)=Wxi+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
產生關聯。

  對於評價函式有以下幾點需要注意:

  • 1
    一個單獨的矩陣乘法 Wxi 就高效地並行評估10個不同的分類器(每個分類器針對一個分類),其中每個類的分類器就是W的一個行向量。
  • 2
    輸入資料 (xi,yi)是給定且不可改變的,但引數W和b是可控制改變的。我們的目標就是通過設定這些引數,使得計算出來的分類分值情況和訓練集中影象資料的真實類別標籤相符。
  • 3
    該方法的一個優勢是訓練資料是用來學習到引數W和b的,一旦訓練完成,訓練資料就可以丟棄,留下學習到的引數即可。這是因為一個測試影象可以簡單地輸入函式,並基於計算出的分類分值來進行分類。
  • 4
    最後,注意只需要做一個矩陣乘法和一個矩陣加法就能對一個測試資料分類,這比k-NN中將測試影象和所有訓練資料做比較的方法快多了。

2.2 如何理解評分函式

  評分函式的工作流程實際可以具體化為如下的形式


圖 1. 評價函式工作流程視覺化

  為了便於視覺化,假設影象只有4個畫素(都是黑白畫素,這裡不考慮RGB通道),有3個分類(紅色代表貓,綠色代表狗,藍色代表船,注意,這裡的紅、綠和藍3種顏色僅代表分類,和RGB通道沒有關係)。首先將影象畫素拉伸為一個列向量,與W進行矩陣乘,然後得到各個分類的分值。需要注意的是,這個W一點也不好:貓分類的分值非常低。從上圖來看,演算法倒是覺得這個影象是一隻狗。根據我們對權重設定的值,對於影象中的某些位置的某些顏色,函式表現出喜好或者厭惡(根據每個權重的符號而定)。

2.2.1 將影象看做高維度的點

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

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


圖 2. 影象空間的示意圖

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

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

2.2.2 將線性分類器看做模板匹配

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


圖 3. 線性分類器通過學習得到的模板

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

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

2.3 偏差和權重的合併技巧

  分類評分函式定義為

f(xi,W,b)=Wxi+b
分開處理這兩個引數(權重引數W和偏差引數b)有點笨拙,一般常用的方法是把兩個引數放到同一個矩陣中,同時 xi 向量就要增加一個維度,這個維度的數值是常量 1,這就是預設的偏差維度。這樣新的公式就簡化成下面這樣
f(xi,W)=Wxi
還是以CIFAR-10為例,那麼x_i的大小就變成[3073x1],而不是[3072x1]了,多出了包含常量1的1個維度)。W大小就是[10x3073]了。W中多出來的這一列對應的就是偏差值b,具體見下圖

圖 4. 偏差技巧的示意圖

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

3. 損失函式 Loss function

  使用損失函式(Loss Function)(有時也叫代價函式Cost Function或目標函式Objective)來衡量我們對結果的不滿意程度。直觀地講,當評分函式輸出結果與真實結果之間差異越大,損失函式輸出越大,反之越小。

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

  SVM的損失函式想要SVM在正確分類上的得分始終比不正確分類上的得分高出一個邊界值 Δ

  第 i 個數據中包含影象 xi 的畫素和代表正確類別的標籤 yi。評分函式輸入畫素資料,然後通過公式 f(xi,W)計算不同分類類別的分值。這裡我們將分值簡寫為 s。比如,針對第 j 個類別的得分就是第 j 個元素: sj=f(xi,W)j。針對第 i 個數據的多類SVM的損失函式定義如下:

Li=jyimax(0,sjsyi+Δ)
  舉例:用一個例子演示公式是如何計算的。假設有3個分類,並且得到了分值s=[13 , -7 , 11]。其中第一個類別是正確類別,即 yi=0。同時假設 Δ是 10(後面會詳細介紹該超引數)。上面的公式是將所有不正確分類( jyi)加起來,所以我們得到兩個部分: Li=max(0,713+10)+max(0,1113+10)
  可以看到第一個部分結果是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 的分數比不正確類別分數高,而且至少要高 Δ。如果不滿足這點,就開始計算損失值。

  max(0,)函式,它常被稱為折葉損失(hinge loss)。有時候會聽到人們使用平方折葉損失SVM(即L2-SVM),它使用的是 max(0,)2,將更強烈(平方地而不是線性地)地懲罰過界的邊界值。不使用平方是更標準的版本,但是在某些資料集中,平方折葉損失會工作得更好。可以通過交叉驗證來決定到底使用哪個。


圖 5. 折葉損失示意圖

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

3.2 SVM中的正則化(Regularization)

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

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

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

相關推薦

影象線性分類感知SVMSoftmax

  本文主要內容為 CS231n 課程的學習筆記,主要參考 學習視訊 和對應的 課程筆記翻譯 ,感謝各位前輩對於深度學習的辛苦付出。在這裡我主要記錄下自己覺得重要的內容以及一些相關的想法,希望能與大家多多交流~ 1. 線性分類器簡介   這部分所

CS231n課程筆記3.1:線性分類SVMsoftmax的誤差函式正則化

CS231n簡介 課程筆記 這篇是線性分類器的第二部分,回憶線性分類器的線性體現在score的獲得,即score = Wx+b,然後predict_label = argmax(score)。具體細節以及關於線性分類器的解釋請參考CS231n課程筆記

線性分類感知模型Perceptron

前文提到,Fisher判別器的設計一般分兩步,一是確定最優的投影方向,二是在投影方向上確定閾權值。而感知器則是一種直接得到完整的線性判別函式g(x)=ωTx+ω0的方法。所以從某種意義上講,感知器模型是Fisher判別的一種改進。瞭解神經網路的人也都知道,感知器

斯坦福CS231n 課程學習筆記--線性分類Assignment1程式碼實現

最近學習了斯坦福的CS231n(winter 2016)系列課程,收穫很大,作為深度學習以及卷積神經網路學習的入門很是完美。學習過程中,主要參考了知乎上幾位同學的課程翻譯,做得很好,在這裡也對他們表示感謝,跟課程相關的很多資源都可以在該專欄中找到。推薦大家把每個

Fisher 線性分類1----Fisher準則函式

Fisher 線性分類器由R.A.Fisher在1936年提出,至今都有很大的研究意義,下面介紹Fisher分類器的Fisher準則函式 Fisher準則函式 在模式識別的分類演算法中,大概可以分為兩類,一種是基於貝葉斯理論的分類器,該型別分類器也稱為引數判別方法,根據是基

機器學習之線性分類Linear Classifiers——腫瘤預測例項

線性分類器:一種假設特徵與分類結果存線上性關係的模型。該模型通過累加計算每個維度的特徵與各自權重的乘積來幫助決策。 # 匯入pandas與numpy工具包。 import pandas as pd import numpy as np # 建立特徵列表。 column_n

OpenCV訓練分類基於視訊的異常行為檢測

一、簡介    目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這一方法進行了改善。該方法的基本步驟為: 首先,利用樣本(大約幾百幅樣本圖片)的 harr 特徵進行分類器訓練,得到一個級聯的boosted分類器。    分類器中的"

【Python 程式碼】CS231n中Softmax線性分類非線性分類對比舉例含python繪圖顯示結果

#CS231n中線性、非線性分類器舉例(Softmax) #注意其中反向傳播的計算 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt N = 100 # num

【轉】SVM入門線性分類的求解——問題的轉化,直觀角度

content cli 樣本 image ges 五個 是你 角度 spa SVM入門(六)線性分類器的求解——問題的轉化,直觀角度 讓我再一次比較完整的重復一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若幹,如圖, 圓形的樣本點定為正樣

線性分類實現預測鳶尾花的種類python

rom dir Coding and func shape 交叉驗證 pri state 這是個人學習時跑的代碼,結果就不貼了,有需要的可以自己運行,僅供參考,有不知道的可以私下交流,有問題也可以聯系我。當然了我也只能提供一點建議,畢竟我也只是初學者 第一個頁面 # -*-

基於深度學習和遷移學習的遙感影象場景分類實踐AlexNetResNet

卷積神經網路(CNN)在影象處理方面有很多出色的表現,在ImageNet上有很多成功的模型都是基於CNN的。AlexNet是具有歷史意義的一個網路,2012年提出來當年獲得了當年的ImageNet LSVRC比賽的冠軍,此後ImageNet LSVRC的冠軍都是都是用CNN做的,並且層

# cs231n 線性分類

cs231n (二)線性分類器 標籤(空格分隔): 神經網路 0.回顧 cs231n (一)影象分類識別講了KNN k-Nearest Neighbor分類器存在以下不足: 分類器必須記住所有訓練資料並將其儲存起來,以便於未來測試資料用於比較,儲存空

機器學習:快速入門線性分類

定義 假設特徵與分類結果存線上性關係的模型,這個模型通過累加計算每個維度的特徵與各自權重的乘積來幫助類別決策。 線性關係公式 :f(w,x,b)=w^tx+b x=(x1,x2,…xn) 代表n維特徵列向量,w=(w1,w2,…wn)代表對應的權

機器學習筆記之4——Fisher分類線性判別分析,LDA

本博文為Fisher分類器的學習筆記~本博文主要參考書籍為:《Python大戰機器學習》Fisher分類器也叫Fisher線性判別(Fisher Linear Discriminant),或稱為線性判別分析(Linear Discriminant Analysis,LDA)。

Tensorflow學習筆記--使用遷移學習做自己的影象分類Inception v3

本文主要使用inception v3的模型,再後面接一個softmax,做一個分類器。具體程式碼都是參照tf github。 整體步驟: 步驟一:資料準備,準備自己要分類的圖片訓練樣本。 步驟二:retrain.py 程式,用於下載inception v3模型及訓練後面的

Python構建SVM分類線性

1.SVM建立線性分類器SVM用來構建分類器和迴歸器的監督學習模型,SVM通過對數學方程組的求解,可以找出兩組資料之間的最佳分割邊界。2.準備工作我們首先對資料進行視覺化,使用的檔案來自學習書籍配套管網。首先增加以下程式碼:import numpy as np import

cs231學習筆記二 線性分類SVMSoftmax

線性分類器 假設樣本xi∈RD,i=1…N,對應類標籤yi∈1…K。現定義一個線性對映f(xi,W,b)=Wxi+b,W是K∗D的矩陣,b是K維的向量。W和b分別稱作權重(或引數)和偏。 W的每一行都是一個分類器,每個分類器對應於一個得分。 通過學

Haar分類人臉識別人眼識別

一、Haar分類器的前世今生 人臉檢測屬於計算機視覺的範疇,早期人們的主要研究方向是人臉識別,即根據人臉來識別人物的身份,後來在複雜背景下的人臉檢測需求越來越大,人臉檢測也逐漸作為一個單獨的研究方向發展起來。 目前的人臉檢測方法主要有兩大類:基於知識和基

決策樹分類ID3C4.5 Java實現

分類 什麼是分類?舉個例子,銀行貸款員需要分析資料,以便搞清楚哪些是貸款申請者是值得信賴的。通訊公司也希望能分清楚哪些客戶容易接受某一套餐,從而定向營銷。資料分類一般又包括學習階段(構建分類器)和分類階段(使用模型預測給定資料的類標號)。 決策樹分類器

機器學習系列——樸素貝葉斯分類

表示 -h line log ima 條件 code 樸素貝葉斯 spa 貝葉斯定理: 其中: 表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。其基本求解公式為:。 機器學習系列——樸素貝葉斯分類器(二)