深度學習中的損失函數總結已經Center Loss函數筆記

圖片分類里的Center Loss
目標函數,損失函數,代價函數
損失函數度量的是預測值與真實值之間的差異.損失函數通常寫做L(y,y).y代表了預測值,y代表了真實值.目標函數可以看做是優化目標,優化模型的最后目標就是使得這個目標函數最大或者最小.代價函數類似于目標函數.區別:目標函數(代價函數)可以包含一些約束條件如正則化項.
一般不做嚴格區分.下面所言損失函數均不包含正則項.
常見的損失函數
以keras文檔列出的幾個為例keras-loss**
mse(mean_squared_error):均方誤差損失.K.mean(K.square(y_pred-y_true),axis=-1)

mae(mean_absolute_error):平均絕對值誤差損失.K.mean(K.abs(y_pred-y_true),axis=-1)

mape(mean_absolute_percentage_error):平均絕對百分誤差.
K.abs((y_true - y_pred) / K.clip(K.abs(y_true),K.epsilon(),None))#clip(x,min,max)防止除0錯誤

msle(mean_squared_logarithmic_error):均方對數損失(mse的改進).

mslefirst_log = K.log(K.clip(y_pred, K.epsilon(), None) + 1.)second_log = K.log(K.clip(y_true, K.epsilon(), None) + 1.)loss= K.mean(K.square(first_log - second_log), axis=-1)#msefirst_log = K.clip(y_pred, K.epsilon(), None) + 1.second_log = K.clip(y_true, K.epsilon(), None) + 1.loss= K.mean(K.square(first_log - second_log), axis=-1)

msle相比與mse的改進:如果想要預測的值范圍很大,mse會受到一些大的值的引導,即使小的值預測準也不行.假設如: y_true:[1,2,3,100] y_1:[1,2,3,110] y_2:[2,3,4,100] mse計算結果(y_1:100,y_2:3)會認為y_2優于y_1. msle計算結果(有_1:0.047,0.27)通過預先將所有值取log緩解了這一情況,會認為y_1優于y_2.這比較合理.

code**

logcosh燙燙燙.回歸
def cosh(x): return (K.exp(x) + K.exp(-x)) / 2K.mean(K.log(cosh(y_pred - y_true)), axis=-1)

這個函數沒見人用過,按照公式作圖如下:

大致可以看出來如果y_pred與y_true差異越小則值越小.
kullback_leiber_divergence:KL散度.兩個概率分布P和Q差別的非對稱性的度量. 典型情況下,P表示數據的真實分布,Q表示數據的理論分布,模型分布,或P的近似分布。y_true = K.clip(y_true, K.epsilon(), 1)y_pred = K.clip(y_pred, K.epsilon(), 1)K.sum(y_true * K.log(y_true / y_pred), axis=-1)

一種解釋:KL散度是用來 度量使用基于Q的編碼來編碼來自P的樣本平均所需的額外的位元數。(熵,交叉熵,)舉例:假設現在有兩個分布p和q,p為真實,q為模型預測的熵的本質是信息量度量:按照真實分布p來衡量識別一個樣本所需要的平均編碼長度:按照錯誤分布q來表示來自真實分布p的平均編碼長度(交叉熵):舉例:4個字母,真實分布p=[0.5,0.5,0,0],q=[0.25,0.25,0.25,0.25],計算得到H(p)為1.H(p,q)為2.由q得到的平均編碼長度比由p得到的平均編碼長度多出的bit數稱為KL散度.KL散度wikiKL散度zhihu**
categorical_crossentropy:多類的對數損失.一種解釋:softmax公式:logistic regression的目標函數是根據最大似然來做的.也就是假設x屬于類y,預測出概率為oy,那么需要最大化oy.softmax_loss如下:下面是二類分類交叉熵公式:數值穩定性問題

Center Loss損失函數
開始正題.以mnist數據集為例.(手寫數字,28*28圖像,10分類問題)
categorical crossentropy(softmax loss)的問題通常會使用softmax loss多分類損失函數.使用CNN網絡(mnist分類容易達到較高的準確度,為了實驗效果,網絡設計的故意差了點,如沒有使用BN,relu,dropout,L2等trick),選擇在倒數第二層全連接層輸出節點為2個,稱為是特征,而后將這2個節點接到最后的的10節點全連接層.正常的訓練過程,到達較高準確度后將每個數據的倒數第二層的特征打印出來.如下圖:
缺點:
從聚類角度看,提取的特征并不好.很多情況下類內間距甚至要大于類間間距.我們期望特征不僅可分,而且要求差異大,特征學習需要保證提取的特征有識別度。
占據的面積有點大.通常情況下,我們希望每一類只占很小一部分.因為手寫字符很多啊,這些數字就占了這么大地方,如果新來了英文字母呢…也就是我們期望模型能識別出在訓練數據的標簽中沒有的分類。特征學習需要保證提取的特征具有普適性.
softmax會使得模型過度自信,分類結果基本非1即0,上圖里有些點在邊界但是softmax認為已經可以了,根本沒必要再修正.同時softmax這種特性使得基本上沒有辦法去設置諸如可信度等度量.(場景?)

原因?舉例:最后一層全連接層輸出V=[x1,x2,x3],真實標簽是[1,0,0].那么假設V=[x1,x2,x3]是[3.1,3,3],那么softmax的公式使得其只需要V的模長增加倍數即可以降低loss損失.這太容易(只需要增大參數即可)使得網絡往往就是這樣做的.而不是我們通常想要的那樣去努力降低x2,x3的相對于x1的值如[3.1,1,1]這樣.這也是所以L2正則會緩解過擬合的一個原因.
解決辦法:很多,如故意讓softmax也去模擬下均勻分布輸出而不僅僅是one_hot.這里只涉及其中一種也就是centerloss.
那么換一個損失函數吧.均方誤差損失?如下圖:不但準確度下降到30%,而且互相直接還有了覆蓋交集.有趣的地方:
1和其他數字很明顯的分開了.
2,4,5,8,9這幾個炸了根本分不開.

在上述的幾個損失函數上,softmax工作的是最好的了.
Center Loss針對softmax表現出的問題針對性解決.-→類內間距太大了.
對每一個類都維護一個類中心c,而后在特征層如果該樣本里類中心的特征太遠就要懲罰.也就是所謂的centerloss.類中心c:每一個樣本的特征需要通過一個好的網絡到達特征層獲得,這樣計算完后所有樣本的特征的平均值為類中心c,而好的網絡需要是在有類中心加入的情況下才能得到…

沒法直接獲得c,所以將其放到網絡里自己生成,在每一個batch里更新center.即隨機初始化center,而后每一個batch里計算當前數據與center的距離,而后將這個梯度形式的距離加到center上.類似于參數修正.同樣的類似于梯度下降法,這里再增加一個scale度量a,使得center不會抖動.

實驗表明只使用centerloss效果很一般,所以一般是將centerloss與softmax結合起來,引入參數lambda.總體結構如下:4.算法過程

5.實驗結果準確度提高約0.6%.
總結
一種新的loss函數,看起來效果不錯,而且也更加符合認知,生成的模型魯棒性可能更好.
本質是度量學習,經常應用在分類領域,原理簡單,計算復雜度不大,經常能提升效果.
有點使用空間換取時間的意思.
屬于一個trick.不一定適合所有場景.一般來說,如果同一類樣本很類似如mnist手寫數字,人臉數據,那么centerloss往往能夠帶來效果提升.而如果本身同一類樣本就差異很大,如cifar100,那么則不一定.也可以理解成一個人的一堆臉取平均值仍然是他的臉,而一堆不同的狗取平均值則可能難以認出是什么.
參數設置:a一般取0.5,lambda則0.1-0.0001之間不等,需要實驗調參.
參考論文 A Discriminative Feature Learning Approach for Deep Face Recognition

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容