1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從最優(yōu)化的角度看待Softmax損失函數(shù)

        共 3170字,需瀏覽 7分鐘

         ·

        2022-06-09 21:20

        點擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時間送達

        來自 | 知乎? ?作者 |?王峰
        鏈接丨h(huán)ttps://zhuanlan.zhihu.com/p/45014864
        僅作學(xué)術(shù)交流,如有侵權(quán),請聯(lián)系刪除

        ? ?導(dǎo)讀


        作者按:最近博士畢業(yè)論文寫完了,這段時間比較閑,準(zhǔn)備把我博士畢業(yè)論文里比較有意思的一些章節(jié)拿出來寫成博客,有空就寫點,不定期更新。

        Softmax交叉熵損失函數(shù)應(yīng)該是目前最常用的分類損失函數(shù)了,在大部分文章中,Softmax交叉熵損失函數(shù)都是從概率角度來解釋的(請讀者自行搜索),本文將嘗試從最優(yōu)化的角度來推導(dǎo)出Softmax交叉熵損失函數(shù),希望能夠啟發(fā)出更多的研究思路。

        ???從最優(yōu)化的角度看Softmax損失函數(shù)

        ?

        一般而言,最優(yōu)化的問題通常需要構(gòu)造一個目標(biāo)函數(shù),然后尋找能夠使目標(biāo)函數(shù)取得最大/最小值的方法。目標(biāo)函數(shù)往往難以優(yōu)化,所以有了各種relax、smooth的方法,例如使用L1范數(shù)取代L0范數(shù)、使用sigmoid取代階躍函數(shù)等等。

        那么我們就要思考一個問題:使用神經(jīng)網(wǎng)絡(luò)進行多分類(假設(shè)為??類)時的目標(biāo)函數(shù)是什么?神經(jīng)網(wǎng)絡(luò)的作用是學(xué)習(xí)一個非線性函數(shù)??,將輸入轉(zhuǎn)換成我們希望的輸出。這里我們不考慮網(wǎng)絡(luò)結(jié)構(gòu),只考慮分類器(也就是損失函數(shù))的話,最簡單的方法莫過于直接輸出一維的類別序號??。而這個方法的缺點顯而易見:我們事先并不知道這些類別之間的關(guān)系,而這樣做默認了相近的整數(shù)的類是相似的,為什么第2類的左右分別是第1類和第3類,也許第2類跟第5類更為接近呢?

        為了解決這個問題,可以將各個類別的輸出獨立開來,不再只輸出1個數(shù)而是輸出??個分數(shù)(某些文章中叫作logit[1],但我感覺這個詞用得沒什么道理,參見評論),每個類別占據(jù)一個維度,這樣就沒有誰與誰更近的問題了。那么如果讓一個樣本的真值標(biāo)簽(ground-truth label)所對應(yīng)的分數(shù)比其他分數(shù)更大,就可以通過比較??個分數(shù)的大小來判斷樣本的類別了。這里沿用我的論文[2]使用的名詞,稱真值標(biāo)簽對應(yīng)的類別分數(shù)為目標(biāo)分數(shù)(target score),其他的叫非目標(biāo)分數(shù)(non-target score)。

        這樣我們就得到了一個優(yōu)化目標(biāo):

        輸出C個分數(shù),使目標(biāo)分數(shù)比非目標(biāo)分數(shù)更大。

        換成數(shù)學(xué)描述,設(shè)??、?為真值標(biāo)簽的序號,那優(yōu)化目標(biāo)即為:

        ?。

        得到了目標(biāo)函數(shù)之后,就要考慮優(yōu)化問題了。我們可以給??一個負的梯度,給其他所有?一個正的梯度,經(jīng)過梯度下降法,即可使??升高而??下降。為了控制整個神經(jīng)網(wǎng)絡(luò)的幅度,不可以讓??無限地上升或下降,所以我們利用max函數(shù),讓在??剛剛超過??時就停止上升:

        ?。

        然而這樣做往往會使模型的泛化性能比較差,我們在訓(xùn)練集上才剛剛讓?超過?,那測試集很可能就不會超過。借鑒svm里間隔的概念,我們添加一個參數(shù),讓??比??大過一定的數(shù)值才停止:

        ?。

        這樣我們就推導(dǎo)出了hinge loss...唔,好像跑題了,我們本來不是要說Softmax的么...不過既然跑題了就多說點,為什么hinge loss在SVM時代大放異彩,但在神經(jīng)網(wǎng)絡(luò)時代就不好用了呢?主要就是因為svm時代我們用的是二分類,通過使用一些小技巧比如1 vs 1、1 vs n等方式來做多分類問題。而如論文[3]這樣直接把hinge loss應(yīng)用在多分類上的話,當(dāng)類別數(shù)??特別大時,會有大量的非目標(biāo)分數(shù)得到優(yōu)化,這樣每次優(yōu)化時的梯度幅度不等且非常巨大,極易梯度爆炸。

        其實要解決這個梯度爆炸的問題也不難,我們把優(yōu)化目標(biāo)換一種說法:

        輸出C個分數(shù),使目標(biāo)分數(shù)比最大的非目標(biāo)分數(shù)更大。

        跟之前相比,多了一個限制詞“最大的”,但其實我們的目標(biāo)并沒有改變,“目標(biāo)分數(shù)比最大的非目標(biāo)分數(shù)更大”實際上等價于“目標(biāo)分數(shù)比所有非目標(biāo)分數(shù)更大”。這樣我們的損失函數(shù)就變成了:

        ?。

        在優(yōu)化這個損失函數(shù)時,每次最多只會有一個+1的梯度和一個-1的梯度進入網(wǎng)絡(luò),梯度幅度得到了限制。但這樣修改每次優(yōu)化的分數(shù)過少,會使得網(wǎng)絡(luò)收斂極其緩慢,這時就又要祭出smooth大法了。那么max函數(shù)的smooth版是什么?有同學(xué)會脫口而出:softmax!恭喜你答錯了...

        這里出現(xiàn)了一個經(jīng)典的歧義,softmax實際上并不是max函數(shù)的smooth版,而是one-hot向量(最大值為1,其他為0)的smooth版。其實從輸出上來看也很明顯,softmax的輸出是個向量,而max函數(shù)的輸出是一個數(shù)值,不可能直接用softmax來取代max。max函數(shù)真正的smooth版本是LogSumExp函數(shù)。

        使用LogSumExp函數(shù)取代max函數(shù):

        ?,

        LogSumExp函數(shù)的導(dǎo)數(shù)恰好為softmax函數(shù):

        ?。

        經(jīng)過這一變換,給予非目標(biāo)分數(shù)的1的梯度將會通過LogSumExp函數(shù)傳播給所有的非目標(biāo)分數(shù),各個非目標(biāo)分數(shù)得到的梯度是通過softmax函數(shù)進行分配的,較大的非目標(biāo)分數(shù)會得到更大的梯度使其更快地下降。這些非目標(biāo)分數(shù)的梯度總和為1,目標(biāo)分數(shù)得到的梯度為-1,總和為0,絕對值和為2,這樣我們就有效地限制住了梯度的總幅度。

        LogSumExp函數(shù)值是大于等于max函數(shù)值的,而且等于取到的條件也是非??量痰模ň唧w情況還是得看我的博士論文,這里公式已經(jīng)很多了,再寫就沒法看了),所以使用LogSumExp函數(shù)相當(dāng)于變相地加了一定的??。但這往往還是不夠的,我們可以選擇跟hinge loss一樣添加一個??,那樣效果應(yīng)該也會不錯,不過softmax交叉熵損失走的是另一條路:繼續(xù)smooth。

        注意到ReLU函數(shù)??也有一個smooth版,即softplus函數(shù)??。使用softplus函數(shù)之后,即使??超過了LogSumExp函數(shù),仍會得到一點點梯度讓??繼續(xù)上升,這樣其實也是變相地又增加了一點??,使得泛化性能有了一定的保障。替換之后就可以得到:

        這個就是大家所熟知的softmax交叉熵損失函數(shù)了。在經(jīng)過兩步smooth化之后,我們將一個難以收斂的函數(shù)逐步改造成了softmax交叉熵損失函數(shù),解決了原始的目標(biāo)函數(shù)難以優(yōu)化的問題。從這個推導(dǎo)過程中我們可以看出smooth化不僅可以讓優(yōu)化更暢通,而且還變相地在類間引入了一定的間隔,從而提升了泛化性能。

        至于如何利用這個推導(dǎo)來對損失函數(shù)進行修改和一些進一步的分析,未完待續(xù)...

        好消息!?

        小白學(xué)視覺知識星球

        開始面向外開放啦??????




        下載1:OpenCV-Contrib擴展模塊中文版教程
        在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺實戰(zhàn)項目52講
        小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

        下載3:OpenCV實戰(zhàn)項目20講
        小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講,即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習(xí)進階。

        交流群


        歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~



        瀏覽 32
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            啊啊啊快高潮了短片 | 欧美色videos | 国产电影精品久久 | 成人无码 在线观看免费视频 | 又爽又色禁片1000视频免费看 | 16—17女人毛片 超碰在线一区 | 18网站亚洲国产 | 成人毛片100免费观看 | 亚洲欧美精品AAAAAA片 | 男人舔女人高潮视频 |