幾乎所有的機器學習算法最後都歸結爲求解最優化問題,以達到我們想讓算法達到的目標。爲了完成某一目標,需要構造出一個“目標函數”來,然後讓該函數取極大值或極小值,從而得到機器學習算法的模型參數。如何構造出一個合理的目標函數,是建立機器學習算法的關鍵,一旦目標函數確定,接下來就是求解最優化問題,這在數學上一般有現成的方案。如果你對最優化算法感興趣,可以閱讀SIGAI之前的公衆號文章“理解梯度下降法”,“理解牛頓法”,“理解凸優化”,“機器學習中的最優化算法總結”。本文的側重點是對目標函數的構造進行總結。

下面我們將介紹機器學習中一些典型的目標函數的構造思路,並對各種算法的目標函數做一個總結。按照用途和要解決的問題,機器學習算法可以分爲有監督學習,無監督學習,強化學習3種類型。其中,有監督學習又進一步細分爲分類問題與迴歸問題,無監督學習算法分爲聚類問題和數據降維問題。概括起來,各類算法要解決的核心問題是:

對於有監督學習中的分類問題與迴歸問題,機器學習算法尋找一個映射函數:

爲輸入的樣本數據預測出一個實數值或類別標籤。不同的是,分類問題要確定樣本的類別,即回答“是什麼”的問題;迴歸問題要預測出一個實數值,即回答“是多少”的問題。例如,如果要確定一張圖像是貓還是狗,則爲分類問題,算法的輸入爲圖像,輸出爲類別編號。如果我們要根據一個人的年齡、學歷、行業等信息預測他/她的收入,則屬於迴歸問題。二者都是要確定上面這種形式的函數。

對於無監督學習的聚類問題,機器學習算法要尋找一個集合的劃分,將樣本集D劃分成多個不相交的子集:

每個樣本屬於這些子集中的一個,因此可以概括爲解決“怎麼分的問題”,與分類問題不同的是,這裏沒有人工事先定義好的類別,因此也沒有訓練過程。例如,如果要將一批新聞劃分爲不同類型的,就屬於聚類問題,這裏沒有實現定義好的類,算法自己完成劃分,這些類可能是政治、體育、娛樂、經濟、軍事等。

對於數據降維問題,機器學習算法要尋找一個映射函數,將一個高維向量映射成一個低維向量:

但要儘可能的保留之前向量的一些重要信息。

對於強學習,機器學習算法要爲每種狀態s下確定一個動作a來執行,即確定策略函數,使得執行這些動作之後得到我們預期的結果:

執行動作後會得到獎勵,這個預期的結果是讓獎勵最大化。例如,用強化學習來實現自動駕駛,要根據當前的路況來決定怎麼開車,這裏的路況就是狀態,開車就是動作,通過控制汽車去我們想去的目的地,這就是目標。

上面這些算法要完成的目標是一個抽象的概念,具體實現時,要通過一個“目標函數”來體現,算法要通過讓目標函數取極大值或極小值來確定模型的參數。

有監督學習

首先來看有監督學習,要確定一個映射函數,這個函數帶有參數,而參數則通過訓練樣學習得到。假設映射函數爲:

其中θ是模型的參數,如何確定它的值,是訓練算法的核心。一般來說,我們稱有監督學習的目標函數爲“損失函數”,它通過模型對每個訓練樣本x的預測值y與訓練樣本的真正標籤值y來構造。其含義是,如果算法預測錯了,則有損失,因此該函數反映了映射函數的預測值與樣本真實標籤值之間的誤差。讓誤差最小化,就是讓損失函數最小化:

某些有監督的機器學習算法擬合的是概率密度函數或者某一概率分佈,此時需要根據樣本來確定概率分佈的參數。在學習概率論與數理統計時我們知道,確定一個概率分佈的參數最常用的是最大似然估計,它求解如下的似然函數最大化問題:

求解函數極值時需要對參數求導,這種連乘形式的函數求導不方便,因此對似然函數取對數,得到對數似然函數:

這類問題的核心是根據一組樣本來估計概率分佈的參數,使得在參數θ取最優值的時候,這組樣本出現的概率最大。下面針對分類問題和迴歸問題,分別總結常用的目標函數。

分類問題

對於分類問題,預測函數的輸出值是離散化的類別標籤。給定一組訓練樣本,在訓練時的目標是讓這組訓練樣本儘量被正確的分類,這對應於經驗風險最小化的思想。

感知器算法的是最簡單的線性分類器,它的目標是讓所有樣本儘可能分類。對於二分類問題,線性分類器的判別函數爲:

樣本的標籤值爲+1或-1,分別對應正樣本和負樣本。如果線性函數預測出來的值和樣本的真實標籤值不同號,則預測錯誤;如果同號,則預測正確。要將預測錯誤最小化,只需求解如下最優化問題即可:

對於每個訓練樣本,如果預測正確,則損失函數爲負,否則爲正。這樣我們就構造出了一個容易求解的損失函數。

對於二分類或多分類問題,都可以用歐氏距離作爲分類的損失函數。對於多分類問題,一般不直接用類別編號作爲預測值,而是爲類別進行向量化編碼,如one-hot編碼。此時損失函數定義爲:

在人工神經網絡發展的早期,這種函數被廣泛使用,但後來對於多分類問題,更多的採用交叉熵損失函數。在後面我們會介紹此函數,至於原因,在SIGAI之前的公衆號文章“【羣話題精華】五月集錦——機器學習和深度學習中一些值得思考的問題”中曾經做過說明,感興趣的讀者可以閱讀這篇文章。

線性判別分析(LDA)是一種有監督的數據降維算法,它的目標是最大化類間差異,最小化類內差異。數據經過投影之後,在低維空間裏,同類樣本聚集在一起,不同類的樣本相距儘可能遠。類內差異用每個類的方差來衡量,類間差異用各個類的類中心之間的距離來衡量,二者的比值爲我們要優化的目標。由此構造出如下損失函數:

求解這一問題最後歸結爲求解矩陣的特徵值問題。

前面介紹的感知器算法的目標函數,歐氏距離損失,代表的都是經驗風險,即在訓練樣本集上讓誤差最小化。這樣做的泛化性能不一定好,還有一種做法爲結構化風險最小化,典型代表是支持向量機。

支持向量機不僅要讓所有訓練樣本儘可能被正確分類,還要讓分類間隔最大化,根據解析幾何中點到超平面的距離公式,我們構造出了它的優化目標:

這和前面一種表述是等價的。此時,目標函數的前半部分充當正則化項,後半部分充當真正的損失函數,用於對違反約束的樣本進行懲罰。

前面說過,對於輸出概率值的模型,可以採用最大似然估計來估計模型的參數。典型的代表是logistic迴歸。對於二分類問題,如果樣本的類別標籤值爲1和0,則對數似然函數爲:

將logistic迴歸推廣到多分類問題,即softmax迴歸,它輸出一個樣本屬於每個類的概率值。因此,訓練樣本的標籤值爲一個向量,如果樣本屬於某一類,該分量爲1,其他分量爲0。損失函數根據標籤向量與預測出的概率向量構造,使用的是softmax交叉熵,定義爲:

而交叉熵損失定義爲:

它在深度神經網絡中被廣泛使用。

AdaBoost算法訓練時優化的目標函數爲指數損失函數,它根據強分類器的輸出值F(x)與樣本的標籤值構造:

在這裏,樣本的標籤值爲-1或+1,對應於負樣本和正樣本。強分類器通過加法模型構造,求解時每次優化一個弱分類器和它的權重,具體做法在之前的公衆號文章“理解AdaBoost算法”中已經介紹,由此可以推導出AdaBoost的訓練算法。

神經網絡尤其是深度學習中使用的損失函數種類繁多,除了傳統的歐氏距離之外,還有近幾年流行的交叉熵,以及其他函數,下表列出了常用的一些損失函數以及它們的導數:

在這裏,求導是對神經網絡的預測數據進行的。損失層是神經網絡訓練時的最後一層,它也只用於訓練階段。在實現反向傳播算法時,它是梯度反向傳播的起點。

需要說明的是,對前面介紹的很多損失函數,我們都可以加上正則化項,得到新的損失函數,以減輕過擬合。

查看原文 >>
相關文章