【AI 工程】Hidden Technical Debt in Machine Learning Systems(一)


這是一篇2015年提出的論文,但是我今天看還是對現實的實踐具有指導作用。本文從傳統軟件工程的技術債引出機器學習系統的技術債,並且比較了兩者不同。

不同點具體爲:
傳統的軟件技術債都是代碼層面的,但是機器學習系統代碼層面、系統層面都有。
具體的比較方面如下:

複雜模型侵蝕邊界(Complex Models Erode Boundaries)

傳統的軟件開發,可以用封裝和設計模式等方法將整個工程分爲多個模塊解偶,這種系統的輸入、輸出的影響是確定的,但是機器學習系統各個模塊的輸出改變,輸出是不確定的。這就造成了邊界不清晰,各部分耦合非常嚴重,主要有如下方面:

Entanglement(糾纏):

 CACE principle: Changing Anything Changes Everything

這種情況是說ML system的的輸入、學習率、學習器等互相依賴的情況,比如輸入數據改變,這些組成成分也會改變,這在傳統的軟件工程中,改變是確定的,但是機器學習中卻不清楚系統的變化方向。
作者提出的改進點爲:
1、隔離模型
2、直接觀測系統的預測輸出


Correction Cascades(校正級聯):
我們又一個模型A,新來一個任務,我們通過以A爲輸入,來校正新任務,形成A‘。這時候A’就依賴A了。這就形成了依賴,

作者提出改進點爲:
1、在A中加入相關特徵,學習到新任務
2、重新訓練一個A‘

Undeclared Consumers(未聲明消費者):
這部分跟傳統的軟件工程一樣,需要通過機制知道下游消費者都有哪些。

數據依賴成本甚於代碼依賴(Data Dependencies Cost More than Code Dependencies)

這部分講我們的系統形成數據依賴的情況,主要又下面幾個方面:

Unstable Data Dependencies(不穩定的數據依賴):
我們的模型有輸入,而輸入不穩定,比如我們的模型的輸入是另一個模型的輸出,而這個模型經常在更新,這就造成了我們的輸入的不穩定性。又比如tf-idf詞表

這種情況的一個解決方案是維護一個數據依賴的版本,使用比較穩定的版本。當更新數據後,驗證過後再切換到另一個版本。

Underutilized Data Dependencies(無效的數據依賴):
這個是講有些數據對模型用處不大,而我們又依賴它,這就增加了模型的潛在風險,因爲讓我們的系統依賴變複雜了。

解決辦法:
1、leave-one-feature-out evaluations,也就是踢出一個特徵,看看對模型影響大不大,不大我們刪除這個特徵,這一步需要經常做。

Static Analysis of Data Dependencies(靜態數據依賴):
使用工具靜態分析數據的依賴。

參考文獻

[1] 原文,https://papers.nips.cc/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdf
[2] https://www.zhihu.com/question/424523708/answer/1511283545


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章