機器之心報道。

很多人工智慧學者都在抱怨目前的 AI 頂級會議接收論文數量大幅膨脹,論文質量也顯著下降,其中有一部分經不起複現的推敲。最近,在 Reddit 上一個「較真」的網友就對 CVPR2018 的一篇大會接收論文進行復現,發現了其中的問題。此貼在 Reddit 上引發了眾人的熱烈討論,其中包括對學術會議同行評審機制的審視。

po 主在 Reddit 中稱,「《Perturbative Neural Networks》一文提出用 1x1 卷積代替 3x3 卷積,輸入中應用了一些雜訊。作者稱這種做法表現良好,但我的復現結果並不理想,因此我決定對其進行測試。作者提供了他們用的代碼,但是經過仔細檢查,我發現他們的測試準確率計算有誤,導致得出的所有結果無效。」

  • 原論文鏈接:arxiv.org/abs/1806.0181
  • po主測試地址:github.com/michaelklach

CVPR 論文復現發現問題

下面,先讓我們細緻過一遍 po 主在復現這篇論文時發現的問題,他主要發現測試準確率計算無效,因此加雜訊或採用 1×1 的卷積也沒有更好的效果。

原始實現在第一層上使用常規卷積,其餘各層使用 fanout=1,這意味著每個輸入通道都被一個雜訊掩碼擾亂。

然而,原始實現最大的問題在於測試準確率計算有誤。作者沒有使用常用的計算方法算出測試集中正確樣本與全部樣本的比值,而是在以每批為基礎計算準確率,並應用平滑權重(測試準確率=0.7 * prev_batch_accuracy + 0.3 * current_batch_accuracy)。

以下是論文中所用方法與正確準確率計算的比較:

運行這個模型(在 CIFAR10 上訓練 noiseresnet18),原始代碼得出的最佳測試準確率為 90.53%,而實際最佳測試準確率為 85.91%。

在糾正了這個問題之後,我進行了大量的測試,想看看擾亂的輸入和噪音覆蓋會不會帶來什麼好處,但最終我得出的結論是:並沒有。

下面的例子展示了幾個 ResNet-18 變體的不同:降低過濾器數量以保證相同參數數量的基線模型;除了第一層,其它層都只使用 1×1 卷積(無噪音)的模型;以及除第一層外所有層使用擾動後接 1×1 卷積。這三個模型大約都有 550 萬個參數:

在整個訓練過程中,常規 resnet 基線模型和 PNN 之間的準確率差值保持在 5% 左右,並且添加雜訊掩碼比沒有任何雜訊的等效「受損」resnet 提升不到 1 %。

作者對源代碼,尤其是 PerturbLayer class 進行了一些修正,包括 --nmasks、--mix_maps 和--train_masks 等等。最後,作者使用了基線模型 resnet18 和原實現中的 noiseresnet18。此外,perturb_resnet18 在使用合適的參數下有足夠的能力替代基線模型與 noiseresnet18。

CIFAR-10:

  1. 基線測試準確度:91.8%;採用帶有 3×3 卷積的常規 ResNet-18,卷積核的數量降低到與 PNN 參數量相當的水平。
  2. 原始實現的測試準確度:85.7%;相當於下載原始 GitHub 實現項目的代碼並運行。
  3. 與原始實現相同,但是將 first_filter_size 修正為 3 會將準確度提升到 86.2%。
  4. 與上面實現相同,但是不帶任何雜訊會實現 85.5% 的測試準確度;resnet18 在第一層使用 3×3 的卷積,在後面會保留 1×1 的卷積。
  5. 在 PNN 的所有層級使用均勻雜訊,測試準確度為 72.6%。
  6. 在 PNN 除第一層外的所有層使用雜訊掩碼,測試準確度為 82.7%;其中第一層使用常規的 3×3 卷積。
  7. 與上面實現相同,但是使用—no-unique_masks 參數,這表示相同一組掩碼會作用於每一個輸入通道,測試準確率為 82.4%
  8. 訓練雜訊掩碼,測試準確率為 85.9%,雜訊掩碼每一個批量更新一次,與常規模型參數同時更新。

問題與實驗結論

原論文中的第 3.3 節和 3.4 節闡述了如何通過找到 PNN 參數來複現常規 CNN 的輸出。問題在於,它只適用於單個輸入 x。因此,對於任何給定的輸入 x,PNN 可能找到計算正確輸出 y 所需的權重,但這並不代表它可以為數據集中的所有輸入樣本找到權重。

直覺告訴我,PNN 似乎缺乏常規 CNN 最主要的特徵提取特性:它不能通過卷積核直接匹配任何空間模式。

似乎用雜訊干擾層輸入沒有任何顯著的好處,不帶雜訊掩碼的簡單 1x1 卷積性能沒有顯著提升。不管我們如何應用雜訊掩碼,使用 1x1 卷積造成的準確率損失都很嚴重(即使不修改第一層,在 CIFAR-10 上的準確率也要下降約 5% )。由於準確度計算方法有誤,作者發表的結果無效。

作者回應與 Reddit 討論

其實,在收到反饋後,該論文作者也對 po 主提出的問題作出了積極回應:

我是原文一作。大約三周前,我們才知道這件事,並展開了調查。我感激 Michael 復現 PNN 論文並把這個問題帶給我們。我們計劃透徹分析下這篇文章,在十分確定之後給出進一步的回應。可視化器中光滑函數的默認配置是疏忽點,我們進行了修改。如今,我們正在重新運行所有實驗,並將把最新結果更新到 arXiv 論文與 Github 上。此外,如果分析表示我們的結果遠不如 CVPR 論文中報告的,我們會撤回此論文。話雖如此,基於我的初步評估,在他的實現中選擇合適的過濾器、雜訊等級和優化方法,我目前能夠在 CIFAR-10 上達到 90%-91% 的準確率,用的也是他選擇的參數。但沒有仔細過一遍之前,我也不想談論太多。

Felix Juefei Xu 的回應得到了大家的支持與認可,但同樣也引出了另一個問題:同行評審流程中對實驗結果的復現。也許,這才是背後的關鍵。

用戶 RoboticGreg 表示:

總的來說,論文評審過程不包含復現實驗結果。根據我的經驗,評審者不得不在很大程度上依靠作者的誠信。評審者經常自問,作者是否令人信服地、準確地陳述了問題,並根據實驗的結構和他們提出的結果得出了正確的結論。

代碼錯誤、精細的實驗過程中存在的問題通常在論文發表之後才會被發現,就像本文中提到的這一案例。

用戶 tkinter76 也認為:

我認為(CVPR2018 的)論文評審者根本沒有運行代碼,原因如下:

  • 實現有時不會隨論文一起提交
  • 把一切都弄妥當太耗時間
  • 通常人們缺乏在合理的時間內重新運行所有步驟所需的資源

因此同行評審通常更關心論文中描述的方法。潛在的解決辦法是要求作者提交現成的實現(如通過 docker)。然而,在哪裡運行仍然是一個問題。也許 AWS 資源等可以從提交費用中提取,供評審人員重新運行模型。然後,問題是確保評審人員不會「濫用」資源進行他們自己的實驗等。在任何情況下,「通過計算的方法」進行 DL 論文評審都很棘手。

其實,學術社區已經注意到這一問題。去年 ICML 學術會議上,「機器學習復現 Workshop」就對這一問題進行過討論,並於 2018 年舉辦了 ICLR 2018 復現挑戰賽,目的就是保證接收論文公布的結果是可靠的、可復現的。

在機器學習愈發火熱的今天,如何在論文提交與參會人數激增的情況下保證接收論文與大會的質量,是學術會議面臨的巨大挑戰,也急需社區能給出可行的解決方案。

參考鏈接:reddit.com/r/MachineLea

github.com/michaelklach


推薦閱讀:
查看原文 >>
相关文章