用正確方法對度量學習算法進行基準測試

2021-01-10 雷鋒網

典型的度量學習論文會提出一個新的損失函數或訓練過程,然後在一些數據集上顯示結果,如 CUB200、Stanford Cars 和 Stanford Online 產品。每隔幾個月,我們都會看到準確度有所提高。

這真的是太好了,但有幾點要注意。


這裡有一張隨機圖

有些論文對比對象不一致

為了說明一種新的算法優於現有的方法,保持儘可能多的參數不變是很重要的。這樣,我們可以確定是新算法提高了性能,而不是一個無關的參數提高了性能。但是在基準度量學習論文中並非如此:

1.網絡架構並沒有保持不變。有些論文用 GoogleNet,而最近的許多論文都在使用 BN-Inception,有時被稱為 batch 標準化的開端「Inception with Batch Normalization」。2017 年一篇被廣泛引用的論文使用 ResNet50,然後聲稱獲得了巨大的性能提升。這是值得懷疑的,因為與之對比的方法使用的是 GoogleNet,這是一個不太強大的架構。因此,大部分性能提升可能來自網絡架構的選擇,而不是他們提出的方法。

2.圖像增強並沒有保持不變。大多數論文聲稱應用以下變換:將圖像大小調整為 256 x 256,隨機裁剪為 227 x 227,並以 50% 的機率進行水平翻轉。但最近一些論文的官方開源實現表明,他們實際上使用的是 GoogleNet 論文中描述的更複雜的裁剪方法(見「訓練方法」)。

3.性能提升技巧在論文中沒有提及。在最近一篇 2019 年論文的官方開原始碼中,主幹模型的 BatchNorm 參數在訓練期間被凍結。作者解釋說,這有助於減少過度擬合,讓 CUB200 數據集的性能提高 2 個點。但他們的論文中並沒有提到這一點。

在 ImageNet 上預先訓練的模型的準確性。使用 PCA 將輸出嵌入大小減少到 512。對於每個圖像,較小的邊被縮放到 256,然後中心裁剪到 227x227。

大多數論文使用的是簡單的訓練/測試拆分

他們對一部分數據進行訓練,找到在測試集上表現最好的模型,並報告這個數字。換句話說,它們不使用驗證集。因此,超參數被調整,整個算法都是由測試集的直接反饋創建的。這打破了 Machine Learning 101 的最基本規則。此外,同一個模型訓練/測試分離的方法已使用多年。隨著時間的推移,這兩個因素可能會導致測試集的過度擬合。

所以讓我們正確地對這些算法進行基準測試

這就是強大的基準測試被用到的地方。

為什麼要用這個工具?

透明性。你運行的每個實驗都附帶了詳細的配置文件,這些文件精確地顯示了使用了哪些模型、損失、轉換等等。所以現在我們可以公平地比較各種方法的優缺點。

更好的性能衡量指標。使用比回憶更具信息性的指標。

用正確的方法測量精度。在多個基於類的訓練/val/測試分段上測量精度。或者你可以使用舊的 50/50 訓練/測試拆分進行比較。

保存詳細的記錄。在 Tensorboard 上查看有關訓練過程的深入信息。

配置文件的靈活性。通過配置文件控制實驗的大部分標準。通過合併現有的配置文件來擴展現有配置文件。下面是如何指定模型的示例:

models:

        trunk:

              bninception:

                     pretrained: imagenet

       embedder:

              MLP:

                     layer_sizes:

                            - 512

下面是如何合併 3 個配置文件的方法:

python run.py \

--experiment_name test \

--config_general default daml train_with_classifier

加大命令行的靈活性。使用標準 Python 字典表示法指定複雜配置選項:

python run.py \

--experiment_name test \

--optimizers {metric_loss_optimizer: {SGD: {lr: 0.01}}}

更多詳情,請查看相關 github 項目:https://github.com/KevinMusgrave/powerful_benchmarker#override-config-options-at-the-command-line 

算法的靈活性。混合匹配損失、函數、採樣器和訓練方法。要使用硬批處理的多相似性損失?沒問題:

loss_funcs:

        metric_loss:

              MultiSimilarityLoss:

                     alpha: 0.1

                     beta: 40

                     base: 0.5


mining_funcs:

       post_gradient_miner:

              BatchHardMiner: {}

訪問 torchvision 和 pretrainedmodels 包中的所有模型。在配置模型文件中,只需指定出現在 torchvision 或 pretrainedmodels 中的函數名。

獲取 torch.nn 和 pytorch_metric_learning 中的所有損失。在 config_loss_and_miners 文件中,只需指定出現在 torch.nn 或 pytorch_metric_learning 中的類名。

它真的有用嗎?

下表是在 CVPR 2019 和 ICCV2019 上發表的一系列度量學習論文的結果。每種顏色代表不同的模型和嵌入大小配置。由於沒有標準的實驗方法,很難比較各種算法的性能。這阻礙了研究進展,因為我們不知道哪種方法最有效。因此,重要的是要有一個基準工具,使我們能夠做公平的比較。

綠色:BN-Inception,512;藍色:Blue: Resnet50, 128;黃色:Resnet50, 512;紅色:GoogleNet, 512。前 8 行的數字來自各自的論文。

要查看這些實驗和其他實驗的配置文件,請參閱此電子表格,我將隨時間添加到其中:https://docs.google.com/spreadsheets/d/1kiJ5rKmneQvnYKpVO9vBFdMDNx-yLcXV2wbDXlb-SB8/edit?usp=sharing 

表格的底部是使用基準測試工具獲得的結果。 triplet loss 和 contrastive loss 都接近最新水平。然而,這兩種方法常常被排除在結果表之外,或者被認為是性能最差的方法之一。強大的基準測試程序使檢查這些基準算法變得容易。

寫在最後

你對這個工具的看法和度量學習的現狀怎麼看?如果你有任何問題或想添加某些功能,請訪問 GitHub repos 以了解強大的 powerful_benchmarker 和 pytorch_metric_learning 。

via:https://medium.com/@tkm45/benchmarking-metric-learning-algorithms-the-right-way-90c073a83968

雷鋒網雷鋒網雷鋒網(公眾號:雷鋒網)

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • Sci Adv |基於人工智慧度量學習的單細胞類型鑑定新方法
    single cell assignment 的論文【3】,發布了基於人工智慧度量學習的單細胞類型鑑定新方法scLearn,以及簡單易用的R包平臺和包含人類、小鼠在內的多個組織器官的預訓練的完整reference數據集,為有效利用海量的單細胞測序數據進行細胞類型鑑定提供了可借鑑的工具和資源。
  • 度量學習筆記(一) | Metric Learning for text categorization
    度量學習(Metric Learning) 是人臉識別中常用的傳統機器學習方法,由Eric Xing在NIPS 2002提出,可以分為兩種:一種是通過線性變換的度量學習,另一種是通過非線性變化的度量。其基本原理是根據不同的任務來自主學習出針對某個特定任務的度量距離函數。後來度量學習又被遷移至文本分類領域,尤其是針對高維數據的文本處理,度量學習有很好的分類效果。
  • Facebook 爆錘深度度量學習:該領域13年來並無進展!網友:滄海橫流...
    換句話說損失函數在度量學習中起到了非常重要的作用。很多深度度量學習的損失函數構建在樣本對( pair ) 或者樣本三元組 ( triplet ) 之上。隨著深度學習在眾多領域出色表現,逐漸這種方法對度量學習產生了影響,於是度量學習將深度學習方法結合了起來,產生了一個新的領域,即深度度量學習。
  • 動態基準測試Dynabench已發布,Facebook想用人類來「審問」人工智慧
    為了提高SOTA結果,研究人員需要一種方法來比較他們的模型與同行開發的模型的效果差異。準確的比較是驗證新模型確實優於該領域現有模型的先決條件這個過程被稱為「基準測試」,即Benchmark。研究人員可以利用人工智慧進行對比測試,看看它到底有多先進。例如,ImageNet,一個由1400萬張圖像組成的公共數據集,為圖像識別設定了目標。
  • 谷歌通過深度度量學習,提出新的語義實例分割方法
    谷歌及UCLA則採取了一種不同的方法,通過計算兩個像素屬於同一個對象實例的可能性,並使用這種可能性將相似像素分組在一起來實現實例分割。研究者明確了「正確」段是什麼,即整個對象的空間範圍。這避免了模稜兩可的情況諸如是否將對象(例如,人的襯衫和褲子)的部分視為單獨的片段,這種片段對無監督方法的評估是一種困擾。團隊建議使用深度嵌入模型來學習相似性度量。
  • 小白學數據:教你用Python實現簡單監督學習算法
    在分類步驟中,分類器對給定的數據進行分類。用於分析的數據集(包含數據和其對應的標籤)被劃分為訓練集和測試集。訓練集從分析用的數據集中隨機抽取。剩下的數據集構成測試集。測試集和訓練集相互獨立,即測試集中的數據不會被構建於分類器。測試集用於評價分類器的預測精度。
  • 無基準輪廓度的測量與計算方法
    作者:張露引言以往,在無基準輪廓度的檢測與評價中一般都採用放大圖的方法來檢測,用樣膏做被測零件印模後與公差帶圖進行比較,屬間接測量。測量結果只有合格和不合格兩種,但給不出被測零件與理論輪廓的偏差量。3、檢測結果的比對實驗3.1標準環規工作面的擬合實驗為驗證算法的準確性,利用三坐標測量機對標準環規進行測量和評價。本次實驗測試設備為Leitz PMM 700型三坐標測量機,設備配備的QUINDOS測量軟體具備圓弧無基準輪廓度的評價功能。被測零件為三等標準環規,直徑為Υ175. 006mm。
  • 建神經網絡模型,哪種優化算法更好?35000次測試告訴你
    現在,最全面的優化算法分析來了。它整理了自1964年以來,幾乎所有的優化方法 (約130種),將它們進行了分類。此外,它還給出了幾種基準測試方法,並用它分析了1344種可能的配置方案。在運行了35000次測試後,它給出了非常全面的優化器算法分析介紹,並告訴你如何用這些基準測試,為自己的深度學習模型選擇最好的優化方案。優化方法具體都有哪幾種?從下圖這份密密麻麻的圖表來看,迄今為止,提出的優化算法已經有130種左右。
  • 微軟和谷歌的人工智慧,在SuperGLUE基準測試中超越了人類
    但SuperGLUE測試並不是完美的,也不是一種完整的人類語言能力測試。在一篇博客文章中,DeBERTa背後的微軟團隊自己指出,他們的模型「絕不可能」達到人類的自然語言理解智能水平。他們說,這都需要繼續研究突破,以及用新的基準來衡量它們及其影響。
  • 史丹福大學馬騰宇:無法理解現有的深度學習算法?那就設計一個能...
    然而在深度學習的時代,模型的泛化都非常難以解釋,原因就是很多傳統的觀點並不再適用了。其中有一些傳統的觀點還是有效的,比如說奧卡姆剃刀定律(Occam's Razor),指的是低複雜度的模型也可能泛化得很好。不過這種「低複雜度」其實是很難定義的,因此更核心的問題是如何正確定義模型複雜度,以及我們可以通過什麼方法能衡量並找到正確定義的複雜度。
  • 建神經網絡模型,哪種優化算法更好?35000次測試告訴你丨圖賓根大學...
    又或者,想知道深度學習中梯度下降的算法到底都有哪些?現在,最全面的優化算法分析來了。它整理了自1964年以來,幾乎所有的優化方法 (約130種),將它們進行了分類。此外,它還給出了幾種基準測試方法,並用它分析了1344種可能的配置方案。
  • 在Apache Kudu上對時間序列工作負載進行基準測試
    這樣,TSBS對基準InfluxDB的支持可以重新用於基準基於Kudu的實現。請注意,此體系結構增加了一個額外的「躍點」。每個查詢都將提交到時間序列守護程序,進行解析和計劃,然後轉換為一個或多個對存儲在基礎Kudu群集中的表的「掃描」調用。然後將所有基礎數據從Kudu傳輸回TSDB流程,以進行聚合和處理。
  • 常用的相似性度量算法(原理,實現,優缺點,適用場景...
    內容導讀對相似性算法的了解起源於最近在做 使用協同過濾原理 的推薦系統中, 基於鄰域的推薦算法 (User-Based CF和 和 Item-Based CF)需要估算不同樣本之間的 相似性度量(Similarity Measurement) ,這也是機器學習中在做 分類 的時候的一個常見場景。
  • 受果蠅啟發的哈希算法!用「生物學上合理的」突觸可塑性規則生成...
    這個算法的靈感來自於果蠅的嗅覺迴路,它可以產生哈希碼——物體的數字表示——其性能優於經典算法。不幸的是,由於FlyHash使用隨機投影,它無法從數據中學習。他們說,它比之前發布的各種哈希方法的基準測試都要好,而且它可以生成對相似度搜索有用的二進位表示。
  • 高頻基準整流器的兩種測試方法比較
    如何檢測高頻電子整流器成為關鍵,為此IEC(國際電工委員會)制定了相關的測試標準主要有IEC60081(雙端螢光燈測試要求)和IEC60901(單端螢光燈測試要求)。同時根據實際情況,這裡還有另外一種IEC同等的測試方法。
  • BAIR最新RL算法超越谷歌Dreamer,性能提升2.8倍
    傳統意義上,大家普遍認為以圖像為觀測值的 RL 數據效率較低,通常需要一億個交互的 step 來解決 Atari 遊戲那樣的基準測試任務。研究人員介紹了 CURL:一種用於強化學習的無監督對比表徵。CURL 使用對比學習的方式從原始像素中提取高階特徵,並在提取的特徵之上執行異策略控制。
  • AI算法效率每16月翻番,超越摩爾定律,OpenAI:長江後浪推前浪
    「算法的改進是 AI 技術提升的核心。不過尋找衡量所有技術進步的標準非常困難,特別是它們在使用算力方面變化的趨勢,」OpenAI 表示。「算法效率的提升使得研究人員可以在同樣時間內進行更多實驗,並減少資金花費。分析表明,政策制定者需要增加對於計算效率研究的投資,這不僅對於學術界有幫助,而且可以進一步幫助業界。」
  • 元學習幫你解決
    事實證明,它對於解決少樣本分類任務非常有用:度量學習算法不必在支持集(少量的帶標籤圖像)上進行微調,而是通過將查詢圖像與帶標籤圖像進行比較來對其進行分類。在元訓練期間,在每一場景(episode)結束時,對由查詢集的分類錯誤產生的損失值(通常是交叉熵損失)進行反向傳播,從而更新CNN的參數。每年都會提出幾種度量學習算法來解決少樣本圖像分類問題,這其中的兩個原因是:他們憑經驗可以做得很好;唯一的限制就是你的想像力。有很多方法可以提取特性,甚至還有更多方法可以比較這些特性。
  • 與模型無關的元學習,UC Berkeley提出一種可推廣到各類任務的元...
    元學習方法的運行機制首先元學習系統會在大量任務中進行訓練,然後測試其學習新任務的能力。例如每一個類別給出幾個樣本,那么元學習是否能在將新的圖片正確分類,或者在僅提供一條穿過迷宮的通道時,模型能否學會快速穿過新的迷宮。該方法包括在單個任務上訓練和在留出樣本上測試,與很多標準機器學習技術不同。