演講實錄——AI Workshop [復制鏈接]

2019-5-7 10:37
九霄逆鱗 閱讀:367 評論:0 贊:0
Tag:  
本文來自2019安卓巴士開發者大會現場實錄,由于錄入匆忙,內容可能存在偏差,歡迎大家掃描文末二維碼查看現場實錄視頻和下載大會完整PPT。

江駿:不好意思,讓大家久等。本來邀請函里面workshop一邊演習一邊敲,后來我自己試了一下,一個可能用到好多的庫,還有今天的一些網絡這邊可能講得太細,包括教大家如何用一些源來加速安裝比較耗費時間,所以我今天還是走PPT的方式。如果身邊有電腦的同志,立馬可以開始試一下看。今天的主題可能偏向于AI入門級別,可能甚至于連入門都沒有到的科普性的介紹。換句話說,我覺得從剛才的提問當中,我覺得我今天的定位還是很準確的,好多朋友今天過來可能是想了解一下AI怎么學習,或者說我第一次這個環境到底應該怎么準備,然后再看教程,大概這個AI是怎么學習起來的。這個里面很多內容也是結合了我接觸到的各種各樣的,包括已經是算法工程師的人,我在工作當中接觸到他們,我覺得要么就是太著急,基礎的東西一點都不會的那種,或者學的方向完全是錯的,然后在工作當中就會遇到這個那個的問題,我覺得都是可以在今天這個分享里面,如果大家是剛開始學習的話,就可以提前避免掉。

今天大概就是分三個部分,一個是講一些輕松一點AI技術的背景,然后TensorFlow大概簡單介紹。然后稍微分享一下電商領域。當然今天在座的場景就更豐富了,各種物聯網,電商我接觸到的一些應用。第三個主要聊開發環境,還有一些基本的大概的小的代碼片段,讓大家一下子感覺到這是一個什么樣的東西。

第一個AI,這三個詞大家都是一起聽到了,machine learning,Deep learning,AI是最大的,machine learning你可以用傳統的方法,已經在很多場景非常有用,非常有效了,再深度學習出來之前,再預測一些有些問題上,已經準確率非常好了。Deep learning一出來把什么都踩在腳底下,我們看的應用相關的一個是圖像相關的,你就可以做安防、人臉識別,好多東西,因為本來一張圖片計算機是讀不了、理解不了二進制的東西,這個圖片上面有什么東西很難去理解。第二個是自然語言,可能以前也有很多基于統計的辦法,但是它對于理解方面的也是等到DistBelief開始了繼續去發力。

再講到TensorFlow跟DistBelief什么關系,從一行代碼就沒有開始學,寫的過程中遇到很多數學的運算,這個里面要保持你的實現編碼代碼能力非常高,不然的話你如果把自己一個很好的想法實現錯了那就很悲催,你還以為是自己的模型不行,自己的想法不行,其實只是寫的哪一行寫做了而已。如果是那樣子一個生產效率的話,深度學習是不可能有今天這樣的繁榮,大家都可以玩這樣子。對于這樣的困境也不止谷歌,包括像卡菲爾,他們同一時間就遇到這個的問題,把這種運算、求導的事情寫得很穩定,穩穩當當的,你這個算法工程師或者科學家只要寫我的結構,然后怎么讀數據、處理數據,這樣子你的效率一下子就上去了。這個同一時期谷歌做了DistBelief這個框架,這個框架當時是不開源的,但是它已經能夠為谷歌的一些Deeplearning模型的訓練起到服務了。

但是隨著時間的推移他們發現以下幾個問題,一個模型大家可以理解有大有小,它這個在訓練的時候,基本上用最簡單的方式來說,模型要加載在內存里,如果你要訓練GPU,你還要把一部分加載寫存里面。這個谷歌的模型越做越大,發現這個顯存放不下了,這個已經是一個挺嚴重的問題。那么在當時的情況下,它就要采用分布式訓練的方式。其實現在大家遇到的如果是特別大的模型,在現在幾個解決方案中,其實分布式訓練仍然是其中的一個方案之一。另外一個它當時這個DistBelief主要設置的是處理圖像這樣一個場景的深度學習,對于其他的場景,比方說谷歌應用商店,幫你推薦,像這樣的應用它自己寫的框架就用不了了,出現了局限性。當時手機也沒現在發達,更加不會考慮到這方面的需求。再另外一個它當時這個系統當時寫的并不是工程方面寫得特別好,在維護成本上反而變成一個比較大的成本。現在的話TensorFlow就是把剛才這些問題,不光是都解決了,而且在現代隨著大家的關注、熱度,開發人員越來越多,它的功能也是一年一年多了非常多出來,現在這個TensorFlow已經很輕松可以跑在這么多不同的設備上。

然后也有不同的語言,這個圖顏色比較淺,這個主要想講的現在TensorFlow它不僅是只關注你的模型訓練,它從你的整個生態,從你數據怎么進來,怎么高效的讀數據,其實這個是很多公司,包括阿里包括什么,都會去做自己的庫,當我想要讀大批量的數據的時候,比方說把這個讀數據的東西寫成一個Python庫,寫了之后怎么讓這個效率高呢?你這個庫里面一定要多線程用上,這樣數據的吞吐量才大。對于這種事情TensorFlow也提供自己的方案了,有很搞笑的讀取數據,存儲模型,比如你這個存儲模型用Python輸入到其他的移動設備上。TensorFlow JS和TensorFlow Swift是用這兩個語言寫的,尤其是讓TensorFlow不管是寫代碼都產生不一樣的效果。所以為什么要用TensorFlow,它的整個生態,不管是應用到哪個層面,都很豐富、都很全。另外一個它也不是讓大家迷信。這個時候它也在不斷的推出庫一些東西。

另外一個越來越多的公司意識到,我光訓練到了模型是沒有用的,我拿到一個模型很準,不過你這個東西我在線上有可能不斷新的數據要進來,然后我的新模型要不斷的訓練,不停地發布到線上,整個這么一套模型,還有你的訓練數據,還有預測的數據,所做的預處理是不是一樣,跟算法其實并不是太相關,但是你要把模型用起來必須要考慮這些事情。這也是在DistBelief一火稍微退燒一下就發現這些問題。谷歌另外還有一個開源項目kubeflow它來解決。最后一個任何公司,每個算法公司都有權利它喜歡用什么,但是作為一個團隊作為一個公司來說,它要有它的技術積累,大家協作、討論,這要怎么用比較好。所以在這些角度上,TensorFlow也是一個比較好去積淀出東西的框架。

這個頁面基本上我列舉了一些,因為我本人做AI平臺做了3年多,在餓了么和螞蟻。其實我其實不需要說具體的什么商業里面他們是怎么用的,但是就是從我的這些用戶里面,我基本上看到如果是電商場景都是這些內容。因為每個APP都有一個搜索框,搜索出來誰排第一個,除了交錢以外也是根據用戶的喜好來排序的。對于搜索推薦來說,剛才講的是搜索,還有一個推薦,比方說在你的一個訂單頁的下面,當你看訂單頁,如果它幫你推薦兩個特別愛吃或者想要的,這個時候你們整體的GMV就相當于提高上去了。這個在營銷場景上,你們希望吸引更多的用戶用你們的APP,你們希望提高用戶使用的頻次,你們通過發紅包這個方式,那么發紅包怎么高效地去發紅包的,這些用戶會來用的,這樣是比較好的。還有像商家代金券,它跟紅包反過來,商家代金券是商家我愿意掏2萬塊錢來做這個運營,然后你幫我發這個代金券,這個券只能用在我們家。還有安全風控,這里面包括了商家端的,有異常的商家,薅羊毛的,商家也會薅羊毛,用戶也會薅羊毛。然后對系統穩定性做檢測。業務上面每個公司更加不一樣,比方說送外賣就會預估配用時長。比如說新春集五福,運營的同學對這整個新春紅包集五福要有一個操控,它不能說因為今天大家全都擠起來,那還玩什么。它要對自己的活動要有個掌控的感覺。

剛才講了這么多應用,什么是machine learning,大家經常說機器學習機器學習,學了半年如果不準備搞這個,它反正學會就行了,如果準備搞這個它怎么學會了,它怎么學的呢,這是一個我不知道大家有沒有去想的問題。

其實學習這兩個字,我用這一章PPT就可以把最簡單的原理給講明白了。一個程序,那么一串數字它怎么學習。其實對于我們,我們要預測Y值,我們如果以線性的方式來做,這種權重WTX+B,如果這個W和B都是來隨機選的,由于我們這個W和B都是隨便選的,現在這個模型肯定預測效果很不好。我們怎么評估這個模型好不好?其實就是我的預測值或我的真實值差得越小越好。那我們就定義,因為你要定義越小越好方法有很多,你可以自己想。但是這個地方拋磚引玉說一種最簡單的方法,把它倆相減求個平方。就這樣最簡單的公示我們稱它為損失函數。我們知道如果評估這個模型預測好壞之后,我們就相當于有一個目標,讓什么樣W和B讓這個Loss越小,如果在咱們這個案例它始終是0,咱們理想上是比較好。通過什么方式來求W和B呢?現在在TensorFlow里面,大概就是通過這樣的方式之后,很多科學家也在不斷的研發新的Optimizer算法,讓它求得很快。我們說模型就是存的W和B,你們把他們這個存下來,當然你要把整個你的網絡結構也要存下來。有些難免為了講得簡單有講不準確的地方。

我們講的是一層,如果中間再加很多層,中間的層就稱為hidden layer,隱藏層。為什么說深度學習呢?從圖上的感覺也可以感覺出來,隨著中間層越加越多。大概機器學習就是這樣的概念。有了這樣的概念之后我們面對一個問題什么去做呢?對于我們拿來一個數據,不管是人臉也好,還是股票數據也好,還是什么數據也好,往往我們把它切成三份,或者通常切成兩份,一份做驗證。訓練和驗證有什么,這些都是已知真實值。比方說用戶會不會下一個單,都是已知真實值,我把訓練這部分訓練出了模型,我把驗證值來驗證一下這個模型好不好,如果好推到線上去服務。有了這些之后,很多人就開始搞TensorFlow了,抓緊開始看教程了。TensorFlow目前來說比較主體的還是用Python來寫為主。當然以前很多相關的教程了。但是你看真正大家發的一些研究或者你用現成的模型還是Python為主的,所以還是推薦大家用Python入手。

好多人后來還是來問,他們問,這個包裝到哪里去了,或者說這個Python2、Python3自己的環境搞得一團遭,這個到底裝到哪里去了?這些問題不是說你搞機器學習搞Python遇到的問題,你只要寫Python應該在第一時間就應該搞得清清楚楚的事情,如果把這個概念搞清楚之后,你的環境是放得干干凈凈的。像我的環境從來不會說我會弄亂我自己的環境,就是因為你很清楚你引破這個東西是怎么去工作的,當你敲Python的時候,后面這些東西你用到這些東西是如何工作的。這個也是導致我看到好多學機器學習,玩TensorFlow的,一開始聽從大家用Anaconda這個事情,喜歡的人可能會覺得很好用,它把太多Python原原本本的東西,其實那些東西一點都不復雜,反而隱藏在背后了。所以我是從來不用Anaconda的。前面鋪墊這么多,大家如果要用今天開始入手TensorFlow,你第一個學Python的話,看看你的理解和我的理解是否一樣。

首先這個Python怎么inport這些包,這些管理的環境。你想強制指定你在外面加上Python這些環境變量,指定加上這些日錄,也能夠輔助Python找到你的包,所以找包就是這樣子,很簡單的一個事情。另外一個你的Python在裝包的時候,PIP大家往往只知道敲PIP公司,但是它是跟著你的Python走的。只是加了一個重命名。這個也是很多人剛接觸的時候,比如你機器上有Python2有Python3,為什么用不了,因為Python3裝到Python2里面去了。

如果寫Python寫很長的時間,如果不用相關的產品的話,是很痛苦的,virtualenv,它能夠幫你創造一個虛擬的環境。當你干完這個項目,你只要刪除,又從這個環境跳出來,又是干干凈凈的了。另外一個如果說你覺得在你機器上裝Python有點麻煩,因為你往往有些時候需求,比方說我機器有三個版本的Python,Python2.7,裝Python往往在各個操作系統不是那么方便,還有你要管理我此時此刻這個我用的是哪個Python,我要清清楚楚,整個環境不希望亂成一鍋粥的,你可以手動裝,你管理好也沒什么問題。如果說剛才的Virtualenv解決不同的問題,那么用Pyenv也可以管理得很好,對于用戶來說,你只要用Pyenv就可以了,其實Anaconda就不可以了。

像這句它就會幫你把它能裝的Python的版本list出來。你把3.6.8設成系統默認的,你用Pyenv創建一個Py3,你把它激活,這樣就清清楚楚再用這個環境,絕對不會再亂成一鍋粥,結合上幾個PPT講的Python怎么做的。你只要會用一個工具你就走遍Python天下。你用官方的TensorFlow的包找對應的你要的GPU的包還是什么包。

你把Python的環境都管好了以后,算法工程師都愛用這個jupyter notebook,這個在開發場景下非常實用的。基本上這個成為開發算法工程師的標配。右下角那個東西nteract,當你在機器上裝好之后,這是一個小的App,你直接雙擊這個App,就可以用這個App原來要打開瀏覽器Notebook的一些功能。

然后TensorFlow之前在2.0正式出一個之前,通過Python它把你要的模型,就像剛才深入神經網絡,定義出來,定義了之后,它把它生成graph,這個也陪伴了TensorFlow很長的時間,這個什么問題?調試起來特別欣慰。你如果用這樣一個graph的方式,你斷點停下來它還在構建這個,所以絲毫解決不了,所以當時調試也是很蛋疼,谷歌也發布一系列的程序來幫助客戶,但這都是治標不治本。同時競爭對手又用一種很爽的方式迅速博得了大家的喜愛。其實至今也是很多人喜歡Python。它做成這樣子,我想要通用一個方法的時候,我就可以立馬拿到它的結果,敲一步執行一步。所以后來在TensorFlow2.0把它設成默認方式。你可以加上調試階段,你在一些增強學習,或者說一些LP的領域對于這種條件判斷,它在模型上是有這樣的要求。

然后做相當于求導這個事情,求導相當于說只需要Gradients,把你的目標扔進去,它就把它的導函數給求出來,這個是X的平方,對于X的平方如果拿3是9,如果對它進行求導X平方是2X,把3代進去那就是6。如果是偏導數再出發也行。還記得我們剛才說機器是如何學習的嗎?它其實就是通過往你的導函數反方向去靠近,讓你的loss更加小。而現在有幫你自動求導,你設置一個模型,假如你定義這樣一個模型,把它扔進求導的函數,再用這個優化器,讓它不斷地去,你可以理解去優化那個權重,放它越來越接近我們想要的方向。最后再把這些權重、這些變量存下來,這就是我們的訓練完的模型了。它就是這樣工作的。

最后這邊我個人還是比較推薦比較官方一些教程。為什么?TensorFlow它的功能也是比較快的,現在好多的教程要么跑不了,要么它還在用的剛才講的在那寫代碼,你可能學了半天學的是一個老版本,對于新版本來說幾乎什么都用不上,所以還是比較推薦現在官方的版本。而且TensorFlow一路發展起來,從一開始TensorFlow的官方文檔幾乎沒法看,到現在已經寫得非常好了。大概我覺得如果是入門,或者說是初步接觸這個,大概了解了,腦海中有這樣的概念之后,自己后續就可以玩起來自己感興趣的方向,謝謝大家,我今天的分享大概就是這樣子。 

講師GitHub地址:https://github.com/ohmystack

現場PPT分享:關注【安卓巴士Android開發者門戶】公眾號,后臺回復“420”獲取講師完整PPT。

大會現場視頻小程序:



我來說兩句
您需要登錄后才可以評論 登錄 | 立即注冊
facelist
所有評論(0)
領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

两码中特期期