九月底,一篇CVPR論文由于“無法復現(xiàn)一致的結(jié)果”引發(fā)質(zhì)疑,被要求撤稿。論文一作是CMU博士、來自中國的徐覺非同學,今天,他發(fā)表了詳細分析和回應,并談及他對公開代碼、開放研究的看法。
AI領(lǐng)域的研究論文是否應該公開代碼?這是一個長期以來爭議不休的話題。
多數(shù)人認為,科學研究應該可以讓其他研究人員在相同的條件下重現(xiàn)其結(jié)果。
在AI領(lǐng)域,事情更加明顯:如果我們想要信任AI,就必須能夠復現(xiàn)它。
而對于機器學習的研究來說,由于各種超參數(shù)對結(jié)果影響很大,并且論文里不太可能把所有實現(xiàn)的細節(jié)都說清楚,公布代碼就成了保證復現(xiàn)的重要途徑。
但是,如果代碼開源了,復現(xiàn)論文的時候卻發(fā)現(xiàn)結(jié)果和論文差異太大,怎么辦?
這里有一個教科書般的案例。如果你對是否應該為了復現(xiàn)實驗結(jié)果而開源代碼有爭議,非常值得一讀。
事情是這樣的:
9月底,Reddit上一篇帖子對CVPR 2018的一篇題為“Perturbative Neural Networks”的論文提出了質(zhì)疑。質(zhì)疑者名為Michael Klachko(以下簡稱MK),Reddit ID為p1esk,他表示,自己試圖按照論文中的模型和方法重現(xiàn)實驗結(jié)果,結(jié)果并沒有達到文中聲稱的準確率。MK認為,原文中的計算存在錯誤,并直截了當?shù)乇硎荆@篇文章也許應該被撤稿。
由于CVPR在AI研究領(lǐng)域的地位,此貼一發(fā),頓時引發(fā)眾多網(wǎng)友熱議。
這篇論文來自CMU的Felix Juefei-Xu和Marios Savvides,以及密歇根州立大學的 Vishnu Naresh Boddeti三人。
其中,第一作者Felix Juefei-Xu(徐覺非)來自中國,本科畢業(yè)于上海交通大學電子工程專業(yè),在CMU獲得電子與計算機工程碩士和博士學位。在CMU讀博期間,徐覺非師從Marios Savvides教授,在CMU CyLab生物特征識別中心研究模式識別、機器學習、計算機視覺和圖像處理等領(lǐng)域,特別是這些領(lǐng)域在生物識別中的應用。
徐覺非的主頁
徐覺非當時表示,他們將徹底分析問題,并且得到 100% 確定的結(jié)果之后再給出進一步的回復。 他說:“我們正在重新運行所有的實驗。如果分析表明我們的結(jié)果確實跟提交 CVPR 的版本中相差很多,會撤回這篇論文。”
現(xiàn)在,結(jié)果來了。在介紹徐覺非的詳細回復之前,讓我們先簡要看看這篇論文的主要內(nèi)容和爭議的焦點。
復現(xiàn)結(jié)果不一致,CVPR論文引撤稿爭議
從這篇論文的內(nèi)容來看,作者提出了一個簡單有效的模塊,名為“干擾層”(perturbation layer),作為卷積層的替代。干擾層不使用傳統(tǒng)意義上的卷積,而是將其響應計算為一個線性加權(quán)和,由增加的噪音干擾輸入的非線性激活組成。作者表明,由這些“干擾層”組成的干擾神經(jīng)網(wǎng)絡(PNN)的性能和CNN一樣好。
而提出撤稿質(zhì)疑的MK則表示,使用3X3卷積換成1X1再在輸入中增加一些干擾,實際上并沒有什么意義。他的測試結(jié)果是這樣的:
在關(guān)于學術(shù)論文的討論中,被人質(zhì)疑是否應該撤稿,可以說是非常直接的指控了。此貼一經(jīng)發(fā)出,立即引發(fā)了網(wǎng)友關(guān)于“是否應該撤稿”的討論。
當時,網(wǎng)友的觀點大致分為以下幾類:
1、不用撤,既然作者都把代碼公開了,顯然是無心之過,只要將錯誤改過來就好了。
2、 撤!有錯誤當然撤,不僅如此,以后還應該規(guī)定所有論文提交時都必須公開代碼,不僅論文要評審,連代碼也要一并審核。
3、先把撤稿的事放在一邊:雙盲評審過程本身并不涉及代碼的審核,就好像生物學領(lǐng)域的論文不會在審稿期間去重復實驗,也無法做到一一核查代碼,原本就是論文發(fā)表后,由其他同行來復現(xiàn),由此判斷其結(jié)論是否經(jīng)得起科學論證。
時隔兩個月,作者再發(fā)詳細澄清帖,獲網(wǎng)友一邊倒支持
合理歸合理,但說到底,此事終究懸而未決。近兩個月過去,11月25日,此文第一作者Felix Juefei-Xu(ID:katanaxu)在Reddit上再次發(fā)帖更新情況,詳細說明了質(zhì)疑者MK的實現(xiàn)方法和原文中方法的差異,并表示,這些差異是造成精度下降的主要原因。
徐覺非表示,經(jīng)比較,MK的實現(xiàn)方式與原論文中的實現(xiàn)方式并不一致,主要體現(xiàn)在六個方面,分別為:
優(yōu)化方法、添加的噪音水平、學習率、學習率schedule、Conv-BN-ReLU module ordering、以及對Dropout的使用。
此次徐同學的回應要比9月份那次具體得多,并在自己的Github上貼出了詳細的比較結(jié)果。與兩個月前網(wǎng)友輿論基本勢均力敵相比,此次網(wǎng)友基本對原作者表示了一邊倒的支持。
比如,一位id為“nnatlab”在引用了作者的澄清內(nèi)容后,對質(zhì)疑者MK表示,在正式發(fā)表質(zhì)疑言論之前,應該反復確認實現(xiàn)方式。作者列出的都是導致結(jié)果不一致的重要因素。這種情況下直接發(fā)出“應該撤稿”的質(zhì)疑顯然不夠成熟,也不夠?qū)I(yè)。
也有網(wǎng)友認為,在事情還未定論的情況下就拋出“撤稿”這樣刺眼的字眼顯然不合適??茖W研究需要時間和精力,對研究成果提出質(zhì)疑,也應該給予研究者充分的回應時間。
絕大部分網(wǎng)友認為作者的此次回應有理有力,甚至有人表示,“可以祝賀原作者了”。
質(zhì)疑者“MK”再現(xiàn)身:現(xiàn)在下結(jié)論仍為時尚早
凡事有來必有往。兩個月前發(fā)出質(zhì)疑帖子的MK在本帖現(xiàn)身回復,他在回復中對自己和作者的溝通情況作了簡要說明,表示自己現(xiàn)在正忙著準備12月的另一篇論文,等忙完了將再次對PNN進行測試。在回復中,MK對自己的兩個月前的質(zhì)疑作出了四點澄清:
1.我在原貼中發(fā)布的PNN準確率下降了5%的結(jié)果,其資源來自作者給出的資源庫,所有原始超參數(shù)都未經(jīng)修改。我只改變了測試精度的量度。
2、我真的很愿意相信,原作者找到了神奇的解決辦法,因為這樣我就可以證明能夠以這個方法進行硬件實現(xiàn)(并發(fā)表一篇論文)。但是:
3、在有人(我自己或第三方)成功運行新代碼,并確認主要結(jié)果之前(即PNN可以獲得與CNN相當?shù)谋憩F(xiàn))之前,對原作者表示祝賀還為時尚早。我建議這個論壇的人自己去做這個比較。不必像我一樣重新實現(xiàn),只需驗證一切都可以按照論文中的步驟順利完成就行。
4、如果PNN確實像此文聲稱的那樣強大,這可是件大事。目前,卷積神經(jīng)網(wǎng)絡(CNN)是深度學習的核心,如果我們真的不再需要使用sliding shared filters從輸入中提取出模式,那么此文作者就發(fā)現(xiàn)了一些非常有趣的東西,并找到了處理信息的開創(chuàng)性的新方式。這個發(fā)現(xiàn)可能與Hinton的膠囊網(wǎng)絡一樣新穎和重要。
看得出,面對原作者的詳細說明和網(wǎng)友的輿論壓力,MK仍然在堅持自己的觀點。
論文一作的詳細回應
第1節(jié):Michael Klachko的實現(xiàn)設置不一致
根據(jù)我們的分析,所謂的性能下降(~5%)主要是由于Michael Klachko(以下簡稱MK)在PNN的實現(xiàn)中存在各種不一致和次優(yōu)的超參數(shù)選擇。
在次優(yōu)的設置和超參數(shù)選擇下,MK的實現(xiàn)在CIFAR-10上的結(jié)果是~85-86%,性能下降了5%,如下面的repo快照所示。
將MK的實現(xiàn)與我們的進行比較,可以發(fā)現(xiàn)以下不一致之處:
優(yōu)化方法不同:MK采用SGD,我們采用Adam。
附加噪聲水平不同:MK使用0.5,我們使用0.1。
學習率不同:MK使用的學習率是1e-3,我們使用1e-4。
learning rate scheduling不同(見文末鏈接)。
Conv-BN-ReLU模塊順序不同見文末鏈接)。
dropout的使用不同:MK使用0.5,我們使用None。
如下圖所示,存在諸多不一致。MK的實現(xiàn)是左邊,我們的是右邊。
基于我們有限的試驗次數(shù),我們發(fā)現(xiàn)在這些不一致性中,前兩個(優(yōu)化方法和噪聲水平)對PNN的性能影響最大。優(yōu)化方法的選擇確實非常重要,在小規(guī)模的實驗中,每一種優(yōu)化方法(SGD、Adam、RMSProp等)的遍歷方式都有很大的不同。添加噪聲水平的選擇也非常重要,我們將在第3節(jié)中再次討論。
那么,讓我們看看PNN在正確地設置超參數(shù)后是如何執(zhí)行的。保持相同數(shù)量的噪聲掩碼(——nfilters 128),我們可以達到90.35%的準確率,而MK在他的repo中報告的準確率只有85-86%。
python main.py --net-type 'noiseresnet18' --dataset-test 'CIFAR10' --dataset-train 'CIFAR10' --nfilters 128 --batch-size 10 --learning-rate 1e-4 --first_filter_size 3 --level 0.1 --optim-method Adam --nepochs 450
第2節(jié):關(guān)于CVPR論文結(jié)果
目前,對CVPR實驗的重新評估已經(jīng)基本完成。有一小部分實驗受到平滑函數(shù)中錯誤的默認標志的影響。對于那些受影響的,性能會有小幅下降,可以通過增加網(wǎng)絡參數(shù)來補償。我們將在PNN論文的arxiv版本中更新結(jié)果。
第3節(jié):所有層中的Uniform Additive Noise
接下來要討論的內(nèi)容,我們在CVPR論文中并沒有涉及,而是打算在PNN的后續(xù)工作中進一步探討。其中一個主題是在所有層應用擾動噪聲(perturbative noise),包括第一層。
在CVPR論文中,我們在第一層使用3x3或7x7空間卷積作為特征提取,所有后續(xù)層使用擾動噪聲模塊。由于MK已經(jīng)嘗試并實現(xiàn)了PNN的all-layer perturbative noise版本,我們認為提供我們的見解也有幫助。
根據(jù)MK的repo(如下圖所示),所有層(包括第一層)均勻噪聲的PNN在CIFAR-10上的準確率為72.6%。在這里,我們提供了一個簡單的解決方案(與MK的實現(xiàn)沒有太大變化),可以達到~85-86%的準確率。不過,這仍然是許多正在進行的關(guān)于PNN的研究課題之一,我們將在后續(xù)的工作中進一步報告結(jié)果。
我們從class PerturbLayerFirst(n.module)中創(chuàng)建了一個名為class PerturbLayerFirst(n.module)的重復類,以便將第一層噪聲模塊與其他層的噪聲模塊區(qū)別開來。大部分修改發(fā)生在class PerturbLayerFirst(nn.Module)和class PerturbResNet(nn.Module)中。
修改的主要想法是:
我們需要更多noise masks。使用3個高度相關(guān)(RGB通道)的基本圖像來創(chuàng)建128或256個噪聲擾動響應映射是遠遠不夠的。
噪聲水平的選擇是次優(yōu)的,需要針對第一層進行放大。在MK的實現(xiàn)中,第一層輸入和后續(xù)層的歸一化是不同的,動態(tài)范圍也有很大的不同。
因此,經(jīng)過修改后,具有全層噪聲擾動模塊的PNN準確率可以達到85.92%,而MK在repo中報告的準確率為72.6%。
python main.py --net-type 'perturb_resnet18' --dataset-test 'CIFAR10' --dataset-train 'CIFAR10' --nfilters 256 --batch-size 20 --learning-rate 1e-4 --first_filter_size 0 --filter_size 0 --nmasks 1 --level 0.1 --optim-method Adam --nepochs 450
第4節(jié):為什么PNN有意義?
在攻讀博士學位的最后一年,我投入了一些探索深度學習新方法的研究工作,這些方法在統(tǒng)計學上是有效的,同時也具有穩(wěn)健性。這一系列研究始于我們在CVPR 2017發(fā)表的Local Binary Convolutional Neural Networks (LBCNN)論文。在LBCNN論文中,我們試圖回答這個問題:我們真的需要可學習的空間卷積嗎?事實證明,并不需要。使用 binary或Gaussian filters + learnable channel pooling的Non-learnable隨機卷積也可以。接著,下一個自然而來的問題是:我們真的需要空間卷積嗎?也許另一種特征提取技術(shù)(例如additive noise)+ learnable channel pooling也能起到同樣的作用?這就是PNN論文試圖闡明的問題。
learnable channel pooling和non-learnable convolutional filters兩者的混合讓我們得以重新思考卷積濾波器在深度CNN模型中的作用。通過各種視覺分類任務,我發(fā)現(xiàn)了LBCNN和CNN之間具有可比性。
基于這些觀察,一種自然而然的方法就是完全取代隨機卷積運算。在每個local patch中,由于它是一個線性操作,涉及中心像素的鄰域和一組通過點積創(chuàng)建標量輸出的隨機濾波器權(quán)重,該標量輸出攜帶局部信息,即,將中心像素映射到響應圖中相應的輸出像素。那么,可以替代的最簡單的線性操作就是添加隨機噪聲(additive random noise)。
這就是PNN的動機所在,我在其中介紹了一個非常簡單但有效的模塊,稱為擾動層(perturbation layer),作為卷積層的替代。
我們在LBCNN工作中的經(jīng)驗表明,通過隨機卷積的隨機特征提取和深度神經(jīng)網(wǎng)絡中的learnable channel pooling結(jié)合,可以學習有效的圖像特征。PNN中的加性隨機噪聲是一種最簡單的隨機特征提取方法。
第5節(jié):結(jié)語
當我寫完這篇文章時,我不禁回想起過去兩個月的經(jīng)歷。我不得不承認,當MK決定在Reddit上公開質(zhì)疑時,我有點震驚,尤其是我已經(jīng)答應會調(diào)查這個問題了。一周之內(nèi),這篇文章引起了中國多家主流科技/人工智能媒體的關(guān)注。這個帖子在中國社交媒體上被分享,包括討論這一問題的報道文章,點擊量超過了100萬。有些文章和評論很苛刻,但有些是合理和公正的。雖然我很堅強,但不能說我沒有受到壓力。
但我開始意識到一件事情:作為一名研究人員,面對公眾的審視不是一種選擇,而是一種責任。為此,我真的要感謝Michael,他不僅花費了時間和精力來重新創(chuàng)建和驗證一個已發(fā)布的方法,更重要的是,在發(fā)現(xiàn)結(jié)果不匹配時說出來。我堅信,正是通過這些努力,我們整個研究社區(qū)才能取得真正的進展。
此外,我想對剛剛進入AI領(lǐng)域的年輕研究人員或即將進入AI領(lǐng)域的大學生(以及高中生!)說幾句話。這樣的事情確實會發(fā)生,但是你永遠不應對開放源代碼或進行開放研究感到氣餒。這是AI領(lǐng)域發(fā)展如此迅速的核心原因。我在最近回國的旅途中,遇到了一位高三學生,他非常熱情的和我討論了Batch Normalization和Group Normalization的實施細節(jié)。我真的很驚訝。對于所有年輕的AI研究人員和從業(yè)人員,我真誠地鼓勵你們打破常規(guī)思考,不要停留在教條上,探索尚未被探索的東西,走少有人走的路,最重要的是,做開放的研究,分享你們的代碼和發(fā)現(xiàn)。這樣,你就是在幫助社區(qū)向前發(fā)展,即使每次只前進一英寸。
所以,讓我們繼續(xù)探索、研究和分享。
-
AI
+關(guān)注
關(guān)注
88文章
35094瀏覽量
279537 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70697 -
機器學習
+關(guān)注
關(guān)注
66文章
8501瀏覽量
134582
原文標題:CVPR 18論文“無法重現(xiàn)”?中國作者再度澄清獲網(wǎng)友一邊倒支持
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論