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