搭建容易維護難!谷歌機器學習系統血淚教訓

AI前線發表於2018-06-19

搭建容易維護難!谷歌機器學習系統血淚教訓

作者 | Sculley等
譯者 | 核子可樂
編輯 | Debra
AI 前線導讀:2014 年,谷歌一篇探討機器學習背後暗藏高額技術債的論文曾火爆一時。今天,這篇論文又出現了知名技術社群 HackerNews 的頭條。看來,即使過了 4 年時間,人工智慧進入新的春天,但困擾著機器學習研究者的問題還是類似的問題。

本文作者表示,希望這篇論文能夠為在生產環境中採用機器學習系統的開發者與維護者提供一些實用建議。作者警告稱,雖然從零搭建機器學習系統還算輕鬆,但隨後的改進卻可能存在出乎意料的困難。在閱讀本文時,讀者會清晰感受到其中的經驗源自作者在谷歌公司任職期間來之不易的艱辛積累。

AI 前線將帶大家一起重溫這篇經典文章,文章部分經驗強調“與機器學習相關,並不代表著能夠徹底放棄良好軟體工程實踐”,也有部分內容屬於特定於機器學習的常見陷阱。考慮到所有希望建立“X+AI”業務的初創企業都面臨著這類潛在挑戰,因此文中提出的建議非常值得大家認真考量。

更多幹貨內容請關注微信公眾號“AI 前線”,(ID:ai-front)

搭建容易維護難!谷歌機器學習系統血淚教訓

本文提到的機器學習系統帶來的主要技術債類別包括:資訊隱藏以及變化封閉帶來的挑戰 ; 膠水程式碼與配置;以及不斷變化的外部世界以及分析模型結論對這一世界的理解偏差。

本文中最重要的見解之一,在於技術債務應當成為工程師與研究人員們需要注意的問題。以大規模增加系統複雜性為代價進行解決方案研究顯然不是什麼明智的作法。即使僅僅增加一到兩種看似無害的資料依賴關係,也有可能減緩進一步發展速度。雖然減少技術債務並不像證明新定理那樣令人振奮,但其仍然是保持強勁創新能力的重要動力。事實上,為複雜的機器學習系統開發出全面且優雅的解決方案是一項極具現實意義的工作。

資訊隱藏與變化封裝

……機器學習模型是一種創造複雜糾纏狀態的機器,且不可能有效地對其改進工作進行隔離分配。作為證明,假設犈在一套模型當中使用特徵 x1,……Xn,那麼如果我們改變 x1 中的值輸入分佈,那麼其重要性、權重或者剩餘特徵可能全部發生改變——無論模型是以批處理形式進行完全重新訓練,還是以線上方式進行逐步適應,情況都是如此。而新增新特徵 xn+1 或者刪除任何特徵 xj,也都可能導致類似的變化。沒有任何輸入內容是真正獨立存在的。牧羊這將其稱為 CACE 原則:即任何改變都將改變一切。

如果我們瞭解到先驗的重要性,就不需要利用機器學習進行重複證明!因此,模型有點像一臺巨大的攪拌機器,我們向其中投入大量資訊並獲取結果,但對輸入內容中的各類變化的敏感度卻難以預測,且幾乎無法進行影響隔離。面對這樣的難題,我們該怎麼辦?雖然不存在百試百靈的方案,但作者給出了三種可能有所幫助的策略。

  1. 你可以隔離模型,轉而提供總體結論。不過,糾纏問題仍然存在於每一個模型當中。此外,“在規模化情況下,這種策略可能很難長期維持”。

  2. 制定方法以深入理解模型預測的行為。你需要通過投資令模型不再像黑匣子般難以捉摸——例如為其配備更多視覺化工具。此外,我還和多家企業進行過交流,其中一部分公司表示其能夠解釋機器學習模型作出的決定——甚至包括監管要求,而這種能力亦是其商業模式中的重要組成部分。因此,請大家認真考慮這方面需求與實現途徑。

  3. 使用更為複雜的正則化方法,以便在訓練當中使用的目標函式能夠反映出任何效能預測成本的上升跡象。“這種方法可能有用,但也只是可能。此外,其也許會增加系統複雜性進而帶來更多債務,這反而背離了我們減少糾纏度的初衷。”

另一種尋找偶然耦合的方式在於建立隱藏反饋迴路,這一點在未申報消費方當中體現得尤為明顯。通過未申報消費方,系統只是在單純消費建模產出的輸出結果,而我們幾乎意識不到這些過程的存在。如果其根據影響模型的輸入引數資訊採取了某些行動,則這種隱藏的反饋迴路很容易引發以下問題:

想象一下,在我們的新聞標題點選率預測系統當中,系統中的某一元件負責以“智慧化方式”確定用於標題的字型大小。如果此字型大小模組開始將點選率作為輸入訊號使用,且字型大小確實會影響使用者的點選傾向,那麼字型大小當中將會包含一個由點選率新增的新的隱藏反饋迴路。可以想象,這樣一套系統會逐漸無休止地增加所有標題字號情況。

資料依賴性問題

……儘管程式碼依賴性可以通過靜態分析以及連結圖等方法相對輕鬆地進行識別,但具備資料依賴性處理功能的分析工具卻很少見。因此,我們可以難以構建起能夠解決大型資料依賴鏈的方案。

舉例來說,某些輸入訊號會隨著時間推移而改變行為。遵循 CACE 原則,即使將這些變化作為改進方向,也很難對後果作出預測。另一種資料依賴性則是模型中的特徵集合,其中一些能夠在準確性方面提供非常有限的增量。我們可以通過多種方式利用原本未充分利用的依賴性——包括一部分已遭棄用的早期遺留特徵,一次性新增的多項特徵組合(而非僅僅挑出那些真正有作用的特徵),或者那些為了追求準確率而新增、且無法證明自身對複雜性的影響的特徵。定期對特徵進行清除將非常重要。

舉例來說,假設在團隊合併之後,為了簡化而進行了一輪由舊產品編號到新產品編號的轉換,那麼兩套方案都將在系統中作為特徵。其中新產品只能獲得一個新編號,但舊產品可能同時擁有兩個編號。機器學習演算法當然也會將舊編號納入依賴關係當中。一年之後,有管理人員清理了使用舊編號填充的資料庫程式碼。這種變化不會被迴歸測試所檢測到,因為清理之後舊編號直接不再使用。這對機器學習系統的維護者而言顯然不是什麼好訊息……

有能力理解資料依賴性的工具,將幫助我們順利搞定特徵清理工作。谷歌公司的一支團隊就構建出一款自動化特徵管理工具:

自從採用以來,該方案幫助谷歌團隊每個季度安全刪除數千行與特徵相關的程式碼,同時自動驗證其中的版本及其它問題。該系統還能夠有效防止意外使用新模型中不推薦或已經損壞的特徵。

最後一種資料依賴性管理方法,在於建立“校正”機制以重新利用現有模型。通過這種方式,你能夠快速獲得初步成果 ; 但在另一方面,你未來對該模型的分析與改進將面臨更高的成本。

其它 95%(膠水程式碼與配置)

令人驚訝的是,學術界意識到在大多數機器學習系統當中,只有很小一部分程式碼在實際進行“機器學習”。事實上,一套成熟的系統最終可能最多隻有 5% 的程式碼負責機器學習,而其餘 95% 甚至更多程式碼只是起到粘合作用,從而通過重新實現(而非重新使用)改善原本笨拙的 API……

這裡需要解決的問題在於,很多機器學習庫都被封裝成了獨立的工件,這無疑會引入大量膠水程式碼(例如從 Java 轉換至 R 或者 matlab)。如果大家無法在更為廣泛的系統架構內找到適合自己的資源選項,那麼重新實現演算法(5% 部分的程式碼)可能更有意義,且能夠有效減少膠水程式碼的數量。

一大相關問題在於管道叢林——即過於複雜的資料準備管道。

管道叢林問題只能通過全面審視資料收集與特徵提取的方式來避免。清除管道叢林並從頭開始設計清理方法,確實是工程設計層面的一項重大投資,但這同時也能夠顯著降低持續成本並加速進一步創新活動。

一旦系統因膠水程式碼與管道叢林問題而變得僵化,很多朋友會忍不住調整生產程式碼中的實驗程式碼路徑以執行額外實驗。這樣做當然比較方便,但一旦頻率過高,其只會引發更大的混亂。

作為典型例項,谷歌公司最近在對一套重要的機器學習系統進行清理時,發現其中存在著數以萬計的未使用實驗性程式碼行。在利用更緊密的 API 進行重寫之後,這部分“遺產”能夠大幅降低工作量、生產風險並控制系統複雜性,從而為新演算法的實驗鋪平道路。

在本節的最後,“配置往往是現實世界的混亂對美麗演算法造成干擾的載體:”

請考慮以下例子。特徵 A 在 9 月 14 日到 9 月 17 日之間發生了記錄錯誤。特徵 B 直到 10 月 7 日才正式上線。由於記錄格式發生了變化,用於計算特徵 C 的程式碼必須對 11 月 1 日之前及之後的資料進行更改。特徵 D 並未用於生產,因此在現場調協中進行模型查詢時,必須使用替代性的 D’與 D”。如果特徵 Z 被使用,那麼所有訓練相關任務必須獲得額外的記憶體配額,否則其訓練效率將顯著降低。最後,由於延遲限制,特徵 Q 排除掉了特徵 R。所有這些混亂的條件使得配置難以正確修改且難以推理。此外,配置錯誤還可能引發高昂的代價——包括嚴重的時間浪費、計算資源損耗或者生產問題。

配置變更應該與程式碼變更一樣得到謹慎處理,並交由同行進行評審。

世界還將帶來怎樣的變化?

經驗表明,外部世界很少保持穩定。事實上,真實世界的性質變化正是機器學習當中技術債務的一大重要來源。

請不要手動設定決策閾值(例如顯示或不顯示廣告),而應考慮通過評估現有驗證資料以發現閾值此外,因果不明的相關特徵也可能引發問題:

這似乎並不是什麼主要問題:如果兩個特徵總是相關,但只有其中一個特徵屬於真正的因果關係,那麼似乎仍可以將信用歸於兩者並通過觀察其共同現象得出結論。然而,如果外部世界中這兩種特徵的共生性突然消失,那麼預測行為可能發生顯著變化。用於區分相關效應的全面機器學習策略也將超出我們的討論範圍 ;[Bottou 2013] 就此給出了一些極好的建議與參考。結合本文的關注點,我們注意到非因果關係屬於隱藏債務的另一種來源。

最後,實時監控系統至關重要。論文建議大家測量預測偏差,並在系統採取的行動數量超過某個閾值時釋出警報。

在一套按預期方式運作的系統中,預測標籤的分佈通常應該等同於觀察標籤的釋出。這不需要進行全面測試,因為其可以通過單一空模型滿足——即直接預測標籤出現平均值,而不必考慮輸入要素。然而,這種簡單的方法卻帶來了令人驚訝的良好效果,而此類度量指標的變化通常反映出需要注意的關鍵問題……

原文連結:

https://blog.acolyer.org/2016/02/29/machine-learning-the-high-interest-credit-card-of-technical-debt/

論文連結:

https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43146.pdf



相關文章