focal loss分析圖 (完善知乎的一個評論)

Focal loss 全圖

在這裏插入圖片描述

Focal loss 局部放大圖

在這裏插入圖片描述

  • 首先我覺得(個人猜測)一個樣本的作用大小, 不是直接由它對應的loss決定的, 而是由這個樣本對應loss對權值w的梯度決定的. 因爲梯度越大, 則權值更新得越多(是朝着該樣本loss減小的方向更新越多)
  • 用one-hot做交叉熵loss的話, 樣本xix^i(假設屬於類別k)對應的loss: lossxki=log(yk(xi))=log(yki)loss_{x_k^i} = -log(y_k(x^i)) \overset{簡寫爲}{=}-log(y_k^i), 其中yk(xi)y_k(x^i)xix^i的第k個類別的輸出值.
  • 這個時候一些博客的分析是說如果yk(xi)y_k(x^i)越大, 則說明它越容易分類, 即爲簡單樣本, 此時需要降低它的loss權重, 所以就有了focal loss: (1yk(xi))rlog(yk(xi)-(1-y_k(x^i))^r*log(y_k(x^i), 此時如果yk(xi)y_k(x^i)接近1的話, 則前面一項將非常小, 使得容易分類的樣本的loss更小, 而如果接近於0, 則前面那項接近1, loss 基本不變. 這個說法有一定道理, 但是我還是那句話, 讓一個樣本起作用的, 不是他的loss絕對大小, 而是它的梯度大小, 因爲梯度纔是直接導致參數更新程度的指標, 而不是loss絕對大小. 所以有必要分析一下添加這個focal loss係數後loss函數的導數.
  • 上面畫的圖有兩個子圖, 第一個子圖是focal loss在r取不同值時, focal loss關於模型預測概率y的變化關係, 第二個子圖是focal loss對y的導數曲線. 全局圖的第二個子圖看不出啥東西(太密了), 所以就放大了看第二個局部子圖.豎線是對應r取不同值時和r取0(原始交叉熵loss)的交點. 豎線的左邊是小於原始交叉熵的部分, 右邊是大於的部分, 這裏需要說一下的是, 因爲導數都是負數, 所以導數越小, 其實絕對值是更大的(絕對值大則更新快), 也就是說豎線左邊是對樣本權重加大的, 而豎線右邊是減少的. 可以看到r=5時, 豎線在y=0.18左右, 也就是說輸出的y<0.18時, focal loss纔會對這些樣本加一個比原始交叉熵loss更大的權重, 即認爲它是難分類樣本, 而y>0.18時, 則它的權重就開始小於交叉熵的了, 即認爲它是簡單樣本了(這句話不嚴謹).這個明顯不是很合理, 因爲y>0.5才能正確分類, 而0.5>y>0.18都沒有正確分類就認爲他是簡單樣本了.原文(我還沒細看)中也是說r=2時最好, 可以看出r=2時, 交點在比0.3小一點處, 明顯這個是比r=5更合理的.
  • 但是這個解釋呢, 也有問題, 因爲明顯如果那個交點在y=0.5處是最好的呀, 左邊(錯誤分類了)加大權重, 右邊(正確分類了)減少權重, 所以r=1和r=0.5應該都是效果比r=2好的呀?爲啥r=2就最好了呢??這個會不會是我們沒有考慮到, 不同的r時, 導數的絕對值大小沒有太大關係, 而是不同的y有一個不同且對應的導數即可, 大概意思就是說我不糾結y=0.2和y=0.3時, 這個導數和原始交叉熵導數的大小關係, 而是隻要保證y=0.2的導數>y=0.3>1, 且1> y=0.6導數>y=0.7導數就可以了, 即保證相對關係即可(都是瞎猜的哈哈)
  • 以上都是一些不成熟的想法, 歡迎大家來一起討論.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章