監督學習中通常通過對損失函數最優化(最小化)來學習模型。
本文介紹了幾種損失函數和正則化項以及正則化對模型的影響。
損失函數
損失函數度量模型一次預測的好壞,風險函數度量平均意義下模型預測的好壞。
模型的輸入輸出是隨機變量(X,Y)遵循聯合分布P(X,Y),損失函數的期望是:
這稱為風險函數或期望損失。
學習的目標就是選擇期望風險最小的模型,由於聯合分布是未知的,所以上式無法直接計算。
對於一個有N個樣本的訓練數據集的平均損失稱為經驗風險(empirical risk)或經驗損失(empirical loss):\(R_{emp}(f)={1\over N}\sum_{i=1}^NL(y_i,f(x_i))\)。
根據大數定理,當樣本容量N趨於無窮時,經驗風險趨於期望風險,所以在現實當中使用經驗風險來估計期望風險。
經驗風險最小化 & 結構風險最小化
經驗風險最小化
:
當樣本容量足夠大時具有良好的學習效果。然而當樣本容量小時可能產生過擬合現象。
結構風險最小化
是為了防止過擬合而提出來的策略,添加了正則化(regularization):
其中\(J(f)\)是模型的復雜度.
幾種損失函數
1.Softmax(cross-entropy loss)
Softmax分類器是logistic(二類)泛化到多類的情況。
Softmax函數 \(f_j(z)=\frac{e^{z_j}}{\sum_k e^{z_k}}\) 將輸入值轉換到[0,1]區間內,可以作為類別概率值或者置信度。Softmax使得最大的\(z_j\)輸出結果最接近1,其余接近0,另外可使負數變成非負。
Softmax函數取負對數得到cross-entropy loss。通常人們使用"softmax loss"這個詞時指的就是cross-entropy loss,有時也稱對數似然損失。
\(z_j\)表示在類別j上的得分,\(y_i\)表示真實類別.損失值的范圍為\([+\infty,1]\),在真實類別上的得分越高,損失越低.
Softmax 總體樣本的損失為:
其中\(p_{i,j} = \frac{\exp(z_{i,j})}{\sum_j \exp(z_{i,j})}\) 表示樣本 i 預測類別為 j 的概率. \(z_{j}\) 是前一層的輸出 \(a_{j}^{L-1}\)的線性組合:\(z_{j}=w_ja_{j}^{L-1}+b_j\).
偏導:
極大似然估計視角
與極大似然估計法推導邏輯回歸損失一樣, 求極大似然轉換為求極小負對數:
信息論視角
真實分布p
和估計分布q
之間的cross-entropy為\(H(p,q)=−∑_xp(x)\log q(x)\),Softmax分類器正是為了最小化估計的類別概率(\(q=\frac{e^{s_{y_i}}}{\sum_j e^{s_j}}\))和真實值(p=[0,…1,…,0],在yi位置處是一個單獨的1)的交叉熵。另外,交叉熵又可寫作:\(H(p,q)=H(p)+D_{KL}(p||q)\),即p的熵和KL散度(Kullback-Leibler divergence,一種距離度量方式)的和。由於H(p)=0,所以最小化損失函數即最小化KL散度,意味着使預測值更接近真實值。
caffe中的多類邏輯回歸損失: MultinomialLogisticLossLayer 直接接收前一層的每類概率預測值,loss為\(E=-{1\over N}\sum_{n=1}^N\log(\hat p_{n,l_n})\),其中\(\hat p_{n,l_n}\)表示第n個樣本真實類別標簽\(l_n\)多對應的預測值,而其它類別的值為0,乘積為0,所以公式較為簡單。
如果想直接由置信度等非概率值計算損失,可以采用SoftmaxWithLossLayer ,其作用等同於先使用SoftmaxLayer映射成概率分布, 再接上 multinomial logistic loss. 唯一不同之處在於SoftmaxWithLossLayer梯度數值計算比分成兩層計算更穩定.
提高數值穩定性的技巧:由於指數計算結果可能很大,對較大的數進行除法操作可能不穩定,可以采用如下轉換技巧將數值減小:
常用的C值設為\(\log C = -\max_j f_j\). 但是如果數據跨度比較大的話,Softmax的結果不能很好地刻畫原數據中的相互大小關系, 需要控制數據的維度.
2.logistic loss
使用均方誤差(Mean Squared Error, MSE)損失(\(L={1\over 2N}\sum_i^N (\hat y_i-y_i)^2\), 或稱L2 損失)進行梯度下降訓練時loss的下降曲線可能同sigmoid曲線一樣先慢中間快最后又慢,原因是最后層用了sigmoid,並且求偏導會包含sigmoid的導數.那么,在不舍棄sigmoid的情況下如何增快學習?能否讓loss曲線更平滑?
logistic loss函數定義:
表示n種輸入情況x對應結果的平均.其中,y為期望值(只有0,1兩種值),a為輸出值a=sigmoid(wx+b).
損失函數需要滿足兩個條件:
- 函數值非負
- 當輸出值趨近於期望值時,函數值趨於0(相同時等於0就更好了)
而logistic loss函數同時滿足這兩個條件,因此可以作為損失函數.對於第二個條件的驗證可能不太容易,讓a=y時畫出函數曲線可能比較直觀.簡單的驗證方法是讓所有的y設為1,則a趨於1時函數值趨於0.
下面求梯度:
從中可以看出學習的快慢取決於error=a-y,誤差大時學得快,小時學得慢.
拓展到多層網絡多輸出y值的情況,L表示最后一層:
總結:logistic loss幾乎總是比均方損失函數好;如果在輸出層使用的是線性激勵而不是sigmoid這樣的非線性層,那么使用差方函數是可以的,不會存在由於初始參數設置不當而學習率開始比較慢的問題.
別名:logarithmic loss(log loss,二值標簽通常為{-1,+1}),有時候也稱為cross-entropy loss(名字有些混亂,與Softmax使用的損失函數類似,也是從cross entropy推出來的)。
換種形式表示:
sigmoid同樣涉及指數運算,需要規避溢出問題(在log的參數接近0時得到負無窮).
將\(\hat y_i={1\over 1+e^{-x_i}}\)代入\(L(w)\),化簡可得:
當\(x_i\ge 0\)時,\(L(w)\)中的log項可以通過\(-x_i-\log(1+e^{-x_i})\)計算;
當\(x_i\lt 0\)時,log項可以通過\(-\log(1+e^{x_i})\)來計算.
L2 均方損失和交叉熵損失之間的區別:
均方損失主要做回歸問題,也可以用於分類.而交叉熵損失僅用於分類.這兩者的顯著區別是交叉熵損失僅考慮真實類別所輸出的值,而均方損失考慮每個類別. 均方損失的結果會服從高斯分布,而高斯分布正是連續變量的分布,均方損失可由高斯分布的極大似然估計的負對數得到:
Softmax 回歸 vs. k 個二元分類器
如果各個類別是互斥的,那么選擇softmax回歸分類器更合適 。如果類別間有交叉或者是父子關系,建立多個獨立的 logistic 回歸分類器更加合適。
3.hinge loss (SVM)
Hinge loss 用於最大化間隔分類器中(以SVM分類器為代表)。
二分類損失函數定義為:\(\ell(y) = \max(0, 1-t \cdot y)\),其中y表示分類器的輸出值,t為真實類別(t = ±1),那么當t與y符號相同時,損失較小。符號相反時隨y單調遞增。
損失函數的形狀類似“合頁”(藍色線 E(z) = max(0,1-z)
):
多分類損失函數的一種定義形式為(Weston and Watkins提出)[1]:
表示樣本 x 上的損失,\(s_j=f(x_i,W)_j\)為第j類的得分,所以設計該損失的目標是使預測的其它類別的得分相比於真實類別的得分低於\(\Delta\)這個數量(如\(\Delta\)取1).其中\(\Delta\)是軟間隔。可以看到這種損失的定義方式僅考慮不正確的預測類別。另有其它定義方式[1:1]。
多個損失函數組合
caffe網絡中可以定義多個損失層,如EUCLIDEAN_LOSS
與SOFTMAX_LOSS
,並設置\(\lambda\)為loss_weight: 100.0
,那么損失函數為:
參數正則化
單憑最小化簡單的損失函數可能會過擬合,過擬合時參數往往較多(波動大),那么可以考慮將參數加入到損失函數中去限制波動.通常通過正則化懲罰減小過擬合是很有必要的.
L1正則項
L1正則化項為\(\lambda\sum|\theta_j|\) ,\(\lambda\)是正則化的強度。其導數是\(\lambda w\),則權重更新為:W += -lambda * W
,可以看出是線性遞減的。L1正則化有"截斷"作用,可以在特征選擇中使用L1正則化有效減少特征的數量(Lasso會自動進行參數縮減和變量選擇)。
原損失函數為\(C_0\),則L1: \(C=C_0+{\lambda\over n}\sum_w |w|\),梯度下降的更新為:
符號函數在\(w\)大於0時為1,小於0時為-1.在\(w=0\)時\(|w|\)沒有導數,因此可令sgn(0)=0,在0處不使用L1正則化.
L2正則項
L2正則化項為\(\lambda\sum_{j=1}^n\theta_j^2\)
加上L2損失后\(C=C_0+{\lambda\over 2n}\sum_w w^2\),使得網絡偏向於學習比較小的權重.
L2對偏導的影響.相比於未加之前,權重的偏導多了一項\({\lambda\over n}w\),偏置的偏導沒變化.那么在梯度下降時\(w\)的更新變為:\(w\to w-\eta ({\partial C_0\over\partial w}+{\lambda\over n}w)=(1-{\eta\lambda\over n})w-\eta{{\partial C_0\over\partial w}}\),可以看出\(w\)的系數使得權重下降加速,因此L2正則也稱weight decay(caffe中損失層的weight_decay參數與此有關).對於隨機梯度下降(對一個mini-batch中的所有x的偏導求平均):
L1 vs. L2 :
- L1減少的是一個常量,L2減少的是權重的固定比例
- 孰快熟慢取決於權重本身的大小:權重較大時可能L2快,較小時L1快.
- 因為1范數不可導,因此L1的沒有解析解(閉式解)。
關於L1和L2正則的更詳細分析,參考Lasso回歸與Ridge回歸 pdf
L1 相比於 L2 為什么容易獲得稀疏解?
L1項在0點附近的導數為正負1, 而L2在0點附近的導數比L1的要小, 這樣L1使得接近於0的參數更容易更新為0. 而L2的在0點附近的梯度遠小於1時對參數更新不再起作用,因此得到的參數存在很多接近於0但不是0的情況. 其實也是一場原損失函數與正則項之間的拉鋸戰.[2]
L1, ReLU怎么求導?
在0點處不可導, 多種辦法解決:
- 次梯度法
- 坐標下降法
- 近似方法, 在0點附近的區域用可微分的近似函數替代
什么是次梯度
次梯度法能夠用於不可微的目標函數。當目標函數可微時,對於無約束問題次梯度法與梯度下降法具有同樣的搜索方向。
次導數:對於一元函數來講,若在點x處的左導數<右導數,那么在該點的次導數是一個集合:[左導數,右導數],即大於左導數小於右導數的任意數值都可以作為該點的次導數。考慮y=|x|,在x=0處的左導數是-1,右導數是1,那么在該點的次導數就是從-1到1的所有數值組成的集合。
ReLU (= max{0, x}) 函數在0點的次導數是[0,1]; L1 norm在0點的次導數是[-1,1]. 那么我們該怎么使用次導數呢? 我們可以從區間中選擇其中一個值作為0點的導數. 但是如果不同的取值會造成不同的結果, 采用次梯度法進行最優值的搜索將會非常耗時. 幸運的是在前向傳播中ReLU/abs(0)的結果為0時,反向傳播時梯度需要乘上前向傳播的結果,梯度總是為0,所以ReLU在0點的梯度值設置成任意值均可. 因此在反向傳播過程中取[0,1]中的任意值均可. 而通常我們選擇0即可,比如Caffe/Tensorflow框架中的abs函數在0點的梯度通過代碼計算出來是0, 梯度符合sign函數的定義. 將導數固定為0的另外一個好處是能夠得到一個更稀疏的矩陣表示.
Elastic net
另一種正則化方法是Elastic net(論文),它混合了Lasso和Ridge回歸,進行了權衡。Elastic net評估形式為:$$ \hat{\beta} = \underset{\beta}{\operatorname{argmin}} (| y-X \beta |^2 + \lambda_2 |\beta|^2 + \lambda_1 |\beta|_1)$$
Max-norm regularization
限制權重最大值的范數不超過常量約束c(\(\Vert \vec{w} \Vert_2 < c\)),其中c通常為3或4.。Max-norm regularization 之前已被用於協同過濾算法(collaborative filtering ,Srebro and Shraibman, 2005)。可以提高隨機梯度下降訓練的性能,可用於防止梯度爆炸。
Dropout
Dropout可以與Max-norm regularization,較大的初始學習率和較高的動量(momentum)等結合獲得比單獨使用Dropout更好的效果。
損失函數解決類別平衡問題
針對在模式識別問題存在的類別不平衡問題,通常我們會采用對少樣本類別進行重復采樣(過采樣),或是基於原樣本的空間分布產生人工數據。然而有時候這兩種方法都不好進行。
2015 年 ICCV 上的一篇論文《Holistically-nested edge detection》提出了名為 HED 的邊緣識別模型,試着用改變損失函數的定義來解決這個問題。如對於二分類問題中的log損失:\(l=-\sum_{k=0}^n[Q_k \log p_k+(1-Q_k)(1-\log p_k)]\)
如樣本集的標簽值分別為 (1, 1, 0, 1, 1, 0, …),則似然估計值(全部樣本均預測正確的概率)為:\(L=p_0\cdot p_1\cdot(1-p_2)\cdot p_3\cdot p_4\cdot(1-p_5)\cdot\dots\)
HED 使用了加權的 cross entropy 函數。例如,當標簽 0 對應的樣本極少時,加權的損失函數定義為:\(l=-\sum_{k=0}^n[Q_k \log p_k+W(1-Q_k)(1-\log p_k)]\)
W需要大於 1。此時考慮似然函數:\(L=p_0\cdot p_1\cdot(1-p_2)^W\cdot p_3\cdot p_4\cdot(1-p_5)^W\cdot\dots\)
可見類別為 0 的樣本在似然函數中重復出現了,比重因此而增加。通過這種辦法,我們雖然不能實際將少樣本類別的樣本數目擴大,卻通過修改損失函數達到了基本等價的效果。