從基線模型開始:別擔心,模型最開始都讓人不忍直視
大數據文摘作品
編譯:張南星、驚蟄、荊浩男
一、怎樣高效開發機器學習產品
想要開發通用AI,首先你得掌握邏輯回歸模型。
從最基礎的開始
在大多數領域,當人們嘗試用科學的方式理解世界時,都會選擇先寬泛研究整體的內容,而不是立馬深入到重要的細節之中。
譬如在物理學領域,我們常常從簡單的模型開始(牛頓物理學)做研究。然后,我們在逐漸認識到最初的一些假設并不正確時,就會慢慢開始使用更復雜的模型。這種方式可以以最簡單的方法高效地解決問題。
凡事力求簡單,但不要過于簡單。
——阿爾伯特·愛因斯坦 |
同樣的思維模式,即從最簡單的模型開始建造,也可以應用于AI工程之中。并且在大多數情況下,這樣的方式都很有價值。
事實上,在Insight上目睹成百上千個項目從想法發展成實際產品之后,我們發現將一個簡單模型作為基礎版本,往往能讓最終產品變得更棒。
但在解決復雜問題時,簡單的解決方案(比如下文中討論到的基線模型)存在諸多不足:
- 簡單的解決方案有時會忽略輸入中的重要內容。例如,簡單的模型常常會忽略詞語在語句中的順序,或者變量之間的關系。
- 在生產比較細致的產品時,這些模型往往有些力不從心。因此,大多數簡單模型都需要配合使用啟發式算法或者人工制定的規則才會面世。
- 它們研究起來可能并不那么有趣,而且可能沒法讓你學到自己渴望的前沿研究知識。
這些簡單解決方案產出的錯誤輸出常常看起來非常愚蠢,所以標題中用了“不忍直視”這個詞。但是,正如本文所說的,在項目啟動時,簡單模型的價值就會大大體現,因為這些模型可以幫助我們更好地理解實際問題,從而告知我們開發出最終成功產品的***路線。
用George E. P. Box的話來說:“所有的模型都是錯的,但至少其中一些會有點用處。”
再換句話說,如果你只想找點樂子,那從復雜的模型開始沒問題;但是如果你希望真正解決某個問題,并開發真正產品的話,那就從簡單得“不忍直視”的模型開始吧。
二、什么是基線模型?
“當從散點圖中預測數據關聯性比畫星座圖更難的時候,我不相信線性回歸得到的結果”:
左:方差為0.06的線性回歸模型
右:Rexthor“遛狗”模型
不同的分布類型需要不同的基線模型。下面是一些值得考慮的基線模型:
- 線性回歸:從一系列特征值中預測連續值的首要可靠方法,例如價格和年齡
- 邏輯回歸:當需要對結構化數據或者自然語言進行分類時,邏輯回歸模型能迅速給出可靠的結果。
- 梯度提升決策樹:不可錯過的Kaggle經典!在和時間或者通用結構化數據相關的預測處理中,忽略梯度提升決策樹簡直是不可能的事。雖然這個模型比其他基線模型在理解和使用上稍難一些,但是效果會很不錯。
- 簡單腦回框架:恰當調整了的VGG或者對部分變量進行再訓練了的U-net,對大多數圖像分類、探測或者分類問題來說是一個好的開頭。
擺在你面前可供選擇的基線模型還有很多!
到底選擇哪個基線模型是由數據類型及任務目標決定的。比如,當你需要從各種特征值中預測房價時(即從一系列特征值中預測某個值),線性回歸模型就比較合適,但如果是建造語音識別算法,這個模型就不太適用。在選擇最適合的基線模型之前需要再三思考這個問題:你希望用這個模型得到什么?
三、為什么從基線模型開始?
從部署模型到獲得結果的過程
部署一個模型并不輕松,在實施之前必須確保對這個模型足夠了解。在項目開始時,優先級***的事項是預測未知風險。即使基線模型并不是終版模型,但是它能讓你迅速迭代,從而降低不必要的時間成本。下面是支持這個論點的一些理由:
基線模型只會花費你少于十分之一的時間,卻可以導出超過90%的結果。
把你的產出效率提高9倍!
舉一個非常常見的例子:某團隊希望找一個模型來預測用戶點擊廣告的概率之類的問題。他們從一個邏輯回歸模型開始,并在很短的時間內(在極少數的調整之后),準確率達到了90%。
那么問題來了:這個團隊應該專注于把準確率提高到95%,還是用同樣的方法,以90%的準確率解決別的問題?
絕大部分最為先進的模型都無法使錯誤率降低到零,原因在于它隨機性的本質。雖然準確性和實際用例相關,但從本質上來講,大部分系統的準確性都是各個部分準確值的乘積。
也就是說,***讓10個連續的步驟準確性都達到90%,這樣整體準確性就可以達到34%,而不是讓1個步驟的準確性達到99%,而其他9個步驟都是10%,這樣的整體準確性只有0.00000000099%%。
從一個基線模型開始,能讓你首先清楚問題的瓶頸之處!
1. 基線模型讓復雜模型陷入兩難之地
通常情況下,你可以預估到使用各種模型可以達到的三種性能水平:
- 缺省可得性能水平是你希望任何一個模型都能達到的水平。舉個例子,這個值可以是分類任務中出現頻率***類別的概率值。
- 人類性能指標,是指一個人類完成任務的水平。計算機在某些任務中比人類表現好(例如AlphaGo),但在另外一些任務上表現差(例如創作詩歌)。人類完成一項任務的性能水平,能夠作為標準協助對一個算法的表現形成合理預期,但是在不同領域,人類和電腦的表現可能大不一樣,因此需要一些文獻檢索做校準。
- 可部署性能水平,即站在商業生產和可用性角度上,模型所需的最小準確值。通常情況下,這個值需要精細的設計決策系統才可得到。例如Google Smart Reply一般會返回三個建議決策,能夠顯著提高有用結果出現的概率。
上面我沒有提到的一個標準,稱之為“合理自動生成性能”,是指通過相對簡單的模型可以得到的結果。通過這個重要的對標值,能夠評估一個復雜模型是否表現良好,并且讓我們不再在準確性與復雜性之間糾結。
很多時候,我們發現基線模型和復雜模型的表現相當,有時候基線模型的表現甚至可以超過復雜模型,在選擇復雜模型前沒有充分考慮基線模型的失敗原因時更是如此。
除此之外,部署復雜模型也更加困難,這意味著在真正開始部署模型之前,程序員們首先還需要估計復雜模型比簡單模型能提升多少。
2. 基線模型更容易部署
從定義上來說,基線模型很簡單,一般由相對少的可訓練參數組成,而且不需要太多的處理就可以迅速和數據匹配。
這個好處在真正開始編程時就會體現出來了:
- 訓練迅速:能夠迅速得到性能反饋。
- 更容易研究:這意味著遇到的大多數錯誤能夠更容易定位是模型的缺陷,還是數據中的錯誤。
- 迅速推斷:部署基線模型不需要太多架構層面的修改,并且不會導致潛在的風險。
一旦你創建并部署了基線模型,你已經處于下一步行動的***決策點了。
四、建造了基線模型之后呢?
也許是時候祭出研究文獻了?
正如上文所提到的,基線模型會讓你迅速得到性能對標結果。如果你發現它提供的性能值并不充分,那么找到簡單模型難以解決的問題,你的下一步進展就會容易些。
譬如在NLP primer里,通過觀察基線模型中的錯誤,我們發現模型沒能把有意義的單詞與虛詞區分開。它可以這樣指引我們通過模型抓取到類似的細微差別。
1. 基線模型能幫助你理解數據
如果選擇的基線模型表現不錯,那么你已經幫自己解決了建造復雜模型的大部分困難;反之,找出建造基線模型過程中的錯誤對于發現數據中的偏差與特定錯誤非常有建設意義。
許多阻攔機器學習進程的問題往往是因為沒能理解和準備好數據,而不是選擇一個更加復雜的模型。看看基線模型的不同表現對于你會有什么啟發:
- 哪個類別更難分類:對于大多數分類問題,觀察混合矩陣對于定位導致模型錯誤的類別非常有用。如果無論何時,基于一系列分類的模型表現都非常差,那么是時候深入分析數據、尋找原因了。
- 你的模型會選擇什么作為信號:大多數基線模型都能夠提取特征重要性,確定輸入的哪個方面更加有預見性。分析特征重要性是了解模型的決策方式、潛在遺漏點的***途徑。
- 你的模型會遺漏了什么信號:如果你的模型遺漏了數據中非常重要的方面,那么下一步***是手動加入這個特征,或者另選擇一個能夠更好利用數據的模型。
2. 基線模型能幫助你理解任務
除了能夠更加了解數據之外,基線模型還能幫你了解哪部分內容比較難、哪部分比較簡單。照此思路,你還能定位應該改進模型的哪個方面,從而更好地解決困難的部分。
例如,Bowen Yang在試圖預測某個團隊在Overwatch中獲勝的幾率時使用了邏輯回歸模型。他很快注意到游戲半程之后,預測的準確性會大大提高。
這個發現幫他成功地選擇了下一個建模方法,即一個從先驗信息中了解到的技巧,讓預測準確性在游戲開始***分鐘之前就大大提高。
大多數機器學習問題都遵循“天底下沒有免費的午餐”定理:不存在能夠解決所有問題的方案。真正的挑戰在于從各種架構中進行選擇、決定恰當的策略、以及選擇最適用于抽取及利用目標數據結構的模型。
再舉一個例子,Chuck-Hou Yee試圖對心臟的核磁共振成像進行分類時,是從最基本的U-net架構開始研究的。通過U-net架構,他注意到模型的很多分類錯誤都是由于缺少語境導致的。
為了解決這個問題,Chuck-Hou Yee另選擇了膨脹卷積模型(dilated convolutions),極大改善了建模結果。
3. 什么時候不選擇基線模型
***,對于有些任務來說,建造有效的基線模型的確很困難。如果你試圖將一個錄音中的不同人的說話內容分開(雞尾酒效應),也許你得從一個復雜模型開始才能得到令人滿意的結果。
在這類情況下,與其簡化模型,采取簡化數據的方法更加恰當。也就是說,讓這個復雜模型過擬合現有數據集中的極小一部分。如果模型的表現能力夠強,那這應該很簡單;但如果表現能力差強人意,那么也許你需要試一試別的模型了。
雞尾酒效應:https://en.wikipedia.org/wiki/Cocktail_party_effect
五、結論
人們都有一個傾向,如果有更加強大的解決方法,往往就會忽略掉簡單的解決辦法。但是在機器學習的大多數領域中,從基礎開始往往更有價值。
盡管學著實施復雜模型確實有些難度,但機器學習工程師們***的挑戰其實是如何給特定的任務選擇建模策略。
先用一個簡單模型可以很大程度上帶來幫助;如果表現得不盡如人意,那么在采用更加復雜的模型時就可以避開在基線模型中已經發現的問題,從而達到更好的建模效果。
相關報道:
https://blog.insightdatascience.com/always-start-with-a-stupid-model-no-exceptions-3a22314b9aaa
【本文是51CTO專欄機構大數據文摘的原創譯文,微信公眾號“大數據文摘( id: BigDataDigest)”】