iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0

機器學習的技術債

今天我們要來看看,機器學習中的技術債,而什麼是技術債呢?

技術債

根據wiki的描述,技術債指的開發人員是因為某些原因而進行妥協,選擇短期內能加速軟體開發的方案,但在未來可能會造成額外的開發負擔。就像是一種債務一樣,因此稱之為技術債。
例如:以開發進度為藉口,程式碼沒有作重購或是測試等,一開始的開發進度可能可以達標,但是隨著時間的向前,開發速度會越來越緩慢。

機器學習也有技術債嗎?

這是當然的,Google也有此文章在探討這問題

Machine Learning: The High Interest Credit Card of Technical Debt

那麼機器學習的技術債是甚麼呢?

機器學習的技術債

總結分三類。

  1. 邊界模糊,資料彼此依賴關聯
  2. 沒有系統級的程式碼分離,程式碼整團在一起
  3. 無法因應外界的改變

Complex Models Erode Boundaries and Data Dependencies Cost More than Code Dependencies

輸入的特徵對機器學習來說,就像是軟體開發界的程式碼,如果程式碼都沒有好好的分類、撰寫,產生各種壞味道,就是不好的事情。
而輸入的特徵如果沒有好好的處理,就像是程式碼產生壞味道一樣,是不好的。

系統緊密耦合

如果一個model在沒有溝通下使用了另一個model的輸出,那麼會使整個系統很不穩定,一旦發生變化,將會直接受影響。

不穩定的資料依賴

假設我們的輸入特徵是依賴著其他系統的輸出,如果有一天那個系統產生了變化,那麼我們的模型也會因此產生變化,這就是不好的事情。

未充分利用的資料依賴

假設我們的model早期有使用到一種特徵,雖然當時很重要,但是隨著時間的演進,那種特徵已被其他的特徵所取代,在後來變成一種多餘的特徵,那麼這也是不好的。
又或者因為時間考量等因素,沒有塞選資料,導致資料裡面有不需要的功能或特徵,這也是不好的。
又或者是為了提高模型的準確性,增加了某種特徵,但帶來得效果非常小或是帶來更高的複雜性,這也是不好的。

系統級義大利麵

機器學習的code沒有系統性的整理,導致所有code的黏稠在一起,變得很難維護或者增加功能。

膠水程式碼

一旦外部library發生變化,系統會直接受影響。
例如library更新了,把某個function改名,那麼直接使用的我們就會受影響。

Dealing with Changes in the External World

固定的閥值

假設我們作了一個判斷桌面是否有破損的model,超過2公分的叫做破損,那麼如果使用新的資料訓練模型後,原本的2公分就不能用了(新模型可能認為超過1公分就是破損),調整閥值是耗時又容易出錯的。

監控與測試

如果一味的相信上游給的數據,那麼也會使我們的model不穩定,因此要做監控與測試,確保輸入到模型的特徵是良好的。

結論

機器學習裡面有許多的技術債

參考資料

技術負債
Machine Learning: The High Interest Credit Card of Technical Debt
机器学习实践 — 测试驱动开发
如何構建可靠的機器學習系統(一):認識技術債


上一篇
Day 27 Grad-CAM如何實現?
下一篇
Day 29 機器學習的測試
系列文
Machine Learning與軟工是否搞錯了什麼?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言