損失函數的設計(Loss Function)

Cinnamon AI Taiwan
10 min readJul 17, 2019

--

一個模型學到特徵的好壞,最關鍵的點就是損失函數的設計,今天就讓我們來看看幾個DL領域中常用到的Loss Function,他們之間的差異在哪?使用的情境又有什麼差異?

損失函數(Loss Function)

相信大家在剛接觸CNN時,都會對模型的設計感到興趣,在Loss Function上,可能就會選用常見的Cross Entropy 或是 MSE,然而,以提升特徵萃取能力為前提下,合適的Loss function設計往往比增加模型的複雜度來得更有效率,下方就讓我們先來看看經典的MSE和Cross Entropy。

MSE(Mean-Square Error)

MSE數學式[Source]

有接觸過機器學習或是深度學習的讀者們對MSE應該都不陌生,MSE大量被應用於解決Regression的問題,直觀好用。從上方數學式可看出,MSE就是計算實際值與預測值的平方差,再平均,而因為有平方項,確保Loss Function≥0,因此模型一定會向最小誤差的方向去收斂,下方程式碼示範如何在tensorflow中運用MSE損失函數:

MSE雖然好用,但是仍然有他的缺點在,觀察下圖我們可以發現,Outlier在MSE會指數性的被放大 。

Outlier in MSE[Source]

MAE(Mean-Absolute Error)

MAE[Source]

上方提到了MSE對Outlier特別敏感,由於MAE使用的是L1距離,相較於MSE,對Outlier更為Robust。然而MAE為人詬病的缺點就是收斂速度慢。

Outlier in MAE[Source]

下方透過Tensorflow API實現MAE:

HuberLoss

既然MSE與MAE都各自有他麼的缺點,那麼有沒有哪個Loss Function 設計能截長補短呢?答案是有的,HuberLoss的存在就是希望能降低MSE對Outlier 的不穩定性,並提升MAE的收斂速度,先來看看HuberLoss是怎麼設計的。

HuberLoss[Source]

藉由公式中我們可以發現,當Residual (y-f(x)) 小於設定的Delta (超參數)時,採用類似MSE的做法 (L2),而當Residual>Delta時,則是採用偏向MAE的做法 (L1),如此一來確保正常情況下模型能有MSE使用時的收斂速度,而當出現Outlier(>delta)時,又能如使用MAE時增加模型的穩定度,下圖可以比較一下不同Delta設置情況下的差異。

Huber Loss 與 L1-L2 Loss的比較[Source]

同樣的概念也出現在Faster RCNN中的Smooth L1-Loss,下方運用tensorflow示範如何使用HuberLoss。

Cross Entropy

Cross Entropy[Source]

在分類的問題中,大家對Cross Entropy 應該都不陌生,Cross Entropy設計的觀念是讓模型去學習預測資料的機率分佈,其中p(x) 為真實分布, q(x)為預測值,因此在原理上與MSE有些不同,這時大家可能就有一個疑問,分類問題是否可以使用MSE?答案是肯定的,然而使用Cross Entropy 會更有優勢,大家看一下下方的圖就可以發現,MSE在Loss的梯度上較為平坦,而想要深究數學的讀者們可以參考這篇:CE v.s MSE

Loss in MSE and CE[Source]

下方程式碼我們運用Tensorflow 實現Cross Entropy並比較其與MSE的差別:

Focal Loss

在分類問題中,我們常常遇到的狀況是樣本類別不均,然而一般的Cross Entropy 設計並沒有加以限制這種情形的發生。Focal Loss 首次出現於 Kaiming He 團隊的 Focal Loss for Dense Object Detection,其設計的初衷除了要解決樣本類別不均的問題外,也加以限制了樣品中易分類樣品的比重(一開始是設計給Obeject Detection中的Classification 用),下方我們先來看看Focal Loss的公式:

Focal Loss 設計[Source]

由公式中我們可以看出,Focal Loss 其實是由Cross Entropy 改良而來,將原本的P(x)項,修改為(1-q(x))^r,該怎麼理解呢?其實很簡單,原本的P(x)為1,所以樣品輸出CE為-log(q(x)),此時不管q(x)大或小都沒有加以區別。使用Focal Loss情況就不同了,當今天q(x)==0.8(容易分類樣品)與q(x)==0.2的樣品進入Focal Loss時,還需要乘上(1-q(x))^r,r為超參數我們先暫定為2,所以兩個樣品的 Loss分別為0.04*-log(q(x))與0.64-log(q(x)),借此降低易分類樣品的比重,除此之外我們還需要處理類別不均的問題,這裡作者用一個Alpha解決,而通常Alpha可以設計為個別Class樣品出現頻率的倒數。

Focal Loss and Cross Entropy [Source]

圖中列出了不同gamma設置對Loss的影響,當gamma為0、alpha為1時,其實就是一般的Cross Entropy,隨著gamma的上升,易分類樣品的比重也會越來越低,下方我們運用Tensorflow來實現Focal Loss :

Center Loss

Center Loss 一開始的出現是應用於人臉辨識,其通常是搭配softmax+CE使用,下圖可以看出,透過Center Loss可以更有效的加大群與群之間的距離。

Feature visualization using different losses [Source]

那Center Loss是如何設計的呢?其實直覺上來看的話就是L2-Loss,在Center Loss中,每一個類別除了要學習分類外(Softmax-CE),還要學習如何向自己類別的中心收斂。

Center Loss[Source]

下圖為原文提出的Model架構,圖中最後FC輸出有兩條線,其中一條是一般的Softmax,所以size就是類別數,除此之外,還有一條FC是用來預測類別中心點,觀念如同Embedding,原文中是將類別中心點設為二維。

Model Structure from Original paper[Source]

下方運用tensorflow代碼實現Center Loss 部分,最後的Total loss還要加上Softmax支線的Loss:

Triplet Loss

Triplet Loss Metric Learning中最常用到的Loss之一,Metric Learning主要用來訓練一個能夠比較相似度的模型,有別於一般的Softmax+CE輸出是類別數,Metric Learning的輸出是一個壓縮的維度,因此可以用來壓縮特徵,這樣的好處是我們的模型不需要每一個類別都有大量的訓練集,舉個例子來說,今天我們要學習一個人臉辨識的模型,需要辨識全球的名人,使用Softmax+CE我們總結一共有8000個名人(假設),因此訓練一個8000個分類的分類器,結果隔了一個月又多了5個名人,此時我們只能重新訓練一個模型或是透過Transfer Learning ,拔掉原來的FC再加上一個8005類的FC。

透過Metric Learning,我們就能解決上述遇到的問題,我們學習了一個將人臉壓縮的模型,假設輸出是256維,我們模型再做的事就是將一張人臉照片壓縮到這256維,並且不同的人臉在空間上的距離較遠。

那Triplet Loss是如何做到這點呢?大家先來看看Triplet Loss的設計觀念:

Triplet Loss idea[Source]

Triplet Loss要做的事情,就是盡量將組內的sample拉近,組間的sample距離拉遠,有沒有覺得很眼熟!其實觀念就跟LDA(Linear Discriminant Analysis)非常類似,公式如下,其中要注意的一點是,Triplet Loss 的輸入是經過L2-normalization 的特徵:

Triplet Loss [Source]

而一般我們在用的Triplet Loss為Hard Triplet Loss或是Semi-hard Triplet Loss,Hard Triplet Loss意指選取最遠的組內Sample,白話文說的話就是:『最不像的同類樣品(In Batch)間距離,還是要比不同類的樣品還要近』,這樣的缺點是,當資料不夠乾淨時模型會難以收斂,因此目前普遍是使用Semi-hard Triplet Loss,下方用Tensorflow API實現,其中比較重要的是,送給Triplet Loss的Batch sample方式最好要是設計過的,確保每個Batch中同類樣品都有重複,例如Batch_size =64,一共有8類,那就是每個Class有八張,訓練起來會有效率很多,隨機sample_batch的話每個Batch裡面可能很多sample都用不到,尤其當類別數量很大的時候,另一點是Triplet Loss的Label輸入是一維的index不是One-Hot:

總結

今天為大家介紹了幾種常見的Loss Function設計,除了經典的CE 與 MSE,Focal Loss、Huber Loss、Triplet Loss、Center Loss等都算相當常見且好用!
讀者們有任何問題都歡迎留言討論。

--

--