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>

        理論與舉例,說(shuō)明標(biāo)簽平滑有效!

        共 4868字,需瀏覽 10分鐘

         ·

        2021-06-22 00:28

        大家好,我是燦視。

        之前一位粉絲在百度的面試中,聊到了關(guān)于抑制過擬合的,說(shuō)到了 ,面試官也比較看中基礎(chǔ),就與粉絲在這個(gè)問題上展開的聊了下。今天我們就把這道題分享給各位!

        看文章前,可以先關(guān)注下我們。

        專注于分享最優(yōu)質(zhì)的計(jì)算機(jī)視覺面經(jīng),持續(xù)關(guān)注AI在互聯(lián)網(wǎng)與銀行等單位中的工作機(jī)會(huì)。

        標(biāo)簽平滑-

        在深度學(xué)習(xí)樣本訓(xùn)練的過程中,當(dāng)我們采用 - 標(biāo)簽去進(jìn)行計(jì)算交叉熵?fù)p失時(shí),只考慮到訓(xùn)練樣本中正確的標(biāo)簽位置(- 標(biāo)簽為 的位置)的損失,而忽略了錯(cuò)誤標(biāo)簽位置(- 標(biāo)簽為 的位置)的損失。這樣一來(lái),模型可以在訓(xùn)練集上擬合的很好,但由于其他錯(cuò)誤標(biāo)簽位置的損失沒有計(jì)算,導(dǎo)致預(yù)測(cè)的時(shí)候,預(yù)測(cè)錯(cuò)誤的概率增大。為了解決這一問題,標(biāo)簽平滑的正則化方法便應(yīng)運(yùn)而生。

        什么是標(biāo)簽平滑

        標(biāo)簽平滑采用如下思路:在訓(xùn)練時(shí)即假設(shè)標(biāo)簽可能存在錯(cuò)誤,避免“過分”相信訓(xùn)練樣本的標(biāo)簽。當(dāng)目標(biāo)函數(shù)為交叉熵時(shí),這一思想有非常簡(jiǎn)單的實(shí)現(xiàn),稱為標(biāo)簽平滑( )。 在訓(xùn)練樣本中,我們并不能保證所有的樣本標(biāo)簽都標(biāo)注正確,如果某個(gè)樣本的標(biāo)注是錯(cuò)誤的,那么在訓(xùn)練時(shí),該樣本就有可能對(duì)訓(xùn)練結(jié)果產(chǎn)生負(fù)面影響。一個(gè)很自然的想法是,如果我們有辦法“告訴”模型,樣本的標(biāo)簽不一定正確,那么訓(xùn)練出來(lái)的模型對(duì)于少量的樣本錯(cuò)誤就會(huì)有“免疫力”。

        為了達(dá)到這個(gè)目標(biāo),我們很自然想到的方法是:在每次迭代時(shí),并不直接將(,)放入訓(xùn)練集,而是設(shè)置一個(gè)錯(cuò)誤率 ,以 1- 的概率將(,)代入訓(xùn)練,以 的概率將(,1-)代入訓(xùn)練。這樣,模型在訓(xùn)練時(shí),既有正確標(biāo)簽輸入,又有錯(cuò)誤標(biāo)簽輸入,可以想象,如此訓(xùn)練出來(lái)的模型不會(huì)“全力匹配”每一個(gè)標(biāo)簽,而只是在一定程度上匹配。這樣,即使真的出現(xiàn)錯(cuò)誤標(biāo)簽,模型受到的影響就會(huì)更小。

        那么,這是否意味著我們?cè)诿看斡?xùn)練時(shí),都需要對(duì)標(biāo)簽進(jìn)行隨機(jī)化處理呢?答案是否定的,我們有更好的方法來(lái)解決,也就是標(biāo)簽平滑。下面我們介紹標(biāo)簽平滑的具體思路。

        標(biāo)簽平滑的推理

        假設(shè)(,)是訓(xùn)練集的一個(gè)樣本。當(dāng)我們采用交叉熵來(lái)描述損失函數(shù)時(shí),對(duì)于每一個(gè)樣本 ,損失函數(shù)為:

        經(jīng)過隨機(jī)化之后,新的標(biāo)簽有 - 的概率與 相同,有 的概率不同(即 -)。所以,采用隨機(jī)化的標(biāo)簽作為訓(xùn)練數(shù)據(jù)時(shí),損失函數(shù)有 1- 的概率與上面的式子相同,有 的概率為:

        我們把上面兩個(gè)式子按概率加權(quán)平均,就可以得到:

        為了簡(jiǎn)化上面的式子,我們令:

        綜合一下,就可以得到:

        這個(gè)式子和原先的交叉熵表達(dá)式相比,只有 被換成了,其他的內(nèi)容全部都沒有變。這實(shí)際上等價(jià)于:把每個(gè)標(biāo)簽 換成了 ,然后再進(jìn)行正常的訓(xùn)練過程。 因此,我們并不需要在訓(xùn)練前進(jìn)行隨機(jī)化處理,只需要把每個(gè)標(biāo)簽替換一下即可。

        那么為什么我們說(shuō)這個(gè)過程就可以把標(biāo)簽平滑掉呢?我們可以從下面的式子里看出:

        什么意思呢,就是說(shuō)當(dāng)標(biāo)簽為 的時(shí)候,我們并不是將 直接放入模型中訓(xùn)練,而是將其換成一個(gè)比較小的數(shù)字 ,同樣地,如果標(biāo)簽為 ,我們也將其替換為較接近的數(shù) 。

        也就是說(shuō)我們告訴模型, 不一定為真, 不一定為假。為了方便看出效果,我們可以給出交叉熵模型的表達(dá)式:

        由此可見,在交叉熵模型中,模型輸出永遠(yuǎn)不可能達(dá)到 ,因此模型會(huì)不斷增大 ,使得預(yù)測(cè)輸出盡可能逼近 ,而這個(gè)過程與正則化是矛盾的,或者說(shuō),有可能出現(xiàn)過擬合。如果我們把標(biāo)簽 分別替換成 -,模型的輸出在達(dá)到這個(gè)值之后,就不會(huì)繼續(xù)優(yōu)化。因此,所謂平滑,指的就是把兩個(gè)極端值 變成兩個(gè)不那么極端的值。下面我們?cè)倥e一個(gè)實(shí)際的例子說(shuō)明。

        實(shí)際舉例分析

        假設(shè)有一批樣本,樣本類別總數(shù)為 ,從中取出一個(gè)樣本,得到該樣本的 - 化后的標(biāo)簽為[0,0,0,1,0],假設(shè)我們已經(jīng)得到了該樣本進(jìn)行 的概率矩陣 ,即:

        則我們使用未經(jīng)過標(biāo)簽平滑的數(shù)據(jù)根據(jù)交叉熵求得當(dāng)前的 為:

        計(jì)算結(jié)果為:

        可以發(fā)現(xiàn)沒有標(biāo)簽平滑計(jì)算的損失只考慮正確標(biāo)簽位置的損失,而不考慮其他標(biāo)簽位置的損失, 這就會(huì)出現(xiàn)一個(gè)問題,即不考慮其他錯(cuò)誤標(biāo)簽位置的損失,這會(huì)使得模型過于關(guān)注增大預(yù)測(cè)正確標(biāo)簽的概率,而不關(guān)注減少預(yù)測(cè)錯(cuò)誤標(biāo)簽的概率,最后導(dǎo)致的結(jié)果是模型在自己的訓(xùn)練集上擬合效果非常良好,而在其他的測(cè)試集結(jié)果表現(xiàn)不好,即過擬合,也就是說(shuō)模型泛化能力差。

        那么我們?cè)賮?lái)看一下使用標(biāo)簽平滑后的結(jié)果。我們知道標(biāo)簽平滑的公式為:

        還是上面那組數(shù)據(jù),假設(shè)平滑因子 =,將數(shù)據(jù)中的 進(jìn)行如下變化:

        因此 就是我們經(jīng)過平滑操作后得到的標(biāo)簽,接著我們就可以求出平滑后該樣本的交叉熵?fù)p失 為:

        很明顯我們可以看出 是大于 的。并且平滑過后的樣本交叉熵?fù)p失就不僅考慮到了訓(xùn)練樣本中正確的標(biāo)簽位置(- 標(biāo)簽為 的位置)的損失,也稍微考慮到其他錯(cuò)誤標(biāo)簽位置(- 標(biāo)簽為 的位置)的損失,導(dǎo)致最后的損失增大,導(dǎo)致模型的學(xué)習(xí)能力提高,即要下降到原來(lái)的損失,就得學(xué)習(xí)的更好,也就是迫使模型往增大正確分類概率并且同時(shí)減小錯(cuò)誤分類概率的方向前進(jìn)。

        下面我們給出在使用標(biāo)簽平滑時(shí)的 損失的代碼實(shí)現(xiàn):

        def cross_entropy_loss(preds, target, reduction):
            logp = F.log_softmax(preds, dim=1)
            loss = torch.sum(-logp * target, dim=1)
            if reduction == 'none':
                return loss
            elif reduction == 'mean':
                return loss.mean()
            elif reduction == 'sum':
                return loss.sum()
            else:
                raise ValueError(
                    '`reduction` must be one of \'none\', \'mean\', or \'sum\'.')

        # one-hot編碼
        def onehot_encoding(labels, n_classes):
            return torch.zeros(labels.size(0), n_classes).to(labels.device).scatter_(
                dim=1, index=labels.view(-11), value=1)

        def label_smoothing(preds, targets,epsilon=0.1):
         #preds為網(wǎng)絡(luò)最后一層輸出的logits
         #targets為未one-hot的真實(shí)標(biāo)簽
            n_classes = preds.size(1)
            device = preds.device

            onehot = onehot_encoding(targets, n_classes).float().to(device)
            targets = onehot * (1 - epsilon) + torch.ones_like(onehot).to(
                device) * epsilon / n_classes
            loss = cross_entropy_loss(preds, targets, reduction="mean")
            return loss

        總結(jié)

        在幾乎所有的情況下,使用標(biāo)簽平滑訓(xùn)練可以產(chǎn)生更好的校準(zhǔn)網(wǎng)絡(luò),能夠告訴”模型,樣本的標(biāo)簽不一定正確,那么訓(xùn)練出來(lái)的模型對(duì)于少量的樣本錯(cuò)誤就會(huì)有“免疫力”,從而更好地去泛化網(wǎng)路,最終對(duì)不可見的生產(chǎn)數(shù)據(jù)產(chǎn)生更準(zhǔn)確的預(yù)測(cè)。

        引用

        • https://zhuanlan.zhihu.com/p/101553787
        • https://juejin.cn/post/6844903520089407502
        • https://www.cnblogs.com/whustczy/p/12520239.html
        • https://blog.csdn.net/Matrix_cc/article/details/105344967
        • https://blog.csdn.net/qq_43211132/article/details/100510113
        • https://blog.csdn.net/qq_44015059/article/details/109479164?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-4&spm=1001.2101.3001.4242

        百面計(jì)算機(jī)視覺匯總

        《百面計(jì)算機(jī)視覺匯總地址》

        點(diǎn)擊文末閱讀原文,跳轉(zhuǎn)到《百面第三版》Github地址,歡迎STAR!

        往期部分干貨文章

        面試必問!| 1. ResNet手推及其相關(guān)變形~


        一文深入淺出cv中的Attention機(jī)制


        沒文章,沒背景,想做CV?那就按這個(gè)干!


        我丟!算法崗必問!建議收藏!


        面試真題:Backbone不變,顯存有限,如何增大訓(xùn)練時(shí)的batchsize?



        - END -

        大家好,我是燦視,94年奶爸一枚。


        本科普通雙非材料專業(yè),莽到985軟工,曾混跡于百度與騰訊。


        目前在復(fù)旦全日制讀博,關(guān)注AI在互聯(lián)網(wǎng)與銀行等單位中的工作機(jī)會(huì)!持續(xù)分享最硬核的面經(jīng)資料與最真實(shí)的職場(chǎng)經(jīng)驗(yàn)分享!


        普通本科,勸退專業(yè),英年早婚,考研讀博,我都經(jīng)歷過。如有相關(guān)問題,都可以加微信私聊我哈~


        瀏覽 98
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        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>
            欧美丰满高龄老妇熟乱视频网站 | 黄色性爱在线观看 | 成人A片网站 | www,操逼 | 久操热久操 | 欧美一区二区三 | 四虎av在线 | 韩国美女操逼 | 苏妲己一级婬片A片 | www.91爱爱.com |