前不久趣直播舉辦了一場技術人成長交流會,邀請了《TensorFlow 技術解析與實戰》做者李嘉璇來分享前端
如下是文字版:web
謝謝智維的介紹,介紹的太棒了,我其實沒有他說的那麼棒,讓我壓力好大,尤爲巧哥又講的那麼好,我目前主要是作人工智能方向的,比較熟悉的是 TensorFlow,我有寫過一本書,《TensorFlow 技術解析與實戰》,我這裏面再多說兩句,由於有很是多的人會問我,你是怎麼寫出一本書的?或者說你寫出一本書遇到什麼樣的困難?我如今面試的時候就會有人問我這樣的問題,會常常讓我去說這個事,我跟你們分享一下。我在寫這本書的時候,我腦子裏沒有第二件事了,我說的第二件事就包括吃飯和睡覺上廁所,腦子裏沒有這些,就是在個人意識裏,這些東西都不存在的。我眼裏只有這一件事,我活着就是爲了寫書這一件事,因此我白天和黑夜就一直在作這件事,直到把它作完。比較驕傲的是,我跟我朋友說,我想寫一本書,我朋友說,她也想寫一本書,可是她是某個創業公司的 CEO,咱們倆基本上同時開始,直到個人書出版了,她尚未寫完,基本上還停留在一二章的樣子,因此我以爲這個是我積累的一個心得。我那時候也不發朋友圈,歷來不發朋友圈,什麼都不幹,就只幹這一件事,才把它完成。目前我也但願再回歸到這樣一種狀態,專心的寫代碼,不去幹第二件事。面試
下面介紹一下我本身,最近這幾個月基本上全部的人工智能大會我都有參加,也都有去作一些分享。 以前在百度作深度學習方向的開發,目前是在一家人工智能創業公司作的 TensorFlow 的優化以及 TensorFlow 在 FPGA 上的編譯,應用在一些物聯網領域,其實是作 AI 芯片的開發,就是如何讓一個算法在硬件上可以更高效的運行?一方面是準確率更高,另外一方面是速度更快,精度更高。這是我作的一方面的事情。目前在作的第二件事情就是跟招商銀行那邊去合做一些關於金融的智能聊天機器人方面的東西,根據用戶的一些收支狀況,用戶的消費行爲,給他推薦一些智能投顧的基金和產品。剩下的是一些其餘的瑣事,好比說會有一些 CSDN 的約稿之類的去寫一寫。算法
今天我主要分享的就是這樣幾個方面,首先是從人工智能的應用開始介紹,尤爲是機器學習和深度學習在咱們產業界的應用,這是第一個方面。第二個方面是人工智能很是有誘惑力。誘惑力在哪裏?我以前作過一段時間的網站開發,爲何後來我就特別迷算法?特別迷深度學習,特別着迷算法如何在硬件上編譯快。剛剛巧哥說的,我以前作的東西就是把別人的業務邏輯翻譯成代碼,我以爲我作的是一件翻譯的工做,我作的時間太長了過久了,我翻譯的愈來愈好了,我架構搭的愈來愈精美了,可是我以爲成就感反而愈來愈低了。有一個笑話常常講說,寫 PHP 的可能就不帶腦子,我以爲我帶的腦子比較少,我但願從此可以更深刻的思考,而後可以有一點點提高而興奮的那種工做。而不是像我之前那種,老是有現成的參考案例,或者總會有問題,可以問到別人,而作這個方向讓我以爲,我基本上常常是問不到別人的。數據庫
咱們開會也沒有人可以給出一個解決方案,你們都只是猜想哪一個方向會更好?我朝哪一個方向可能會有一些優化的點?可是有沒有都須要去作實驗去嘗試,但是這是跟之前的開發模式徹底不同的一個領域,而這個點是很吸引人的。關於深度學習或者積極學習,若是要入門的話,總結了七個步驟。關於 TensorFlow 方面的,TensorFlow 的話是一個很是容易簡單上手的深度學習框架,而後簡單介紹一下它的變成模型,以及若是你想深刻到 TensorFlow,瞭解一個天然語言,處理這些領域或者圖象這個領域,去講解一下一個例子,就是 TensorFlow 在天然語言處理中的應用。編程
最後的話我會講一下,關於深度學習的一些雲的基礎服務,對於國內深度學習研究方向,我總結大部分公司作的大概有三個方向。後端
第一個方向是關於雲深度學習平臺的建設,這個基本上是國內的公司,好比說第四範式的先知平臺,百度的BML,就是機器學習平臺,他們正在作的一些事情,這種東西是未來但願做爲一個雲深度學習平臺,對外出售的,就像阿里雲那種,就是賣服務的這種東西,這是AI平臺。數組
第二個方面是我目前正在作的,AI 芯片,包括有地平線,有寒武紀,有深建科技,這些公司,主要是把個人算法跟硬件相結合,這個硬件就包括 GPO 和 FPG 這些硬件相結合,如何讓這些算法在這個硬件上可以更高效的執行?而且速度更快,精度更高,功耗更小,成本更低,這些都是更,因此你就沒有一個最終的標準,可是咱們探討如何去作這個事情?安全
第三個方向是圖象領域的一些應用,固然也包括一些天然語言處理,圖象領域就是一些 Yijia 公司或者馬龍科技,他們作的事情就是說,這些公司都是作服飾的,或者時尚的,他會把你人穿這件衣服,衣服的屬性,人的面部表情,人的情緒給你提取出來。微信
會有一個巨大的圖象和提取出來的這些標註的庫,未來以及圖象和視頻方面,好比說你從此對視頻作搜索的話,你能夠直接經過文字就跳到視頻的某一幀,相似於這種,由於每一幀的這個視頻信息都給他結構化成文字的信息提取出來了,這是圖象領域。天然語言處理領域就是迅飛和搜狗可能作的,迅飛聽見,迅飛語音識別,搜狗也是作相似的事。可是我以爲雲深度學習平臺也是一個很是基礎的,深度學習服務的領域。最後是一個小的彩蛋。
第一個方面是機器學習和深度學習的應用,我相信你們平時去看公衆號,資訊,各類微博,都會知道,應該知道關於人工智能方面咱們採用的方法是機器學習和深度學習。
那麼他們的應用主要在這三個領域。
一個是圖象,圖象能夠作圖象的分類,圖象分類咱們常常說的圖象識別,還有是目標檢測。
目標檢測要達到的效果有兩點。第一點是說我在一幅圖象中把全部的物體給框出來,這是第一點。第二點是物體框出來,把物體的位置定位起來了,可是還要實現第二個功能,就是把這個物體的類別也識別出來。
在圖象分類或者圖象識別上更難的一點,不只要知道這個圖象是什麼類別?還要把這個圖象的位置精確的框出來,就像這幅圖裏面顯示的貓,狗和鴨子,不只知道它的類別,而且框出來,這叫作目標檢測。
圖象分割的話指的是在一幅圖象中,把圖象根據象素的要求,把這個圖象的輪廓標註出來。
這幅圖中,最右邊的一個例子,把這個貓和狗根據它的象素,把它的輪廓給標記出來,其實知道這點蠻重要的。
我以前帶過一個深度學習的團隊,當時我還算是他們的負責人,個人主管是作語音方面的,居然對圖象分割和目標檢測是什麼?居然徹底不知道,可能沒有接觸過這一方面。
我以爲在 AI 領域,若是你是作圖象的,我認爲你應該也要去對文本的處理方法,文本最新的研究要有必定敏銳度,由於你總作圖象,其實你是缺少靈感的,其實你常常須要從別的領域去吸取靈感,我認爲是這樣。
還有就是語音,這一塊就是目前,迅飛正在作的一些事情,語音識別,包括語音聽寫,語音轉寫,還有命令詞識別。
命令詞識別你們就知道,好比 Google Now 這樣的產品,你要喚起他會有一個命令詞,就是你說一句話。出門那種導航產品,你會說,你在車裏面喊問問,而後它就會待命的聽你說話,這是命令詞識別。語音合成,你們應該知道百度地圖,給你導入林志玲或者郭德綱幫你導航,就是語音合成。
聲紋識別,跟人臉識別差很少,就是支付寶能夠刷臉支付,聲紋識別跟刷臉支付的含義是同樣的,就是經過聲紋鑑別出你這我的來,這是語音方面。
文本是有些文本情感分析,主要用在百度糯米的一些產品,而後他會對商家有一些評論,而後你但願知道這些餐廳他的褒貶狀況,而後文本情感分析,根據它的評論知道它是褒義仍是貶義?就是它的分數應該歸到哪一檔?
文本分類就是假設你在知乎上,你去提一個問題,你把這個問題標題和描述寫出來之後,但願它能自動的給你歸到什麼類別?好比說職業發展類,仍是情感問題類,仍是技術問題類等等?而後還有一些挖掘等等。
這是目前人工智能的應用,固然這些東西你均可以用於傳統的學習方法來作,可是目前你們都流行的是,在作這些應用的時候採用深度學習方法,也就是採用深度神經網絡的方法去作。
如何實現我上一個 PPT 作的功能呢?傳統的方法是用機器學習方式去作,幹什麼的呢?好比從數據中,數據多是語音的數據,文本的數據,以及圖象的數據,一張圖片就是數據,語音的話一段語音,語音就是數據,以及文本,文本就是你發的帖子或者你的評論都是評論數據。
從這些數據中抽取規律,提取有用信息,有用信息就是剛纔我說的那些數據中的特徵,而後咱們用這些特徵來表明數據,解釋數據,從而達到預測將來的目的。
繼續學習算法有這些,我就不去講了,你們本科的時候若是學過計算機你們知道。
機器學習過程有哪些呢?
數據預處理的過程,你須要對原始的數據作一些去噪,或者歸一化的處理,應該你們知道通常用的方法,好比說你把數據減去平均值再除以方差,相似於這種歸一化處理,因此說你把數據最大值減去最小值再除以平均值,去作一些處理。
接下來就是咱們最最重要的環節,拿着數據訓練一個模型,這個模型在機器學習或者深度學習當中,它就指的是一堆參數,就是一個文件,這裏麪包含了一堆的參數。
訓練出這個模型之後,若是再來新的數據,輸入到這堆參數當中,這堆參數至關於,你認爲他是作了一個函數的數學變換,而後再有一個新的數據通過這對參數的處理獲得了你想要的結果。
好比說作文本分類的話,我在拿了一百萬的文本去作了分類,每個文本均可以分紅不少類,而後接下來若是拿一個新的文本,通過模型之後,就直接可以輸出這個文本的類別。
還有一些訓練模擬之後,須要一些評估模型方法,最後應用模型的話就是說,咱們把這個模型上到線上,這樣一個過程。
這裏就簡單提一下機器學習算法應用,其實你們看過周志華的書或者李航的書,機器學習或者統計方面的書,大概的話他們的應用都有這些。
迴歸有一些房價的預測或者有些用戶消費行爲的預測,而後分類,分類的話有文本的分類,圖象的分類,圖象分類就是圖象的識別,垃圾郵件的分類等等。
推薦是一個目前很火的領域,也是薪資比較高的領域,好比說作一些電商的推薦,還有一些視頻推薦,還有一些短視頻的推薦。
排序領域,主要應用的是方法,好比文本的相關性檢索,就是在谷歌或者百度的搜索結果頁產生以後,去找出跟你的查詢詞最相關的網頁作一個排序。
我講的第二點就是深度學習入門的七個步驟,這是我大概總結了一下。
若是你徹底沒有接觸過深度學習,我認爲作深度學習以前,不少同窗也問我,我如今想入門深度學習了,而後我需不須要先從機器學習開始看?我需不須要先從高數,線性代數而後那些知識開始學起?逐步把各個算法都弄明白,而後我再上深度學習?我以爲是不太須要的,可是這個過程是個相互的過程。
我下面就跟你們講一下入門的七個步驟。
首先第一個步驟就是你去學習或者回憶一些數學知識,可是其實也不是說特別刻意的去學習,由於好比說我剛纔說過,就是一個模型它是一堆的參數。
其實訓練過程,咱們在深度學習咱們都用深度神經網絡的方法,每一層的話須要一些,咱們輸入的數據也稱爲特徵,咱們會把這些特徵作一些轉換,經過一些線性或者非線性函數轉換
因此我這裏說學習回憶一些數學知識,指的就是你要掌握一些,好比說機率統計,高等數學,線性代數的知識,就是若是你學過了那是最好的,大學學過最好,可是不少同窗大學沒學過,而後沒學過也沒有關係,你就知道大概原理是幹什麼的,每個概念它的原理大概是幹什麼就能夠了。
有興趣的時候能夠涉及到一些推導和證實,沒有興趣的話推導和證實其實我認爲在這個階段也不須要的,你就只知道這個名詞大概是什麼意思就能夠了,甚至說你把這個名詞輸入到百度百科當中,大概知道這個是幹什麼的就能夠了,由於這是第一個步驟
你可能學到第七個步驟了,你突然以爲學習這個,你須要真正知道這個亂髮的含義,你須要知道這個算法中每個參數究竟是什麼含義?你須要知道這個算法的推導是怎麼樣的時候?你能夠再回來去學習,這個沒有關係。
第二個步驟就是你掌握一些機器學習理論和基本算法,其實我在作深度學習的時候,我繞過了機器學習,沒有去看機器學習,因此作了很長時間之後,我纔回過頭來,我以爲我機器學習須要補不少東西,而後纔開始把這些都給補上的。
其實你們如今看起來就是,其實蠻難的,好比說 SVM 各類推導,而後 SVM 各類理論,引入了合函數,就是每一步爲何要這樣作?爲何那樣作?
當你作一個新的實踐項目的時候,你光看理論其實很難理解的,可是這時候能夠先作一些積累的儲備,好比說你學一些 SVM,邏輯迴歸,決策樹,貝葉斯分類器,隨機森林。
我如今看起來就以爲這個很是簡單,可是當時的話看每個名詞都以爲,都像一本書同樣困難,而後關聯性分析,人工神經網絡和傳播算法,一些 PCA 降維的方法,以及什麼叫過擬合?什麼叫正則化等等這些。
而後就是掌握一種編程語言了,我估計你們如今可能都是 iOS 開發,不少同窗都是 iOS 開發,因此其實,可能推薦你們去掌握一下 Python 語言吧,固然若是不懂 Python 語言的話,我知道 iOS 新出來的 iOS11,就是前兩個月看到,目前也有對 iOS11 當中也有工具包,因此也就是說你應該用 iOS 的語言,也能夠作一些相關的東西。
會有一些後面直接的 API 去調用,而這個 API 還特別豐富,涉及到我剛纔第一頁幻燈片說的關於圖象,文本,還有語音各類API都很是的全,而後我也有同事在公司內部也分享過新的 iOS 在繼續學習上的應用,你們也能夠看一看,那時候也能夠說不去掌握這些語言。
可是實際上掌握 Python 的話,緣由是說你作數據處理和數據分析是很是方便的,同時有 Numpy,Pandas,這些第三方的庫,而後可以讓你作數據分析跟查詢 MySQL,就是跟處理數據庫同樣方便,你像處理數據庫,作一些具體函數的處理,那些都沒有問題,用這種 Python,Pandas 庫均可以實現。
而後你也能夠本身多試試一些機器學習的庫,好比說 sklearn,就實現了我上一頁 PPT 說的各類邏輯迴歸,知識向量,PCA,樸素貝葉斯各類等等算法,用一行代碼就能夠搞定的,你能夠看一看它,大概更深一層的理解了,前面說的各類機器學習算法的一些原理。
還有就是你能夠去試一下 MATLAB 或 R,由於咱們公司如今目前就是特別多清華大學,不少不少清華大學的實習生,我發現他們都用的 MATLAB,我也去看一看,其實它的實現思想跟 Python 也是比較類似,可能 MATLAB 在學術界用的比較多,Python 在工業界用的比較多。
我最開始是作目標檢測的,而後那時候目標檢測一些腳本,其實也是用 MATLAB 寫的,可是也很是容易,你坐在那很認真,而後一天就能把它看懂。
第四個步驟就是去讀一些經典的論文,關注一些動態和研究成果。
你要去訓練一個手寫數字識別的模型,這個模型是深度學習最最簡單的一個任務,就是說對手寫數字作一些圖象的識別,最古老的方法就是 LeNet,1998 年提出來的一個神經網絡方法
好比說作目標檢測的話,很是很是簡單的網絡,用 MSCNN 的方法去作,這時候你要作以前,實際上很是重要的是去先讀一下關於 LeNet 或者 MSCNN 的論文,他們論文都很是早。
LeNet 是 1998 年提出的,1998 年的論文,也是大牛寫的,論文很是樸素,不是說看不懂,仍是比較容易看懂的,那具體論文怎麼搜索呢?
好比說你想實現這個任務,你直接在 GitHub,而後你輸入 LeNet 這些關鍵字,而後它會有 LeNet 在 GitHub 上會有一些實現。
他都會給你標註出來他採用了哪篇論文?
這些論文的做者是誰?
這個論文的連接是什麼?
特別規範,全部參考的東西,全部引用的東西都很是規範,因此你直接去看這篇論文,基本上知道它的網絡結構是什麼樣子了?
還有就是你要關注最新的動態和研究成果,這一點在工做中,我以爲靈感是很是重要的,由於這個工做跟傳統的之前開發工做特別大的區別就在於,之前開發工做就是巧哥說的,很大程度是翻譯工做。
咱們如今這種工做就是,常常是沒有方向的工做,就是你們坐在一塊兒,突然有一個問題,就是死活提升不上去了,好比說精度到 98%了,可是咱們但願它的功耗更低,好比說功耗如今是 10 瓦,咱們如今它達到 5 瓦如下,5 瓦如下就能夠更省電。
我如今待機,一個智能的產品,好比說咱們這個芯片,物聯網嘛,放在智能的空調家電等等,不一樣的智能設備當中,咱們但願它在斷電的狀況下,假設它還能撐一段很長的時間,或者說它能功耗更低更省電。
因此這時候,可能咱們算法上以爲沒有優化的地方了,因此天天關心一些最重要的論文或者資訊是很重要的。
尤爲是在你面試過程當中,這個面試就有一個套路,面試官會常常問你,你最近讀了哪些論文?2017 年CVPR大會上的哪些論文,你對它理解比較深?可能你們不會問你具體去寫的代碼了,通常都會問你對這個論文的理解,這個論文當中有什麼關鍵點,哪些比較吸引你?因此多看一些論文筆記以及公衆號,還有微博的資訊。
第五步的話就是本身動手訓練神經網絡,首先就要選擇一個深度學習框架,這裏面我本身一路一直是在作 TensorFlow 方向的開發,因此我也推薦使用 TensorFlow。
緣由是什麼?首先它的 QQ 羣和微信羣活躍度很是高,而後各類雜誌公衆號,還有微博關注的人不少,你只要寫 TensorFlow 相關,很是多的編輯會願意幫你約稿,或者他們平時老會追着你讓你去寫一些東西
谷歌 GDG 也在中國很是願意去作這些東西,並且影響力又很大,而且說全球關注不少,好比在寫書的過程當中,我會常常遇到一些問題,由於那時候研究的很是前沿,我以爲我身邊我問不着人了。
可是我在網上了老是在每個角落翻了十幾頁之後,或者在 Facebook 上,某一我的說了一句話,我忽然以爲原來是這個樣子?沒有說解決不了的問題,由於不少人都在關注它
還有行業交流和技術峯會的討論很是多,以及國內外研究信息同步,這個是指,實際上在人工智能領域有個 arxiv.org 那個網站,這個網站天天全世界各個的科學家都會往上面去發論文。
這些論文是預備的論文,只要有人發論文,馬上就有其餘科學家會把這個論文用代碼實現,提交到 GitHub 上,可能時間很是短,可能一到兩天就有了,並且他們是用 TensorFlow 實現比較多,基本上你如今見到的論文模型在 TensorFlow 上面都有實現
你若是看到一篇論文的話,你可能都本身不用手寫代碼,而後本身直接從GitHub 上面找一找就能找到一個現成代碼去作這件事了。
並且 TensorFlow 它的第三方框架,上層的應用庫也比較豐富,就至關於咱們之前作的開發的翻譯工做,你腦子裏想一個神經網絡是一個什麼樣子?你就寫出來了,你想什麼樣就寫出來,就是跟咱們實現業務邏輯差很少,這就是 TensorFlow 提供的很是優秀的第三方庫。
也獲得了 TensorFlow 官方的支持,而後目前 TensorFlow 今天的數據,他的 star 數大概是六萬,已經有六萬多個數,而且官方天天都會回答各類解決它的藝術問題,因此我說有 bug,他們修復 bug 特別及時,一個月出三個版本,而後每月出一個大版本,而後進步很是快,而後性能也提升的很好。
而後就是你深刻你感興趣的感性領域或者你目前工做相關的領域,好比說你計算機視覺,由於業界你們按這個分的,你是作視覺的仍是作 NRP 的,結合這兩個一塊兒發揮價值的,業界通常都是按這個分的。
因此你要若是從此想作視覺領域,計算機圖象處理,圖形學處理方面的書,也就一兩本,我以爲基本上把整個系統知識有一個很好的理解,而後你結合你目前的工做深刻到某一個領域,徹底讀這個領域去寫實現這個領域的模型
這裏我也舉了一些例子,好比說這是單純的咱們說它的應用領域,可是若是你要結合某個行業,好比說在醫學行業當中有一些醫學影像;好比穿衣的話,衣服搭配,衣服款型的識別;好比說保險業,通信業的話,可能會有智能問答機器人這些;而後到智能家居領域,能夠作一些人機的天然交互,這些都是依賴於你上面你所從事的這個領域。
而後就是說,訓練好模型之後,可能會出現一些問題,好比準確率的問題,識別速度,最重要的就是識別速度,識別速度是很是關鍵的,準確率的話,其實你們採用的算法差很少,模型差很少,準確率基本上差的不是很高,好比說我 97%,你 98%,其實差的不是很高,可是你要說偏差率 97% 和 98%,是差 30% 的,對吧?
可是實際上在工業界應用的話,若是不是在自動駕駛等等那種安全領域應用,好比說在安防領域,97% 和 98% 其實若是誰先工業化落地誰先搶佔了市場,不是差不少,可是最重要的是識別速度問題,而後有一些 badcase 均可能是你遇到的瓶頸,而後這些訓練好的模型須要不斷優化。
如何去優化呢?就是說咱們工做中若是遇到了問題,而後去看新的論文中涉及到數學知識再去學那一方面的數學知識,涉及到經濟學的算法再去了解那些方面,逐步去優化這個模型。
這個就是剛纔總結的七個步驟,從數學知識開始,數學知識瞭解之後會學一些算法,學習算法之後,編程工具這個你們能夠同時去掌握,好比說 Python,其實認認真真坐在那兩天左右就基本上也會的差很少,而後若是你會 C++ 的話更好了,基本上不愁找不着工做,各個大公司都會搶着要會 C++,而且懂深度學習開發的人員,而後還有就是研讀公衆號和博客,那個也比較重要。
而後你本身動手訓練一些案例,最後結合工做中相關領域,你選擇事業方向和語音識別方向去深刻到,結合你工做和行業領域去作一些東西。
給你們稍微去講解一下 TensorFlow 編程模型,TensorFlow 是一個什麼東西呢?它是一個機器學習框架,之因此說它是機器學習框架,緣由是說,它不光對深度神經網絡作了實現,對整個機器學習界的全部算法,都有實現。
因此你只要去調 TensorFlow 的 API 來講,機器學習的算法都實現了,不光是集中在神經網絡這個領域,因此你們也有一種說法認爲 TensorFlow 算是一種新的語言了,雖然它是基於 Python 的,可是 TensorFlow 自己的文檔很是全面,你甚至能夠說,大概很是淺薄的知道一點點 Python 的語法,你就深刻到 TensorFlow 整個框架或者語言當中去學習,也是能夠的。
認爲它是一個機器學習或深度學習框架,而且它實現了異構設備的分佈式計算,什麼叫異構設備?指的是咱們底層芯片可能用的是 CPU 或 GPU 以及 FPGA 這種不一樣的芯片。
可是對於咱們開發者來講,咱們對底層異構設備是透明的,因此我在開發程序的時候根本不用關心底層我用的是哪種芯片在運算,固然圖象處理 GPU 固然是更快的,可是 TensorFlow 已經幫咱們封裝好了,它對每個算子每個操做,它在 CPU 和 GPU 上都去作了實現。
還有就是 TensorFlow 對上層有一些編程接口,尤爲是 C++ 語言或者 Python 語言,以及目前正在完善的 Java 和 Go 語言,都有一些編程接口,因此若是會上層語言也能夠作一些上層開發
用神經網絡訓練的過程就是這一些,這一些過程跟咱們前面講的機器學習訓練過程也是相似的。
這就是一個 TensorFlow 整個的編程模型,若是你們去學過 TensorFlow 的話,對這個也是比較瞭解,具體來講,咱們如何來訓練一個神經網絡?或者說如何來訓練一個數據?獲得一個模型。
其實是說咱們把一個數據X輸入進來,塑性可能作一些數據預處理的操做,而後咱們就進入到,神經網絡是由各個層來組成的。
因此咱們進入第一個層,咱們叫作隱藏層,隱藏層的話,是在神經網絡中最主要的是矩陣乘法運算,稍微知道一句線性數學的知識就知道了,就是 W×X+B,其中W是一個矩陣,而後 B 是一個列的矩陣。
咱們須要學習的就是剛纔說,模型中一堆的參數,最終那個模型中就是 W 和 B 一些參數組成的模型文件,而後咱們把這個數據輸入進去,通過矩陣乘法運算,而後通過 RELU 這個函數的非線性變換,這時候第一個隱藏就處理完了。
而後再接下來,這一個很是簡單的神經網絡只有三層,接下來輸出層的話也是 W×X+B,輸出層之後,就是計算我這個輸入
好比說我作一個圖片分類一個操做,我計算這個輸入,它對應的輸出,在各類類別下的機率,好比我輸入一個貓,它可能輸出貓 90%,狗 5%,兔子 5%,輸出的就是這樣一個機率分佈。
而後咱們會對這個機率分佈和原始類標記作一個交叉,原始的類標記就是我輸入一個貓,而後這個貓的機率確定是 100%,這個 100%和我剛纔獲得的作個交叉熵,原數據的分佈和咱們目標獲得的,預測數據分佈作一個交叉熵,整個就完成了。
再計算梯度,就是反向傳播的過程,就是爲了使偏差更小,反覆進行神經網絡訓練,直到去訓練一個偏差比較小的 W 和 B 值,而後把 W 和 B 值存儲下來之後就是一個模型,這個模型未來咱們拿着他,這個模型就是一個文件,你下一次輸入一張圖片,我馬上就告訴你這是一個貓仍是一個狗,馬上告訴你。就跟百度在最強大腦上相似,就是一個模型文件輸入雙胞胎,我就馬上給他檢測出來,就是那種
這是 TensorFlow 編程模型,而後 TensorFlow 自己的架構是什麼樣的?
TensorFlow 自己是由 TensorFlow 核心 API,分爲上下兩個部分,其實咱們工程師大概都用上面那一部分,上面部分叫作前端部分,前端部分就是用來搭建編程模型,就是我搭建我上一個 PPT 當中顯示的整個神經網絡是什麼樣子?
負責構造計算圖,由於 TensorFlow 是基於靜態圖模型的,實際上就是圖論,咱們計算機中圖論的模型,因此前端系統主要是用來提供編程模型,而且來負責構造計算圖,那麼後端系統的話主要是來運營構造咱們的計算圖,而且提供運行時的環境,負責執行構造的計算圖。
後端系統你們看到其實 TensorFlow 在底層實現了一些 GRPC 以及遠程過程調用協議,還有遠程的內存直接訪問這些協議,能夠不關心底層。
在數據操做層主要實現了各個算子,好比說常數的算子,矩陣操做算子,卷積的算子,非線性函數的算子,隊列的算子等等,數據操做層
而後在圖計算層當中,TensorFlow 剛纔說它是異構設備的分佈式計算框架,分佈式當中,你就理解你們作過大數據,可以實現分佈式的計算,可是它也能夠在本地進行計算,由於有好幾種部署方式。
一方面實現了在本地能夠計算圖,另外一方面它能夠分佈式計算圖,分佈式計算圖依賴的就是遠程過程調用,以及遠程的內存直接訪問,由於各個節點上須要直接的通信以及數據傳輸。
可是這些咱們其實你們都不須要關心,這是 TensorFlow 開發者須要關心的事情,而後咱們關心就是 TensorFlow 核心 API 上面這些如何用 Python 這些語言去構建一個神經網絡?可能在優化過程當中,可能會修改一些數據操做層的東西,好比說把一些算子作融合,而後使得整個計算圖的運營效率更高。
這就是 TensorFlow 技術棧,我給你們稍微說一下,其實跟上面差很少,可是若是你要是真正從事人工智能方面開發的話,這些技術棧必須得有的,好比說你須要瞭解硬件中 GPO 的編程,而後你須要瞭解 GPO,gRPC 或者是RDMA 協議,這種網絡協議在 TensorFlow 當中怎麼實現的?
數值的計算層,就是這幾個數值計算的庫,還有就是高位的計算層,就是Eigen,這個用 C++ 寫的數組計算的第三方庫,可是這些都是開源的,還有就是比較重要的 TensorFlow Core,這裏面實現了計算圖的優化,以及咱們神經網絡最重要的前向傳播和反向傳播的過程都在 TensorFlow Core當中實現的。
個人意思就是說,若是你真從事人工智能方向的工做,只要把 TensorFlow 原碼下下來,TensorFlow 用兩種語言寫,一種 Python 語言,一種 C++ 語言,把它看懂,我以爲你對 TensorFlow 的架構就有一個很清楚的瞭解了,而後這是作自己底層優化。
可是若是你不作底層優化方向,你只是作上層應用,好比說訓練一個模型,把它應用到工業界的話,你可能會關心,好比直接使用 Keras 或者 TF Slim,這些東西直接它給你現成幫你實現了業界經典的網絡,以及幫你現成訓練好了模型,都放在 GitHub,你能夠直接把他訓練的模型下載下來,看成你訓練下一個模型的預訓練模型去作,這個就比較簡單。
還有 TensorFlow 可視化工具,TensorBoard,最重要的有兩個功能,一個功能是說,它能夠觀測你在每一步訓練迭代過程當中你的準確率和損失值的一些變化,而後你知道這個模型究竟是好是壞?而後你知道你訓練過程當中可能出現什麼樣的問題?這是第一個優勢
第二個優勢,由於咱們學出來的一堆參數,參數就是 W 和 B,他能夠知道 W 和 B 的分佈,這個分佈是否平滑?平滑是好的,若是不平滑的話,就須要找一些緣由,這就是可視化工具。
TensorFlow 在天然語言處理模型當中應用,首先這個就是很是簡單的天然語言處理模型,RNN,叫作循環神經網絡,其實這只是把循環神經網絡作了一個展開,實際上單獨的循環神經網絡就是在 A 中作循環,一直循環下去,它是跟普通的神經網絡沒有什麼太大的區別。
這個公式就不給你們看了,公式大概知道就行,由於我最開始看的時候,我跟你們也是,應該如今感受同樣的,就是徹底看不懂,而後你多看幾遍,而後再回過頭來再去看就比較容易。
若是說你要入門,好比說我如今作 TensorFlow 方向,而後我面對的行業領域是作天然語言處理相關,天然語言處理固然也分爲文本分類,文本挖掘等等,可是你要選擇模型的時候,你可能會選擇,我是用普通的 RNN,你就必須知道各個模型的優缺點在哪裏?
這裏不作算法,只是作工程方向,你就須要知道我在應用這個項目的時候,應該採用哪種模型?因此就須要知道,好比說 RNN 當中模型的優勢缺點,每一個模型存在的問題,存在問題應該如何去解決?這是咱們作工程方向應該知道的,這都徹底不涉及算法和優化的層面。
好比說 RNN 當中,目前來講它存在兩個問題,第一個問題就是我說的,這個梯度爆炸和梯度消失的問題。
什麼叫梯度爆炸梯度消失?咱們知道反向傳播的過程是從後面往前傳播的,因此梯度消失你就能夠理解爲 0.9,0.9 的 100 次方,就是很是小的一個值了,而後梯度爆炸你就能夠理解爲 1.1 的 100 次方,就是一個很是大的值了,因此就會致使模型不收斂。
咱們固然但願它是 1 的 100 次方,最終的損失值就是一個恆定的,相對來講訓練到一個局部最小值,因此梯度爆炸梯度消失我說的那兩種狀況,RNN 會存在這兩種狀況,爲何?具體的話你們可能須要知道緣由就是須要看公式,可是你不想知道緣由,你知道它存在的問題就能夠了。
第二個問題會存在的問題是 conflict 問題,也就是個人數據輸入進來之後,沒有一個東西幫忙擋着,由於 RNN 的話是一個數據序列的輸入進來的,我可能須要控制我上一個序列對下一個序列的影響。
而傳統的 RNN 來講是控制不了的,是徹底把上一個序列對它的影響徹底放行或者徹底屏蔽掉,它沒有說是控制,放行 50%,放行 30% 等等,沒有這個控制,而這個控制是咱們未來能夠優化的點,這個優化的點就在於,咱們能夠把這個控制當成一個參數去學習
因此這是傳統 RNN 存在的問題,就是說不管在輸入領域,上一個層向下一個層的輸入,以及下一個層向再下一個層的輸出,都存在是否徹底放行,或者是否徹底屏蔽?而後這裏面把這個衝突叫作 conflict,沒法去調整,只能徹底放行或屏蔽。
若是咱們不理解那個理論其實也沒有關係,咱們直接看 RNN 在T ensorFlow 中如何實現的?那麼 TensorFlow 中採用的是編程的方式,直接說每個 RNN,RNN 它都須要實現四個函數。
若是 RNN 具有了這四個函數,那麼它就至關於你就實現了 RNN 的模型了,因此每個 RNN 都須要這幾個屬性,那麼這幾個屬性,而後它須要的參數輸入本時刻的輸入,以及上一時刻的狀態,通過 output 獲得下一時刻狀態。
在 TensorFlow 當中直接用一句 RNN Cells 就能夠搞定了,輸入的話就是這種,基本上輸入的參數和輸出在 TensorFlow 當中都是固定的
針對剛纔不是有兩個問題嗎?一個是梯度爆炸和梯度消失的問題,另外一個問題是對是否徹底放行和是否徹底屏蔽的問題就提出了,在 1997 年提出了這個模型。
經過什麼方式解決剛纔那兩個問題?第一個問題引入了 TEC 的架構,TEC 的架構實際上就是咱們在這裏面,給你們看一下,其實作了兩個點,一個是在這裏引入了 CEC 的架構,而後這個斜槓表明線性函數,而且它的權重爲 1,而後而且還引入了兩個門,這個門就是用來調節剛纔說的徹底放行或者徹底屏蔽的問題,就是說我能夠達到 30% 的放行 50% 的放行,而不是說徹底 0 和 1 的這種行,這是 1997 年提出的一個架構。
又優化了一個版本,叫作標準的 LSTM,實際上引入了 forget gate,緣由是說,好比說說兩句話的時候,在第二句話,由於 RNN 是序列輸入的,在第二句話,但願把第一句話徹底忘記掉,由於 RNN 原本是一個有記憶的網絡。
這時候就引入一個 forget gate,就用來控制是否記住或者是否忘記上一時刻的狀態?這就是如今咱們經常使用標準的 LSTM,左邊的話就是它的架構,右邊就是如何把這個負載的架構用數學來表達。
這個我研究了好久好久才知道原來這個架構是能夠用數學去這樣表達出來的,實際上是很是簡單。
大概知道理論以後,你就能夠直接調用 TensorFlow 函數了,它直接就幫你實現了,同時它還有很是豐富的解釋。
我總結一下 TensorFlow 下面的關於天然語言處理的一些實踐小結。
最後我給你們介紹一下,我剛纔說過,如今作 AI 公司有幾個領域,一個就是雲基礎服務,就是出去能夠賣服務的,還有 AI 芯片領域,就作安防或者物聯網上面的 AI 芯片,第三個領域就是關於圖象或語音的領域,圖象你跟行業結合。
好比衣服的一些標籤,以及視頻當中你輸入文字就能搜索到視頻的某一幀,而後語音的話就是剛纔說的,好比迅飛和搜狗正在作的事。
而後今天我給你們介紹,我前些日子有在作的雲深度學習平臺的一些架構設計。
什麼叫雲深度訓練平臺?就是但願你的數據輸入進來,咱們但願提供一個深度學習的基礎服務,給各個業務方提供深度學習基礎服務
好比說你的業務部門有文本分類服務,只要天天告訴你,給你輸入日誌,而後我作個雲深度學習平臺的部門,我給他訓練模型就好了,鑑黃部門,他把圖片給我,我給他訓練模型,鑑暴恐的部門,他把圖片給我,我給他訓練模型就好了,這個雲深度學習就是作這個的,你們能夠去看一下
這是咱們目前的一個架構設計,而後這個設計你們要會參考,就是谷歌的機器學習引擎去設計,而後也就是說前端咱們經過 web 的方式,咱們直接以拖拽的形式去組合一個神經網絡,而後我在 TensorFlow 的集羣容器當中就能夠直接去訓練這個神經網絡,而且實現自動調參的功能。
好比自動調參功能是怎麼實現的呢?我在輸入這些數據的時候,設置一個參數範圍,我在雲深度學習平臺當中就能夠直接生成 20 套的分佈式神經網絡的環境,而後每一套環境都去訓練這個數據,最終選擇出一到兩套,模型效果最優的,把它拿出來。
由於這個是集訓練,參數調優,測試一體化的一個平臺,因此直接訓練好模型之後,就不用人工干預,自動上線,自動提供給業務方,因此業務方天天作的事就是天天把他日誌扔給我,而後次日他就拿到個人訓練數據接口,就直接去使用了。
我很是重要跟你們說的,就是在深度學習界很是頭疼的問題就是調參的問題,你們老說是,多是須要不少經驗才能夠的,因此目前深度學習平臺存在很大異議就在於自動化的調參。
而自動化調參是怎麼實現的?就是說設置一個參數的最小值以及最大值,由於有多個超參數,而後把它們組合一下,生成大概 20 套或者 30 套不一樣的參數,而後每一套參數都給他生成一個分佈式的深度學習訓練環境,對同一批數據同時作訓練,這時候選出一到兩個模型效果最好的,把這一到兩個對應的參數做爲我此次訓練的參數。
最後就是彩蛋,彩蛋就是調參經驗,不少同窗入門的話會有的問題,就是經常網絡或者模型不 work 的時候,總是以爲本身調參經驗少,但實際上每每其實也不是,每每可能那篇自己就不怎麼 work,調參經驗多的人也作不了,可是掌握一些調參經驗仍是很重要的,至少能排除一些在網絡結構設計上的一些問題。
而後調參經驗的話通常來講很是重要的就是咱們其實機器學習當中也有這種概念,集成模型,其實調參經驗也有這種思想在裏面,就是說你能夠採用不一樣的參數處理化模式,採用不一樣的數據預處理方式,而後以及有一些訓練技巧,你就千萬不要懼怕爆顯存,直接把模型怎麼往大了放?怎麼可以利用更多的顯存就把它所有佔滿
還有一些可視化的技巧,TensorFlow 自己就提供了,這個也是 TensorFlow 相比其餘機器學習框架一個很大的優點,就在它可視化上面作的很是完備,而後 Ensemble 就是把前面這五種方式,把它分別結合起來。
好比說我用一樣的參數,我用不一樣的方式,或者採用一些交叉驗證的方式,選出參數最好的幾組等等,最後會有一些經驗的參考,專門去介紹調參經驗的。
而後就是個人書了,這個就是廣告,謝謝你們。