總是從蠢模型開始

總是從蠢模型開始

來自專欄論智16 人贊了文章

作者:EmmanuelAmeisen

編譯:weakish

當人類試圖發展對世界的科學理解的時候,大多數領域都會從粗略的勾勒開始,之後才探索重要的細節。拿物理來說吧,我們從簡單模型(牛頓力學)開始,漸漸深入更複雜的模型(相對論),到時我們將知道,我們最初的假定是錯誤的。通過在最簡單的有用層次推理,我們可以高效地解決問題,

所有事情都應該儘可能簡單,但不要過於簡單。

阿爾伯特·愛因斯坦

從非常簡單的模型開始這一做法,同樣可以應用於機器學習工程,通常可以證明,這是非常有價值的做法。事實上,我們在Insight看到數以百計的項目從想法到發布成品的全過程,發現從一個簡單的基線模型開始,一貫地導向更好的最終產品。

應對複雜問題時,簡單的方案,有很多缺陷:

  • 它們有時候忽略輸入的重要方面。例如,簡單模型常常忽略句子中的詞序,或者變數之間的相關性。
  • 它們受到限制,難以得到精細的結果。大多數簡單模型可能需要配合啟發式方法或手工指定的規則才能供客戶使用。
  • 它們並不那麼有趣,可能無法讓你在開發時獲得尖端研究的體驗。

這些方案常常產生受到誤導的輸出,可能在我們看來非常愚蠢,正如本文標題所言,蠢模型。然而,如同我們將在本文中描述的,它們提供了極為有用的第一步,讓我們可以更好地理解我們的問題,以找到最好的處理方法。正如George E. P. Box所說:

所有模型都是錯誤的,但有些模型有用。

換句話說:如果你想玩下有趣的玩意,從複雜的模型開始。如果你想解決問題、構建產品,從愚蠢的模型開始。

什麼是基線?

不同的分布需要不同的基線(來源:xkcd/1725)

基線模型不僅易於配置,同時有合理的幾率提供不錯的結果。試驗基線模型通常很快,而且代價較低,因為流行的軟體包大多包括了基線模型實現。

值得考慮的一些基線:

  • 線性回歸。從一組特徵預測連續值(價格、年齡等),首先嘗試下線性回歸。
  • 邏輯回歸。試圖分類結構數據或自然語言時,邏輯回歸通常能給出快速、牢靠的結果。
  • 梯度提升樹。Kaggle競賽經典模型!從時序預測到一般結構數據,梯度提升樹難以戰勝。儘管比其他基線要稍微難以解釋一點,它通常表現出色。
  • 簡單卷積架構。對大多數圖像分類、檢測、分割問題而言,微調VGG或再訓練某個U-net變體通常是一個良好的開始。
  • 還有更多!

簡單基線模型的選擇取決於要處理的數據類型和任務類型。如果你打算基於多個特徵預測房價,那選擇線性回歸很合理。不過,如果你想要構建語音到文本演算法,那選擇線性回歸就不怎麼合理了。你需要思考你希望從基線模型中得到什麼,以選擇最佳的基線。

為什麼從基線開始?

部署模型需要很多工作,確保提交前充分探索(來源:Uber)

開始一個項目時,首要的是了解會阻礙項目進度的未曾預見的潛在挑戰。即使基線模型最終沒有成為最終版本的模型,它們仍然能夠讓你非常快速地迭代,浪費最少的時間。下面是一些原因。

基線將花去不到1/10的時間,可能提供高達90%的結果

生產率乘以9!

這裡有一個非常常見的故事:一個團隊想要實現一個模型預測用戶點擊廣告的概率。他們從邏輯回歸開始,並很快(經過一些微調)達到了90%精確度。

問題在於:這個團隊應該集中精力將精確度提高到95%,還是應該以這樣90%的方式解決其他問題?

大多數最先進的模型,由於其隨機性本質,仍然會給出非零誤差率。你的用例可能不同,但大多數系統的效率本質上是乘法的,這意味著你寧願選擇90%精確度的10個連續步驟(導致34%的最終精確度),而不是一個99%的步驟,跟著九個10%的步驟(0.000000099%)。

從基線開始,讓你可以首先解決瓶頸!

基線模型為更複雜的模型提供了上下文

通常,模型表現有三個易於評定的層次:

  • 微不足道的可實現表現,你希望任何模型都能超過這個層次。例如,在分類任務中,每次都猜測最頻繁出現的分類所得到的精確度。
  • 人類表現,人類在這一任務上能夠達到的表現。在某些任務上,計算機的表現比人類好很多(比如下圍棋),在其他一些任務上,則比人類要差(比如寫詩)。知道人類能夠表現得多好,有時可以幫助你事先為演算法設定期望。不過,由於人類/計算機在不同領域的任務上表現不一樣,這也許需要進行一些文獻檢索加以校正。
  • 部署模型要求的表現,從商業和可用性角度出發,使你的模型適宜部署到生產環境的最小价值。通常而言,聰明的設計決策可以讓這一價值更容易實現。例如,Google的智能回復,顯示三個建議回復,明顯提升了顯示有用結果的幾率。

以上三個層次缺了一層,我會稱它為「合理的自動化表現」,這代表可以通過一個相對簡單的模型實現的表現。這對評估複雜模型是否表現良好而言,是不可或缺的,也能讓我們處理精確性和複雜性的折衷。

許多時候,我們發現基線模型的表現和複雜模型相當,甚至優於複雜模型,特別是選擇複雜模型時沒有查看基線模型失敗之處的時候。此外,複雜模型通常更難部署,這意味著,很有必要事先衡量它們在簡單基線水平上的提升,是否值得額外的工程上的努力來部署它們。

簡單模型易於部署

根據定義,基線模型是簡單的。它們通常包含相對較少的可訓練參數,無需太多工作就可以快速擬合數據。

這意味著,在工程上,簡單模型:

  • 訓練起來更快,讓你能夠迅速得到模型表現的反饋。
  • 研究充分,這意味著你碰到的大多數錯誤或者是構建模型時的簡單bug,或者突顯了你的數據有問題。
  • 推理起來更快,這意味著部署它們不需要很多基礎設施工程,也不會增加延遲。

構建和部署一個基線模型之後,正是決定下一步做什麼的最佳時機。

構建基線模型之後做什麼?

是時候拿一些論文出來看?

就像我們之前提到的那樣,如果你發現基線模型的表現不夠好,那麼,查看簡單模型失效之處有助於你找到更好的方法

例如,在我之前寫的NLP初步中,通過查看基線的誤差,我們可以看到它無法區分有意義的單詞和填充詞。這引導我們使用可以捕捉這一細微差別的模型。

基線幫助你理解數據

如果基線表現良好,你就不用為配置一個更複雜的模型操心了。如果基線表現不佳,它產生的錯誤種類對理解數據的偏離和特定問題非常有指導性。大多數機器學習的問題是通過更好地理解和準備數據解決的,而不是通過選擇更複雜的模型解決的。查看基線的表現有助你發現:

  • 哪些分類更難區分。對大多數分類問題而言,查看混淆矩陣能得到很多關於哪些分類導致模型出現問題的信息。當特定分類上的表現特別差時,值得探索數據以理解為什麼。
  • 模型捕捉到了哪些信號。大多數基線可以提取特徵重要性,揭示輸入的哪些方法預測性最好。分析特徵重要性對理解模型如何做出判定以及模型在哪些方面有所欠缺非常有幫助。
  • 模型錯過了哪些信號。如果數據的特定方面從直覺上看起來很重要,但模型忽略了它。那麼進行特徵工程或者選用其他能夠更好地利用數據這一方面的模型會是一個好主意。

基線幫助你理解任務

基線不僅有助於你更好地理解數據,還能讓你看到推理的哪一部分容易,哪一部分困難。進而允許你探索改進模型的哪個方向使困難部分表現更好

例如,在嘗試預測給定團隊在守望先鋒中的勝率時,Bowen Yang從邏輯回歸開始。他很快發現在遊戲過半之後預測精確度戲劇性地提升了。這一觀察幫助他決定下一個模型的選擇,一種允許從先驗信息學習的嵌入技術,在一開始就提升了精確度。

大多數機器學習問題遵循「沒有免費午餐」定理:並不存在一個萬能的解決方案。從多種架構、嵌入策略、模型中選定能夠提取和利用數據結構的最佳方案是一項挑戰。查看簡單的基線勉力建模的內容,對做出選擇幫助很大。

再舉一個例子。試圖分割心臟MRI影像時,Chuck-Hou Yee首先嘗試了一個原始的U-net架構。這讓他發現模型產生的很多分割誤差是因為缺少上下文信息(小型感受野)。為了應對這一問題,他轉而使用了擴張卷積,這一選擇顯著提升了模型的表現。

當基線派不上用場的時候

最後,為某些任務構建有效的基線非常困難。如果你打算從音源中分離出不同的說話人(雞尾酒會問題),你可能需要從複雜模型開始,以得到滿意的結果。在這些情形下,作為簡化模型的替代,你可以簡化數據:嘗試讓你的複雜模型過擬合數據的一個非常小的子集。如果你的模型具備學習這一問題的表達能力,它會很簡單。如果發現這部分很困難,那麼通常這意味著你需要試試其他模型。

結語

當你意識到強大的模型的存在之後,很容易忽略那些簡單方法。然而,和大多數領域一樣,在機器學習中,從基本開始總是很有價值的。

學習如何應用複雜方法固然是一項挑戰,機器學習工程師的最大挑戰是為給定的任務決定建模策略。首先嘗試簡單模型可以為這一決策提供信息;如果簡單模型的表現平平無奇,轉而使用一個更複雜的模型,一個擅長避免基線產生的特定錯誤的模型。

在Insight,這一方法總共節省了數以千計小時的時間。我們希望這一方法對你同樣有用。如果遇到問題,或有什麼想法,歡迎留言!

推薦閱讀:

TAG:模型 | 機器學習 | 深度學習DeepLearning |