機器學習代價函數,損失函數理解

機器學習常見的代價函數

代價函數也被稱爲平方誤差函數,有時也被稱爲平方誤差代價函數,之所以要出誤差的平方和,是因爲誤差平方代價函數對於大多數問題,特別是迴歸問題,都是一個合理的選擇。
(1)二次代價函數(quadratic cost)
J=12nxy(x)aL(x)2 J = \frac{1}{2n}\sum_x\Vert y(x)-a^L(x)\Vert^2
​ 其中,JJ表示代價函數,xx表示樣本,yy表示實際值,aa表示輸出值,nn表示樣本的總數。使用一個樣本爲例簡單說明,此時二次代價函數爲:
J=(ya)22 J = \frac{(y-a)^2}{2}
​ 假如使用梯度下降法(Gradient descent)來調整權值參數的大小,權值ww和偏置bb的梯度推導如下:
Jb=(ay)σ(z) \frac{\partial J}{\partial b}=(a-y)\sigma'(z)
其中,zz表示神經元的輸入,σ\sigma表示激活函數。權值ww和偏置bb的梯度跟激活函數的梯度成正比,激活函數的梯度越大,權值ww和偏置bb的大小調整得越快,訓練收斂得就越快。

(2)交叉熵代價函數(cross-entropy)
J=1nx[ylna+(1y)ln(1a)] J = -\frac{1}{n}\sum_x[y\ln a + (1-y)\ln{(1-a)}]
其中,JJ表示代價函數,xx表示樣本,yy表示實際值,aa表示輸出值,nn表示樣本的總數。
權值ww和偏置bb的梯度推導如下:
Jwj=1nxxj(σ(z)y)  Jb=1nx(σ(z)y) \frac{\partial J}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\sigma{(z)}-y)\;, \frac{\partial J}{\partial b}=\frac{1}{n}\sum_{x}(\sigma{(z)}-y)
當誤差越大時,梯度就越大,權值ww和偏置bb調整就越快,訓練的速度也就越快。
二次代價函數適合輸出神經元是線性的情況,交叉熵代價函數適合輸出神經元是S型函數的情況。

(3)對數似然代價函數(log-likelihood cost)
對數似然函數常用來作爲softmax迴歸的代價函數。深度學習中普遍的做法是將softmax作爲最後一層,此時常用的代價函數是對數似然代價函數。
對數似然代價函數與softmax的組合和交叉熵與sigmoid函數的組合非常相似。對數似然代價函數在二分類時可以化簡爲交叉熵代價函數的形式。
在tensorflow中:
與sigmoid搭配使用的交叉熵函數:tf.nn.sigmoid_cross_entropy_with_logits()
與softmax搭配使用的交叉熵函數:tf.nn.softmax_cross_entropy_with_logits()
在pytorch中:
與sigmoid搭配使用的交叉熵函數:torch.nn.BCEWithLogitsLoss()
與softmax搭配使用的交叉熵函數:torch.nn.CrossEntropyLoss()
### 用交叉熵代替二次代價函數

(1)爲什麼不用二次方代價函數
由上一節可知,權值ww和偏置bb的偏導數爲Jw=(ay)σ(z)x\frac{\partial J}{\partial w}=(a-y)\sigma'(z)xJb=(ay)σ(z)\frac{\partial J}{\partial b}=(a-y)\sigma'(z), 偏導數受激活函數的導數影響,sigmoid函數導數在輸出接近0和1時非常小,會導致一些實例在剛開始訓練時學習得非常慢。

(2)爲什麼要用交叉熵
交叉熵函數權值ww和偏置bb的梯度推導爲:
Jwj=1nxxj(σ(z)y)  Jb=1nx(σ(z)y) \frac{\partial J}{\partial w_j}=\frac{1}{n}\sum_{x}x_j(\sigma{(z)}-y)\;, \frac{\partial J}{\partial b}=\frac{1}{n}\sum_{x}(\sigma{(z)}-y)
由以上公式可知,權重學習的速度受到σ(z)y\sigma{(z)}-y影響,更大的誤差,就有更快的學習速度,避免了二次代價函數方程中因σ(z)\sigma'{(z)}導致的學習緩慢的情況。

2. 損失函數

2.1 什麼是損失函數

​ 損失函數(Loss Function)又叫做誤差函數,用來衡量算法的運行情況,估量模型的預測值與真實值的不一致程度,是一個非負實值函數,通常使用$
L(Y, f(x))$來表示。損失函數越小,模型的魯棒性就越好。損失函數是經驗風險函數的核心部分,也是結構風險函數重要組成部分。

2.2 常見的損失函數

​ 機器學習通過對算法中的目標函數進行不斷求解優化,得到最終想要的結果。分類和迴歸問題中,通常使用損失函數或代價函數作爲目標函數。
​ 損失函數用來評價預測值和真實值不一樣的程度。通常損失函數越好,模型的性能也越好。
​ 損失函數可分爲經驗風險損失函數和結構風險損失函數。經驗風險損失函數指預測結果和實際結果的差別,結構風險損失函數是在經驗風險損失函數上加上正則項。
​ 下面介紹常用的損失函數:

(1)0-1損失函數
如果預測值和目標值相等,值爲0,如果不相等,值爲1。
L(Y,f(x))={1,Yf(x)0,Y=f(x) L(Y, f(x)) = \begin{cases} 1,& Y\ne f(x)\\ 0,& Y = f(x) \end{cases}
一般的在實際使用中,相等的條件過於嚴格,可適當放寬條件:
L(Y,f(x))={1,Yf(x)T0,Yf(x)<T L(Y, f(x)) = \begin{cases} 1,& |Y-f(x)|\geqslant T\\ 0,& |Y-f(x)|< T \end{cases}
(2)絕對值損失函數
和0-1損失函數相似,絕對值損失函數表示爲:
L(Y,f(x))=Yf(x) L(Y, f(x)) = |Y-f(x)|​
(3)平方損失函數
L(Y,f(x))=N(Yf(x))2 L(Y, f(x)) = \sum_N{(Y-f(x))}^2
這點可從最小二乘法和歐幾里得距離角度理解。最小二乘法的原理是,最優擬合曲線應該使所有點到迴歸直線的距離和最小。

(4)對數損失函數
L(Y,P(YX))=logP(YX) L(Y, P(Y|X)) = -\log{P(Y|X)}
​ 常見的邏輯迴歸使用的就是對數損失函數,有很多人認爲邏輯迴歸的損失函數是平方損失,其實不然。邏輯迴歸它假設樣本服從伯努利分佈(0-1分佈),進而求得滿足該分佈的似然函數,接着取對數求極值等。邏輯迴歸推導出的經驗風險函數是最小化負的似然函數,從損失函數的角度看,就是對數損失函數。

(6)指數損失函數
指數損失函數的標準形式爲:
L(Y,f(x))=exp(Yf(x)) L(Y, f(x)) = \exp(-Yf(x))
例如AdaBoost就是以指數損失函數爲損失函數。

(7)Hinge損失函數
Hinge損失函數的標準形式如下:
L(y)=max(0,1ty) L(y) = \max{(0, 1-ty)}
統一的形式:
L(Y,f(x))=max(0,Yf(x)) L(Y, f(x)) = \max{(0, Yf(x))}
其中y是預測值,範圍爲(-1,1),t爲目標值,其爲-1或1。

在線性支持向量機中,最優化問題可等價於
w,bmini=1N(1yi(wxi+b))+λw2 \underset{\min}{w,b}\sum_{i=1}^N (1-y_i(wx_i+b))+\lambda\Vert w\Vert ^2
上式相似於下式
1mi=1Nl(wxi+byi)+w2 \frac{1}{m}\sum_{i=1}^{N}l(wx_i+by_i) + \Vert w\Vert ^2
其中l(wxi+byi)l(wx_i+by_i)是Hinge損失函數,w2\Vert w\Vert ^2可看做爲正則化項。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章