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

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

1

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

【編者按】本文作者李理 ,人工智能科技公司出門(mén)問(wèn)問(wèn)NLP工程師。

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

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

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

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

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

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

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

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

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

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

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

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

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

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

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

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

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

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

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

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

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

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

但即使這樣,單機(jī)的計(jì)算能力還是相對(duì)有限的。

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

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

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

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

  • 通用vs專(zhuān)用

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

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


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

而Caffe更多的是用在圖像識(shí)別,它實(shí)現(xiàn)了CNN,因?yàn)檫@個(gè)模型在圖像識(shí)別上效果非常好。

  • 框架vs庫(kù)

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


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

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

  • 單機(jī)vs集群

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

Tensor Flow到底是什么?

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

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

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

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

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

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

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

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

Google開(kāi)源TensorFlow的意義

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

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

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

揭秘TensorFlow:Google開(kāi)源到底開(kāi)的是什么?

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

知情人士

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