今天我們要來看看,機器學習中的技術債,而什麼是技術債呢?
根據wiki的描述,技術債指的開發人員是因為某些原因而進行妥協,選擇短期內能加速軟體開發的方案,但在未來可能會造成額外的開發負擔。就像是一種債務一樣,因此稱之為技術債。
例如:以開發進度為藉口,程式碼沒有作重購或是測試等,一開始的開發進度可能可以達標,但是隨著時間的向前,開發速度會越來越緩慢。
這是當然的,Google也有此文章在探討這問題
Machine Learning: The High Interest Credit Card of Technical Debt
那麼機器學習的技術債是甚麼呢?
總結分三類。
輸入的特徵對機器學習來說,就像是軟體開發界的程式碼,如果程式碼都沒有好好的分類、撰寫,產生各種壞味道,就是不好的事情。
而輸入的特徵如果沒有好好的處理,就像是程式碼產生壞味道一樣,是不好的。
如果一個model在沒有溝通下使用了另一個model的輸出,那麼會使整個系統很不穩定,一旦發生變化,將會直接受影響。
假設我們的輸入特徵是依賴著其他系統的輸出,如果有一天那個系統產生了變化,那麼我們的模型也會因此產生變化,這就是不好的事情。
假設我們的model早期有使用到一種特徵,雖然當時很重要,但是隨著時間的演進,那種特徵已被其他的特徵所取代,在後來變成一種多餘的特徵,那麼這也是不好的。
又或者因為時間考量等因素,沒有塞選資料,導致資料裡面有不需要的功能或特徵,這也是不好的。
又或者是為了提高模型的準確性,增加了某種特徵,但帶來得效果非常小或是帶來更高的複雜性,這也是不好的。
機器學習的code沒有系統性的整理,導致所有code的黏稠在一起,變得很難維護或者增加功能。
一旦外部library發生變化,系統會直接受影響。
例如library更新了,把某個function改名,那麼直接使用的我們就會受影響。
假設我們作了一個判斷桌面是否有破損的model,超過2公分的叫做破損,那麼如果使用新的資料訓練模型後,原本的2公分就不能用了(新模型可能認為超過1公分就是破損),調整閥值是耗時又容易出錯的。
如果一味的相信上游給的數據,那麼也會使我們的model不穩定,因此要做監控與測試,確保輸入到模型的特徵是良好的。
機器學習裡面有許多的技術債
技術負債
Machine Learning: The High Interest Credit Card of Technical Debt
机器学习实践 — 测试驱动开发
如何構建可靠的機器學習系統(一):認識技術債