前一篇文章介紹了機器學習的基本過程,然后討論了如何對機器學習項目設置期望的問題喜最。我們了解到庄蹋,度量準確率的指標可以有多種迷雪,需要根據應用場景來選擇虫蝶。一旦選好了度量指標,接下來就可以圍繞這個指標來劃分任務能真、監(jiān)控進度粉铐、管理風險。
機器學習項目涉及哪些工作
站在非常宏觀的角度蝙泼,機器學習系統(tǒng)工作的方式是:你有一個模型,你把一堆數(shù)據輸入給它织鲸,然后你以某種方式使用它提供給你的輸出茎活。所以機器學習項目要完成的任務也是三大塊:處理輸入;獲得模型载荔;提供產出采桃。
處理輸入
a. 你需要獲得已有的數(shù)據
b. 你需要對數(shù)據做矢量化操作,把原本豐富多樣的數(shù)據變成有若干列的矢量
c. 你需要對數(shù)據做特征工程工扎,找出可能蘊涵了知識衔蹲、值得被學習的那些特征項
獲得模型
a. 實際上很多時候你可以使用現(xiàn)成的模型,包括:(i)下載現(xiàn)成的離線模型橱健,或者(ii)使用在線的人工智能服務
b. 如果沒有現(xiàn)成的模型沙廉,你也可以考慮使用現(xiàn)有的數(shù)據來自行訓練模型
提供產出
a. 機器學習的結果可能通過某種人-機(UI)或機-機界面(API)被用戶直接使用
b. 作為項目的產出,機器學習模型需要被嵌入到整個數(shù)據流水線中
c. 作為項目的產出珊皿,機器學習模型的開發(fā)、測試蟋定、部署需要有DevOps的支撐
在所有這些任務中,只有2.b“自行訓練模型”(上圖右下角標星星的部分)需要新的技能和管理方法维费,其他都是傳統(tǒng)的軟件開發(fā)任務促王,可以用標準的Scrum等敏捷方法拆分任務和管理。也就是說阅畴,如果你需要的人工智能能力已經有一個現(xiàn)成的模型提供迅耘,那么整個項目就是一個傳統(tǒng)的軟件開發(fā)項目,只是需要使用一些新的工具或API而已颤专。
下面我們聚焦討論需要自行訓練模型時,這部分工作應該如何拆分春塌、如何管理進度和風險簇捍。
自行訓練模型的流程
在自行訓練模型的情況下,如上圖所示吼句,你會用歷史數(shù)據(X和Y)來訓練一個模型事格,然后用這個模型對未來的生產數(shù)據(X-hat)做預測(算出Y-hat)。不論采用什么指標來度量準確率驹愚,模型在訓練數(shù)據上的表現(xiàn)一定好于在生產數(shù)據上的表現(xiàn),這是因為模型從訓練數(shù)據中“學到”的知識不一定在生產數(shù)據中完全重現(xiàn)终娃,或者用黑話來說,模型在訓練過程中“擬合”了訓練數(shù)據的特征余佛。也就是說窍荧,如果一個模型對訓練數(shù)據表現(xiàn)出了95%的準確率(先不管采用哪個準確率指標),其實你并不知道這個模型對生產數(shù)據會表現(xiàn)什么水平的準確率蕊退,于是你也不知道這個模型是否好到可以上線運行。
為了更有效地衡量模型的表現(xiàn)净蚤,我們會在開始訓練模型之前先拿出一小部分歷史數(shù)據(例如全部歷史數(shù)據的10%)用于測試输硝,整個訓練過程不接觸這部分數(shù)據。于是我們就有了“訓練集”(training set)和“測試集”(test set)橘荠。很多時候我們還會分出一小部分數(shù)據作為“驗證集”(validation set)郎逃,為了簡化問題,我們可以先采用“訓練集+測試集”這種設置褒翰。
把歷史數(shù)據分成訓練集和測試集以后,可以預期错邦,模型在訓練集上的表現(xiàn)會優(yōu)于在測試集上的表現(xiàn)型宙,這兩個表現(xiàn)通常都會低于項目期望值伦吠。我們把“【模型在訓練集上的表現(xiàn)】與【期望值】之間的差距”叫做Bias,把“【模型在訓練集上的表現(xiàn)】與【模型在測試集上的表現(xiàn)】之間的差距”叫做Variance搁嗓。
于是就有3種可能的情況:
High Bias:模型在訓練集上的表現(xiàn)遠低于期望箱靴,模型還不能實用(此時Variance如何并不重要);
Low Bias, High Variance:模型在訓練集上表現(xiàn)好棍矛,但是在測試集上表現(xiàn)差,模型還不能實用够委;
Low Bias, Low Variance:模型在訓練集和測試集上表現(xiàn)都好,可以投入實用玉罐。
我們通常會從簡單的機器學習算法潘拨、手邊立即能獲得的數(shù)據開始嘗試。這時候通常Bias會高铁追,因為過于簡單的模型不足以呈現(xiàn)數(shù)據背后的知識脂信,這時我們說模型“擬合不足”(Under-fitting)。在這種情況下狰闪,可以采用的措施包括:
使用更復雜的機器學習算法
使用更復雜的神經網絡架構
用更復雜的機器學習算法和神經網絡訓練出來的模型埋泵,通常能更好地擬合訓練集,進入“Low Bias”的狀態(tài)丽声。這時我們再關注模型在測試集上的表現(xiàn),如果測試集的表現(xiàn)遠差于訓練集的表現(xiàn)浴井,就說明模型過度地針對訓練集的特征做了優(yōu)化霉撵,我們說模型“過度擬合”(Over-fitting)訓練數(shù)據。在這種情況下可以采用的措施包括:
引入Regularization通常能降低over-fitting的程度
通過特征工程可以避免一些over-fitting的情況撕氧,例如排除掉一些嚴重過度擬合的特征
引入更多的訓練數(shù)據喇完,包括數(shù)據量和特征量
最終我們的目標是得到Bias和Variance雙低的模型。
潛在風險點
從上述的工作流程中不脯,我們可以預先識別一些潛在的風險:
在Under-fitting的狀態(tài)下,如果人員能力不足跨新,就無法應用更復雜的算法
在Under-fitting的狀態(tài)下富腊,如果計算資源不足域帐,就無法訓練更復雜的模型
在Over-fitting的狀態(tài)下,如果數(shù)據質量不足民假,就無法開展有效的特征工程
在Over-fitting的狀態(tài)下龙优,如果數(shù)據數(shù)量不足,就無法訓練高效的模型
如果整個項目涉及的數(shù)據基礎設施不足彤断,就無法快速迭代實驗
于是宰衙,訓練一個機器學習模型就不再是一個神秘的、盲目的供炼、隨機的過程。借助Bias冀墨、Variance涛贯、迭代實驗的頻率等量化數(shù)據,IT管理者和不懂技術的業(yè)務代表能更清晰地看到項目的進展含懊,整個團隊能更好地判斷接下來需要做什么:是需要嘗試更高級的神經網絡呢衅胀?還是需要想辦法獲得更多的數(shù)據酥筝?或者是需要更多的計算資源?還是需要尋找某些特定的知識和技能?這樣就避免了業(yè)務代表懷有不切實際的期望茁影、又不知道技術團隊在做什么而感到恐慌丧凤。
在下一篇文章里,我會更加具體地介紹愿待,如何借鑒Scrum和看板等敏捷方法的思路仍侥,把訓練一個機器學習模型的工作拆分成更小粒度、更易于管理的任務农渊,以及如何對機器學習項目進行可視化管理。