一分鐘整明白Tensorflow Extended

大數(shù)據(jù)

作者:張相於

本文介紹了基于tf搭建一套通用機器學習平臺的關鍵部分和大體流程,但沒有給出更詳細的介紹。

是KDD 2017 Applied Data Science Paper,作者是谷歌的一大票人,這么多作者,按照經驗來看應該是這個平臺的主要開發(fā)人員。本文介紹的平臺取名Tensorflow Extended,也就是說其核心組件都是使用tensorflow來完成的,可以理解為是基于tensorflow的一次二次開發(fā)。那么這個tfx和tf有什么區(qū)別呢?我的理解,區(qū)別主要在于tf提供的是一套功能,可以用來執(zhí)行模型訓練相關的一系列工作,而tfx是構建在tf基礎之上的一個包含了機器學習整個生命周期的完整系統(tǒng),這個系統(tǒng)不只包含了tf所提供的模型訓練等機器學習相關功能,還提供了如數(shù)據(jù)校驗和驗證、模型熱啟動、線上服務、模型發(fā)布等重要功能。

這篇文章的意義并不在于手把手教你如何搭建一套tfx,而是闡釋了搭建一套tfx系統(tǒng)所需要包含的主要組件,以及這些組件在實現(xiàn)時需要考慮哪些關鍵點,還有作者團隊在這其中積累的經驗教訓。換句話說,更多的是一篇“授人以漁”的文章。對于希望動手實現(xiàn)一套類似tfx這樣通用機器學習平臺的人來說,具有著重要的指導意義。下面將我認為比較有價值的部分做一摘錄和解讀。

整體設計原則

tfx的核心設計原則包括以下幾點:

構建可服務于多個學習任務的統(tǒng)一平臺。這要求系統(tǒng)具有足夠的通用性和可擴展性。支持持續(xù)訓練和服務。這兩個事情看起來簡單,但是如果考慮到其中的風險控制和自動化問題發(fā)現(xiàn)等細節(jié)的話,也并不簡單。人工干預。如何優(yōu)雅地讓人參與整個流程,解決機器不好解決的問題,也是一個挑戰(zhàn)。可靠性和穩(wěn)定性。這里的可靠性和穩(wěn)定性不只指的是服務不崩潰這個級別,還包括在數(shù)據(jù)層面發(fā)生問題的時候服務的效果依然可以保持穩(wěn)定可靠。

數(shù)據(jù)分析、轉換和驗證

數(shù)據(jù)是機器學習系統(tǒng)的核心,如何處理數(shù)據(jù)決定了整個模型的質量,這部分作者介紹了數(shù)據(jù)分析、轉換和驗證方面的實現(xiàn)要點。

數(shù)據(jù)分析

數(shù)據(jù)分析指的是系統(tǒng)會對進入到系統(tǒng)的數(shù)據(jù)進行自動地統(tǒng)計分析,例如數(shù)據(jù)值的分布,特征在樣本上的分布,每個樣本上特征的分布等等。同時還支持對數(shù)據(jù)做分片統(tǒng)計,例如分別對正負樣本的統(tǒng)計,對來自不同國家數(shù)據(jù)的統(tǒng)計,等等。這里的難點之一在于,在大數(shù)據(jù)和時效性要求下,很多數(shù)據(jù)統(tǒng)計的精確值是不好計算的,所以很多時候 需要使用流式近似算法來計算足夠好的近似值。

數(shù)據(jù)轉換

所謂數(shù)據(jù)轉換,指的是從原始數(shù)據(jù)到可訓練特征之間的種種數(shù)據(jù)變換,例如離散化、特征映射等等。里面還提到一些對稀疏特征的處理細節(jié)。

這部分比較重要的一點是保證訓練和服務時數(shù)據(jù)轉換的一致性,這兩者不一致往往會導致模型效果變差。tfx的做法是將數(shù)據(jù)轉換也作為模型的一部分輸出,從而避免這種不一致的發(fā)生。換句話說,是通過在訓練階段和服務階段復用同樣的代碼邏輯來保證一致性,而不是兩個地方分別實現(xiàn)不同代碼,這是很重要的一點。從我的經驗來看,做不到這一點的話,不僅可能會出現(xiàn)特征轉換不一致的問題,還會使得開發(fā)工作量增大,并且增加正確性驗證的工作量。

數(shù)據(jù)驗證

所謂數(shù)據(jù)驗證,指的是進入系統(tǒng)的數(shù)據(jù)是否符合預期,是否存在異常。tfx的做法是引入一個數(shù)據(jù)schema的結構,用來指定對一份數(shù)據(jù)的約束,例如數(shù)據(jù)的類型、是否必填、最大最小值等等。這么做的目的是防止不符合預期的數(shù)據(jù)進入到模型訓練階段,影響模型的質量。有了這個schema,就可以對進入系統(tǒng)的數(shù)據(jù)做驗證,進一步,還可以給出建議,尤其是在數(shù)據(jù)本身發(fā)生了變化,原有的約束應該發(fā)生改變的情況下,系統(tǒng)可以自動發(fā)現(xiàn)可能的變化,反饋給開發(fā)者,讓開發(fā)者決定是否接納系統(tǒng)提出的改進建議。下圖是一個使用schema進行數(shù)據(jù)驗證的例子,圖中紅色內容是驗證后給出的建議。

上面提到的約束條件可以進行擴展,但是作者給出的建議是,過于復雜的約束常常難以給出適合的約束條件,而且如果數(shù)據(jù)發(fā)生變化會難以維護。出于是的數(shù)據(jù)驗證更好地服務于系統(tǒng),并且方便用戶使用,下面是一些核心的設計原則:

用戶應該一眼就能看明白什么出了問題,以及問題的影響面。異常應該簡單明了,并且用戶明白如何處理。例如,你可以說某個特征值超出了某個范圍,但不要說某兩個特征的KL散度超過了閾值。根據(jù)數(shù)據(jù)的自然變化提示給出新的schema建議。很多數(shù)據(jù)會隨著時間發(fā)生變化,所以需要考慮這一點。希望用戶能夠像對待bug一樣對待數(shù)據(jù)異常。所以,tfx允許數(shù)據(jù)異常像bug一樣被記錄、追蹤和解決。

用戶還可以通過追蹤異常的變化情況來發(fā)現(xiàn)特征工程方面的改進空間。

模型訓練

模型訓練這部分沒有太多值得一提的,主要就是在用tensorflow做訓練。值得一提的是模型的熱啟動(warm start)問題。熱啟動解決的是模型需要長時間訓練才能收斂的問題,這個時候可以用一個已經訓練好的模型,從中選取一些共同的特征權重,作為模型的初始狀態(tài),這樣可以使得模型更快收斂,從而加快訓練速度。為了使得這部分邏輯通用化,tfx將其進行了抽象開發(fā),并進行了開源(可能是開源在了tf里,這部分沒有驗證)。

模型評估和驗證

機器學習系統(tǒng)是個多組件復雜系統(tǒng),這使得 bug有很多地方可能發(fā)生,而這些bug很多時候都不會導致系統(tǒng)崩潰,而且人又難以發(fā)現(xiàn),所以需要對模型進行評估和驗證。

定義“好”模型

作者將好的模型定義為可以安全提供服務(safe to serve)并且具有預期的預測質量(desired prediction quality)。其中安全提供服務指的是模型在服務時不會因為各種原因崩潰掉,例如占用太多資源或數(shù)據(jù)格式錯誤。而預測質量指的就是模型預測的準確率,這與業(yè)務的效果息息相關。

驗證的敏感度

模型驗證面臨的一個挑戰(zhàn)在于確定驗證的敏感度。如果過于敏感,數(shù)據(jù)稍有波動就報警,會導致頻繁報警,最終人們會忽略報警;而如果過于不敏感,則會漏掉問題。作者的經驗是,模型一旦出問題一般會導致各種指標的重大變化,所以敏感度可以設的粗一些。當然這個比較業(yè)務相關,還是要根據(jù)自己 的業(yè)務來決定。

分片驗證

除了對模型做整體驗證,有時可能還需要對數(shù)據(jù)的某個分片做驗證。例如針對男性用戶的驗證等等。這對于模型的針對性細致評估和優(yōu)化很有意義。

極客網企業(yè)會員

免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現(xiàn)的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。

2017-11-15
一分鐘整明白Tensorflow Extended
作者:張相於 本文介紹了基于tf搭建一套通用機器學習平臺的關鍵部分和大體流程,但沒有給出更詳細的介紹。 是KDD 2017 Applied Data Sc

長按掃碼 閱讀全文