TensorFlow在工程項目中的應用 公開課視頻+文字轉錄(上) | AI 研習社
本周四,雷鋒網 AI 研習社邀請了跨國 IT 巨頭 Thoughtworks 的資深數據架構師白髮川,主講線上公開課,為大家講解TensorFlow 在工程項目中的應用。
此前,白老師與 Thoughtworks 高級諮詢師佟達接受了雷鋒網的採訪,就新手入門 TensorFlow 容易遇到的一些問題,以及他們的入門經歷,進行了分享。請參考:萬事開頭難!入門TensorFlow,這9個問題 TF Boys 必須要搞清楚。
另外, Thoughtworks 的線上培訓——"TensorFlow & 神經網路演算法高級應用班」,將於下周二在 mooc.ai 上線,由兩位老師授課。報名請。
閑話少說,本次公開課承接對兩位老師的採訪,對兩個話題進行了梳理:
企業大數據平台
TensorFlow 應用場景
這是公開課的錄製視頻:
公開課文字版不方便看視頻的童鞋,可閱讀以下對本次公開課的文字轉錄。
由於篇幅較長,本次公開課的文字轉錄被拆為上下兩部分。本篇為上篇,講的是企業級的大數據平台及其架構。這是由於 TensorFlow 的商業工程應用必以靠得住的大數據基礎設施為前提。
TensorFlow 的應用場景請關注下篇。
白髮川:大家晚上好,歡迎大家這次參加本次公開課,同時也作為 "TensorFlow & 神經網路演算法高級應用班」開題前的宣講。
本次講的是 TensorFlow 在工程方面的應用場景,更多偏向工程上的實踐。也就是說,從工程上來講,一個 TensorFlow 項目在各個方面要做哪些工作。
TensorFlow 作為一個深度學習框架,在整個工程開發的項目中,它只是其中的一部分——我們實際上做開發,面臨的是一個非常龐大的體系。因此我們面臨的問題是:
在整個體系中,我們的工程應該怎樣去開發?
應該怎樣去使用 TensorFlow?
在哪種場景之下,TensorFlow 會是一個比較好的選擇?
自我介紹一下,我是 Thoughtworks 白髮川,之前一直從事大數據,後來我們開始做人工智慧方向的一些嘗試和工作。我們致力於將人工智慧、機器學習、大數據結合在一塊。在研究了了很多相關的機器學習框架之後,我們也做了自己的深度學習框架——deeplearning.scala。它由 scala 編寫,目前是開源的,大家可以了解下。
這是關於我們公司。大家可以在網上了解到,Thoughtworks 是「敏捷」的倡導者。比如說《重構》,還有《Web開發敏捷之道》,這些書都是由我們公司的同事編寫的。
下面進入本公開課的第一個環節。
從大數據開始做人工智慧也好,做其他機器學習相關的項目也好,本質上我們是離不開數據的。因此,怎樣去規劃我們的數據、怎樣去設計我們的架構,是非常重要的。以我的經驗看來,一切不做大數據架構的人工智慧項目,都不會有特別好的效果。
人工智慧項目和數據項目是可以完全獨立開的。假設我們只有幾條數據,倒也可以做人工智慧。但真正面臨生產的時候,如果沒有做底層數據規劃,你的整個人工智慧的效果基本會是負的,不會產生特別大的效果。
在數據方面,從早期到現在,我們經歷了不同的迭代周期:
- 最早期的數據處理方式很簡單,可能就是搞搞 Excel,現場就把數據計算出來了。
慢慢地,我們的數據管理方式會傾向於使用資料庫。多個客戶端連接同一個資料庫,來做數據處理。
再後來我們發明了 Data Warehouse。BI時代,我們的所有數據都是經過 Data Warehouse 之後統一地產生報表。
之後進化到目前的階段,隨著計算機硬體的發展,我們出現了數據湖——Data Lake。數據湖是在 Data Warehouse 之上更加擴充的一個方面,而它為機器學習做了很好的支撐。
在數據分析這一塊,早期大家的需求只是一個數據可視化:我根據數據可視化的結果來做決策、來做判斷,然後給出關鍵決策指導下一步的發展方向。到引入機器學習之後,有一部分相關分析工作其實是讓計算機去做了。當我們的數據計算出結果之後,可以由計算機作出初步的決策給人提供參考,然後再由人來做最終的決策,這也是目前人工智慧方向最常見的方式。
雖然我們在做人工智慧,但還沒有達到不做任何干預、百分之百由計算機出結果的層次.。所以本質上,目前的人工智慧還是對人的一個輔助參考。我們還是需要人來做處理。當然,人工智慧最終的進化方案,我們一定是希望完全靠計算機來做處理,不用人來處理了。
這個架構圖是一個企業界的大數據架構平台。對於一個企業來講,從歷史發展過程中它會有一個非常龐大的 IT 體系,它的數據源遍佈於不同系統之中。在很早的時候我們會提出一個概念叫做數據整合,就是因為同一批次具有相同業務含義的數據在不同的系統裡邊,它的存儲方式、表示方式完全都不一樣。所以為了做這部分工作,誕生了早期的 Data Warehouse。我們以規整化的數據、元數據,把這一批數據做處理。
對於一個企業級的大數據平台,我們除了要做 BI 的這部分工作,還有一個額外的需求,就是機器學習。我們希望我們的大數據架構可以用來支撐機器學習。可以在架構圖中看到,在前面會有數據通道。數據通道可以理解為 BI 里 ETL 的這一部分,但本質上它高於 ETL,對於數據通道來說,它和ETL的差別在於ETL需要對數據做轉換,而數據通道僅僅是同步數據,其次ETL相對是個獨立模塊,而數據通道是平台的一部分,受調度器管理的,比如我們的數據通道的功能可以是爬蟲。
數據湖接下來我們會進入數據湖。數據湖是大數據裡邊提出的一個概念,從本質上來講,它主要負責的是數據存儲,對於數據存儲來講,它在大數據之下,它要解決好幾種問題,即結構化數據、半結構化數據、非結構化數據這些不同數據類型的存儲。
其次的話,它要解決的是數據安全性、數據可靠性。在這個基礎之上,大家目前看到的 Hadoop 的底層數據實現hdfs它也是數據湖會常用到的一種實現。
數據探索
再往下,我們可以看到數據探索。當你成為一個企業級大數據平台之後,會面臨這樣的情況:
我給企業做了數據整合,我們的數據湖都存在了,但在接下來要做機器學習的時候,會發現一個問題——我沒有辦法快速的知道,在企業裡邊我到底需要哪些數據;或者說企業現在已有的這些數據,但是這些數據特別大,我們怎麼才能夠知道目前有哪些數據?都是什麼格式?
在這個之上誕生的服務叫做 data discovery,翻譯過來是數據探索。這一項工作本質上是為數據科學家做準備的。我們在搭建了數據服務平台之後,我們需要做一系列的調研,從數據科學家的角度來審視這批數據,來看它代表的特徵和維度到底能不能給我們提供一個非常好的人工智慧的支撐。
所以,這部分工作更多的是由具有豐富經驗的數據科學家來承擔的。他們需要的就是一個簡單的數據探索工具,因為並不需要全部拿出去。而對於數據湖來講,我們裡面放的數據基本上都是 PB 的。在我們所做的項目裡面,TB 和 TB 以上的數據特別常見。所以對於數據科學家來講, 沒有必要 load 完整的數據,代價太大,更希望的是快速檢索到數據格式,然後哪幾條要列數據出來,看一下這個數據符不符合我的需求,所以在這個之上,我們需要一個數據探索的服務,給他提供這樣的支撐。
另外,本質上來講它還有一個功能:管理數據服務的雲數據。因為我們既然需要快速的查找數據,那麼對於數據湖來講,我們的數據(元數據)是不是需要被管理起來?比如說,如果我們提供的是一個數據平台,從數據通道進來的數據到底是屬於哪一個業務系統的,是怎麼規劃的,都會在裡邊。
Data Warehouse vs. 數據湖再下邊的話到了數據預處理。
它的數據來自於數據湖。這裡提一下數據湖和數據倉庫的差異。在傳統 BI 系統里,數據源到數據存儲之間有一個過程叫做 ETL。做數據規整之後,ETL 會再把數據送入 Data Warehouse,而在大數據架構裡面我們我們會發現,其實我們的基本處理,是在數據湖之上做的數據預處理。
這個時候,數據湖和 Data Warehouse 的區別在哪個地方?
首先對 Data Warehouse 的所有數據都是被規整過的,意味著它的數據是結構化的,結構化就意味著信息被丟失了。丟失的數據,可能對於你的靜態業務需求並不是那麼明顯——比如說我只是出個報表,或者只是做一些統計,求平均之類的計算,那我可能把數據規整了,沒有什麼問題。但如果要做機器學習,我們更希望提取到全量的數據特徵。而一旦數據被規整,很大一部分信息就丟失了。這樣以來,當通過機器學習做特徵提取的時候,就會出現非常不準確的問題。
另外,對 Data Warehouse 來講,它更注重的是對結構化數據的管理。而在大數據之下,其實結構化數據只是我們要處理的一部分數據,並不是全量的。除此之外,我們有非結構化數據和半結構化數據,而對於這種數據的處理,Data Warehouse 並不是特別的有效。
數據湖的概念因此誕生。我們的所有數據都放在數據湖,我們的處理放在數據預處理這一塊。預處理會跟隨我們的業務,當我們需要一個什麼樣的業務的時候,會通過數據預處理來處理。這裡的話,我們把之前提到的工作,從數據通道到數據湖之間的這個位置,挪到了後面的數據預處理。
對於企業來講,我們的組織結構都能良好的運作。因為在 BI、Data Warehouse 來講,會有一個團隊或者說一個角色,專門負責 ETL 這個工作;或者把數據從另外一個地方做處理之後遷移過來。這樣的話,當我們的業務發生變化,我們的整個數據源要從新數據接觸的地方重新清洗過來,重新打通。這一個響應周期會特別長,
而在大數據架構之下,由於有數據湖,這一塊業務發生變更的是我們所做的,挪的只是計算。我們的計算規則發生了變化,但數據湖裡面的數據照樣在裡邊。所以計算的代價肯定是遠遠小於挪數據的。
數據預處理數據預處理之後,會有兩個分支。上邊的分支是在線分析、數據可視化。這一塊來講,都是為了符合和囊括早期我們在做 BI 系統所需要的那些東西。比如說我們要做靜態報表展現,在 BI 系統里最終出來的報表有上鑽和下鑽。這些需求方式其實用在線分析都可以做到。而目前在大數據方面,我們也會把傳統思想、傳統BI 方式裡邊的一些思想借鑒過來,它們是特別優秀的。比如說 Olap 和創建 Cube 的這種方式,在整個數據分析裡邊有非常好的作用。所以目前來講,這一塊我們是可以完全涵蓋的。
下邊是機器學習和決策分析。數據預處理本身並不是做一些靜態的報表分析相關的工作,而數據預處理囊括了特徵提取,這是用來給機器學習做支撐的部分。這樣的話,我們數據預處理出來的分支既可以滿足它靜態的數據分析,也可以滿足我們要做機器學習相關的操作。
最下層有一個服務調度。我們可以看到我們的服務調度,從基數到最終,都是被整個服務調度起來的,就我們會建立一個統一的大數據調度系統,而這樣一個好處在於,所有的任務被調度系統統一調度,會有一個非常好的任務編排按序執行。
另外一種方式。對於早期做 BI 系統時的 ETL 工具,像大家見得比較多的 Kettle 這種工具,相對來講會缺乏調度功能。第一它缺乏調度,第二的話它不是特別友好的支持分布式運行。比如說我們運行一個 Kettle的腳本,它可以把數據從一個數據源抽到另外一個數據源,但本身來講,你這個工具沒法像 Spark 那樣分布到不同節點,並行得做處理。所以,當我們有一個服務調度層的時候,可以把所有的任務全部調度起來。這樣的話,我們既保證了所有的 job 是可被監控的,其次也可以保存一部分狀態,比如說我某一個 job 失敗,我知道從哪個地方再次恢復。當我們有了服務調度,我們能夠拿到它的所有狀態。對於最右邊這塊,我們可以給它做到很好的監控。
企業數據成熟度模型前邊我提到,對於一個企業來講,我們無論是做人工智慧還是做數據分析,前提一定是規劃好它的大數據平台。大數據平台直接決定了後面所有的效果到底好不好。所以我們定義了一個企業數據成熟度的模型。在目前來講,可能很多需求或者說我們所見到的場景,大家都會說我們就是要做人工智慧,我們的目標是做人工智慧。但實際上,從現實情況來講,要到達真正的成熟的人工智慧,它中間有很大的跨度。
那這個跨度到底怎樣去衡量?
在這之上,我們提出一個數據傳輸模型,評估當前你所在的狀態在哪個位置;其次,你想要的是一個什麼結果。
比如說在第一個階段,我們想要知道的,只是從數據裡面發現問題。這時的需求很簡單,我只是做一個訂單報表,展示相關的工具。這個時候,你可能並不會實施人工智慧的一些功能,因為還沒有到達這個層次。你當前所具備的需求,或者說你所具備的數據源,根本不支持你做這件事兒。
有了該評估之後,除了可以梳理出它的現狀,和給它做評估之外,我們還可以根據前邊的整個大數據方案來決定你可以實施到哪一層。前邊我們看到的大數據架構方案,本質上它的每一塊可以獨立出來,作為一個循序漸進的過程。這裡我們可以看到好幾個階段:
首先,看它發生了什麼。
第二,分析它為什麼發生。
第三個階段,知道它將會發生什麼。
這個階段會涉及人工智慧。也就是說,只有到達第三個階段的時候,我們才認為對企業來講,你的所有的業務需求和數據支撐已經到達了人工智慧需要介入的階段。這個時候,我們會在你的大數據平台之上,考慮把你的整個機器學習接入。
所以,達到這種不同階段實現不一樣的功能,也是對數據平台的一個非常嚴格的考核。就是你的每一個階段可以無縫的遞增到下一個階段。之後,當我們預測了將會發生什麼事的時候,我們一定會想怎樣去優化它,這就到了最後一個階段。
當我們的機器有了數據、有了模型,機器學習的整個體系已經非常完善了,就可以達到一個自選型的功能。它可以根據你的數據,找出你自己依靠人的經驗都沒有發現的東西。這是我們希望達到的終極目標。
大數據平台架構在這一節將為大家展示,我們所做過的、或我們看到總結下來的大數據架構的不同實踐方式。
傳統架構
這是一個傳統的架構。在機器學習很早之前有一個過程:做 BI 系統之後會有一個階段——當數據量上來, Data Warehouse 的數據處理會出現瓶頸。這時候,我們需要一種架構,保持原來的業務不變。保持外圍需求,替換底層的技術部分,這樣整體性能會得到提升。這種架構的實現一般會比較簡單。從最簡單來講,就是我們根據左邊的數據源,它可能是資料庫或者其他的 FTP,通過 ETL 工具把數據放到數據存儲層裡邊。在最右邊給大家提供一個和原來效果差不多的服務,在中間的話會有一個數據存儲和一個搜索引擎。這種搜索引擎主要提供檢索的功能。這種傳統架構發展起來之後的話,我們又有了另外一種架構,叫流市架構。
上文提到,傳統架構本身是一個線性的服務。相對而言,它的響應比較慢,ETL 更多是一個定時的。對於定時的數據,我們的接入更多的是面對別人的備份資料庫,或者說,是在業務系統真正把數據落地到資料庫之後,我們才接入的。在這個角度來說,我們的所有數據是嚴重滯後於業務發展的,即業務產生數據。當業務產生數據之後,你需要隔很長時間才能拿到這批數據。
流式架構在這之上我們提出了流式架構。流式架構就是:當數據進來之後,我們直接以流的形式把數據接入,甚至拿到流數據之後,我們把流數據以消息的形式直接推送到前端。這樣能很好地滿足僅僅具有預警類的功能。比如說我是做運維的,那我可能需要一個流式數據,來更好地滿足我當前的一個實質性。
Lambda 架構在流式架構之後,演變出了 Lambda 架構。
前幾年,這個架構在我們所有的系統裡邊、涉及社交大數據架構平台的時候都被廣泛實施。Lambda 架構在很長一段時間都是優先的選擇。它主要分為兩個批次,整合了傳統架構和流式架構的一些優點。在前面的話,對於數據處理這塊它是一樣的,是將數據接入。但在數據接入之後,它會分為兩個部分:
首先,你的數據會進入數據湖,被永久存儲起來。
其次,數據會進入流處理。流處理的數據,根據你的一部分計算結果,立馬會以消息的形式直接推送給前端。流式處理,和上邊的 batch 處理,也就是數據存儲和數據預處理,這一層我們一般稱為 batch job;而下面的流處理,我們稱為實時處理。這兩者的邏輯是一樣的,但面對的數據不一樣。上面數據存儲、數據預處理這一塊,面對的是全量數據;而下面流式處理面對的是增量數據。在 Lambda 架構裡邊有一個技術叫做前端 view 合并,就是我的流式處理是根據增量數據計算出來的結果,立馬就給前端展示;數據進來之後它會觸發一個 batch job,觸發全量計算。當全量計算完成之後,它會把這個結果集和流式處理計算出來的結果集進行合并,保證最終一致性。因為流失處理有可能會出錯,畢竟它是增量計算,那麼全量計算一定要保證最終結果是正確的,所以這個時候會用 bash job 出來的結果去覆蓋流式處理,我們叫它最終一致性,就可以保證數據的正確性。
Kappa 架構
它相對於 Lambda 架構做了一部分的改進:在 Kappa 架構裡邊,我們認為數據都是流式的,就是說我們的所有數據都可以被流式處理。數據接入時,我們的數據進入了消息隊列,那麼它會放入數據存儲裡邊, 同時也會進入流式處理。流式處理就和之前一樣:在做了處理之後以消息的形式推送到前端。
那為什麼在數據存儲這一塊,它沒有了 batch job 這一層?它不再做離線計算,因為我們的所有數據是可重播的,當我們發現某個某一個結果計算不正確的時候,我們需要重算。對於 Kappa 架構來講,它認為重算就是把之前的數據接入這個動作再重複一遍。所以說,它把所有數據都以流式的方式去處理,這樣避免了進行一模一樣的邏輯計算。
我在前面提到, Lambda 架構分為兩部分,一個流式的,一個 batch job 。它們面對的數據集不一樣,但計算邏輯都一樣。而 Kappa 架構就省掉了,把相同這一部分進行了合并。
Unified 架構相比起來,它和 Lambda 架構有一點相似。不同之處在於,它的流式處理變成了模型相關的東西。它是目前,我們做大數據架構和機器學習架構整合起來非常完美的一個架構,在這個架構裡面我們可以很好地把機器學習放過來。 在 batch job 這一層它主要做的是模型訓練。當模型訓練之後,新數據進來,以流式的形式經過模型就會預測出結果。這個結果可以消息的形式被推送出去。這樣的話,在最外層,你就可以拿到流式處理被預算出來的結果。
未完待續,請關注雷鋒網AI 研習社後續整理。
「TensorFlow & 神經網路演算法高級應用班」要開課啦!下周,ThoughtWorks 佟達、白髮川兩位老師主持的 TensorFlow 培訓將上線 mooc.ai,向學員系統性地傳道解惑。
你是否一直希望有個老司機能手把手帶領入門?這就是一次好機會。
ThoughtWorks
授課方 ThoughtWorks 是全球領先的 IT 諮詢公司,聯合國婦女兒童組織、世界衛生組織合作夥伴。總部在芝加哥,42 個辦公室分布在全球的 15 個國家。
2012年,ThoughtWorks 排在 Google,Facebook 之前,被評為全球最難面試的公司。
2016 年,ThoughtWorks 力壓群雄,獲得全球「最佳女性科技人員僱主」獎項。
培訓課介紹:從初級到高級,理論+實戰,一站式深度了解 TensorFlow!
本課程面向深度學習開發者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎實戰技巧開始,一步步教授學員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,並最終掌握一整套基於 TensorFlow 做深度學習開發的專業技能。
兩名授課老師佟達、白髮川身為 ThoughtWorks 的資深技術專家,具有豐富的大數據平台搭建、深度學習系統開發項目經驗。
開課時間:4 月 25 日(星期二)開課,每周二、四晚 20:00-21:00
開課時長:總學時 20 小時,分 10 周完成,每周2次,每次 1個小時
授課地址:http://www.mooc.ai/course/82
線上授課,開放預約!
※微信凌晨又放大招,公眾號文章可添加小程序;蘋果無人車司機培訓文件材料泄露 | 雷鋒早報
※萬事達推指紋識別信用卡,目前已經投入測試
※微信發大招:公眾號群發文章支持添加小程序
※ofo獲螞蟻金服戰略投資,國際化布局又進一步
TAG:雷鋒網 |
※TensorFlow在工程項目中的應用 公開課視頻+文字轉錄(下) | AI 研習社
※TensorFlow在工程項目中的應用 公開課視頻+文字轉錄(上)
※幕上海綿狀血管畸形(附Spetzler、Aaron教授精彩講課視頻) | The Neurosurgical Atlas全文翻譯
※你的課視頻霸屏培訓班手把手教你如何操作YouTube視頻營銷
※《中庸》領讀第3課視頻
※《國學的精神》分主題授課視頻網址
※3個?現代舞基訓課視頻
※形意禪學員上課視頻
※你的課視頻霸屏培訓班為你詳解社交網路視頻營銷的趨勢
※法國美女教師15秒上課視頻全球瘋傳
※墨池學院導師–黃泊雲國畫公開課視頻直播授課第二節
※浙大首屆植物達人訓練營第一課視頻發布
※這個美國哲學教授第一次授課視頻,發布不到10天就有1億人瀏覽
※法國美女教師上課視頻全球瘋傳,有這樣的老師誰還翹課
※古典舞身韻課視頻,妙不可言的美!
※天籟童聲是如何煉成的?八八空間聲樂教師劉恩銘上課視頻曝光!
※霍思燕曬與兒子一起上游泳課視頻,網友秒評:最毒婦人心