丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
專欄 正文
發(fā)私信給Ticwear
發(fā)送

1

揭秘TensorFlow:Google開源到底開的是什么?

本文作者: Ticwear 2015-11-11 17:04
導(dǎo)語:Tensor Flow到底是什么?除了關(guān)注谷歌開源,我們更需要的,是關(guān)注背后深度學(xué)習(xí)的力量。

【編者按】本文作者李理 ,人工智能科技公司出門問問NLP工程師。

揭秘TensorFlow:Google開源到底開的是什么?

這兩天發(fā)現(xiàn)朋友圈被Google開源深度學(xué)習(xí)系統(tǒng)TensorFlow的新聞刷屏了。這當(dāng)然是一個很好的消息,尤其對我們這種用機器學(xué)習(xí)來解決實際問題的工程師來說更是如此。但同時很多人并不清楚聽起來神乎其神的“TensorFlow”到底是什么,有什么意義。

我是人工智能科技公司“出門問問”的工程師,對人工智能“深度學(xué)習(xí)”理論有一定的了解,在這里就為大家“破霧”,聊一聊Google的開源系統(tǒng)TensorFlow。

什么是深度學(xué)習(xí)?

在機器學(xué)習(xí)流行之前,都是基于規(guī)則的系統(tǒng),因此做語音的需要了解語音學(xué),做NLP的需要很多語言學(xué)知識,做深藍(lán)需要很多國際象棋大師。

而到后來統(tǒng)計方法成為主流之后,領(lǐng)域知識就不再那么重要,但是我們還是需要一些領(lǐng)域知識或者經(jīng)驗來提取合適的feature(特征),feature的好壞往往決定了機器學(xué)習(xí)算法的成敗。對于NLP來說,feature還相對比較好提取,因為語言本身就是高度的抽象;而對于Speech或者Image來說,我們?nèi)祟愖约阂埠茈y描述我們是怎么提取feature的。比如我們識別一只貓,我們隱隱約約覺得貓有兩個眼睛一個鼻子有個長尾巴,而且它們之間有一定的空間約束關(guān)系,比如兩只眼睛到鼻子的距離可能差不多。但怎么用像素來定義”眼睛“呢?如果仔細(xì)想一下就會發(fā)現(xiàn)很難。當(dāng)然我們有很多特征提取的方法,比如提取邊緣輪廓等等。

但是人類學(xué)習(xí)似乎不需要這么復(fù)雜,我們只要給幾張貓的照片給人看,他就能學(xué)習(xí)到什么是貓。人似乎能自動“學(xué)習(xí)”出feature來,你給他看了幾張貓的照片,然后問貓有什么特征,他可能會隱隱預(yù)約地告訴你貓有什么特征,甚至是貓?zhí)赜械奶卣?,這些特征豹子或者老虎沒有。

深度學(xué)習(xí)為什么最近這么火,其中一個重要的原因就是不需要(太多)提取feature。

從機器學(xué)習(xí)的使用者來說,我們以前做的大部分事情是feature engineering,然后調(diào)一些參數(shù),一般是為了防止過擬合。而有了深度學(xué)習(xí)之后,如果我們不需要實現(xiàn)一個CNN或者LSTM,那么我們似乎什么也不用干。(機器讓工人失業(yè),機器學(xué)習(xí)讓搞機器學(xué)習(xí)的人失業(yè)!人工智能最終的目的是讓人類失業(yè)?)

揭秘TensorFlow:Google開源到底開的是什么?

但是深度學(xué)習(xí)也不是萬能的,至少現(xiàn)在的一個問題是它需要更強的計算能力才能訓(xùn)練出一個比較好的模型。它還不能像人類那樣通過很少的訓(xùn)練樣本就能學(xué)習(xí)很好的效果。

其實神經(jīng)網(wǎng)絡(luò)提出好幾十年了,為什么最近才火呢?其中一個原因就是之前它的效果并不比非深度學(xué)習(xí)算法好,比如SVM。

到了2006年之后,隨著計算能力的增強(尤其是GPU的出現(xiàn)),深度神經(jīng)網(wǎng)絡(luò)在很多傳統(tǒng)的機器學(xué)習(xí)數(shù)據(jù)集上體現(xiàn)出優(yōu)勢來之后,后來用到Image和Speech,因為它自動學(xué)出的feature不需要人工提取feature,效果提升更加明顯。這是否也說明,我們之前提取的圖像feature都不夠好,或者是根據(jù)人腦的經(jīng)驗提取的feature不適合機器的模型?

很多人對深度學(xué)習(xí)頗有微詞的一個理由就是它沒有太多理論依據(jù),更多的像蠻力的搜索——非常深的層數(shù),幾千萬甚至上億參數(shù),然后調(diào)整參數(shù)擬合輸入與輸出。其實目前所有的機器學(xué)習(xí)都是這樣,人類的大腦的學(xué)習(xí)有所不同嗎,不是神經(jīng)元連接的調(diào)整嗎?

但不管怎么說,從深度神經(jīng)網(wǎng)絡(luò)的使用者(我們這樣的工程師)的角度來說,如果我們選定了一種網(wǎng)絡(luò)結(jié)構(gòu),比如CNN,那么我們要做的就是根據(jù)經(jīng)驗,選擇合適的層數(shù),每層的神經(jīng)元數(shù)量,激活函數(shù),損失函數(shù),正則化的參數(shù),然后使用validation數(shù)據(jù)來判定這次訓(xùn)練的效果。從效果來說,一般層次越多效果越好(至少相對一兩層的網(wǎng)絡(luò)來說),但是層次越多參數(shù)也越多,訓(xùn)練就越慢。單機訓(xùn)練一個網(wǎng)絡(luò)花幾天甚至幾周的時間非常常見。因此用多個節(jié)點的計算機集群來訓(xùn)練就是深度學(xué)習(xí)的核心競爭力——尤其對于用戶數(shù)據(jù)瞬息萬變的互聯(lián)網(wǎng)應(yīng)用來說更是如此。

常見深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和問題

對于機器學(xué)習(xí)來說,訓(xùn)練是最關(guān)鍵也最困難的部分,一般的機器學(xué)習(xí)模型都是參數(shù)化的模型,我們可以把它看成一個函數(shù)y=f(w;x)。

比如拿識別圖像來說,輸入x是這張圖片的每個像素值,比如MNIST的數(shù)據(jù)是28*28的圖片,每個點是RGB的顏色值,那么x就是一個28*28*3的向量。而一個模型有很多參數(shù),用w表示。輸出y是一個向量,比如MNIST的數(shù)據(jù)是0-9的10個數(shù)字,所以我們可以讓y輸出一個10維的向量,分別代表識別成0-9的置信度(概率),選擇最大的那個作為我們的識別結(jié)果(當(dāng)然更常見的是最后一層是softmax而不是普通的激活函數(shù),這樣這個10維向量加起來等于1,可以認(rèn)為是分類的概率)。

而訓(xùn)練就是給這個模型很多(x,y),然后訓(xùn)練的過程就是不斷的調(diào)整參數(shù)w,然后使得分類錯誤盡可能少(由于分類錯誤相對w不連續(xù)因而不可求導(dǎo),所以一般使用一個連續(xù)的Loss Function)。

對于神經(jīng)網(wǎng)絡(luò)來說,標(biāo)準(zhǔn)的訓(xùn)練算法就是反向傳播算法(BackPropagation)。從數(shù)學(xué)上來說就是使用(隨機)梯度下降算法,求Loss Function對每個參數(shù)的梯度。另外我們也可以從另外一個角度來看反向傳播算法,比如最后一層的神經(jīng)網(wǎng)絡(luò)參數(shù),直接造成錯誤(Loss);而倒數(shù)第二層的神經(jīng)網(wǎng)絡(luò)參數(shù),通過這一次的激活函數(shù)影響最后一層,然后間接影響最終的輸出。反向傳播算法也可以看成錯誤不斷往前傳播的過程。

由于深度神經(jīng)網(wǎng)絡(luò)的參數(shù)非常多,比如GoogleNet, 2014年ILSVRC挑戰(zhàn)賽冠軍,將Top5 的錯誤率降低到6.67%,它是一個22層的CNN,有5百多萬個參數(shù)。所以需要強大的計算資源來訓(xùn)練這么深的神經(jīng)網(wǎng)絡(luò)。

其中,CNN是Image領(lǐng)域常見的一種深度神經(jīng)網(wǎng)絡(luò)。由Yann LeCun提出,通過卷積來發(fā)現(xiàn)位置無關(guān)的feature,而且這些feature的參數(shù)是相同的,從而與全連接的神經(jīng)網(wǎng)絡(luò)相比大大減少了參數(shù)的數(shù)量。

揭秘TensorFlow:Google開源到底開的是什么?

(cnn深度神經(jīng)網(wǎng)絡(luò))

最開始的改進(jìn)是使用GPU來加速訓(xùn)練,GPU可以看成一種SIMT的架構(gòu),和SIMD有些類似,但是執(zhí)行相同指令的warp里的32個core可以有不同的代碼路徑。對于反向傳播算法來說,基本計算就是矩陣向量乘法,對一個向量應(yīng)用激活函數(shù)這樣的向量化指令,而不像在傳統(tǒng)的代碼里會有很多if-else這樣的邏輯判斷,所以使用GPU加速非常有用。

但即使這樣,單機的計算能力還是相對有限的。

深度學(xué)習(xí)開源工具

從數(shù)學(xué)上來講,深度神經(jīng)網(wǎng)絡(luò)其實不復(fù)雜,我們定義不同的網(wǎng)絡(luò)結(jié)構(gòu),比如層次之間怎么連接,每層有多少神經(jīng)元,每層的激活函數(shù)是什么。前向算法非常簡單,根據(jù)網(wǎng)絡(luò)的定義計算就好了。

而反向傳播算法就比較復(fù)雜了,所以現(xiàn)在有很多深度學(xué)習(xí)的開源框架來幫助我們把深度學(xué)習(xí)用到實際的系統(tǒng)中。

我們可以從以下幾個不同的角度來分類這些開源的深度學(xué)習(xí)框架。

  • 通用vs專用

深度學(xué)習(xí)抽象到最后都是一個數(shù)學(xué)模型,相對于傳統(tǒng)的機器學(xué)習(xí)方法來說少了很多特征抽取的工作,但是要把它用到實際的系統(tǒng)中還有很多事情要做。而且對于很多系統(tǒng)來說,深度學(xué)習(xí)只是其中的一個模塊。

拿語音識別來說,語音識別包含很多模塊,比如聲學(xué)模型和語言模型,現(xiàn)在的聲學(xué)模型可以用LSTMs(一種RNN,也是一種深度學(xué)習(xí)網(wǎng)絡(luò))來做,但是我們需要把它融入整個系統(tǒng),這就有很多工作需要做。而且目前大部分的機器學(xué)習(xí)方法包括深度學(xué)習(xí),都必須假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)是相同(或者類似)的分布的。所以在實際的應(yīng)用中,我們需要做很多數(shù)據(jù)相關(guān)的預(yù)處理工作。


比如Kaldi,它是一個語音識別的工具,實現(xiàn)了語音識別的所有模塊,也包括一些語音識別常用的深度神經(jīng)網(wǎng)絡(luò)模型,比如DNN和LSTM。

而Caffe更多的是用在圖像識別,它實現(xiàn)了CNN,因為這個模型在圖像識別上效果非常好。

  • 框架vs庫

大部分開源的深度學(xué)習(xí)工具把整個模型都封裝好了,我們只需要指定一些參數(shù)就行了。比如我們使用Caffe的CNN。


但是還有一些工具只是提供一些基礎(chǔ)庫,比如Theano,它提供了自動求梯度的工具。

我們可以自己定義網(wǎng)絡(luò)的結(jié)構(gòu),我們不需要自己求梯度。使用Theano的好處是如果我們“創(chuàng)造”一個新的網(wǎng)絡(luò)結(jié)構(gòu)或者是很新的深度神經(jīng)網(wǎng)絡(luò),那么其它框架很可能還沒有實現(xiàn),所以Theano在學(xué)術(shù)界很流行。當(dāng)然壞處就是因為它不可能針對特定的模型做優(yōu)化,所以可能性能不如特定的實現(xiàn)那么好。

  • 單機vs集群

目前大部分的開源工具都是單機版的,有些支持在一個節(jié)點的多個GPU訓(xùn)練,但是支持GPU cluster比較少,目前支持多機訓(xùn)練的有GraphLab和Deeplearning4j。

Tensor Flow到底是什么?

Tensor(張量)意味著N維數(shù)組,F(xiàn)low(流)意味著基于數(shù)據(jù)流圖的計算,TensorFlow即為張量從圖的一端流動到另一端。

TensorFlow 表達(dá)了高層次的機器學(xué)習(xí)計算,大幅簡化了第一代系統(tǒng),并且具備更好的靈活性和可延展性。TensorFlow一大亮點是支持異構(gòu)設(shè)備分布式計算,它能夠在各個平臺上自動運行模型,從電話、單個CPU / GPU到成百上千GPU卡組成的分布式系統(tǒng)。

揭秘TensorFlow:Google開源到底開的是什么?

從目前的文檔看,TensorFlow支持CNN、RNN和LSTM算法,這都是目前在Image,Speech和NLP最流行的深度神經(jīng)網(wǎng)絡(luò)模型。

而且從Jeff Dean的論文來看,它肯定是支持集群上的訓(xùn)練的。

在論文里的例子來看,這個架構(gòu)有點像Spark或者Dryad等圖計算模型。就像寫Map-reduce代碼一樣,我們從高層的角度來定義我們的業(yè)務(wù)邏輯,然后這個架構(gòu)幫我們調(diào)度和分配計算資源(甚至容錯,比如某個計算節(jié)點掛了或者太慢)。目前開源的實現(xiàn)分布式Deep learning的GraphLab就是GAS的架構(gòu),我們必須按照它的抽象來編寫Deep Learing代碼(或者其它分布式代碼,如果PageRank),而Deeplearning4j直接使用了Spark。

Map-Reduce的思想非常簡單,但是要寫出一個穩(wěn)定可用的工業(yè)級產(chǎn)品來就不容易了。而支持分布式機器學(xué)習(xí)尤其是深度學(xué)習(xí)的產(chǎn)品就更難了,Google的TensorFlow應(yīng)該是一種抽象方式,可惜現(xiàn)在開源的部分并沒有這些內(nèi)容。有點像Google開源了一個單機版的Hadoop,可以用這種抽象(Map-reduce)來簡化大數(shù)據(jù)編程,但是實際應(yīng)用肯定就大大受限制了。

深度學(xué)習(xí)能解決所有問題嗎?

至少目前來看,深度學(xué)習(xí)只是在Speech和Image這種比較“淺層”的智能問題上效果是比較明顯的,而對于語言理解和推理這些問題效果就不那么好了,也許未來的深度神經(jīng)網(wǎng)絡(luò)能解決更“智能”的問題,但只是目前還不行。

Google開源TensorFlow的意義

這一次的Google開源深度學(xué)習(xí)系統(tǒng)TensorFlow在很多地方可以應(yīng)用,如語音識別,自然語言理解,計算機視覺,廣告等等。但是,基于以上論點,我們也不能過分夸大TensorFlow這種通用深度學(xué)習(xí)框架在一個工業(yè)界機器學(xué)習(xí)系統(tǒng)里的作用。在一個完整的工業(yè)界語音識別系統(tǒng)里, 除了深度學(xué)習(xí)算法外,還有很多工作是專業(yè)領(lǐng)域相關(guān)的算法,以及海量數(shù)據(jù)收集和工程系統(tǒng)架構(gòu)的搭建。

不過總的來說,這次谷歌的開源很有意義,尤其是對于中國的很多創(chuàng)業(yè)公司來說,他們大都沒有能力理解并開發(fā)一個與國際同步的深度學(xué)習(xí)系統(tǒng),所以TensorFlow會大大降低深度學(xué)習(xí)在各個行業(yè)中的應(yīng)用難度。

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

揭秘TensorFlow:Google開源到底開的是什么?

分享:
相關(guān)文章

知情人士

Ticwear是由人工智能公司出門問問于2014年12月19日發(fā)布的全球首款中文智能手表操作系統(tǒng),得到了媒體和用戶的一致好評。出門問問一直在尋找人工智能在可穿戴設(shè)備上的最佳落地方式,以及最適合自然語音交互的載體。Ticwear用到的“神經(jīng)網(wǎng)絡(luò)”、“自然語言”、“深度學(xué)習(xí)”、“語音識別”等技術(shù),比所謂機器人的人工智能在技術(shù)層面上一樣都不少。
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說