0
本文作者: 三川 | 2017-04-12 18:09 |
作為目前最普及的深度學(xué)習(xí)框架,TensorFlow 實(shí)不必多做介紹。
無論國內(nèi)國外,有相當(dāng)數(shù)量的程序員以 TensorFlow 入門深度學(xué)習(xí)開發(fā),逐步走上職業(yè)機(jī)器學(xué)習(xí)工程師的道路。然而,TensorFlow 有一定的使用門檻。不管是編程范式,還是數(shù)學(xué)統(tǒng)計(jì)基礎(chǔ),都為非機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)背景的伙伴們帶來一定的上手難度,更不要提處理不同任務(wù)時(shí)需面對的各類算法模型。
鑒于此,雷鋒網(wǎng)將與跨國 IT 服務(wù)巨頭 ThoughtWorks,聯(lián)合舉辦線上培訓(xùn)課程“TensorFlow & 神經(jīng)網(wǎng)絡(luò)算法高級應(yīng)用班”,將于 4 月 25 日星期二開課。
開課前夕,兩位授課老師——ThoughtWorks 高級咨詢師佟達(dá)、數(shù)據(jù)架構(gòu)師白發(fā)川接受了雷鋒網(wǎng)的采訪,與大家分享新手入門 TensorFlow 容易遇到的一些問題,以及他們的入門經(jīng)歷與使用體驗(yàn)。詳見下文。
佟達(dá),哈工大信息與通信工程碩士,在校時(shí)獲得美國數(shù)學(xué)競賽建模一等獎(jiǎng)。當(dāng)年加入 TW 咨詢團(tuán)隊(duì)時(shí),創(chuàng)下最年輕成員的記錄。現(xiàn)任 ThoughtWorks 高級咨詢師,中國區(qū)數(shù)據(jù)團(tuán)隊(duì)資深技術(shù)專家。
白發(fā)川,ThoughtWorks 數(shù)據(jù)架構(gòu)師,深度學(xué)習(xí)框架 deeplearning.scala 貢獻(xiàn)者。設(shè)計(jì)實(shí)現(xiàn)了金融、工業(yè)、互聯(lián)網(wǎng)等多個(gè)領(lǐng)域的大數(shù)據(jù)平臺建設(shè)和數(shù)據(jù)處理。
下面,我們來看兩位老師對入門 Tensorflow 的建議,以及他們的經(jīng)驗(yàn)之談。
新手入門深度學(xué)習(xí),選擇 TensorFlow 有哪些益處?
佟達(dá):首先,對于新手來說,TensorFlow的環(huán)境配置包裝得真心非常好。相較之下,安裝Caffe要痛苦的多,如果還要再CUDA環(huán)境下配合OpenCV使用,對于新手來說,基本上不折騰個(gè)幾天是很難搞定的。
其次,基于TensorFlow的教學(xué)資源非常多,中英文的都有,這對于新手也是非常有幫助的。Google做社區(qū)非常有一套,在中國有專門的一群人,會在第一時(shí)間把Google的開發(fā)者相關(guān)的進(jìn)展翻譯成中文。
另外,由于有Google背書,TensorFlow從長期演進(jìn)來看,基本上可以保證這個(gè)技術(shù)不會曇花一現(xiàn)。對于一個(gè)深度學(xué)習(xí)新手來說,學(xué)習(xí)任何一個(gè)工具,都有成本,如果剛學(xué)會,這個(gè)工具就沒人用了,這個(gè)沉沒成本還是很高的。
白發(fā)川:TensorFlow分為圖和session兩個(gè)部分,因?yàn)闃?gòu)建和執(zhí)行在不同的階段,所以很好的支持了模型的分布式,所以學(xué)習(xí)TF可以比較好的理解模型的分布式計(jì)算,另外TF支持直接從分布式文件系統(tǒng),例如HDFS系統(tǒng)讀取數(shù)據(jù),所以可以說TF是接通機(jī)器學(xué)習(xí)和大數(shù)據(jù)的一個(gè)橋梁。
佟達(dá):第一個(gè)困難應(yīng)該是來自編程范式的變化,因?yàn)門ensorFlow是聲明式開發(fā)方式,通過Session真正執(zhí)行程序,這和常見的開發(fā)語言編程范式不太一樣。如果是曾經(jīng)有過函數(shù)式編程的Lazy Evaluation經(jīng)驗(yàn),接受起來會好一點(diǎn)。
當(dāng)掌握了基本的TensorFlow操作之后,就要使用TensorFlow做些真正有意義的事情。這時(shí)候的一大困難在于,TensorFlow的報(bào)錯(cuò)信息不那么直觀,如果執(zhí)行出錯(cuò),新手很難從一大堆調(diào)用棧中找到有用的信息。
白發(fā)川:首選遇到的應(yīng)該是數(shù)學(xué)的知識,TF本身是一個(gè)深度學(xué)習(xí)的框架,和我們常規(guī)的程序框架例如Spring,Hibernate之類的框架定位不太一樣,會偏向數(shù)學(xué)部分一點(diǎn),例如矩陣計(jì)算,求導(dǎo)等,雖然TF已經(jīng)封裝了對應(yīng)的計(jì)算的API,但是我們還是需要知道這些概念性的知識,這樣才知道應(yīng)該用什么API。
其次TF通過圖的構(gòu)建和計(jì)算部分分離實(shí)現(xiàn)模型的分布式,這一塊的理解對初學(xué)者來說有時(shí)候也不太容易。
學(xué)習(xí)遇到困難之后,有哪些途徑可以尋求幫助?
佟達(dá):如果身邊有人可以提供指導(dǎo),直接尋求幫助一定是最有效的。如果身邊沒有這樣的人可以提供幫助,那么StackOverflow是在線尋求幫助的首選。Google的TensorFlow開發(fā)團(tuán)隊(duì)會有人專門在StackOverflow上回答問題,當(dāng)然除了Google的人,還有很多熱心的開發(fā)者提供幫助,比如說我(笑)。
白發(fā)川:目前TF的中文資料相對匱乏,所以優(yōu)先的參考途徑肯定是TF的官方doc文檔,目前極客學(xué)院對TF官方文檔做了漢化翻譯,不過相對會比官方的延后一點(diǎn)。
佟達(dá):資源太多了,比如Udacity的Deep Learning課程,Coursera上的Machine Learning課程,還有Stanford提供的課程錄像,比如CS231n和CS224n。另外,被稱為深度學(xué)習(xí)圣經(jīng)的《Deep Learning》也在網(wǎng)上(deeplearningbook.org)免費(fèi)提供。
白發(fā)川:Stanford目前有很多針對機(jī)器學(xué)習(xí)的課程,例如CS231N,還有針對TF的CS20SI,這些都是很好的課程。
是否推薦新手從 Keras 入手?除 Keras,還有哪些適配 TensorFlow 的第三方工具推薦新手使用?
佟達(dá): TensorFlow的API比較底層,有時(shí)候要做一件很簡單的事情,要寫很多輔助代碼。而Keras的接口設(shè)計(jì)非常簡潔,做同樣的事情,Keras的代碼大概是TensorFlow的三分之一到五分之一。不過我認(rèn)為新手對兩者都應(yīng)該學(xué)習(xí)一下,這樣對于理解原理更有幫助。事實(shí)上,我甚至推薦連TensorFlow都不用,先用純Python自己做一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)。
除了Keras之外,tf slim,tflearn等都是早期嘗試簡化TensorFlow的工具,不過自從1.0開始,TensorFlow官方支持Keras,估計(jì)以后Keras會成為主流。
另外,TensorBoard是新手必須學(xué)會使用的,這個(gè)工具有非常好的可視化輔助工具,幫助工程師調(diào)試模型以及訓(xùn)練過程。tfdbg是1.0之后發(fā)布的調(diào)試工具,可以在每一個(gè)step中實(shí)時(shí)查看數(shù)據(jù)變化。不過這個(gè)工具目前能做的還不多,而且還有性能問題,開調(diào)試模式和非調(diào)試模式內(nèi)存相差好幾倍,所以還有很大的提升空間。
白發(fā)川:Keras相比TF來說封裝的更好,可以說API更加工程化,所以如果說對于機(jī)器學(xué)習(xí)完全沒有概念,Keras是一個(gè)不錯(cuò)的選擇。目前有很多圍繞TF進(jìn)行封裝的框架或者工具,例如Keras本身就是對TF的包裝,其次TF Learn等也可嘗試。
能不能講講你們當(dāng)初上手 TensorFlow 的經(jīng)歷?學(xué)習(xí)過程中都遇到了哪些困難,又是如何解決的?
佟達(dá):我在使用TensorFlow之前,使用過其他一些機(jī)器學(xué)習(xí)/深度學(xué)習(xí)框架,比如主要用于語音識別的Kaldi,圖像識別的Caffe,還有Spark MLlib,DeepLearning4j等。所以上手TensorFlow并沒有帶來特別大的困難。
當(dāng)用TensorFlow做的事情越來越復(fù)雜之后,我開始嘗試擴(kuò)展TensorFlow,比如寫一些自定義的Op。在TensorFlow中添加自定義Op需要用C++實(shí)現(xiàn),編譯好之后,在Python里面講動(dòng)態(tài)庫鏈接進(jìn)來才能使用。這一過程還是有些復(fù)雜,尤其是C++的代碼有問題需要調(diào)試,需要使用lldb(llvm的debug工具,類似gdb),這對開發(fā)這的要求比較高。另外TensorFlow的編譯使用的是Bazel,這是谷歌開源的一個(gè)多語言項(xiàng)目管理工具,要想把自定義的Op編譯出來,還需要花點(diǎn)時(shí)間研究Bazel。
實(shí)際上,Google很成功的把TensorFlow封裝的很好,開箱即用,然而,框架本身的復(fù)雜度還是很高,一旦你想要深入進(jìn)去,還是需要下很大功夫。
白發(fā)川:TF不是我接觸的第一個(gè)深度學(xué)習(xí)框架。我是從大數(shù)據(jù)做起,到后來的開始用Spark MLlib做開發(fā),也使用過h2o和deeplearning4j這些框架,最后才接觸TF的。所以對于我來說,更多的是學(xué)習(xí)TF的API設(shè)計(jì)相關(guān)的改變,以及對比其他框架TF做了哪些差異化的地方。對于API這一塊,直接參考TF的Doc就是最好的方法。
不過我可以介紹一下入門到機(jī)器學(xué)習(xí)的經(jīng)歷,我最開始的工作也是和大多數(shù)人一樣,從事web開發(fā),或者mobile的開發(fā),所以我的情況應(yīng)該和大多數(shù)人相同,后來我開始接觸到機(jī)器學(xué)習(xí)的時(shí)候發(fā)現(xiàn)和之前的思維差別挺大的,首先在我們從事一般的像mobile之類的開發(fā)的時(shí)候,我們并不會關(guān)心什么是矩陣的逆,什么是函數(shù)的導(dǎo)數(shù),更加不會關(guān)心什么是鏈?zhǔn)角髮?dǎo),而在機(jī)器學(xué)習(xí)里面,這些都是基礎(chǔ),所以我又重新?lián)旎亓舜髮W(xué)的線性代數(shù)和微積分再次過了一遍。
TF是個(gè)深度學(xué)習(xí)框架,所以使用TF的時(shí)候不可避免的要理解什么是隱層,什么是激活函數(shù),激活函數(shù)有哪些,以及如何定義損失函數(shù)等等這一些概念,對于這一塊我當(dāng)時(shí)除了調(diào)研一些書籍外也通過看stanford的一些課程來學(xué)習(xí),當(dāng)然過程中也和很多同行進(jìn)行交流和總結(jié),特別是對于調(diào)參這一塊,除了學(xué)習(xí)之外更多的需要自己進(jìn)行實(shí)踐。
TensorFlow 升級到 1.0 版本之后,感覺到了哪些提升?
佟達(dá):對我來說,TensorFlow 1.0最重要的變化在于高階API,比如Estimator,以及和Keras的集成,這些改變可以大幅度的減少我們構(gòu)建模型的代碼量。
另外,1.0的API也經(jīng)過了一些調(diào)整,這導(dǎo)致一些舊代碼和新版本不兼容,不過從長期維護(hù)來看,1.0的API有更好的一致性,對于開發(fā)者來說,還是利大于弊。
白發(fā)川:首先相比之前的版本,1.0的速度肯定是變快了,這個(gè)官方也明確的提到了,并且也給出了一定的參考指標(biāo),TF 1.0加入了XLA,這也是為未來性能優(yōu)化做的基礎(chǔ)。
除了性能方面的體驗(yàn)外,在開發(fā)中,TF的API進(jìn)行的很大的修改,相比之前來說更加的人性化,感覺起來有點(diǎn)像numpy的感覺,所以如果不是1.0的代碼,可能會不兼容,不過TF提供了轉(zhuǎn)換的腳本,可以方便直接把代碼轉(zhuǎn)換到1.0。
TF1.0提供了調(diào)試工具TFBDG,無論是大數(shù)據(jù)還是機(jī)器學(xué)習(xí)相關(guān)的開發(fā),調(diào)試始終不是那么順暢,而1.0提供的調(diào)試工具,可以說正在逐漸的彌補(bǔ)這一塊,雖然目前還是有很多問題,不過已經(jīng)有了很大的進(jìn)步。
佟達(dá):TensorFlow的設(shè)計(jì)范式帶來的一個(gè)天生限制就是在TensorFlow中,想要?jiǎng)討B(tài)修改計(jì)算圖比較困難。實(shí)際上動(dòng)態(tài)修改計(jì)算圖的需求并不少見,比如訓(xùn)練機(jī)器翻譯或者聊天機(jī)器人的模型,句子長度不一樣,計(jì)算圖其實(shí)是不一樣的。以前,要解決這個(gè)問題,就是設(shè)定一個(gè)比較長的輸入長度,對于比較短的句子,填充一些占位字符。今年早些時(shí)候,TensorFlow發(fā)布了一個(gè)工具,TensorFlow Fold,可以相對方便的動(dòng)態(tài)修改計(jì)算圖。不過總的來說,TensorFlow在計(jì)算圖的設(shè)計(jì)靈活性上還是有些欠缺。
白發(fā)川:目前來說,TF要想發(fā)揮最大的效果,還是需要借助于GPU,當(dāng)然這并不算TF的局限,應(yīng)該說所有數(shù)值計(jì)算的框架都有這個(gè)特點(diǎn),對于這個(gè)目前大家的做法都是搭建自己的GPU集群,GOOGLE甚至開發(fā)了自己的GPU:TPU。
雖然大家都比較認(rèn)可TF是工程化做的很好的深度學(xué)習(xí)框架,實(shí)際上它還是有一些門檻的,簡單到API的設(shè)計(jì),復(fù)雜到模型的訓(xùn)練和調(diào)參,其實(shí)還是是有一定門檻的,相比來說Keras的API設(shè)計(jì)更加直觀化。
TF雖然提供了java和go的api,不過目前還不太成熟和穩(wěn)定,所以對于開發(fā)語言,我還是推薦python,或者說我建議大家想往這個(gè)方向?qū)W習(xí)的時(shí)候,盡量掌握python這門語言,在我們實(shí)際開發(fā)中,會有很多用處的。
TensorFlow 在 ThoughtWorks 的業(yè)務(wù)中扮演了什么角色?對于公司進(jìn)行產(chǎn)品開發(fā),有沒有更合適的選擇?
佟達(dá):TensorFlow是 ThoughtWorks 目前在深度學(xué)習(xí)項(xiàng)目上的首選平臺,因?yàn)樗墓こ袒龅拇_實(shí)要比其他框架成熟,同時(shí)又和Hadoop、Kubernetes這些我們已經(jīng)在很多項(xiàng)目中使用的工具兼容。
至于“更合適”,現(xiàn)在還不太好下判斷,F(xiàn)acebook的PyTorch口碑很不錯(cuò),MxNet被Amazon和很多IT公司支持,而Intel的BigDL另辟蹊徑,在CPU上優(yōu)化深度學(xué)習(xí),而且和Spark無縫集成,看起來對于已經(jīng)使用云計(jì)算和大數(shù)據(jù)工具的公司來說吸引力也非常大。所以在深度學(xué)習(xí)框架這個(gè)領(lǐng)域,目前處于百花齊放的狀態(tài),最后誰會勝出,還不好說。
白發(fā)川:ThoughtWorks 有自己的機(jī)器學(xué)習(xí)團(tuán)隊(duì),主要方向?yàn)榇髷?shù)據(jù)和人工智能,當(dāng)然這兩個(gè)方向的劃分并不完全獨(dú)立的,實(shí)際上在實(shí)際開發(fā)中我們是將兩者結(jié)合,實(shí)現(xiàn)基于大數(shù)據(jù)下的人工智能,對于深度學(xué)習(xí)的框架,我們spike過目前存在的大多數(shù)框架,最終選擇了TF,所以我們的工作都是將TF工程化和市場化。
在選擇對比了不同的框架之后,我們也比較明確現(xiàn)有框架的一些優(yōu)缺點(diǎn)和局限,所以我們也研發(fā)了TW自己的深度學(xué)習(xí)框架:deeplearning.scala,框架本身是基于scala開發(fā),具體的信息大家可以在github上看到,目前是開源的。
本月底,佟達(dá)、白發(fā)川兩位老師主持的 TensorFlow 培訓(xùn)將上線 mooc.ai,向?qū)W員系統(tǒng)性地傳道解惑。
你是否一直希望有個(gè)老司機(jī)能手把手帶領(lǐng)入門?這就是一次好機(jī)會。
免費(fèi)福利:下周,兩位老師將以 “TensorFlow 在各場景的應(yīng)用以及注意事項(xiàng)”為主題,在雷鋒網(wǎng) APP 進(jìn)行公開課直播。在培訓(xùn)開始之前,讓大家對于 TensorFlow 能做什么以及實(shí)戰(zhàn)流程,做個(gè)初步了解。時(shí)長一小時(shí),免費(fèi)觀看答疑,敬請關(guān)注!
授課方 ThoughtWorks 是全球領(lǐng)先的 IT 咨詢公司,聯(lián)合國婦女兒童組織、世界衛(wèi)生組織合作伙伴??偛吭谥ゼ痈?,42 個(gè)辦公室分布在全球的 15 個(gè)國家。
2012年,ThoughtWorks 排在 Google,F(xiàn)acebook 之前,被評為全球最難面試的公司。
2016 年,ThoughtWorks 力壓群雄,獲得全球“最佳女性科技人員雇主”獎(jiǎng)項(xiàng)。
培訓(xùn)課介紹:
從初級到高級,理論+實(shí)戰(zhàn),一站式深度了解 TensorFlow!
本課程面向深度學(xué)習(xí)開發(fā)者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎(chǔ)實(shí)戰(zhàn)技巧開始,一步步教授學(xué)員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,并最終掌握一整套基于 TensorFlow 做深度學(xué)習(xí)開發(fā)的專業(yè)技能。
兩名授課老師佟達(dá)、白發(fā)川身為 ThoughtWorks 的資深技術(shù)專家,具有豐富的大數(shù)據(jù)平臺搭建、深度學(xué)習(xí)系統(tǒng)開發(fā)項(xiàng)目經(jīng)驗(yàn)。
開課時(shí)間:4 月 25 日(星期二)開課,每周二、四晚 20:00-21:00
開課時(shí)長:總學(xué)時(shí) 20 小時(shí),分 10 周完成,每周2次,每次 1個(gè)小時(shí)
授課地址:http://www.mooc.ai/course/82
線上授課,開放預(yù)約!
相關(guān)文章:
TensorFlow和Caffe、MXNet、Keras等其他深度學(xué)習(xí)框架的對比
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。