天天看點

大佬是如何從頭寫一篇頂級論文的?

原文丨https://zhuanlan.zhihu.com/p/538681254

最近完成了一篇很滿意的論文,不僅整個過程愉快,回味無窮,而且真正做到了“學術有影響 工業有産出”,可以肯定這篇文章會改變差分隐私(differential privacy;DP)深度學習的範式。

因為這次經曆實在太過“巧”了 (過程充滿巧合 結論極其巧妙)在此和同學們分享一下自己從觀察-->構思-->實證-->理論-->大規模實驗的完整流程,盡量保持lightweight不涉及過多技術細節,代碼放在底部。

Automatic Clipping: Differentially Private Deep Learning Made Easier and ​​Strongerarxiv.org/abs/2206.07136​​

​​https://arxiv.org/abs/2206.07136​​

尤其與paper展現的順序不同,paper有時會刻意将結論放在開頭吸引讀者,或者先介紹簡化後的定理而将完整的定理放附錄,而我想将我的經曆按時間順序寫下(也就是流水賬) 比如把走過的彎路和研究中突發的狀況寫出來,以供剛踏上科研之路的同學參考。

一、 文獻閱讀

我每天都會讀arXivDaily學術速遞裡所有機器學習和統計的文章标題及簡介,大概每天150篇 是以DP的文章基本第一時間就能知道。

事情的起源是斯坦福的一篇論文,現在已經錄了ICLR:

文章寫的非常好,總結起來三個主要貢獻:

  1. 在NLP任務中,DP模型的accuracy非常高,鼓勵了privacy在語言模型的應用 (與之相對的是CV中DP會産生非常大的accuracy惡化 比如cifar10目前DP限制下隻有80%accuracy,而不考慮DP可以輕松95%;ImageNet當時最好的DP accuracy不到50%)
  2. 在語言模型上,模型越大性能會越好。比如GPT2中,從4億參數到8億參數性能提升很明顯,也取得了很多SOTA(但是在CV和推薦系統中,很多時候更大的模型性能會很差,甚至接近random guess。比如CIFAR10的DP best accuracy此前是由四層CNN得到的,而非ResNet)
大佬是如何從頭寫一篇頂級論文的?

NLP任務中DP模型越大性能越好 [Xuechen et al. 2021]

  1. 在多個任務上取得SOTA的超參數是一緻的,都是clipping threshold要設定的足夠小,并且learning rate需要大一些(此前所有文章都是一個任務調一個clipping threshold 費時費力,并沒有出現過像這篇這樣一個clipping threshold=0.1 貫穿所有任務表現還這麼好)

以上總結是我讀完paper瞬間了解的,其中括号内的内容并非來此這篇paper而是以往諸多閱讀産生的印象,這有賴于長期的閱讀積累和高度的概括能力,才能快速聯想和對比出來。

事實上很多同學做文章起步難恰恰就在于看一篇文章隻能看到一篇文章的内容,無法和整個領域的知識點形成網絡産生聯想。這一方面由于剛入門的同學閱讀量不夠,尚未掌握足夠的知識點,尤其是長期從老師手中拿課題不自己獨立propose的同學容易有這個問題。另一方面則是閱讀量随夠但沒有時時歸納總結,導緻資訊沒有凝聚成知識或者知識沒有串聯。

這裡補充下DP deep learning的背景知識,暫且略過DP的定義,不影響閱讀:

所謂DP deep learning 從算法的角度來說其實就是多做兩個額外的步驟:per-sample gradiet clipping和Gaussian noise addition;換句話來說,隻要你把gradient按照這兩步處理完了(處理後的gradient叫做private gradient)之後該怎麼用優化器怎麼用,SGD/Adam都可以。

至于最後算法到底多private就是另一個子領域的問題了,稱為privacy accounting theory 此領域相對成熟而且需要極強的理論功底,由于本文專注于optimization 按下不表。

g_i 是 一個資料點的梯度(per-sample gradient),R是clipping threshold, sigma是noise multiplier。

其中Clip叫做clipping function 就跟正常的gradient clipping一樣,梯度長于R就剪到R,小于R就不動。

比如DP版本的SGD就是:

大佬是如何從頭寫一篇頂級論文的?

目前所有paper全都用的是隐私深度學習開山之作(Abadi, Martin, et al. "Deep learning with differential privacy.")中的clipping function,也稱為Abadi's clipping

大佬是如何從頭寫一篇頂級論文的?

但這是完全不必要的,遵循第一性原理 從privacy accounting theory出發。其實clipping function隻需要滿足Clip(g_i)*g_i的模小于等于R就可以了,也就是說Abadi's clipping隻是一種滿足這個條件函數,絕非唯一。

二、切入點

一篇文章的閃光點很多,但是并非都能為我所用,要結合自身的需求和擅長去判斷最大的貢獻是什麼。

這篇文章前兩個貢獻其實非常empirical,也很難深挖,而最後一個貢獻很有意思。我仔細看了看超參數的ablation study 發現一個原作者沒有發現的點:在clipping threshold足夠小的時候,其實clipping threshold(也就是clipping norm C,在上面的公式中和R是一個變量)沒有作用。

大佬是如何從頭寫一篇頂級論文的?

縱向來看 C=0.1,0.4,1.6對DP-Adam沒什麼差別 [Xuechen et al. 2021]

這引起了我的興趣,感覺背後一定有什麼原理,于是我手寫了他們所用的DP-Adam來看看為什麼,其實這很簡單:

如果R足夠小,clipping其實等價于normalization!簡單代入private gradient(1.1)可以将R從clipping的部分和noising的部分分别提出來。

而Adam的形式使得R會同時出現在梯度和自适應的步長中,分子分母一抵消,R就沒有了,頂會idea就有了!

m和v都依賴于梯度,同時用private梯度替換即得到DP-AdamW。

就這麼簡單的代換,就證明了我的第一個定理:在DP-AdamW中,足夠小的clipping thresholds是互相等價的,無需調參的。

毫無疑問,這是一個很簡明而且很有趣的觀察,但這并沒有足夠的意義,是以我需要思考這個觀察在實際中有什麼用途。

其實,這意味着DP訓練減少了一個數量級的調參工作:假設學習率和R各調5個值(如上圖) 那就要測25種組合才能找到最優超參數,現在隻需要調學習率5種可能就好,調參效率提高了數倍,這是對業界來說極有價值的痛點問題。

立意足夠高,數學足夠簡明,一個好的想法已經初具雛形。

三、簡單擴充

隻對Adam/AdamW成立的話,這個工作的局限性還是太大了。是以我很快擴充到了AdamW和其他adaptive optimizers,比如AdaGrad。事實上,對于所有的adaptive optimizers 都可以證明clipping threshold會被抵消進而不用調參,大大增加了定理的豐富程度。

這裡面還有一個有趣的小細節,衆所周知 Adam with weight decay和AdamW不一樣,後者使用的是decoupled weight decay 就這個差別還發了篇ICLR。

大佬是如何從頭寫一篇頂級論文的?

Adam有兩種加weight decay的方式

這個差別在DP優化器中也存在,同樣是Adam 用decoupled weight decay的話,縮放R不影響weight decay的大小,但是用普通的weight decay的話,放大R兩倍等價于縮小兩倍的weight decay。

四、另有乾坤

聰明的同學可能已經發現了,我一直再強調自适應優化器,為啥不講講SGD呢? 答案是在我寫完DP自适應優化器的理論後,Google緊接着就放了一篇DP-SGD用在CV的文章,也做了ablation study,但是規律和在Adam上發現的完全不同,給我留下了一個對角的印象。

對DP-SGD且R足夠小的時候,增大10倍lr等于增大10倍R [​​https://arxiv.org/abs/2201.12328​​]

當時我看到這篇文章的時候很興奮,因為又是一個證明small clipping threshold效果好的論文。

在科學界,連續的巧合背後往往有着隐藏的規律。

簡單的代換一下,發現SGD比Adam還好分析 (1.3)可以近似為:

顯然,R又可以提出來和學習率 \eta\eta 組合在一起,從理論上證明了Google的觀察

“Specifically, when the clipping norm is decreased k times, the learning rate should be increased k times to maintain similar accuracy.”

很可惜 Google隻看到現象,沒有上升到理論的高度,這裡也有一個巧合,那就是上圖他們同時畫了兩種尺度的ablation study 隻有左邊的尺度能看出對角線,光看右邊是沒有結論的...

由于沒有自适應步長,SGD不像Adam一樣無視R而是把R看作學習率的一部分,是以不需要調節 反正學習率要調參。

再将SGD的理論擴充到momentum,所有Pytorch支援的優化器全都分析完畢。

五、從直覺到嚴謹

一個創新點是有了,但是Abadi's clipping嚴格來說隻是近似normalization,不能劃等号,也就沒法确鑿的分析收斂性。

根據多啦A夢鐵人兵團原理,我直接命名normalization為新的clipping function 替代了整個領域用了6年的Abadi clipping,這是我的第二個創新點。

大佬是如何從頭寫一篇頂級論文的?

經過剛才的證明,新的clipping嚴格不需要R,是以稱之為automatic clipping (AUTO-V; V for vanilla)

既然形式上與Abadi's clipping有不同,那麼accuracy就會有差異,而我的clipping可能有劣勢。

是以我需要寫代碼測試我的新方法,而這 隻需要改動一行代碼 (畢竟隻是把 )

事實上,DP per-sample gradient clipping這個方向,總共隻有三種clipping functions。除了Abadi's clipping以外的兩種都是我提出的:一個是global clipping;還有一個就是這篇automatic clipping,而在先前的工作中,我就已經知道怎麼在各個流行的庫中改clipping了。我将修改方法放在文章最後一個appendix。

經過我的測試,我發現斯坦福的文章中GPT2在整個訓練過程中,所有itertation所有per-sample gradient都是clip過的。也就是說,至少在這一個實驗上Abadi's clipping完全等價于automatic clipping。雖然後來的實驗的确有輸于SOTA的情況,但這已經說明了我的新方法有足夠的價值:一個不需要調整clipping threshold的clipping function 而且有時accuracy也不會犧牲。

六、 回歸抽象思考

斯坦福的文章有兩大類語言模型的實驗:一類是GPT2為模型的生成型任務;另一類是RoBERTa為模型的分類型任務。雖然在生成任務上automatic clipping和Abadi's clipping等價 但是分類型任務卻總是差幾個點的準确率。

出于我自己的學術習慣,這個時候我不會去換資料集然後專門挑我們占優的實驗發表,更不會增加trick比如做資料增強和魔改模型之類的。我希望在完全公平的比較中,隻比較per-sample gradient clipping的前提下,盡可能做出最好的不含水分的效果。

事實上,在和合作者讨論中我們發現,純粹的normalization和Abadi's clipping比,梯度大小的資訊是完全抛棄的。也即是說對于automatic clipping,無論原始的梯度多大 clip後都是R這麼大,而Abadi對于比R小的梯度是保留了大小的資訊的。

基于這個想法,我們做了一個微小但極其巧妙的改動,稱之為AUTO-S clipping (S代表stable)。

将R和學習率融合後變成

簡單一畫可以發現,這個小小的 \gamma\gamma (一般設為0.01 其實設成别的正數都行 很穩健)就能保留梯度大小的資訊。

基于這個算法,還是隻改動一行,把斯坦福的代碼重跑一遍,六個NLP資料集的SOTA就到手了。

在E2E生成任務上,AUTO-S超越了所有其他clipping function,在SST2/MNLI/QNLI/QQP分類任務也是。

七、要做通用算法

斯坦福文章的一個局限性是隻專注于NLP,又很巧合的是,緊接着Google刷了ImageNet的DP SOTA兩個月後,Google子公司DeepMind放出了一篇DP在CV中大放異彩的文章,直接将ImageNet從48%提升到84%!

​​https://arxiv.org/abs/2204.13650​​

在這篇文章中,我第一時間去看優化器和clipping threshold的選擇,直到我在附錄翻到這張圖:

DP-SGD在ImageNet上的SOTA也是需要clipping threshold足夠小

依然是small clipping threshold效果最好!有了三篇高品質的文章支撐 automatic clipping已經有了很強的動機了,我越發肯定自己的工作會是非常傑出的。

巧合的是,DeepMind這篇文章也是純實驗沒有理論,這也導緻他們差點就領悟出了他們可以從理論上不需要R。事實上他們真的非常接近我的想法了,他們甚至已經發現了R是可以提取出來和學習率融合的 (感興趣的同學可以看看他們的公式(2)和(3)) 但是Abadi's clipping的慣性太大了... 即使他們總結出了規律卻沒有更進一步。

大佬是如何從頭寫一篇頂級論文的?

DeepMind也發現了small clipping threshold效果最好,但是沒有了解為什麼。

受這篇新的工作啟發,我開始着手做CV的實驗,讓我的算法能被所有DP研究者使用,而不是NLP搞一套方法CV搞另一套。

好的算法,就是應該通用好用,事實也證明 automatic clipping在CV資料集上同樣能取得SOTA。

大佬是如何從頭寫一篇頂級論文的?

八、理論為骨 實驗為翼

縱觀以上所有的論文,都是SOTA提升顯著,工程效果拔滿,但是理論完全空白。

當我做完所有實驗的時候,這份工作的貢獻已經超過了一篇頂會的要求:我将經驗上small clipping threshold所産生的DP-SGD和DP-Adam的參數影響大大簡化;提出了新的clipping function而不犧牲運算效率、隐私性,還不用調參;小小的 \gamma\gamma 修複了Abadi's clipping和normalization對梯度大小資訊的破壞;充足的NLP和CV實驗都取得了SOTA的準确率。

我還沒有滿意,一個沒有理論支撐的優化器,還是無法為深度學習做出實質貢獻。每年頂會提出的新優化器幾十個,第二年全都掃進故紙堆,Pytorch官方支援的、業界真正在用的還是那麼幾個。

為此我和合作者們額外花了兩個月做了automatic DP-SGD收斂性分析,過程艱難但最後的證明簡化到極緻。結論也很簡單,将batch size、learning rate、model size、sample size等變量對收斂的影響都定量的表達出來,并且符合所有已知的DP訓練行為。

特别的,我們證明了DP-SGD雖然收斂的比标準的SGD慢,但是iteration趨于無窮的話,收斂的速度都是一個數量級的,這為隐私計算提供了信心:DP模型收斂,雖遲但到。

九、撞車了...

終于,寫了7個月的文章完稿了,沒想到巧合還沒停,5月份NeurIPS投稿 6/14内部修改完放arXiv,結果6/27看到微軟亞州研究院(MSRA)發表了一篇和我們撞車的文章,提出的clipping和我們的automatic clipping一摸一樣:

大佬是如何從頭寫一篇頂級論文的?

和我們的AUTO-S分毫不差

仔細看了看,連收斂性的證明都差不多,而我們兩組人又沒有交集,可以說隔着太平洋的巧合誕生了。

這裡稍微講一下兩篇文章的不同:對方文章稍偏理論,比如額外分析了Abadi DP-SGD的收(我隻證了automatic clipping 也就是他們文中的DP-NSGD,可能我也不知道咋整DP-SGD),用的假設也有一些不同;而我們實驗做的多一些大一些(十幾個資料集)更顯式地建立了Abadi's clipping和normalization的等價關系,比如Theorem 1和2解釋為什麼R可以不用調參。

既然是同時期的工作,我很開心能有人literally不謀而合,互相能補充共同推動這個算法,讓整個社群盡快相信這個結果并從中受益,當然私心來說,也提醒自己下一篇要加速了!

十、總結

回顧這篇文章的創作曆程,從起點來看,基本功一定是前提。而另一個重要的前提是自己心中一直念念不忘調參這個痛點問題,正是久旱,是以讀到合适的文章才能逢甘露;至于過程,核心在于将觀察數學化理論化的習慣,反倒在這個工作中代碼實作能力不是最重要的,我會再寫一篇專欄着重講講另一個硬核代碼工作;最後的收斂性分析,也是靠合作者和自己的不将就,所幸好飯不怕晚,繼續前進!

P.S. 我的paper沒有公布代碼 因為别人的codebase寫了幾萬行 我就改一行實在沒有釋出的必要 比如Facebook的DP代碼庫Opacus(​​https://github.com/pytorch/opacus​​​) (version 1.1.3)隻需要把https://github.com/pytorch/opacus/blob/main/opacus/optimizers/optimizer.py(​​https://github.com/pytorch/opacus/blob/main/opacus/optimizers/optimizer.py​​) 第400行的

per_sample_clip_factor = \(self.max_grad_norm / \(per_sample_norms + 1e-6\)\).clamp\(max=1.0\)

改成下面這行就好了

per_sample_clip_factor = 1 / \(per_sample_norms + 1e-2\)

這等價于斯坦門茨的故事:畫一條線價值一萬美元 :)

【項目推薦】