第8章 參數化學習(parameterized learning)
前一章中,我們學習了KNN,雖然它簡單但是不能從數據中學習,僅是利用了測試數據點和訓練數據點之間的距離度量,這在數據量很大時,測試時間以及需要保存的數據量的缺陷將非常明顯。因此,它既浪費了資源,又不能很好地構建機器學習模型。
相反,一個更理想的方法是定義一個機器學習模型,可以在訓練期間從我們的輸入數據中學習模式(要求我們在訓練過程中花費更多的時間),但它的優點是可以用少量的參數來定義,這些參數可以很容易地用來表示模型,而不用考慮訓練集的大小。這種學習類型稱為參數化學習(parameterized learning),定義為:一個參數化模型是用一組固定大小的參數集合(獨立於訓練示例的大小)來總結數據的學習模型。無論你給參數化模型輸入多少數據量,它都不會更改它所需要的參數數量。
本章中,我們回顧參數學學習的概念,並且怎樣實現一個簡單的線性分類器。就像在本書后面看到的,參數化學習是現代機器學習和深度學習算法的轉折點。
1 線性分類介紹
本章的前半部分關注與線性分類的基本理論和數學教學,和更一般的參數化分類算法,這種算法從訓練數據中學習模式。之后,提供一個用python實現的線性分類的例子來學習在代碼中這些算法是如何工作的。
1.1 參數化學習的4個部件
從現在開始,參數化(parameterized)將分為幾種情況,簡單來說,參數化(parameterization)是定義一個給定模型必要參數的過程。在機器學習任務中,參數化涉及定義一個問題的4個關鍵部件:data、a score function、a loss function、weights and bias。
(1) data:
這個部件就是我們要學習的輸入數據,數據包括數據點和對應的類別標簽,通常我們依據多維涉及矩陣來表示數據。
在多維設計矩陣中,每一行代表一個數據點,而每一列(通常是一個多維數組)對應一個不同的特征。例如考慮一個RGB顏色空間的100張圖像的數據集,每個圖像32*32像素。這個數據集設計的矩陣將是
這里
表示R中的第i個圖像。依據這種表示,我們定義向量y,
表示數據集中第i個示例對應的標簽。
(2) a score function
評分函數(score function)接收數據作為輸入,且將數據匹配到類別標簽。例如在輸入圖像例子中,通過一個評分函數f,根據輸入數據,得到一個預測的類別標簽輸出:

(3)a loss function
損失函數(loss function)量化我們預測的類別標簽和真實的標簽之間的一致程度。即這兩類標簽的一致成都越高,損失越低(或者至少在訓練集上,精確度越高)。當訓練一個機器學習模型時,我們的目標就是最小化損失函數,即增加分類精確度。
(3) weights and biases
通常,用W表示的權重矩陣和用b表示的偏置向量,稱為我們實際將要優化的分類器的權重或參數。基於評分函數和損失函數的輸出,我們將調整和篡改權重和偏置的值來增加分類精確度。
基於你的模型類型,可能存在許多參數,但是在最基本的層面上,你通常面對的就是這4個參數化學習的構建模塊。一旦我們定義了這4個關鍵部分,我們就可以應用優化方法(optimization methods),讓我們找到一組參數W和b,使我們的損失函數相對於我們的評分函數最小化(同時提高我們數據的分類精度)。
接下來,我們看一下這些部件是如何工作在一起來構建一個線性分類器的,能夠將輸入數據轉換為真正的預測。
1.2 線性分類:從圖像到標簽
這一節,我們將看一下參數化學習應用到機器學習的數學過程。首先,我們需要數據data,我們假定數據集由
和每個圖像對應的類別標簽
表示。我們還將假定
且
,暗示在維度
上有 N個數據點,分屬於K 個獨立的類別中。
為了更精確,考慮第7章中的“Animals”數據集,在這個數據集中,總共有N=3000張圖像,每張圖像表示RGB空間的32*32像素,即D=32*32*3=3072個不同值,最后,有K=3個類別,分別為cats、dogs、pandas。
考慮到這些變量,我們必須定義一個評分函數f 將圖像匹配到類別標簽分數上。一種方法是通過簡單的線性匹配來完成分數:

我們考慮每一個
表示大小為[D*1] 的單個的列向量(在這個例子中,將32*32*3轉為3072的列表),我們的權重矩陣W將是大小為[K*D] (K為類別標簽的數目)。最后偏置向量b大小為[K*1] ,偏置向量允許我們在不影響權重矩陣W的情況下,將我們的評分函數向一個方向或另一個方向上移動或調整。(意思是,在權重定了時,通過偏置b來調整到最佳位置?)
在Animals例子中,圖1表示線性分類函數f的例子。
圖1 線性分類的例子
圖1中左側的輸入圖像為32*32*3大小,通過特征提取,將3D數組圖像轉變為1D列表,權重W包括三行(每行代表一類)和3072列(每一列表示圖像的一個像素),加上偏置b后,就獲得了最終的評分。
實際上,依據參數化學習,我們僅需要控制的參數就是權重W和偏置b。因此,我們的目標就是同時利用評分函數和損失函數來優化權重W和偏置b提高分類精確度。
優化權重矩陣精確的依賴於損失函數,但是通常涉及一些梯度下降(gradient descent)算法的形式。本章后面將回顧一下,但是梯度下降(和變種)的優化方法將在第9章討論。但是,此時,我們知道只要給定了評分函數,我們也需要定義一個損失函數來告訴我們在輸入數據上我們的預測有“多好”。
1.3 參數化學習和線性分類的優勢
利用參數化學習有兩個主要優勢:
(1) 一旦我們訓練好模型,就可以丟棄掉輸入數據,僅需要保存權重矩陣W和偏置向量b,這將極大降低緩存大小。
(2) 對新的測試數據的分類是非常快的。為了執行預測,我們僅需要做的就是將權重矩陣W與輸入
相乘,然后加上偏置b,獲得結果。
1.4 用python實現的簡單線性分類器
現在我們了解了參數化學習和線性分類的概念,下面使用python來應用一個簡單的線性分類器。這個例子的目的不是從頭來來從開始到結束訓練模型,而是為了應用權重W和偏置b通過點乘對一個圖像進行分類。代碼見git倉庫
https://github.com/shengqishi8787/Starter_Bundle.git下的chapter8
如果我們從頭開始訓練線性分類器,那么需要通過優化過程來學習權重W和偏置b的值。這里我們以Animals數據集的一張圖片為例,那么圖像轉為向量為3072維,這里且以隨機數來模擬權重W和偏置b。通過python linear_example.py將能夠顯示一張打了標簽的圖像。
實際上,我們從不需要自己初始化權重和偏置,而是,通過我們從頭訓練自己的機器學習模型,通過優化算法如梯度下降來優化和學習W和b。
2 損失函數的作用
為了通過我們的評分函數真正“學習”從輸入數據到類標簽的映射,我們需要討論兩個重要的概念:(1)損失函數;(2)優化方法。
本節接下來將討論在神經網絡和深度學習中常見的損失函數。在Starter Bundle的第9章將討論基本的優化方法,在Practitioner Bundle的第7章將討論更高級的優化方法。
本章只是損失函數的簡要介紹,以及在參數化學習的作用。關於損失函數的更詳盡的討論以及數學化的嚴格推導見Andrew Ng’s Coursera course [76], Witten et al. [77], Harrington [78], and Marsland [79]。
2.1 什么是損失函數?
在最基本層面上,損失函數衡量一個給定分類器在分類數據集中輸入數據點時有多好或多壞。如圖2表示在CIFAR-10上兩個分類器的模型的直觀感受。
圖2 兩個模型的損失曲線示意圖
損失越小,分類器在建模輸入數據和輸出類標簽之間的關系方面做得越好(盡管我們可以在某種程度上過擬合(overfit)我們的模型——通過對訓練數據進行過於緊密的建模,我們的模型失去了概括的能力,這種現象在第17章中討論)。即損失越大,我們越需要做很多工作來增加分類精確度。
為了提高分類精確度,我們需要調整權重矩陣W和偏置b。如何更新這些參數是一個優化問題,這將在下一章中討論。此時,只需知道損失函數可以用來度量我們的評價函數在分類數據點上有多好。
理想上,損失應當隨着我們調整模型參數在時間上是降低的。從圖2看出模型1開始稍微比模型2高,但之后快速下降且保持較低損失,我們說模型1可能是更期望的模型。“可能”是因為模型1還可能在輸入數據集上過擬合,我們將在第17章討論過擬合以及如何識別它。
2.2 多分類SVM損失
多分類SVMs損失(顧名思義)是由(線性)支持向量機(SVMs)啟發而來,它使用一個評分函數f將我們的數據點映射到每個類標簽的數字分數。函數f是一個簡單的學習匹配:
既然我們有了損失函數,我們需要確定這個函數(在給定W和b時)在做出預測時多好或多壞。為了更精確,我們需要損失函數。
當創建機器學習模型時,我們有設計矩陣X ,它的每一行表示要分類的數據點。在圖像分類中,X 的每一行表示一個圖像,我們說在 X中的第i個圖像為
。類似的, X對應的每一個類標簽構成列向量y ,y 的值是標簽的真實值,即是我們的評價函數希望正確預測的值。我們說對於一副圖像
,它對應的真實標簽為
。
不失一般性,我們用 簡化評價函數:

這意味着我們可以通過第i個數據點獲得第j個類別的預測分數:

使用這種語法,我們可以獲得鉸鏈損失函數(hinge loss function):

從本質上說,鉸鏈損失函數是在所有不正確的類(
)上求和,並比較了我們的j類標簽(不正確的類)和
類(正確的類)的評分函數s的輸出。
當損失
=0時,
分類正確。為了推導整個訓練數據集上的損失,我們使用加權平均來計算:

另一種相關的損失函數為平方鉸鏈損失(squared hinge loss):

平方項通過平方輸出來懲罰。可看出,損失函數獨立於數據集,更常見的是使用標准hinge loss,在一些數據集上使用squared hinge可能會獲得較高准確率。但要知道,損失函數可被考慮為一個可以調整的超參數。
2.3 交叉熵損失和softmax分類器
雖然hinge loss是相當流行的,但在深度學習和卷積神經網絡的背景下,你更有可能遇到交叉熵丟失(cross-entropy loss)和softmax分類器。
簡單來說,softmax為每個類別標簽給出概率,而hinge給出的是邊界(margin)。對人類來說,概率要比邊界評分更容易理解。
Softmax分類器是Logistic Regression二元形式的推廣。
為了簡潔性,評價函數中我們忽略偏置b:

不像hinge loss,我們對每個類標簽使用未歸一化的log概率來解釋得分,這里使用交叉熵損失來替換hinge loss function:

首先,我們的損失函數是將正確分類的負log概率最小:

這個概率可表示為:

即我們可以獲得單個數據點的評分函數:

通過指數求和的指數化和歸一化是我們的softmax function。這里,忽略了歸一化(regularization)項,這將在第9章討論。
3 附錄
[76] Andrew Ng. Machine Learning. https : / / www . coursera . org / learn / machine -learning (cited on pages 88, 132, 137, 141).
[77] Ian H. Witten, Eibe Frank, and Mark A. Hall. Data Mining: Practical Machine Learning Tools and Techniques. 3rd. San Francisco, CA, USA: Morgan Kaufmann Publishers Inc., 2011. ISBN: 0123748569, 9780123748560 (cited on page 88).
[78] Peter Harrington. Machine Learning in Action. Greenwich, CT, USA: Manning Publications Co., 2012. ISBN: 1617290181, 9781617290183 (cited on page 88).
[79] Stephen Marsland. Machine Learning: An Algorithmic Perspective. 1st. Chapman & Hall/CRC, 2009. ISBN: 1420067184, 9781420067187 (cited on page 88).
