- 機(jī)器學(xué)習(xí)流水線實(shí)戰(zhàn)
- (美)漢內(nèi)斯·哈普克 凱瑟琳·納爾遜
- 6853字
- 2021-11-22 15:28:41
第 1 章 入門
本章將介紹機(jī)器學(xué)習(xí)流水線并給出框架性的構(gòu)建步驟。我們將講解如何將機(jī)器學(xué)習(xí)模型從一個小實(shí)驗(yàn)轉(zhuǎn)變成健壯的工業(yè)級生產(chǎn)系統(tǒng)。同時,本章也將介紹一個貫穿全書的示例項(xiàng)目,通過這一項(xiàng)目來演示本書要介紹的各個準(zhǔn)則。
1.1 為什么要用機(jī)器學(xué)習(xí)流水線
機(jī)器學(xué)習(xí)流水線的關(guān)鍵性優(yōu)勢建立在模型生命周期的自動化上。當(dāng)有新的訓(xùn)練數(shù)據(jù)可用時,一個包含數(shù)據(jù)校驗(yàn)、預(yù)處理、模型訓(xùn)練、分析和部署的工作流就會被觸發(fā)。我們觀察到有許多數(shù)據(jù)科學(xué)團(tuán)隊(duì)手動做這些工作,不僅費(fèi)時費(fèi)力而且容易出錯。下面來看看使用機(jī)器學(xué)習(xí)流水線的一些具體的好處。
只需專注于新模型而不用維護(hù)既有模型
自動化的機(jī)器學(xué)習(xí)流水線將數(shù)據(jù)科學(xué)家從煩瑣的模型維護(hù)任務(wù)中解放出來。我們觀察到很多數(shù)據(jù)科學(xué)家將精力花在了更新之前已經(jīng)開發(fā)完成的模型上。他們會手動運(yùn)行腳本去預(yù)處理訓(xùn)練數(shù)據(jù)、使用一次性的部署腳本或者手動微調(diào)模型。自動化的流水線可以讓數(shù)據(jù)科學(xué)家專注于開發(fā)新模型,這是他們最喜歡做的事。最終,這將帶來更高的工作滿意度,并在激烈的人才市場中保持較低的人才流失率。
預(yù)防 bug 的產(chǎn)生
自動化流水線可以預(yù)防 bug 的產(chǎn)生。正如在后續(xù)章節(jié)中將看到的,新創(chuàng)建的模型會受到版本化數(shù)據(jù)的約束,預(yù)處理步驟也會受到已開發(fā)模型的約束。這意味著如果有新的數(shù)據(jù),那么將生成新的模型。如果預(yù)處理步驟更新了,那么從原始數(shù)據(jù)經(jīng)過預(yù)處理得到的訓(xùn)練數(shù)據(jù)將變得無效,因此還是需要生成一個新的模型。在手動機(jī)器學(xué)習(xí)工作流中,一個常見的 bug 來源是在模型訓(xùn)練完成后對預(yù)處理步驟的變更。在這種情況下,和模型一起部署的預(yù)處理步驟將和模型訓(xùn)練時的預(yù)處理步驟不一致。這些 bug 可能很難發(fā)現(xiàn)和調(diào)試,因?yàn)殡m然預(yù)處理步驟不一致,但依舊可以進(jìn)行推算,只是最后的推算結(jié)果不正確。通過使用自動化的工作流,可以有效地預(yù)防這種錯誤。
有用的記錄文檔
實(shí)驗(yàn)記錄和模型發(fā)布管理單元將生成一份記錄模型變化的記錄文檔。實(shí)驗(yàn)將記錄模型的超參數(shù)的變化、所使用的數(shù)據(jù)集和模型的性能指標(biāo)(比如損失值或者準(zhǔn)確率)。模型發(fā)布管理單元將追蹤哪一個模型最終被選用并部署。記錄文檔在數(shù)據(jù)科學(xué)團(tuán)隊(duì)需要重新創(chuàng)建模型或追蹤模型性能時特別有用。
標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化的機(jī)器學(xué)習(xí)流水線可以改善數(shù)據(jù)科學(xué)團(tuán)隊(duì)的體驗(yàn)。受益于標(biāo)準(zhǔn)化的設(shè)置,數(shù)據(jù)科學(xué)家可以很快上手或者進(jìn)行跨團(tuán)隊(duì)合作,找到相同的開發(fā)環(huán)境。這會提高效率并縮短新項(xiàng)目的啟動時間。另外,這也能夠降低人才流失率。
流水線對團(tuán)隊(duì)的影響
自動化機(jī)器學(xué)習(xí)流水線將對數(shù)據(jù)科學(xué)團(tuán)隊(duì)產(chǎn)生 3 個關(guān)鍵性的影響:
● 擁有更多的時間去開發(fā)具有創(chuàng)新性的模型;
● 簡化了更新已有模型的流程;
● 縮短了在復(fù)現(xiàn)模型上所用的時間。
所有這些方面都將降低數(shù)據(jù)科學(xué)項(xiàng)目的成本。不僅如此,自動化機(jī)器學(xué)習(xí)流水線還會帶來如下好處。
● 幫助檢測數(shù)據(jù)集或者訓(xùn)練模型中的潛在偏見。發(fā)現(xiàn)偏見問題可以避免使用模型的人們受到傷害,比如亞馬遜的基于機(jī)器學(xué)習(xí)的簡歷篩選器就被發(fā)現(xiàn)存在對女性不利的偏見。
● 創(chuàng)建記錄文檔(通過實(shí)驗(yàn)記錄和模型發(fā)布管理單元創(chuàng)建)將有助于解決數(shù)據(jù)保護(hù)法律[比如歐盟的《通用數(shù)據(jù)保護(hù)條例》(General Data Protection Regulation,GDPR)]產(chǎn)生的一些問題。
● 可以為數(shù)據(jù)科學(xué)家節(jié)約更多的開發(fā)時間并提高他們的工作滿意度。
1.2 什么時候考慮使用機(jī)器學(xué)習(xí)流水線
雖然機(jī)器學(xué)習(xí)流水線具有多種優(yōu)勢,但并不是所有的數(shù)據(jù)科學(xué)項(xiàng)目都需要使用流水線。有時候數(shù)據(jù)科學(xué)家只是想實(shí)驗(yàn)一個新的模型、研究一種新的模型架構(gòu)或者復(fù)現(xiàn)最近的學(xué)術(shù)成果。在這些情況下,流水線并不是很有用。然而,只要模型已經(jīng)有了用戶(比如,已經(jīng)在一個應(yīng)用中使用),它就需要持續(xù)地更新和微調(diào)。在這些情況下,我們又回到了之前討論過的場景:持續(xù)更新模型和減輕數(shù)據(jù)科學(xué)家在這些任務(wù)上的負(fù)擔(dān)。
隨著機(jī)器學(xué)習(xí)項(xiàng)目的增長,流水線變得越來越重要。如果數(shù)據(jù)集或資源需求很大,我們所討論的這些方法就可以輕易地隨著基礎(chǔ)架構(gòu)擴(kuò)展。如果可重復(fù)性很重要,那么它可以通過機(jī)器學(xué)習(xí)流水線的自動性和審計日志來實(shí)現(xiàn)。
1.3 機(jī)器學(xué)習(xí)流水線步驟概述
機(jī)器學(xué)習(xí)流水線開始于對新訓(xùn)練數(shù)據(jù)的獲取,結(jié)束于接收關(guān)于新模型性能表現(xiàn)如何的某種反饋。這種反饋既可以是產(chǎn)品性能指標(biāo),也可以是來自用戶的反饋。機(jī)器學(xué)習(xí)流水線包含多個步驟,比如數(shù)據(jù)預(yù)處理、模型訓(xùn)練和模型分析,當(dāng)然還包含不可或缺的模型部署步驟。可以想象,手動執(zhí)行這些步驟將是多么麻煩且容易出錯。本書將介紹使機(jī)器學(xué)習(xí)流水線自動化的工具和解決方案。
如圖 1-1 所示,整條流水線實(shí)際上就是一個無限循環(huán)。由于可以持續(xù)地收集數(shù)據(jù),因此機(jī)器學(xué)習(xí)模型也能被持續(xù)地更新。生成更多的數(shù)據(jù)通常意味著可以獲得更好的模型。因?yàn)閿?shù)據(jù)不斷地流入,所以流程自動化變得異常關(guān)鍵。在真實(shí)世界的應(yīng)用環(huán)境中,你總是想頻繁地重新訓(xùn)練你的模型。如果不這樣做,在多數(shù)情況下模型的準(zhǔn)確率將慢慢降低,因?yàn)槟P陀?xùn)練時的數(shù)據(jù)和推算時的數(shù)據(jù)在分布上已經(jīng)存在差異。如果重新訓(xùn)練模型的過程是手動的,那么就需要數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)工程師手動校驗(yàn)新的訓(xùn)練數(shù)據(jù)或分析更新后的模型。因此,他們就沒有時間為完全不同的業(yè)務(wù)問題開發(fā)新的模型了。
圖 1-1:模型的生命周期
一條機(jī)器學(xué)習(xí)流水線通常包含以下幾個步驟。
1.3.1 數(shù)據(jù)讀取和版本控制
數(shù)據(jù)讀取(參見第 3 章)是每一條機(jī)器學(xué)習(xí)流水線的開始。在這一步驟中,我們將數(shù)據(jù)處理成后續(xù)組件能夠讀取的格式。數(shù)據(jù)讀取步驟不會執(zhí)行任何特征工程(其會在數(shù)據(jù)校驗(yàn)步驟后進(jìn)行)。這也是進(jìn)行輸入數(shù)據(jù)版本控制的最佳時機(jī),在流水線末端訓(xùn)練得到的模型將和這個數(shù)據(jù)快照聯(lián)系在一起。
1.3.2 數(shù)據(jù)校驗(yàn)
在訓(xùn)練新的模型版本前,需要校驗(yàn)新的數(shù)據(jù)。數(shù)據(jù)校驗(yàn)(參見第 4 章)將專注于如何檢查新的數(shù)據(jù)在統(tǒng)計意義上是否滿足期望(比如范圍、類別數(shù)量和類別分布)。如果數(shù)據(jù)校驗(yàn)工具檢測到異常的情況,它會警示數(shù)據(jù)科學(xué)家。如果你在訓(xùn)練一個二分類模型,那么你的訓(xùn)練數(shù)據(jù)應(yīng)該包含 50% 的 X 類樣本和 50% 的 Y 類樣本。如果新數(shù)據(jù)的類別劃分比例發(fā)生了變化,比如說兩個類別的比例為 70∶30,那么數(shù)據(jù)校驗(yàn)工具將發(fā)出警示。如果模型在這樣一個嚴(yán)重不均衡的訓(xùn)練集上訓(xùn)練,并且數(shù)據(jù)科學(xué)家并沒有采取措施去調(diào)整模型的損失函數(shù)或者采用過采樣/欠采樣的方案去調(diào)整分類 X 和分類 Y,那么模型的預(yù)測結(jié)果可能會偏向樣本數(shù)量更多的類別。
常見的數(shù)據(jù)校驗(yàn)工具還允許你比較不同的數(shù)據(jù)集。如果你有一個包含優(yōu)勢分類的數(shù)據(jù)集,并想將這個數(shù)據(jù)集分成訓(xùn)練集和校驗(yàn)集,那么你需要確認(rèn)兩個數(shù)據(jù)集間的分類分布情況大體相同。數(shù)據(jù)校驗(yàn)工具允許你比較不同的數(shù)據(jù)集并找出其中的異常部分。
如果數(shù)據(jù)校驗(yàn)發(fā)現(xiàn)了異常,那么流水線將停止處理并會向數(shù)據(jù)科學(xué)家發(fā)出警告。如果發(fā)現(xiàn)數(shù)據(jù)分布出現(xiàn)漂移,那么數(shù)據(jù)科學(xué)家或機(jī)器學(xué)習(xí)工程師可以改變每個類別的抽樣方式(比如,從每個類別中抽取相同數(shù)量的樣本),或者改變模型的損失函數(shù),開始構(gòu)建新的模型流水線并重啟生命周期。
1.3.3 數(shù)據(jù)預(yù)處理
新收集的數(shù)據(jù)通常無法直接用于機(jī)器學(xué)習(xí)模型的訓(xùn)練。在絕大多數(shù)情況下,數(shù)據(jù)需要經(jīng)過預(yù)處理才能用于訓(xùn)練。標(biāo)簽往往需要先轉(zhuǎn)換成 one-hot 向量或者 multi-hot 向量 1。這一過程同樣適用于模型的輸入數(shù)據(jù)。如果訓(xùn)練文本模型,那么需要將文本中的字符轉(zhuǎn)換成索引或者將文本標(biāo)記轉(zhuǎn)換成詞向量。因?yàn)轭A(yù)處理過程只需要在訓(xùn)練模型前執(zhí)行一次,而無須在每輪訓(xùn)練中重復(fù)執(zhí)行,所以將預(yù)處理過程放在模型訓(xùn)練前獨(dú)立運(yùn)行很合理。
1在將結(jié)果同時分成多個類別的監(jiān)督分類問題中,需要將類別轉(zhuǎn)換成如 (0, 1, 0) 這種 one-hot 向量,或者將一個類別列表轉(zhuǎn)換成如 (1, 1, 0) 這種 multi-hot 向量。
數(shù)據(jù)預(yù)處理工具的種類繁多,從簡單的 Python 腳本到復(fù)雜的圖模型都有。大部分?jǐn)?shù)據(jù)科學(xué)家很關(guān)心所選工具的處理能力,但預(yù)處理步驟的改動和已處理數(shù)據(jù)之間的雙向連接同樣重要。這意味著如果有人改動了預(yù)處理步驟(比如,在 one-hot 向量轉(zhuǎn)換中增加了額外的標(biāo)簽),那么之前的訓(xùn)練數(shù)據(jù)應(yīng)該無效并會強(qiáng)制更新整條流水線。第 5 章將進(jìn)一步描述數(shù)據(jù)預(yù)處理步驟。
1.3.4 模型訓(xùn)練和模型調(diào)優(yōu)
模型訓(xùn)練(參見第 6 章)是機(jī)器學(xué)習(xí)流水線的核心。這一步驟將訓(xùn)練模型讀取輸入并以盡可能低的誤差預(yù)測輸出。隨著模型(尤其是那些使用大規(guī)模訓(xùn)練數(shù)據(jù)集的模型)的增大,這一步驟將很快變得越來越難以管理。對于計算而言,由于單機(jī)內(nèi)存通常是有限的,因此高效的分布式模型訓(xùn)練將成為關(guān)鍵。
因?yàn)榭梢垣@得顯著的性能提升和提供競爭優(yōu)勢,所以模型調(diào)優(yōu)近年來獲得了極大的關(guān)注。根據(jù)機(jī)器學(xué)習(xí)項(xiàng)目的不同,可以選擇在考慮使用機(jī)器學(xué)習(xí)流水線之前調(diào)優(yōu)或者將之作為流水線的一部分。得益于優(yōu)秀的底層架構(gòu),本書介紹的流水線是可以擴(kuò)展的,模型可以大規(guī)模地并行或順序啟動。這樣一來,便可以為最終的生產(chǎn)模型找出最優(yōu)的模型超參數(shù)。
1.3.5 模型分析
通常情況下,使用準(zhǔn)確率或者損失值來確定最優(yōu)的模型參數(shù)集。但當(dāng)模型的最終版本確定后,進(jìn)行深度模型性能分析(參見第 7 章)將非常有用。這可能包括計算其他指標(biāo),比如精度、召回率和曲線下面積(area under the curve,AUC),或在一個更大的數(shù)據(jù)集(而不是訓(xùn)練時用的校驗(yàn)集)上計算性能。
進(jìn)行深度模型性能分析的另一個原因是要檢查模型預(yù)測的公平性。對數(shù)據(jù)集進(jìn)行分組并對每組數(shù)據(jù)獨(dú)立評估后才能分析出模型在組間的不同表現(xiàn)。通過調(diào)查模型對訓(xùn)練中所用特征的依賴,可以解釋改變單個訓(xùn)練樣本的特征將如何影響模型的預(yù)測結(jié)果。
與模型調(diào)優(yōu)以及最終選擇最優(yōu)模型的步驟一樣,這一步驟也需要數(shù)據(jù)科學(xué)家參與。然而,后面將演示如何將整個分析自動化,僅在最后審核時才需要人參與。這一自動化過程使模型分析變得統(tǒng)一且具有可比較性。
1.3.6 模型版本控制
模型版本控制和驗(yàn)證的目的是追蹤哪種模型、哪個超參數(shù)集以及數(shù)據(jù)集將被選擇作為下一個要部署的版本。
軟件工程中的語義化版本控制要求使用者在其 API 中做出具有不兼容性的改變或者在重大特性發(fā)布時增加主版本號,否則就增加次版本號。模型發(fā)布管理還有另外一個自由度:數(shù)據(jù)集。在一些情況下,無須改變模型參數(shù)或者模型架構(gòu),僅通過大幅增加或者提供更好的數(shù)據(jù)集就可以顯著提升模型性能。這種性能提升是否意味著需要增加模型主版本號呢?
對于上述問題,不同的數(shù)據(jù)科學(xué)團(tuán)隊(duì)可能有不同的答案,但記錄新版模型的所有輸入(超參數(shù)、數(shù)據(jù)集、模型架構(gòu))并將其作為版本發(fā)布的一部分是非常必要的。
1.3.7 模型部署
在完成模型的訓(xùn)練、調(diào)優(yōu)和分析后,就到了收獲成果的黃金時刻。不過,因?yàn)橛刑嗟哪P褪峭ㄟ^一次性實(shí)現(xiàn)工具 2 完成的部署,所以模型更新成了一個容易出錯的過程。
2比如臨時寫的腳本等。——譯者注
使用現(xiàn)代模型服務(wù)器,無須編寫 Web 應(yīng)用代碼就可以部署模型。通常情況下,模型服務(wù)器會提供多種 API,比如描述性狀態(tài)遷移(REST)或者遠(yuǎn)程過程調(diào)用(RPC)等協(xié)議,并支持同時運(yùn)行相同模型的多個不同版本。同時運(yùn)行多個模型版本有助于對模型做 A/B 測試,并針對如何改善模型提供很有價值的反饋。
在模型服務(wù)器的幫助下,可以直接更新模型版本,而無須重新部署應(yīng)用。這可以縮短應(yīng)用的停機(jī)時間并減少應(yīng)用開發(fā)團(tuán)隊(duì)和機(jī)器學(xué)習(xí)團(tuán)隊(duì)間的溝通。第 8 章和第 9 章將詳細(xì)介紹模型部署。
1.3.8 反饋循環(huán)
機(jī)器學(xué)習(xí)流水線的最后一步常被人忘記,但它對于數(shù)據(jù)科學(xué)項(xiàng)目的成功至關(guān)重要。這個流程需要閉環(huán),從而在評估新部署模型的有效性和性能時得到有價值的信息。在一些場景中,還能獲得新的訓(xùn)練數(shù)據(jù),以用于擴(kuò)充數(shù)據(jù)集和更新模型。這個過程既可以有人參與,也可以全程自動。詳細(xì)信息參見第 13 章。
除去需要人參與的兩個步驟(模型分析和模型反饋),整條流水線都可以自動化。這樣一來,數(shù)據(jù)科學(xué)家就能夠?qū)W⒂谛履P烷_發(fā),而不是更新和維護(hù)現(xiàn)有的模型。
1.3.9 數(shù)據(jù)隱私
在撰寫本書時,數(shù)據(jù)隱私還未納入標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)流水線。隨著消費(fèi)者越來越關(guān)心自己的數(shù)據(jù)如何被使用以及限制個人數(shù)據(jù)使用的法律法規(guī)的出臺,數(shù)據(jù)隱私越來越引起人們重視。在這種趨勢下,隱私保護(hù)方法終將加入構(gòu)建機(jī)器學(xué)習(xí)流水線的工具中。
第 14 章將討論為機(jī)器學(xué)習(xí)模型增強(qiáng)隱私性的幾種方法。
● 差分隱私:通過數(shù)學(xué)方法保證模型的預(yù)測結(jié)果不會暴露用戶數(shù)據(jù)。
● 聯(lián)邦學(xué)習(xí):原始數(shù)據(jù)只在本地被使用,不會上傳到云端或分享給其他設(shè)備。
● 加密機(jī)器學(xué)習(xí):整個訓(xùn)練過程全部在加密的空間中進(jìn)行,或者訓(xùn)練數(shù)據(jù)是加密的。
1.4 流水線編排
前面描述的所有機(jī)器學(xué)習(xí)流水線組件都需要有序執(zhí)行或者說編排,這樣眾多組件才能按照正確的順序運(yùn)行。組件的輸入數(shù)據(jù)必須在組件執(zhí)行前就通過計算得到。對這些步驟的編排是通過諸如 Apache Beam、Apache Airflow(參見第 11 章)或 Kubernetes 基礎(chǔ)架構(gòu)中的 Kubeflow Pipelines 等工具(參見第 12 章)來完成的。
數(shù)據(jù)流水線工具在不同的機(jī)器學(xué)習(xí)流水線步驟間協(xié)調(diào),如 TensorFlow ML MetadataStore 的流水線工件倉庫會捕獲每個處理過程的輸出。第 2 章將概述 TFX 的 MetadataStore 并深入學(xué)習(xí) TFX 和它的流水線組件。
1.4.1 為什么使用流水線編排工具
2015 年,谷歌的一群機(jī)器學(xué)習(xí)工程師得出結(jié)論:眾多機(jī)器學(xué)習(xí)項(xiàng)目失敗的一個原因是使用自定義代碼去連接不同的機(jī)器學(xué)習(xí)流水線步驟。3 然而,這些自定義代碼無法輕易地從一個項(xiàng)目遷移到另一個項(xiàng)目。研究人員在其論文“Hidden Technical Debt in Machine Learning Systems”4 中總結(jié)了他們的發(fā)現(xiàn)。作者們在論文中辯稱這些流水線步驟間的膠水代碼通常很脆弱并在超出特定范圍后無法擴(kuò)展。隨著時間的推移,人們開發(fā)了諸如 Apache Beam、Apache Airflow 和 Kubeflow Pipelines 等工具。這些工具可用于管理機(jī)器學(xué)習(xí)流水線任務(wù),允許使用標(biāo)準(zhǔn)的編排工具并對任務(wù)間的膠水代碼進(jìn)行抽象。
3谷歌于 2007 年開始了一個名為 Sibyl 的內(nèi)部項(xiàng)目,該項(xiàng)目的目的是管理內(nèi)部機(jī)器學(xué)習(xí)產(chǎn)品流水線。2015 年,這個話題在 D. Sculley 等人發(fā)布了他們的機(jī)器學(xué)習(xí)流水線文章“Hidden Technical Debt in Machine Learning Systems”后引起了廣泛的關(guān)注。
4D. Sculley 等,“Hidden Technical Debt in Machine Learning Systems”,谷歌公司(2015 年)。
盡管學(xué)習(xí)一個新工具(比如 Beam 或 Airflow)或者一個新框架(比如 Kubeflow),以及建立一套額外的機(jī)器學(xué)習(xí)基礎(chǔ)架構(gòu)(比如 Kubernetes)看起來很麻煩,但投入這些時間會很快得到豐厚的回報。如果不采用標(biāo)準(zhǔn)的機(jī)器學(xué)習(xí)流水線,那么數(shù)據(jù)科學(xué)團(tuán)隊(duì)需要面對不統(tǒng)一的項(xiàng)目設(shè)置、隨意放置的日志文件、各不相同的調(diào)試步驟等數(shù)不完的混亂。
1.4.2 有向無環(huán)圖
諸如 Apache Beam、Apache Airflow 和 Kubeflow Pipelines 等流水線工具使用任務(wù)間的依賴圖來控制任務(wù)的執(zhí)行流程。
如圖 1-2 所示,所有的流水線步驟都是有向的。這意味著從任務(wù) A 開始到任務(wù) E 結(jié)束的流水線,其任務(wù)間的依賴清晰定義了流水線的執(zhí)行路徑。有向圖避免了任務(wù)開始時其依賴項(xiàng)還沒有完成計算的情況。由于我們知道訓(xùn)練數(shù)據(jù)的預(yù)處理必須先于模型訓(xùn)練執(zhí)行,因此通過有向圖的表示,可以避免模型訓(xùn)練在數(shù)據(jù)預(yù)處理完成之前執(zhí)行。
圖 1-2:有向無環(huán)圖示例
流水線圖也必須是無環(huán)的,這意味著圖不能連接至先前已經(jīng)完成的任務(wù)。5 有環(huán)意味著流水線會一直執(zhí)行且永不停止,因此工作流也就永遠(yuǎn)不能完成。
5無環(huán)圖中不能存在直接或間接的環(huán)狀依賴,也就是說 A 依賴 B 的同時 B 也依賴 A。——譯者注
由于這兩個約束條件(有向和無環(huán))的存在,流水線圖被稱為有向無環(huán)圖(directed acyclic graph,DAG)。有向無環(huán)圖是大部分工作流工具最核心的概念。第 11 章和第 12 章將討論更多關(guān)于有向無環(huán)圖的細(xì)節(jié)。
1.5 示例項(xiàng)目
為了能更好地理解本書內(nèi)容,我們提供了使用開源數(shù)據(jù)的示例項(xiàng)目。數(shù)據(jù)集收集了美國消費(fèi)者關(guān)于金融產(chǎn)品的投訴,內(nèi)容上既包含結(jié)構(gòu)化數(shù)據(jù)(分類/數(shù)值數(shù)據(jù)),也包含非結(jié)構(gòu)化數(shù)據(jù)(文本數(shù)據(jù))。數(shù)據(jù)來自美國消費(fèi)者金融保護(hù)局。
圖 1-3 展示了數(shù)據(jù)集中的部分樣本。
圖 1-3:數(shù)據(jù)樣本
這里的機(jī)器學(xué)習(xí)問題是給定關(guān)于投訴的數(shù)據(jù),預(yù)測消費(fèi)者是否對公司的回復(fù)有異議。在本數(shù)據(jù)集中,大約 30% 的消費(fèi)者對回復(fù)有異議,因此數(shù)據(jù)是不均衡的。
1.5.1 項(xiàng)目結(jié)構(gòu)
示例項(xiàng)目已經(jīng)上傳至 GitHub 倉庫,通過下列命令可以克隆該項(xiàng)目。
$ git clone https://github.com/Building-ML-Pipelines\ building-machine-learning-pipelines.git
Python 包版本
本示例項(xiàng)目使用 Python 3.6~3.8、TensorFlow 2.2.0 和 TFX 0.22.0。項(xiàng)目會持續(xù)更新,但無法保證兼容其他編程語言或包版本。
示例項(xiàng)目包含如下部分:
● chapters 目錄包含第 3 章、第 4 章、第 7 章和第 14 章的樣例 notebook;
● components 目錄包含諸如模型定義之類的常用組件的代碼;
● 一條完整的交互式流水線;
● 一個機(jī)器學(xué)習(xí)實(shí)驗(yàn)的示例,其是整條流水線的起點(diǎn);
● 由 Apache Beam、Apache Airflow 和 Kubeflow Pipelines 編排的完整的流水線;
● utility 目錄包含下載數(shù)據(jù)的腳本。
在后面的章節(jié)中,我們將逐步指導(dǎo)你通過必要的步驟將一個基于 Keras 模型架構(gòu)的 Jupyter Notebook 的樣例機(jī)器學(xué)習(xí)實(shí)驗(yàn)轉(zhuǎn)換成完整的機(jī)器學(xué)習(xí)流水線。
1.5.2 機(jī)器學(xué)習(xí)模型
示例深度學(xué)習(xí)項(xiàng)目的核心是由位于 components/module.py 中的 get_model 函數(shù)生成的模型。
模型通過如下特征來預(yù)測消費(fèi)者對于回復(fù)是否存在異議。
● 金融產(chǎn)品
● 子產(chǎn)品
● 公司對于投訴的回復(fù)
● 投訴類型
● 消費(fèi)者所在的州
● 消費(fèi)者所在地郵政編碼
● 消費(fèi)者投訴的內(nèi)容
為了構(gòu)建機(jī)器學(xué)習(xí)流水線,假設(shè)模型架構(gòu)設(shè)計已經(jīng)完成并且不再修改。第 6 章將詳細(xì)討論模型架構(gòu)的細(xì)節(jié)。但實(shí)際上在本書中,模型架構(gòu)是非常小的知識點(diǎn)。本書主要討論的是在模型已經(jīng)存在的情況下該做什么。
1.5.3 示例項(xiàng)目的目標(biāo)
本書將演示持續(xù)訓(xùn)練示例機(jī)器學(xué)習(xí)模型的必要框架、組件和基礎(chǔ)架構(gòu)元素。圖 1-4 展示了本書將在架構(gòu)圖中使用的軟件棧。
圖 1-4:示例項(xiàng)目的機(jī)器學(xué)習(xí)流水線架構(gòu)
本書會盡量保持示例項(xiàng)目中機(jī)器學(xué)習(xí)問題的通用性,以便你將之替換成自己的機(jī)器學(xué)習(xí)問題。構(gòu)建機(jī)器學(xué)習(xí)流水線的結(jié)構(gòu)和基本步驟是不變的,可以很容易地遷移到你的實(shí)際案例中。每個組件將需要一些自定義操作(比如,從哪里讀取數(shù)據(jù)),但正如后面將討論的,這些自定義操作需要被適當(dāng)?shù)叵拗啤?/p>
1.6 小結(jié)
本章介紹了機(jī)器學(xué)習(xí)流水線的概念并解釋了其中的步驟,同時也展示了自動化流水線的優(yōu)勢。本章為后續(xù)章節(jié)做好了鋪墊,并在介紹示例項(xiàng)目的同時簡單介紹了每章的大體輪廓。第 2 章將開始構(gòu)建流水線!
- 現(xiàn)代測控系統(tǒng)典型應(yīng)用實(shí)例
- ABB工業(yè)機(jī)器人編程全集
- Hands-On Artificial Intelligence on Amazon Web Services
- PowerShell 3.0 Advanced Administration Handbook
- 協(xié)作機(jī)器人技術(shù)及應(yīng)用
- HBase Design Patterns
- 快學(xué)Flash動畫百例
- 21天學(xué)通C#
- 控制系統(tǒng)計算機(jī)仿真
- Learning C for Arduino
- 水下無線傳感器網(wǎng)絡(luò)的通信與決策技術(shù)
- 單片機(jī)C語言程序設(shè)計完全自學(xué)手冊
- Statistics for Data Science
- Excel 2007終極技巧金典
- 一步步寫嵌入式操作系統(tǒng)