日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ICML2020 | 一行代码就能实现的测试集上分技巧

發(fā)布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ICML2020 | 一行代码就能实现的测试集上分技巧 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

星標(biāo)/置頂小屋,帶你解鎖

最萌最前沿的NLP、搜索與推薦技術(shù)

文 |?蘇劍林

編 |?夕小瑤


在訓(xùn)練模型的時候,我們需要損失函數(shù)一直訓(xùn)練到0嗎?顯然不用。一般來說,我們是用訓(xùn)練集來訓(xùn)練模型,但希望的是驗證集的損失越小越好,而正常來說訓(xùn)練集的損失降低到一定值后,驗證集的損失就會開始上升(即過擬合),因此沒必要把訓(xùn)練集的損失降低到0。

為了對抗這種過擬合現(xiàn)象,提高模型的測試集表現(xiàn)(即泛化能力),一種很自然的想法是提前終止(early stopping),也就是當(dāng)觀測到模型的驗證集表現(xiàn)不降反升時,果斷停止訓(xùn)練。這也是如今大模型跑小數(shù)據(jù)時的最常用做法。

既然如此,在模型訓(xùn)練loss已經(jīng)到達某個閾值之后,我們可不可以做點別的事情來繼續(xù)提升模型的測試集性能呢?一篇發(fā)表于機器學(xué)習(xí)頂會ICML2020上的論文《Do We Need Zero Training Loss After Achieving Zero Training Error?》[1]回答了這個問題。

不過這篇論文的回答也僅局限在“是什么”這個層面上,并沒很好地描述“為什么”,另外看了知乎上kid丶[2]大佬的解讀,也沒找到自己想要的答案。因此自己分析了一下,記錄在此。

思路描述

論文提供的解決方案非常簡單,假設(shè)原來的損失函數(shù)是,現(xiàn)在改為:

其中是預(yù)先設(shè)定的閾值。當(dāng)時,這時候就是執(zhí)行普通的梯度下降;而時,注意到損失函數(shù)變號了,所以這時候是梯度上升。因此,總的來說就是以為閾值,低于閾值時反而希望損失函數(shù)變大。論文把這個改動稱為“Flooding”。

這樣做有什么效果呢?論文顯示,訓(xùn)練集的損失函數(shù)經(jīng)過這樣處理后,驗證集的損失能出現(xiàn)“二次下降(Double Descent)”,如下圖。簡單來說就是最終的驗證集效果可能更好些。

左圖:不加Flooding的訓(xùn)練示意圖;右圖:加了Flooding的訓(xùn)練示意圖

效果

從上圖可以看出來這個方法的理想很豐滿,那么實際表現(xiàn)如何呢?

作者這里在MNIST、CIFAR等眾多CV領(lǐng)域的benchmark上進行了實驗,且如下圖所示

圖中中間一欄是沒有加flooding的結(jié)果(early stopping和weight decay的四種排列組合),右邊一欄是加了flooding的結(jié)果(四種排列組合的基礎(chǔ)上都加上flooding)。可以看到加了flooding后,大部分情況下模型都能比之前有更好的測試集表現(xiàn)。

個人分析

如何解釋這個方法的有效性呢?可以想象,當(dāng)損失函數(shù)達到之后,訓(xùn)練流程大概就是在交替執(zhí)行梯度下降和梯度上升。直觀想的話,感覺一步上升一步下降,似乎剛好抵消了。事實真的如此嗎?我們來算一下看看。假設(shè)先下降一步后上升一步,學(xué)習(xí)率為,那么:

我們有

(滑動查看完整公式)

近似那一步是使用了泰勒展式對損失函數(shù)進行近似展開,最終的結(jié)果就是相當(dāng)于損失函數(shù)為梯度懲罰、學(xué)習(xí)率為的梯度下降。更妙的是,改為“先上升再下降”,其表達式依然是一樣的(這不禁讓我想起“先升價10%再降價10%”和“先降價10%再升價10%”的故事)。因此,平均而言,Flooding對損失函數(shù)的改動,相當(dāng)于在保證了損失函數(shù)足夠小之后去最小化,也就是推動參數(shù)往更平穩(wěn)的區(qū)域走,這通常能提供提高泛化性能(更好地抵抗擾動),因此一定程度上就能解釋Flooding其作用的原因了。

本質(zhì)上來講,這跟往參數(shù)里邊加入隨機擾動、對抗訓(xùn)練等也沒什么差別,只不過這里是保證了損失足夠小后再加擾動。讀者可以參考《泛化性亂彈:從隨機噪聲、梯度懲罰到虛擬對抗訓(xùn)練》[3]了解相關(guān)內(nèi)容,也可以參考“圣經(jīng)”《深度學(xué)習(xí)》第二部分第七章的“正則化”一節(jié)。

方法局限性

雖然這個方法看起來還挺work,但是不能忽視的一個細節(jié)是,作者在做上面表格里的每組flooding的實驗時,都對flooding的超參b調(diào)節(jié)了20組(從0.01~0.20),如下

這在數(shù)據(jù)規(guī)模很小時實驗代價還好,但單次實驗代價較高時,可能就不那么實用了。

繼續(xù)腦洞

有心使用這個方法的讀者可能會糾結(jié)于的選擇或調(diào)超參的實驗代價,不過筆者倒是有另外一個腦洞:無非就是決定什么時候開始交替訓(xùn)練罷了,如果從一開始就用不同的學(xué)習(xí)率進行交替訓(xùn)練呢?也就是自始至終都執(zhí)行

其中,這樣我們就把去掉了(當(dāng)然引入了的選擇,天下沒免費午餐)。重復(fù)上述近似展開,我們就得到

(滑動查看完整公式)

這就相當(dāng)于自始至終都在用學(xué)習(xí)率來優(yōu)化損失函數(shù)了,也就是說一開始就把梯度懲罰給加了進去。這樣能提升模型的泛化性能嗎?筆者簡單試了一下,有些情況下會有輕微的提升,基本上都不會有負面影響,總的來說不如自己直接加梯度懲罰好,所以不建議這樣做。

文章小結(jié)

本文簡單介紹了ICML2020一篇論文提出的“到一定程度后就梯度上升”的訓(xùn)練策略,并給出了自己的推導(dǎo)和理解,結(jié)果顯示它相當(dāng)于對參數(shù)的梯度懲罰,而梯度懲罰也是常見的正則化手段之一。



?文末福利?

后臺回復(fù)關(guān)鍵詞入群
加入賣萌屋NLP/IR/Rec與求職討論群
有頂會審稿人、大廠研究員、知乎大V和妹紙
等你來撩哦~

?關(guān)注星標(biāo)?

帶你解鎖最前沿的NLP、搜索與推薦技術(shù)

參考文獻

[1] Do We Need Zero Training Loss After Achieving Zero Training Error?:?https://arxiv.org/abs/2002.08709

[2] kid丶:?https://zhuanlan.zhihu.com/p/163676138

[3] 泛化性亂彈:從隨機噪聲、梯度懲罰到虛擬對抗訓(xùn)練: https://kexue.fm/archives/7466

總結(jié)

以上是生活随笔為你收集整理的ICML2020 | 一行代码就能实现的测试集上分技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。