13
10.2020

Systems機器學習系統中的隱藏技術

親子育兒(吃喝)  

Systems機器學習系統中的隱藏技術

Hello 同學們大家好!我是花花今天我們讀一篇來自Google的文章Hidden Technical

Debt in Machine Learning

Systems機器學習系統中的隱藏技術負債我們還是採用英文Slides中文講解的方式歡迎大家打開軟字幕來確認技術術語這篇文章發表於機器學習頂會NIPS 2015雖然是5年前的文章了但放到今日依然非常有意義甚至比5年前更有意義文章的標題中出現了技術負債 (Technical Debt)

這個詞我們先來了解下什麼是技術負債再看技術負債在如何隱藏在機器學習系統中的什麼是技術負債按照維基百科上的定義技術負債又被稱為設計負債或者代碼負債是軟件開發中的一個概念通常是指由於前期選擇了簡單(但有限)的解決方案而不是更好的*需要花更多時間的方法*導致後期需要返工所付出的代價正所謂「欲速則不達」欠債還錢、天經地義那怎樣才能償還技術負債呢?通常有以下這些方式代碼重構 (code refactoring)增強單元測試

(improving unit tests)刪除無效代碼 (deleting

dead code)降低依賴 (reducing dependencies)緊縮API

(tightening APIs)改進文檔 (improving documents)償還技術負債並不能為系統增加新功能但為什麼我們還要這麼吃力不討好呢?

因為它使得未來的改進變為可能還可以減少錯誤同時增強可維護性如果我們逾期不還會怎麼樣呢?那麼技術債務就會像滾雪球那樣越滾越大複利 (compounding interest)

是非常可怕的尤其是在你欠錢的時候我們已經了解了技術負債是什麼為何要償還以及償還的方式關於機器學習系統中隱藏的技術負債作者把文章大概分為這麼幾塊複雜模型正在侵蝕(抽象)邊界數據依賴比代碼依賴更加昂貴反饋迴路機器學習系統反面模式 (Anti-Patterns)配置債務和外部世界的改變打交道其他機器學習相關領域的債務總結:評估債務並且開始償還它2. 複雜模型正在侵蝕(抽象)邊界在傳統的軟件開發中通過封裝

(encapsulation)和模塊化設計 (modular design)形成的強抽象邊界 (strong

abstraction boundaries)可以幫助創建可維護的代碼 (maintainable code)模塊內部可以改變和提升而不影響模塊之間的交互下面舉了例子:ClassB依賴於ClassA只要ClassA的Public

API不改變那麼ClassA和ClassB就可以各自獨立重構或改進而不會影響到現有的任何功能這就是強抽象邊界帶來的好處很不幸在機器學習系統中很難通過描述預期行為 (intended behavior)來強制執行嚴格抽象邊界 (strict

abstraction boundaries)實際上如果沒有外部數據依賴的話我們確實無法用軟件邏輯 (software logic)來有效的表示機器學習系統的期望行為

(desired behavior)如果能描述就不需要機器學習了我們將在下面的幾個例子中看到邊界的侵蝕可能顯着地增加機器學習系統的技術負債2.1 糾葛 (entanglement)機器學習系統將信號混合在一起信號的糾葛使得我們無法進行獨立的改進舉個例子一個模型

(model) 中使用特徵 (features) x1,

x2, …, xn如果我們改變特徵x1值的輸入分佈 (input

distribution)那麼剩下的n-1個特徵的重要性、權重或者使用與否都有可能改變無論是完全重新訓練模型或者在做線上適應 (online adapation)增加或者移除特徵也會有相似的作用所以說沒有輸入是真的獨立的 (independent)作者把這種現象稱為CACE原則

(principle)Changing Anything Changes Everything翻譯成中文就是牽一髮動全身CACE原則不僅適用於輸入信號

(input signals)也同樣適用於超參數 (hyper-parameters)學習設置 (learning

settings)採樣方法 (sampling methods)收斂閾值 (convergence

thresholds)數據選擇 (data selection)以及基本上其他任何可能的調整 (tweak)一種可能的緩解策略就是使用集成學習

(ensembles)另外一種方法就是聚焦在檢測預測行為的變化上2.2 矯正瀑布 (Correction Cascades)假設我們已經有一個模型Ma能夠解決A問題如果我們需要解決一個相近的問題A』一種快速方法就是使用Ma的輸出作為信號來學習A和A』之間的誤差矯正然而這個矯正模型創建了一個對模型Ma的系統依賴

(system dependency)使得未來對該模型改進的分析變得十分昂貴尤其是這類矯正模型形成瀑布 (cascades) 之後矯正瀑布還可能創建改進死鎖

(improvement deadlock)任何一個獨立模型的自身改進可能對整個系統來說反而有副作用要緩解這個問題我們可以增強模型Ma通過增加特徵直接學習矯正或者重新學習一個新的模型Ma'2.3 神秘的消費者 (Undeclared

Consumers)通常模型的預測結果是廣泛可被訪問的 (widely accesible)無論是在運行時 (runtime)

還是寫入到文件或者日誌中之後都有可能會被其他系統使用到如果沒有訪問控制 (access controls)那麼就有可能出現神秘的消費者悄悄地使用這個模型的輸出作為其他系統的輸入有時候他甚至不知道這是一個機器學習模型他只認為日誌中有這樣一行數據有這樣一個信號我可以直接拿來使用在傳統的軟件工程中這個問題被稱為可見性債務 (visibility

debt)神秘的消費者在最好的情況下是昂貴的 (expensive)在最壞的情況下是危險的 (dangerous)因為他們對該模型創建了一個隱式緊耦合 (tight

coupling)對該模型的任何改變都有可能影響到其他系統甚至很多時候都不知道為什麼系統發生了變化更有甚者神秘的消費者有可能創建隱式的反饋迴路 (feedback loops)我們將會在第四章再來探討這個問題神秘的消費者問題在現實中很難檢測除非系統設置了嚴格的訪問權限如果沒有這些障礙工程師會自然地選擇最方便有效的信號來解決問題3.

數據依賴在經典軟件工程中依賴債務 (dependency debt)是代碼複雜度和技術負債的主要貢獻者作者發現在機器學習系統中數據依賴在債台高築的過程中相比於代碼依賴有過之而無不及非常容易構建大型數據依賴連下面這個圖中可以看到data2依賴於data1data3依賴於data2甚至依賴於另外一個模型最後模型2的話就有這麼多數據依賴代碼依賴可以通過編譯器和連結器進行靜態分析由於缺乏相對應的工具使得數據依賴難以檢測3.1 不穩定的數據依賴為了加快研發速度我們可能會選取其他小組的信號作為特徵然而這些信號是不穩定的

(unstable)意味着它們可能隨着時間的改變而發生量變甚至質變這些改變可能是隱式的比如用於計算TF/IDF有數據依賴的查詢表 (look-up table)也有可能是顯式的比如上游小組切斷了你對他們信號的訪問權限這些信號的改變是危險的就如同第二章中講到的糾葛一樣任何一個信號的改變都會對系統產生未知的影響通常的解決方法就是對該信號創建一個版本副本 (versioned

copy)當然版本化也有其本身的代價比如過時的 (Staled) 特徵以及維護多個版本的成本3.2 未充分利用的數據依賴

(underutilized data dependencies)在代碼中未充分利用的依賴是指通常不需要的軟件包類似的、未充分利用的數據依賴是指對模型提升非常小的輸入信號我們完全可以移除它們而不用擔心由於它們的改變而導致的未知結果未充分利用的數據依賴可以分為以下幾類歷史遺留特徵 (Legacy

Features)由於缺少檢測工具冗餘的舊特徵依舊留存在系統裏面打包特徵 (Bundled Features)由於時間緊迫一組特徵被打包加入系統其中一些對模型的影響微乎其微這些特徵應該被移除ε-特徵 (ε-Features)機器學習研究員加入的特徵其對系統複雜度的提升遠遠大於性能提升這些特徵其實也是沒有必要的相關的特徵

(correlated features)有時有兩個特徵十分相關 (strongly correlated)比如說鋼琴琴鍵的序號和頻率兩者成對數關係機器學習系統很難檢測到這種相關性我們只要使用其中一種特徵就可以了另外一個特徵就是冗餘的這就是.

未充分利用的數據依賴解決方法就是每次移除一個特徵然後運行模型評估來判斷這個特徵是否對模型有貢獻如果沒有貢獻的話我們完全可以把它移除掉那麼這就是數據依賴的部分第4章 反饋迴路 (feedback Loops)4.1

直接反饋迴路 (direct feedback loops)是指一個模型會直接地影響到未來訓練數據的選取比如部分的訓練數據是用當前版本的模型挖掘所得就會影響到下一個版本的訓練4.2

隱式反饋迴路 (hidden feedback loops)隱式反饋迴路是指兩個或者兩個以上的模型通過世界互相影響對方比如兩個模型獨立地預測股價走勢其中一個模型的改進(或者bug)則會影響另一個模型的出價或者購買行為反過來一樣它們兩個模型會互相影響通過外部世界第5章

在SEN學童之中有不少是屬於讀寫障礙的,根據衛生署資料顯示,香港大約10-12%的兒童患有不同程度的讀寫障礙,而由於讀寫障礙特徵比較「大路」,不少家長都容易忽略,或與自閉症、過度活躍症等其他SEN病症混淆。

機器學習系統的反面模式 (anti-patterns)出乎很多學者意料的是在整個機器學習系統中真正用於學習和預測的代碼僅占非常小的比重就如這張圖所示這個黑色的部分ML Core它的(相對)代碼量是非常小的很不幸使用機器學習的系統通常都以高技術負債收尾在這一章中我們就一起來看一下幾個系統設計的反面模式5.1 膠水代碼

(glue code)在快速構建一個機器學習系統的時候往往會從各個渠道獲取通用軟件包並使用膠水語言將它們整合在一起會出現大量的支持代碼 (supporting code)用於數據的輸入和輸出使得替換這些軟件包變得不可行長期以往系統就變得越來越僵化一個解決方案就是用通用的API去包裹這些黑盒軟件包這樣可以提高支持基礎的可重用性同時降低了替換軟件包的成本5.2

管道叢林 (pipeline jungles)作為膠水代碼的一個特例管道叢林經常出現在數據準備中數據過濾、組合、採樣通常伴隨着中間文件輸出有時候為了得到稍微不同的訓練數據不同的管道被創建伴隨着整塊代碼的複製粘貼這些管道的管理、錯誤檢查、從失敗中恢復是困難且昂貴的為了測試這些管道通常還需要運行非常昂貴的集成測試可能一跑就要好幾個小時擺脫管道叢林的唯一方法就是從整體上思考數據集和特徵提取並從底層開始重新設計5.3 無效的實驗代碼

(Dead experimental code)膠水代碼和管道叢林的通常後果就是在短期內創建很多分支和代碼來進行實驗很多代碼就運行了一次但由於效果不好就再也無人問津了長此以往累計了大量的實驗代碼其中絕大部分是無效的徒增很多維護成本解決方案就是定期檢查實驗代碼將無效的部分刪除第6章 配置債務

(configuration debt)在機器學習系統中另外一個可能累積債務的令人意外的領域就是配置 (configuration)任何一個大型的機器學習系統都有大量的可配置選項 (configurable

options)包含使用哪些特徵每個算法具體的學習參數可選的預處理和後處理驗證方式 (verification methods)等等每一行配置文件都可能是潛在的錯誤比如有兩個配置是相關的只改了其中一個而沒有改另外一個會導致程序異常作者總結了以下幾個原則用於創建良好的配置系統能夠通過簡單修改上個版本的配置來獲得新的配置文件增加自動驗證機制讓手動錯誤變得不可能能夠可視化地對比不同的配置文件版本控制配置文件應該和代碼一視同仁第7章 和外部世界的改變打交道機器學習系統之所以令人嚮往的一個原因就是它能夠和外部世界直接地互動然而經驗告訴我們外部世界是非常不穩定的這就增加了機器學習系統的維護成本7.1

動態系統中的固定閾值在機器學習系統中我們需要選定一個閾值來做決策這封郵件是不是垃圾郵件是否要顯示這個特定的廣告等當模型的預測值大於某個閾值的時候我們就認為它是垃圾郵件或者說要顯示廣告這個閾值通常是人工選取的如果訓練數據發生了改變之前的閾值就不再適用了必須重新選取然後對成百上千個模型手工選取閾值顯然是不可行的我們可以對預留的驗證數據進行模型評估來自動確定閾值7.2 監控和測試單元和端到端測試雖然是有價值的但是它們不並不能有效地對抗改變中的世界複雜的實時系統行為監控加上自動應對 (automated response)對長期的系統可靠度

(raliability)來說是十分關鍵的但核心問題是:監控什麼?作者給出了下列選項作為起點預測偏差 (Prediction bias)預測的標籤分佈應該和觀察到的標籤分佈相同當兩個分佈出現分歧時有可能是外部世界發生了劇烈的變化監控預測偏差可以幫助我們檢測到這個變化行動極限

(Action limits)比如通常每天有k封郵件被標記為垃圾郵件突然有一天有標記了10k封郵件量大了10倍一種可能是外部世界發生了變化當然也有可能是下面會提到的上游生產者出現了問題上游生產者 (Upstream Producers)很多信號是由上游系統產生的我們必須緊密地監控上游系統確保上游系統的警告能夠傳播到所有下游消費者當出現異常時就能快速確定是自己系統的問題還是上游的問題比如說上游的特徵沒有了或者說特徵值(的分佈)突然發生了巨大的改變這就是可以告訴我們是他們出了問題而不是我們的系統出問題第8章

其他領域的債務作者又總結了其他領域可能存在的債務數據測試債務 (data testing debt)在機器學習系統中數據取代了代碼就像我們給代碼進行測試一樣我們也需要給數據增加測試來監測輸入分佈的變化可重現債務

(reproducibility debt)我們經常會看到一些機器學習論文無法被重現的新聞一些可能是造假也有一些是作者留了一手所以說能夠重現實驗並且得到相似的結果是非常重要的過程管理債務 (process management

debt)本文大多數時候都在講如何管理一個模型但是成熟的機器學習系統種可能有成百上千個模型如何管理這些模型就成了一個棘手的問題包括配置文件更新資源分配數據可視化災難恢復等等最後就是文化債務 (cultural debt)有時候機器學習科學家和機器學習工程師之間有一條看不見的鴻溝我們要構建良好的團隊文化來獎勵那些幫助減少技術負債的工程師就如同對模型精度提升的獎勵一樣很多時候我們都在追求模型的精度和性能的提高但是對長期的線上的機器學習系統來說可維護性也是十分重要的最後第9章結論:評估債務並且開始償還它技術債務是一個很好的比喻但它不能提供定量的分析我們要如何評估系統中的技術負債呢一個簡單的方法就是看你目前的團隊是否還能快速移動 (moving

fast)如果可以的話說明目前的債務水平還比較低或者遵循了良好的實踐但是快速移動通常都伴隨着債務累積我們需要考慮下列問題以全尺寸測試一個全新的算法的難易度是多少?所有數據依賴的傳遞閉包 (transitive closure)

是什麼?可以多精確地測量一個新的改變對系統的影響?一個信號或者模型的改進是否會降低其他模型的性能?一個新成員多快才能開始全速工作?

償還機器學習相關的技術債務通常需要一個特別的承諾往往只能依靠團隊文化的轉變而實現認識到問題、優先化、獎勵機制對機器學習團隊的長期健康來說是十分重要的這就是這篇文章的全部內容了作者從軟件工程的角度來看待機器學習系統發現了不少隱藏的技術債務問題並給出了一些解決方案我相信作者的初衷是希望更多的團隊能夠認識到這些問題並根據自己的實際情況進行調整降低技術債務從而實現可持續的發展希望本期節目能帶給大家一些思考那麼我們下期節目再見了我是花花拜拜

不嚴肅的嚴肅雜誌是什麽?

門田伊三男. 不嚴肅的嚴肅雜誌 2019.08.17 上海大家好 我的名字是門田伊三男我作為一名藝術總監工作於Aisei藥房的總部製作部門這是家經營着360家藥店的企業在大家看來 藥房和設計可能沒有什麼關係讓我來稍稍說明一下吧在日本 藥房大...

 

關於相應生物學科的相關內容

那在一節課呢我們首先來聊一聊關於相應生物學科的相關內容我們來看一句話叫做心理學是腦的機能腦是心理的器官布洛卡非常有意思人專門研究大腦的證明我們有老區叫做布洛卡區不能卡去叫做運動性失語症好像是我們應該沒記錯都是與就說人認識字但讀不出來是被他發...

 

言語治療師總工會主席:我們就是無聲者,抗爭就是無聲者的吶喊

多謝社總提供的平台給細弱年輕的我在這裏為大家發聲反修例活動至今已經六個月由仲夏走到寒冬 香港人面對着很多的失去好多人都說香港人很善忘但我希望今日在座的都不會忘記我們失去的一切面對着社會的不公 政權的打壓從半年前開始梁凌傑義士選擇在太古廣場以...

 

發表於2020.10.13
留言(0)
博客名稱 :
成长需要教育
網誌名稱:
成长需要教育带动
使用天數:125
年齡:0
電郵:cmaggie320@gmail.com
按月份瀏覽
    2020
  • 一月
  • 二月
  • 三月
  • 四月
  • 五月
  • 六月
  • 七月
  • 八月
  • 九月
  • 十月
  • 十一月
>> 更多
系統分類
  • 親子育兒
  • 其他
自行分類
最新留言