普華訊光(北京)科技有限公司 北京 豐臺 100071
交叉熵是香農信息論中一個重要概念,主要用于度量兩個概率分布間的差異性信息,可以通過最小化交叉熵來得到目標概率分布到的近似分布。在信息論里,-logp(x)被信息論的創始人香農定義為事件x的自信息,即一個概率為p(x)的事件x具有的信息量,單位是比特。熵就是所有事件的自信息的加權和,即這些事件的自信息的平均值。
熵也反應了這些事件的不確定度。熵越大,事件越不確定。如果一個事件的發生概率為1,那么它的熵為0,即它是確定性的事件。如果我們確定會發生什么,就完全不必發送消息了!結果越不確定,熵越大,平均而言,當我發現發生了什么時,我獲得的信息就越多。
如果有兩件事各以50%的概率發生,那么只需發送1比特的消息就夠了。但是,如果有64種不同的事情以相同的概率發生,那么我們將不得不發送6比特的消息(2的6次方等于64)。概率越集中,我就越能用巧妙的代碼編寫出平均長度很短的消息。可能性越分散,我的信息就必須越長。
例如:在決策樹分類算法里,我們需要計算葉子節點的impurity(非純潔度)。我們可以用熵來計算非純潔度,一個葉子越純,里面的分類越少,確定性越大,它的熵越小。如果一個葉子里的觀察值都屬于同一類,即它是完全純的,那么這是一個確定性事件,它的概率等于1,所以它的熵為0。
那么,為什么要關心交叉熵呢?這是因為,交叉熵為我們提供了一種表達兩種概率分布的差異的方法。p和q的分布越不相同,p相對于q的交叉熵將越大于p的熵。
classification error顧名思義就是用錯誤的分類數來除以分類總體數量。
下面通過兩個例子來說明一下classification error的計算:
假設下面為兩個模型的結果,兩個模型預測的相同的三條數據。
其中predict為模型的預測值,target為真實的分類。
對于模型一的結果:
模型的預測值為:[0.3,0.3,0.4],[0.3,0.4,0.3],[0.1,0.2,0.7]
模型的標簽值為:[0,0,1],[0,1,0],[1,0,0]
模型的預測結果為:yes,yes,no
則其對應的計算為:classification error =1/3
對于模型二的結果:
模型的預測值為:[0.1,0.2,0.7],[0.1,0.7,0.2],[0.3,0.4,0.3]
模型的標簽值為:[0,0,1],[0,1,0],[1,0,0]
模型的預測結果為:yes,yes,no
則其對應的計算為:classification error =1/3
通過上面兩個表的對比,可以看出模型2的效果要明顯優于模型1,但是從classification error的分類損失上發現兩個模型計算出的效果是一樣的,這就是classification error存在的問題,它不能準確的描述模型與理想的模型之間的差距。
Mean Squared Error即均方誤差,它是反映估計量與被估計量之間差異程度的一種度量。其定義為使用估計量與被估計量的均方誤差作為度量。
我們依舊使用上述的兩個模型的例子來分別計算一下這兩個模型的MSE。
對于模型一的結果:MSE=(0.54+0.54+1.34)/3=0.81
對于模型二的結果:MSE= (0.14+0.14+0.74)/3=0.34
MSE看起來還不錯,對較好的模型確實損失小一些,但是不用它的原因如下:
·MSE的假設是高斯分布,交叉熵的假設是伯努利分布,而邏輯回歸采用的就是伯努利分布;
·MSE會導致代價函數J(θ)非凸,這會存在很多局部最優解,而我們更想要代價函數是凸函數;
·MSE相對于交叉熵而言會加重梯度彌散。
交叉熵的損失函數定義如下:
我們以y作為真實的label值,p為模型的預測結果。
當y=1時,CE=-log(p)
當y=0時,CE=-log(1-p)
依舊使用上述的例子分別計算一下各自的交叉熵損失函數的值。
對于模型一的結果:CE=-(ln(0.4)+ln(0.4)+ln(0.1))/3=1.38
對于模型二的結果:CE=-(ln(0.7)+ln(0.7)+ln(0.3))/3=0.64
從上面的結果可以看出交叉熵損失函數很清晰的描述了模型與理想模型的距離,并且其作為損失函數本身也是一個凸函數,很容易進行梯度下降和更快的收斂。這也是為什么文本分類的任務中基本上都是使用交叉熵損失函數作為分類問題的損失函數的原因。
在現實的任務中,正負樣本的不平衡比比皆是,下述的幾種方法就是對樣本的不均衡的問題的改進手段。
5.1 Focal Loss Focal Loss的提出最初是為了解決圖像標注的樣本不均衡的情況的,由于其較好的效果,后來逐漸應用于自然語言處理的文本分類任務中。在Focal Loss中以二分類為例將樣本數據一共分為了四類,分別為正難樣本、負難樣本、正易樣本、負易樣本。解釋一下這四類樣本如何理解,其中的正樣本顧名思義就是目標分類的樣本的集合,負例就是不包含目標分類的樣本的集合,而難樣本就是模型學習不好的樣本,假設為正樣本情況下,通過損失函數表現出來就是雖然該樣本為正例,但是模型預測出的p值很小,可能只在0.1或者0.2左右,易分樣本就是假設為正樣本情況下,通過損失函數表現出來的p值很大,直接接近1。
在真實的場景中,其實絕大部分的樣本都是易分樣本,占比非常高,所以易分樣本對模型的整體貢獻就會非常高,就會導致模型過多的關注易分的樣本而過少的關注難分樣本,作者認為這么做是有問題的,因為易分樣本對模型的提升非常小,模型應該關注那些難分的樣本,進而來改善模型的效果。
我們先看一下Focal Loss函數的形式:
當y=1時,FL=-α(1-p)^γlog(p)
當y=0時,FL=-(1-α)p^γlog(1-p)
該函數與上面提到的交叉熵函數一對比就會發現,與交叉熵的總體形式是一樣的,只不過就是多了兩個參數,α和γ。下面我們來分析一下這兩個參數的意義:
在正例的前面乘以α并且在負例的前面乘以(1-α),可以很明顯的看出,這樣做的直觀理解就是如果正負樣本不平衡,設置一個參數來動態的調節正負樣本的比例,若負樣本特別多的情況下,就相應減少負樣本貢獻的權重,若負樣本特別少的話,就相應增加負樣本貢獻的權重,進而來改善正負樣本比例不均衡的問題。
再看公式中的γ,其位置放在指數的位置,并且與模型的預測概率p相關的。對正例樣本來說,若預測的概率為p,則前面用一個(1-p)的γ次冪與其相乘,因為p本身是一個小于1的數字,則這兩項相乘的結果就是以指數的形式衰減,則我們可以推斷出該參數的意義就是用來解決難易樣本分類的問題的,對簡單容易分類的樣本進行抑制的,因為易分樣本其實就是模型預測出來的值與真實的值相差的很小的樣本。假設p=0.968,則說明該樣本模型的預測的很好了,取γ=2的時候,我們計算一下(1-0.968)^2≈0.001,相當于對于該樣本其損失了1000倍。
可以看出Focal Loss的設計非常的巧妙和簡單,不需要很復雜的形式,僅僅通過兩個參數就既解決了正負樣本的問題又解決了難易樣本的問題,大道至簡。
5.2 GHM_C GHM_C是在Focal的基礎上的進一步改進,首先看一下作者認為Focal存在的問題:
首先,讓模型過度關注特別難分的樣本其實是有問題的,因為那種樣本點很可能本身就是離群點或者是標注錯誤等造成的樣本。其次,Focal中的α與γ是根據實驗得出來的,并且α與γ的值也會相互影響,不同數據需要不斷嘗試調整α與γ。
作者對樣本不均衡的本質影響進行了進一步探討,找到了梯度分布這個更為深入的角度。認為樣本不均衡的本質是分布的不均衡。更進一步來看,每個樣本對模型訓練的實質作用是產生一個梯度用以更新模型的參數,不同樣本對參數更新會產生不同的貢獻。由于簡單樣本的數量非常大,它們產生的累計貢獻就在模型更新中就會有巨大的影響力甚至占據主導作用,而由于它們本身已經被模型很好的判別,所以這部分的參數更新并不會改善模型的判斷能力,也就使整個訓練變得低效。
基于這一點,研究者對樣本梯度的分布進行了統計,并根據這個分布設計了一個梯度均衡機制,使得模型訓練更加高效與穩健,并可以收斂到更好的結果。
首先定義一個統計對象——梯度模長g=|p-p*|,其實就是交叉熵損失函數下對x的導數求得。
作者通過梯度模長的定義將難分樣本與易分樣本進行可區分,對于易分樣本其梯度模長較小,對于難分樣本其梯度模長較大,既然梯度模長已經知道了,那怎么同時衰減易分樣本和特別難分的樣本呢?誰的數量多衰減誰,那怎么衰減數量多的呢?定義一個變量,讓這個變量能衡量出一定梯度范圍內的樣本數量。于是,作者定義了梯度密度GD(g):
其中:δ(g,g)就是在樣本N中,梯度模長分布在∈k范圍內的樣本數。l∈(g)代表了的區間長度。因此梯度密度GD(g)的物理含義是:單位梯度模長g部分的樣本個數。最終GHM_C的定義形式就是:
可以看出上述公式就是在交叉熵損失函數的基礎上使用梯度模長的概念進行了歸一化,就是針對特別易分的樣本和難分的樣本均給與了一定程度的打壓,進而可以讓模型更好,更平衡的對正難樣本、負難樣本、正易樣本、負易樣本進行學習。
在論文中作者總結了交叉熵損失函數、Focal Loss損失函數和GHM-C損失函數分別對樣本梯度產生的作用。
當Focal Loss作為損失函數的情況下對于易分樣本的確是存在抑制作用的,因為相比于普通的交叉熵的損失其曲線位于交叉熵損失函數下面,但是對于難分的樣本曲線隨著梯度模長的增長而增長,可以看出Focal Loss對難分的樣本很關注。
當GHM-C作為損失函數時不僅對易分樣本有抑制,并且對特別難分的樣本也是存在抑制作用的。因為GHM-C的作者本身就認為模型太關注難分樣本本身就是有問題的,應該讓模型去均勻的關注樣本中的各個類別。所以在梯度模長很大的時候,對樣本進行了一定程度的抑制。
本文首先介紹了為什么使用交叉熵作為損失函數以及它的優越性,然后針對實際的問題介紹了幾種對交叉熵損失函數的改進。最后分析了GHM-C相比于Focal Loss和普通交叉熵的優越性。