最近學習遇到了代價函數,在網上搜索整理了幾個容易混淆的概念:
一、定義
損失函數定義在單個樣本上,算的是一個樣本的誤差。
代價函數定義在整個訓練集上,是所有樣本誤差的平均,也就是損失函數的平均。
目標函數定義為最終需要優化的函數,等於經驗風險 + 結構風險(也就是Cost Function + 正則化項)。
損失函數和代價函數是同一個東西,目標函數是一個與他們相關但更廣的概念,對於目標函數來說在有約束條件下的最小化就是損失函數。
上面三個圖的函數依次為f1(x),f2(x),f3(x)。我們想用這三個函數分別來擬合Price,Price的真實值記為Y。我們給定x,這三個函數都會輸出一個f(x),這個輸出的f(x)與真實值Y可能相同,也可能不同。為了表示我們擬合的好壞,我們就用一個函數來度量擬合的程度,比如L(Y,f(x))=(Y-f(x))2,這個函數就稱為損失函數(loss function),或者叫代價函數(cost function)。損失函數越小,就代表模型擬合的越好。
那是不是我們的目標就只是讓loss function越小越好呢?
還不是。這個時候還有一個概念叫風險函數(risk function)。風險函數是損失函數的期望,這是由於我們輸入輸出的(X,Y)遵循一個聯合分布,但是這個聯合分布是未知的,所以無法計算。但是我們是有歷史數據的,就是我們的訓練集f(X),關於訓練集的平均損失稱作經驗風險(empirical risk),即,所以我們的目標就是最小化經驗風險,稱為經驗風險最小化。
到這里完了嗎?還沒有。
如果到這一步就完了的話,那我們看上面的圖,那肯定是最右面的f3(x)的經驗風險函數最小了,因為它對歷史的數據擬合的最好嘛。但是我們從圖上來看f3(x)肯定不是最好的,因為它過度學習歷史數據,導致它在真正預測時效果會很不好,這種情況稱為過擬合(over-fitting)。
為什么會造成這種結果?
大白話說就是它的函數太復雜了,都有四次方了,這就引出了下面的概念,我們不僅要讓經驗風險最小化,還要讓結構風險最小化。這個時候就定義了一個函數J(f),這個函數專門用來度量模型的復雜度,在機器學習中也叫正則化(regularization)。常用的有L1,L2范數。到這一步我們就可以說我們最終的優化函數是,即最優化經驗風險和結構風險,而這個函數就被稱為目標函數。
結合上面的例子來分析:最左面的f1(x)結構風險最小(模型結構最簡單),但是經驗風險最大(對歷史數據擬合的最差);最右面的f3(x)經驗風險最小(對歷史數據擬合的最好),但是結構風險最大(模型結構最復雜);而f2(x)達到了二者的良好平衡,最適合用來預測未知數據集。
這就不難理解,目標跟蹤中基於嶺回歸的目標優化問題:
二、什么是代價函數
假設有訓練樣本(x, y),模型為h,參數為θ。h(θ) = θTx(θT表示θ的轉置)。
(1)概況來講,任何能夠衡量模型預測出來的值h(θ)與真實值y之間的差異的函數都可以叫做代價函數C(θ),如果有多個樣本,則可以將所有代價函數的取值求均值,記做J(θ)。因此很容易就可以得出以下關於代價函數的性質:
- 對於每種算法來說,代價函數不是唯一的;
- 代價函數是參數θ的函數;
- 總的代價函數J(θ)可以用來評價模型的好壞,代價函數越小說明模型和參數越符合訓練樣本(x, y);
- J(θ)是一個標量;
(2)當我們確定了模型h,后面做的所有事情就是訓練模型的參數θ。那么什么時候模型的訓練才能結束呢?這時候也涉及到代價函數,由於代價函數是用來衡量模型好壞的,我們的目標當然是得到最好的模型(也就是最符合訓練樣本(x, y)的模型)。因此訓練參數的過程就是不斷改變θ,從而得到更小的J(θ)的過程。理想情況下,當我們取到代價函數J的最小值時,就得到了最優的參數θ,記為:
例如,J(θ) = 0,表示我們的模型完美的擬合了觀察的數據,沒有任何誤差。
(3)在優化參數θ的過程中,最常用的方法是梯度下降(gradient descent algorithm),這里的梯度就是代價函數J(θ)對θ1, θ2, ..., θn的偏導數。由於需要求偏導,我們可以得到另一個關於代價函數的性質:
- 選擇代價函數時,最好挑選對參數θ可微的函數(全微分存在,偏導數一定存在)
三、代價函數的常見形式
一個好的代價函數需要滿足兩個最基本的要求:能夠評價模型的准確性,對參數θ可微。
3.1 均方誤差
在線性回歸中,最常用的是均方誤差(Mean squared error),具體形式為:
m:訓練樣本的個數;
hθ(x):用參數θ和x預測出來的y值;
y:原訓練樣本中的y值,也就是標准答案
上角標(i):第i個樣本
從圖中可以很直觀的看到θ對代價函數的影響,當θ1=1時,代價函數J(θ)取到最小值。因為線性回歸模型的代價函數(均方誤差)的性質非常好,因此也可以直接使用代數的方法,求J(θ)的一階導數為0的點,就可以直接求出最優的θ值(正規方程法)。
對於有兩個參數的模型,運用梯度下降算法,更新參數的過程:
線性回歸模型的代價函數對參數的偏導數:
3.2 交叉熵
在邏輯回歸中,最常用的代價函數是交叉熵(Cross Entropy),交叉熵是一個常見的代價函數,在神經網絡中也會用到。
下面是《神經網絡與深度學習》一書對交叉熵的解釋:
交叉熵是對「出乎意料」(譯者注:原文使用suprise)的度量。神經元的目標是去計算函數y, 且y=y(x)。但是我們讓它取而代之計算函數a, 且a=a(x)。假設我們把a當作y等於1的概率,1−a是y等於0的概率。那么,交叉熵衡量的是我們在知道y的真實值時的平均「出乎意料」程度。當輸出是我們期望的值,我們的「出乎意料」程度比較低;當輸出不是我們期望的,我們的「出乎意料」程度就比較高。
線性回歸模型中,訓練集和代價函數如下圖
如果我們還用J(θ)函數做為邏輯回歸模型的代價函數,用h(x) = g(θ^T * x),將h(x)代入線性回歸的代價函數J(θ0,θ1)中,曲線如下圖所示
發現J(θ)的曲線圖是"非凸函數",存在多個局部最小值,不利於我們求解全局最小值。
因此,上述的代價函數對於邏輯回歸是不可行的,我們需要其他形式的代價函數來保證邏輯回歸的代價函數是凸函數。
這里我們先對線性回歸模型中的代價函數J(θ)進行簡單的改寫,將Cost(h(x), y) = 1/2(h(x) - y)^2 替換為:
在這里我們選擇對數似然損失函數做為邏輯回歸模型的代價函數,Cost函數可以表示如下:
為了統一表示,可以把Cost(h(x), y)表達成統一的式子,根據前面J(θ)的定義,J(θ)等於
特別說明:
- 當y=1的時候,第二項(1-y)log(1-h(x))等於0
- 當y=0的時候,ylog(h(x))等於0
根據邏輯回歸模型的代價函數以及sigmoid函數
得到對每個參數的偏導數為
詳細推導過程可以看這里-邏輯回歸代價函數的導數
3.3 神經網絡中的代價函數
學習過神經網絡后,發現邏輯回歸其實是神經網絡的一種特例(沒有隱藏層的神經網絡)。因此神經網絡中的代價函數與邏輯回歸中的代價函數非常相似:
這里之所以多了一層求和項,是因為神經網絡的輸出一般都不是單一的值,K表示在多分類中的類型數。
例如在數字識別中,K=10,表示分了10類。此時對於某一個樣本來說,假設輸出的結果如下:1.1266e-004 1.7413e-003 2.5270e-003 1.8403e-005 9.3626e-003 3.9927e-003 5.5152e-003 4.0147e-004 6.4807e-003 9.9573e-001
一個10維的列向量,預測的結果表示輸入的數字是0~9中的某一個的概率,概率最大的就被當做是預測結果。例如上面的預測結果是9。理想情況下的預測結果應該如下(9的概率是1,其他都是0):0 0 0 0 0 0 0 0 0 1
比較預測結果和理想情況下的結果,可以看到這兩個向量的對應元素之間都存在差異,共有10組,這里的10就表示代價函數里的K,相當於把每一種類型的差異都累加起來了。
神經網絡中的代價函數對參數的偏導數,待學習補充。