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