在剛剛過去的 DevFest 上海站,Google 資深工程師顧仁民,分享了 TensorFlow Extended 如何幫助開發(fā)者快速落地項目,解決數(shù)據(jù)驗證,數(shù)據(jù)轉(zhuǎn)換,模型分析,部署上線等問題。
身邊的 TensorFlow 示例
上圖是一副海洋區(qū)域內(nèi)船只活動軌跡圖,其中每個船的活動點都是一個亮點,可以看到人類在海洋區(qū)域的活動非常頻繁。我們可以通過船只運行的軌跡了解到其深處的奧秘。假如有一艘船運行的軌跡是轉(zhuǎn)來轉(zhuǎn)去的,而不是直接從 A 點開到 B 點,其實它是在捕魚。我們根據(jù)這個軌跡可以判斷出這艘船是貨船或者是某一種特別的漁船,并用機(jī)器學(xué)習(xí)的方式來對船只的軌跡進(jìn)行分類。
根據(jù)這一結(jié)論,我們可以進(jìn)行進(jìn)一步的環(huán)境保護(hù)的操作,從而保證魚不會被過度捕撈。
除此之外,還有一些形象的示例,如關(guān)于保險公司商業(yè)策略:保險公司可以通過TensorFlow,針對一些比較容易發(fā)生事故的司機(jī),特定地增加一定比率的保費。
關(guān)于汽車拍賣定價:TensorFlow 可以幫助企業(yè)快速地通過圖片完成汽車相關(guān)的各種車況檢查,也包括理賠信息檢查等。
上圖中給出的是應(yīng)用了 TensorFlow 的 Google 用例,如翻譯、語音生成、醫(yī)療,以及節(jié)能等,他們有各自的意義,比如根據(jù)用戶實際情況,節(jié)能用在數(shù)據(jù)中心最大可以節(jié)約 40% 。
一起進(jìn)入 TensorFlow Extended 階段
機(jī)器學(xué)習(xí)為我們帶來了很多便利,但上面的三個示例具體應(yīng)該如何實現(xiàn)呢?我們可以先想想機(jī)器學(xué)習(xí)的代碼層面是什么樣子。
用過 Keras 的工程師會比較清楚,它從代碼上看比較簡單。
再復(fù)雜一點的 Wide & Deep。可能大家很多時候需要做一個機(jī)器系統(tǒng)去做推薦工作,這個稍微有點復(fù)雜,但要實現(xiàn)這樣一個模型要多少代碼呢?
只有圖中所示的這些,直接就可以上手了!所以,可以認(rèn)為以往我們認(rèn)為最難的機(jī)器學(xué)習(xí)核心部分的模型代碼,實際上最終的量都比較小。
什么是 TensorFlow Extended ?
在機(jī)器學(xué)習(xí)里,我們非常關(guān)注模型代碼,而 TensorFlow Extended ,不只是模型。
TensorFlow Extended 解決了哪些問題呢?前面提到,機(jī)器學(xué)習(xí)的代碼很簡單,但為了實現(xiàn)機(jī)器學(xué)習(xí),開發(fā)者日常需要花費大量的人力在數(shù)據(jù)收集、配置、機(jī)器管理等各種各樣的事情上,反而曾經(jīng)認(rèn)為最難的機(jī)器學(xué)習(xí)的模型代碼部分是最簡單的,那么這些需要花費外圍力量的工作我們是必須鋪人力去做,還是能夠通過其他方式實現(xiàn),從而讓項目快速實施落地呢?
TensorFlow Extended 就是 Google 推出的一個能夠幫助解決這些問題,幫助開發(fā)者實現(xiàn)快速實施落地項目的有效工具。
TensorFlow Extended 可以解決上圖所列的一部分問題,雖然還有很多模塊還沒開源,但將會陸續(xù)開源出來,例如在上圖中出現(xiàn)的最底層的儲存層、管理層等工作。
如何準(zhǔn)備 TensorFlow Extended 的數(shù)據(jù)?
TensorFlow Extended 可以分為四個部分。我們知道在機(jī)器學(xué)習(xí)中,有人工智能、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等多個概念,機(jī)器學(xué)習(xí)可以認(rèn)為是數(shù)據(jù)驅(qū)動的智能,所以數(shù)據(jù)是非常重要的,它本質(zhì)上是放入數(shù)據(jù),產(chǎn)出模型,中間有些算法。
但如果數(shù)據(jù)是垃圾數(shù)據(jù)的話,出來的模型肯定也是有問題的。如果再加上迭代,用模型再去改進(jìn)它獲取新的數(shù)據(jù),那相當(dāng)于錯上加錯,所以這會進(jìn)入一個惡性循環(huán),效果會越來越差。
怎樣防止這個問題?
要在第一步數(shù)據(jù)問題上做保證,這也是 TensorFlow Extended 的作用。舉例說明它的作用:我們首先在 TensorFlow Extended 中收集一部分(比如一天)的數(shù)據(jù),假設(shè)第一天數(shù)據(jù)可能有錯,也可能是正確的,所以需要人工檢查來確保無錯,形成一個好的數(shù)據(jù)集,作為以后的參考。
怎樣檢查數(shù)據(jù)集是好還是壞?
一個方法是逐條查看,另一個方法是查看統(tǒng)計信息,此時,使用 TensorFlow Extended 可視化檢查相對比較方便,能在下方看到它的最大值、最小值、均值、方差等相關(guān)統(tǒng)計信息。
人工檢查信息后,我們還可以檢查得更復(fù)雜一些。圖中紅色的部分能告訴我們哪些數(shù)據(jù)可能有問題,不一定真的有問題,但從統(tǒng)計的角度這些數(shù)據(jù)可能屬于離群數(shù)據(jù),是比較特別的數(shù)據(jù),TensorFlow Extended 會提示人工進(jìn)行更詳細(xì)的檢查。
待這些檢查工作完成后,基本可以認(rèn)為第一天的數(shù)據(jù)是比較干凈、比較正確的。然后我們可以根據(jù)這個數(shù)據(jù)生成一個相對更固定的 schema ,形成刻劃后的第一天的數(shù)據(jù)。當(dāng)然還可以進(jìn)一步細(xì)調(diào)這一 schema 并將之用在其他地方,如 TensorFlow 這個場景上。
解決好第一天的數(shù)據(jù)后,進(jìn)入第二天,我們假設(shè)第二天的數(shù)據(jù)肯定是對的,但是有可能是特別的,這有兩種情況:
第二天跟第一天不一樣,模型需要調(diào)整。
第二天的數(shù)據(jù)是臟的。
怎樣發(fā)現(xiàn)這個問題?
第二天的數(shù)據(jù)也可以生成 stats 數(shù)據(jù),我們可以在 TensorFlow Extended 中把兩天的數(shù)據(jù)合在一起,如將第一天和第二天的數(shù)據(jù)一起展現(xiàn),來查看其均值、方差等各種指標(biāo)是否匹配,如不匹配,說明第一天和第二天的數(shù)據(jù)在統(tǒng)計上的分布情況差異較大,則第一天訓(xùn)練的模型不太能用在第二天。我們也可以更詳細(xì)的去查看很多可視化的解釋。
當(dāng)查看完后,我們還要再進(jìn)一步的看第一天和第二天是否還有較大的差異。除去可視化,如果想自動化這一過程,或不頻繁看圖表,該怎么辦呢?用 stats 去檢查差異性。比如,把第一天的 stats 和第二天的 stats 進(jìn)行比較,如第一天統(tǒng)計出的值域是 0-100,第二天為120,說明最大化發(fā)生了變化,有可能發(fā)生了不太正常的事情。
接下來是Data validation,有可能需要針對模型轉(zhuǎn)換的數(shù)據(jù)、數(shù)據(jù)轉(zhuǎn)換的數(shù)據(jù),包括線上設(shè)定的數(shù)據(jù)等進(jìn)行該工作, TensorFlow Extended 有多種處理方式可以完成這一驗證。
TensorFlow Extended 模型出錯如何解決?
數(shù)據(jù)整理完成后是 TensorFlow 中與機(jī)器學(xué)習(xí)相關(guān)的如分桶,或者一些 NLP 上做特征交叉的工作。
下面是 TensorFlow Extended 非常有用的一點,可能開發(fā)者使用單一模型不能解決所有的問題,需要用多個機(jī)器學(xué)習(xí)模型拼接起來才能解決一個大的問題。如做圖象識別類、文本識別類的工作,第一步要建立一個檢測模型,第二步做識別模型對行里做序列檢測,接下來進(jìn)入到機(jī)器學(xué)習(xí)核心代碼部分去做訓(xùn)練。
此時開發(fā)者可能會面臨一個問題:這個模型有可能是錯的,或者說數(shù)據(jù)有可能還是錯的,或者說這個模型定義是有問題的,沒有表達(dá)出這個數(shù)據(jù)的一些特別的特征出來。此時,我們需要去做一些分析,要建立適合用來分析的版本,然后進(jìn)入這個模塊。
以一個典型的例子為例,刻劃所做工作是否準(zhǔn)確有幾個指標(biāo),但這幾個指標(biāo)是針對所有測試集數(shù)據(jù)的宏觀指標(biāo),它只能說明總體是怎么樣的情況,就像一場考試,老師給給出的總分?jǐn)?shù),無法說明答題者選擇題還是填空題做的好。如果我們知道哪一部分做的好、哪一部分做的不好,就可以針對做的不好的部分進(jìn)行深挖,下次可以做的更好一點,這是 TensorFlow Extended 的一個重要功能,它可以告訴開發(fā)者更細(xì)致的信息。
下面有幾個例子:
1. 打車的場景,它可以體現(xiàn)上午比較好還是下午比較好,在高峰時間數(shù)據(jù)比較多,低谷時間數(shù)據(jù)比較小,我們可以用這樣一個工具很快的去分析出到底哪些不對。
2. 電商的場景,如果業(yè)務(wù)在大城市表現(xiàn)很好,但是在中小型城市表現(xiàn)不好,是不是中小型城市數(shù)據(jù)不夠均勻,參數(shù)刻劃的不夠好等等問題,TensorFlow Extended 可以幫助你從數(shù)據(jù)切片的角度來分析到底哪些出了問題。
模型不可能一直不變,是要進(jìn)行迭代更新的。迭代時,比如上個月的版本和本月的版本,兩個模型是有差異的,原因可能是數(shù)據(jù)產(chǎn)生了變化,算法產(chǎn)生了變化,或者一些別的特殊的業(yè)務(wù)規(guī)則的變化等各種各樣的原因。
這時如果能跟蹤隨著時間變化,這一機(jī)器學(xué)習(xí)小組的產(chǎn)出,或者說模型效果是越來越好,還是越來越不好,還是一直處于比較穩(wěn)定的狀態(tài) —— 那將是比較好的情況。
我們可以從時間軸上跟蹤多個版本來進(jìn)行自動測試,到底這個系統(tǒng)的產(chǎn)出是不是一直變得更好,如果變得更好,我們可以看到哪個時間點開始變得更好了,可以總結(jié)出該時間段內(nèi)做了怎樣的工作使得模型變得好了,這樣的話寫報告給老板,這個工作做的意義;還有一種情形是昨天跑的很好,今天反而不好了,我們可以反思一下這段時間系統(tǒng)上線了什么東西,適當(dāng)?shù)恼{(diào)整模型或者修改特定的BUG,幫助我們第一時間找到模型哪里變得不好。
模型部署上線需要考慮的問題
模型從時間、數(shù)據(jù)切片等角度效果都比較好之后,說明開發(fā)工作已經(jīng)做得比較好了,需要考慮上線的問題。
上線我們保存為另一個更精簡的版本,這時再用 TensorFlow 就可以直接部署使用了,當(dāng)然部署的時候可以結(jié)合里面的一些工具直接進(jìn)行部署等,這些資源管理類的開源框架都可以幫開發(fā)者完成一些事情。
我們現(xiàn)在提供兩種部署方式,一種叫 gRPC,另一種是 RESTful。
所有東西做完之后要做一個回饋,日志是一個公司非常寶貴的資源,如果信息可以回饋到一開始最上面或者更上游一層,會有助于更良性的循環(huán)。
當(dāng)然 TensorFlow Extended 在這里的開源可能還不夠充分,但如果開發(fā)者可以結(jié)合自己公司已有的處理機(jī)制去做這些環(huán)節(jié),再進(jìn)入下一個迭代循環(huán)的話,可以幫助開發(fā)者第一時間去發(fā)現(xiàn)業(yè)務(wù)系統(tǒng)是不是發(fā)生了一些狀況。
基本上走完整個流程后,便可以結(jié)合人工和自動的方式來確保機(jī)器學(xué)習(xí)整個處于一個良性的循環(huán)當(dāng)中。這就是 TensorFlow Extended 體現(xiàn)出來的價值。
現(xiàn)在上圖所示是 TensorFlow Extended中已經(jīng)開源的四個部分。還有更多的東西會陸續(xù)地開放,當(dāng)然還會結(jié)合 TensorFlow 資源調(diào)度類的框架做一些更深度的整合。
TensorFlow Extended 能夠在數(shù)據(jù)驗證即轉(zhuǎn)換,模型分析、部署上線等環(huán)節(jié)幫助開發(fā)者降低人力和投入的消耗,從而實現(xiàn)項目的快遞實施落地,除此之外,TensorFlow 還在對日常開發(fā)中更多需要消耗大量人力及資源的模塊進(jìn)行改善和開發(fā),并將之開源供開發(fā)者使用,希望開發(fā)者可以持續(xù)關(guān)注。
-
人工智能
+關(guān)注
關(guān)注
1817文章
50098瀏覽量
265372 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8553瀏覽量
136948 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5599瀏覽量
124398
原文標(biāo)題:TensorFlow Extended 幫你快速落地項目
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
《HarmonyOS第一課》煥新升級,賦能開發(fā)者快速掌握鴻蒙應(yīng)用開發(fā)
【免費報名】4月11日,Ubuntu開發(fā)者創(chuàng)新大賽落地培訓(xùn)(重慶站)
OpenHarmony開發(fā)者文檔
誠邀報名丨首期OpenHarmony開發(fā)者成長計劃分享日
HDC 2022 開發(fā)者主題演講與技術(shù)分論壇干貨分享(附課件)
喜報|HarmonyOS開發(fā)者社區(qū)連獲業(yè)內(nèi)獎項,持續(xù)深耕開發(fā)者生態(tài)
提出一個快速啟動自己的 TensorFlow 項目模板
AI開發(fā)平臺如何幫助嵌入式開發(fā)者加速應(yīng)用產(chǎn)品化落地
TensorFlow Community Spotlight獲獎項目
OPPO開發(fā)者大會:OPPO將持續(xù)為開發(fā)者提供幫助
openEuler Summit開發(fā)者峰會:歐拉社區(qū)與開發(fā)者持續(xù)活躍 原創(chuàng)項目代碼倉新增50%
HUAWEI HiAI Foundation端云協(xié)同助力開發(fā)者快速上線新業(yè)務(wù)
Flutter 中國開發(fā)者大會 | Flutter Forward Extended China
涂鴉開發(fā)者大會即將開幕,賦能開發(fā)者打造IoT發(fā)展新引擎
TensorFlow Extended如何幫助開發(fā)者快速落地項目
評論