人工智能學(xué)家 生物神經(jīng)網(wǎng)絡(luò)這個概念的發(fā)展,和今天我們談的神經(jīng)網(wǎng)絡(luò)有什么關(guān)系嗎?我們今天談到的神經(jīng)網(wǎng)絡(luò),除了在部分名詞上借鑒了生物學(xué)神經(jīng)網(wǎng)絡(luò)之外,跟生物學(xué)神經(jīng)網(wǎng)絡(luò)已經(jīng)沒有任何關(guān)系,它已經(jīng)完全是數(shù)學(xué)和計算機領(lǐng)域的概念,這也是人工智能發(fā)展成熟的標(biāo)志。這點大家要區(qū)分開,不要把生物神經(jīng)網(wǎng)絡(luò)跟我們今天談到的人工智能有任何的混淆。 神經(jīng)網(wǎng)絡(luò)的發(fā)展并不是一帆風(fēng)順的,這中間大概經(jīng)歷了三起三折的過程。 大約在1904年,人類已經(jīng)對人腦的神經(jīng)元有了最初步的認識和了解。1943年的時候,心理學(xué)家麥卡洛克 (McCulloch) 和數(shù)學(xué)家 Pitts 參考了生物神經(jīng)元的結(jié)構(gòu),發(fā)表了抽象的神經(jīng)元模型M。這個概念的提出,激發(fā)了大家對人智力探索的熱情。到了1949年,有一個心理學(xué)家赫布(Hebb)提出了著名的Hebb模型,認為人腦神經(jīng)細胞的突觸上的強度上是可以變化的。于是計算科學(xué)家們開始考慮用調(diào)整權(quán)值的方法來讓機器學(xué)**,這就奠定了今天神經(jīng)網(wǎng)絡(luò)基礎(chǔ)算法的理論依據(jù)。到了1958年,計算科學(xué)家羅森布拉特(Rosenblatt)提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò),并給它起了一個很特別的名字—“感知器”(Perceptron)。人們認為這就是人類智能的奧秘,許多學(xué)者和科研機構(gòu)紛紛投入到對神經(jīng)網(wǎng)絡(luò)的研究中。美國軍方也大力資助了神經(jīng)網(wǎng)絡(luò)的研究,并認為神經(jīng)網(wǎng)絡(luò)是比“曼哈頓工程”更重要的項目。這段時間直到1969年才結(jié)束,這個時期可以看作神經(jīng)網(wǎng)絡(luò)的一次**。事實上感知器只能做簡單的線性分類任務(wù)。但是當(dāng)時的人們熱情太過于高漲,并沒有清醒的認識到這點不足。于是,當(dāng)人工智能領(lǐng)域的巨擘明斯基(Minsky)指出個問題的時候,事態(tài)就發(fā)生了反轉(zhuǎn)。明斯基指出,如果將計算層增加到兩層,則計算量過大并且缺少有效的學(xué)**算法。所以,他認為研究更深層的網(wǎng)絡(luò)是沒有價值的。明斯基在1969年出版了一本叫《Perceptron》的書,里面通過數(shù)學(xué)證明了感知器的弱點,尤其是感知器對XOR(異或)這樣的簡單分類任務(wù)都無法解決。由于明斯基在人工智能領(lǐng)域的巨大影響力以及書中呈現(xiàn)的明顯的悲觀態(tài)度,這很大多數(shù)多學(xué)者紛紛放棄了對于神經(jīng)網(wǎng)絡(luò)的研究。于是神經(jīng)網(wǎng)絡(luò)的研究頓時陷入了冰河期。這個時期又被稱為“AI Winter”。將近十年以后,神經(jīng)網(wǎng)絡(luò)才會迎來復(fù)蘇。 時間到了1986年,Rumelhar和Hinton提出了劃時代的反向傳播算法(Backpropagation,BP)。這個算法有效的解決了兩層神經(jīng)網(wǎng)絡(luò)所需要的復(fù)雜計算量問題,從而帶動了使用兩層神經(jīng)網(wǎng)絡(luò)研究的熱潮。我們看到的大部分神經(jīng)網(wǎng)絡(luò)的教材,都是在著重介紹兩層(帶一個隱藏層)神經(jīng)網(wǎng)絡(luò)的內(nèi)容。這時候的Hinton 剛剛初露崢嶸,30年以后正是他重新定義了神經(jīng)網(wǎng)絡(luò),帶來了神經(jīng)網(wǎng)絡(luò)復(fù)蘇的又一個春天。盡管早期對于神經(jīng)網(wǎng)絡(luò)的研究受到了生物學(xué)的很大的啟發(fā),但從BP算法開始研究者們更多是從數(shù)學(xué)上尋求問題的最優(yōu)解,不再盲目模擬人腦網(wǎng)絡(luò)。這是神經(jīng)網(wǎng)絡(luò)研究走向成熟的里程碑的標(biāo)志。 90年代中期,由Vapnik等人提出了支持向量機算法(Support Vector Machines,支持向量機)。很快這個算法就在很多方面體現(xiàn)出了對比神經(jīng)網(wǎng)絡(luò)的巨大優(yōu)勢,例如:無需調(diào)參、高效率、全局最優(yōu)解等?;谶@些理由,SVM算法迅速打敗了神經(jīng)網(wǎng)絡(luò)算法成為那個時期的主流。而神經(jīng)網(wǎng)絡(luò)的研究則再次陷入了冰河期。 在被人摒棄的十個年頭里面,有幾個學(xué)者仍然在堅持研究。這其中的很重要的一個人就是加拿大多倫多大學(xué)的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發(fā)表了論文,首次提出了“深度信念網(wǎng)絡(luò)”的概念。與傳統(tǒng)的訓(xùn)練方式不同,“深度信念網(wǎng)絡(luò)”有一個“預(yù)訓(xùn)練”(pre-training)的過程,這可以方便的讓神經(jīng)網(wǎng)絡(luò)中的權(quán)值找到一個接近最優(yōu)解的值,之后再使用“微調(diào)”(fine-tuning)技術(shù)來對整個網(wǎng)絡(luò)進行優(yōu)化訓(xùn)練。這兩個技術(shù)的運用大幅度減少了訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)的時間。在他的論文里面,他給多層神經(jīng)網(wǎng)絡(luò)相關(guān)的學(xué)**方法賦予了一個新名詞— “深度學(xué)習(xí)”。 很快,深度學(xué)**在語音識別領(lǐng)域嶄露頭角。接著在2012年,深度學(xué)**技術(shù)又在圖像識別領(lǐng)域大展拳腳。Hinton與他的學(xué)生在ImageNet競賽中,用多層的卷積神經(jīng)網(wǎng)絡(luò)成功地對包含一千個類別的一百萬張圖片進行了訓(xùn)練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。這個結(jié)果充分證明了多層神經(jīng)網(wǎng)絡(luò)識別效果的優(yōu)越性。從那時起,深度學(xué)**就開啟了新的一段黃金時期。我們看到今天深度學(xué)**和神經(jīng)網(wǎng)絡(luò)的火熱發(fā)展,就是從那個時候開始引爆的。 可以說在過去十幾年時間里,圖中這四位學(xué)者引領(lǐng)了深度學(xué)**發(fā)展最。第一位就是Yann LeCun,他曾在多倫多大學(xué)隨 Hinton攻讀博士后,現(xiàn)在是紐約大學(xué)的教授,同時還是Facebook人工智能最重要的推動者和科學(xué)家。第二位就是是之前我們多次提到的Geoffrey Hinton,現(xiàn)在是Google Brain。第三位是Bengio,他是蒙特利爾大學(xué)的教授,他仍然堅持在學(xué)術(shù)領(lǐng)域里面不斷探索。Benjio主要貢獻在于他對RNN(遞歸神經(jīng)網(wǎng)絡(luò))的一系列推動。第四位是Andrew Ng(吳恩達),大家在很多媒體上見到過他。上個月他還來到北京參加過一次技術(shù)大會。因為他的華人身份更容易被大家接受。在純理論研究上面Andrew Ng 的光芒不如上述三位大牛,甚至可以說有不小的差距,但是在工程方面的應(yīng)用他仍然是人工智能領(lǐng)域的權(quán)威。 神經(jīng)網(wǎng)絡(luò)究竟可以用來干什么?神經(jīng)網(wǎng)絡(luò)如果放到簡單概念上,可以理解成幫助我們實現(xiàn)一個分類器。對于絕大多數(shù)人工智能需求其實都可以簡化成分類需求。更準(zhǔn)確的描述就是絕大多數(shù)與智能有關(guān)的問題,都可以歸結(jié)為一個在多維空間進行模式分類的問題 例如,識別一封郵件,可以告訴我們這是垃圾郵件或者是正常的郵件;或者進行疾病診斷,將檢查和報告輸入進去實現(xiàn)疾病的判斷。所以說,分類器就是神經(jīng)網(wǎng)絡(luò)最重要的應(yīng)用場景。 究竟什么是分類器,以及分類器能用什么方式實現(xiàn)這個功能?簡單來說,將一個數(shù)據(jù)輸入給分類器,分類器將結(jié)果輸出。曾經(jīng)有人問過這樣一個問題,如果對一個非專業(yè)的人士,你如何用通俗表達方法向他介紹神經(jīng)網(wǎng)絡(luò)的分類器。有人就用了水果識別做為例子。例如,我非常喜歡吃蘋果,當(dāng)你看到一個新蘋果,你想知道它是不是好吃是不是成熟,你鑒別的依據(jù)是很多年里你品嘗過的許許多多的蘋果。你會通過色澤、氣味或其它的識別方法加以判斷。這樣判斷過程在深度學(xué)**和神經(jīng)網(wǎng)絡(luò)里面,我們就稱之為訓(xùn)練過的分類器。這個分類器建立完成之后,就可以幫助我們識別食入的每個蘋果是不是成熟。對于傳統(tǒng)的人工智能方法,例如邏輯回歸來說,它的決策平面是線性的。所以,這一類的方法一般只能夠解決樣本是線性可分的情況。如果樣本呈現(xiàn)非線性的時候,我們可以引入多項式回歸。隱層的神經(jīng)元對原始特征進行了組合,并提取出來了新的特征,而這個過程是模型在訓(xùn)練過程中自動“學(xué)**”出來的。 利用神經(jīng)網(wǎng)絡(luò)構(gòu)建分類器,這個神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是怎樣的? 其實這個結(jié)構(gòu)非常簡單,我們看到這個圖就是簡單神經(jīng)網(wǎng)絡(luò)的示意圖。神經(jīng)網(wǎng)絡(luò)本質(zhì)上就是一種“有向圖”。圖上的每個節(jié)點借用了生物學(xué)的術(shù)語就有了一個新的名詞 – “神經(jīng)元”。連接神經(jīng)元的具有指向性的連線(有向?。﹦t被看作是“神經(jīng)”。這這個圖上神經(jīng)元并不是最重要的,最重要的是連接神經(jīng)元的神經(jīng)。每個神經(jīng)部分有指向性,每一個神經(jīng)元會指向下一層的節(jié)點。節(jié)點是分層的,每個節(jié)點指向上一層節(jié)點。同層節(jié)點沒有連接,并且不能越過上一層節(jié)點。每個弧上有一個值,我們通常稱之為”權(quán)重“。通過權(quán)重就可以有一個公式計算出它們所指的節(jié)點的值。這個權(quán)重值是多少?我們是通過訓(xùn)練得出結(jié)果。它們的初始賦值往往通過隨機數(shù)開始,然后訓(xùn)練得到的最逼近真實值的結(jié)果作為模型,并可以被反復(fù)使用。這個結(jié)果就是我們說的訓(xùn)練過的分類器。 節(jié)點分成輸入節(jié)點和輸出節(jié)點,中間稱為隱層。簡單來說,我們有數(shù)據(jù)輸入項,中間不同的多個層次的神經(jīng)網(wǎng)絡(luò)層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結(jié)果也被稱作輸出節(jié)點,輸出節(jié)點是有限的數(shù)量,輸入節(jié)點也是有限數(shù)量,隱層是我們可以設(shè)計的模型部分,這就是最簡單的神經(jīng)網(wǎng)絡(luò)概念。 如果簡單做一個簡單的類比,我想用四層神經(jīng)網(wǎng)絡(luò)做一個解釋。左邊是輸入節(jié)點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數(shù)據(jù)項。中間隱層就是我們設(shè)計出來的神經(jīng)網(wǎng)絡(luò),這個網(wǎng)絡(luò)現(xiàn)在有不同的層次,層次之間權(quán)重是我們不斷訓(xùn)練獲得一個結(jié)果。最后輸出的結(jié)果,保存在輸出節(jié)點里面,每一次像一個流向一樣,神經(jīng)是有一個指向的,通過不同層進行不同的計算。在隱層當(dāng)中,每一個節(jié)點輸入的結(jié)果計算之后作為下一層的輸入項,最終結(jié)果會保存在輸出節(jié)點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經(jīng)網(wǎng)絡(luò)的簡單概述。 除了從左到右的形式表達的結(jié)構(gòu)圖,還有一種常見的表達形式是從下到上來表示一個神經(jīng)網(wǎng)絡(luò)。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以Andrew Ng和LeCun的文獻使用較多。而在 Caffe框架里則使用的則是從下到上的表達。 簡單來說,神經(jīng)網(wǎng)絡(luò)并不神秘,它就是有像圖,利用圖的處理能力幫助我們對特征的提取和學(xué)**的過程。2006年Hinton的那篇著名的論文中,將深度學(xué)**結(jié)成三個最重要的要素:計算、數(shù)據(jù)、模型。有了這三點,就可以實現(xiàn)一個深度學(xué)**的系統(tǒng)。 程序員需要的工具箱 對于程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們我們來看看,對于程序員來說,著手深度學(xué)**的實踐需要準(zhǔn)備什么樣的工具。 硬件 從硬件來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構(gòu)以外,還出現(xiàn)了附加有乘法器的CPU,用以提升計算能力。此外在不同領(lǐng)域會有DSP的應(yīng)用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學(xué)**應(yīng)用比較熱門的領(lǐng)域。最后一類就是FPGA(可編程邏輯門陣列)。這四種方法各有其優(yōu)缺點,每種產(chǎn)品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調(diào)度,比如讀取數(shù)據(jù),管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的算法。GPU 的管理能力更弱一些,但是運算能力更強。但由于計算單元數(shù)量多,更適合整塊數(shù)據(jù)進行流處理的算法。FPGA在管理與運算處理方面都很強,但是開發(fā)周期長,復(fù)雜算法開發(fā)難度較大。就實時性來說,F(xiàn)PGA是最高的。單從目前的發(fā)展來看,對于普通程序員來說,現(xiàn)實中普遍采用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領(lǐng)域。 為什么是GPU?簡單來說就是性能的表現(xiàn)導(dǎo)致這樣的結(jié)果。隨著CPU的不斷發(fā)展,工藝水平逐步提高,我們開始擔(dān)心摩爾定律會不會失效。但是GPU的概念橫空出世,NVIDIA 的CEO 黃仁勛得意的宣稱摩爾定律沒有失效。我們看到最近幾年,GPU處理能力的提升是非常驚人的。今年發(fā)布的Nvidia P100的處理能力已經(jīng)達到令人恐怖的效果。與CPU處理能力做一個對比,雖然CPU的主頻要遠遠高過GPU的主頻,例如目前GPU在主頻在0.5GHz到1.4gHz,處理單元達到3584個;而且最常見的CPU,比如Intel的處理器,大約只有20幾個處理單元。這種差別是僅僅在處理單元的數(shù)量上就已經(jīng)存在了巨大的差別。所以深度學(xué)**具備大量處理能力計算要求的情況下,GPU無疑具有非常強大的優(yōu)勢。 GPU并不是完全完美的方案!對于程序員來講,我們也應(yīng)該了解到它天生的不足。相比CPU,它仍然存在許多的局限。首先,比如:這種技術(shù)需要綁定特定的硬件、對編程語言的有一定的限制。簡單來說,開發(fā)的靈活性不如CPU。我們**慣的CPU已經(jīng)幫助我們屏蔽掉處理了許多的硬件上細節(jié)問題,而GPU則需要我們直接面對這些底層的處理資源進行編程。第二,在GPU領(lǐng)域不同廠商提供了不兼容的框架。應(yīng)用的算法需要針對特定的硬件進行開發(fā)、完善。這也意味著采用了不同框架的應(yīng)用對于計算環(huán)境的依賴。第三,目前GPU是通過PCIe外部配件的方式和計算機集成在一起。眾所周知,PCIe連接的頻寬是很大的瓶頸,PCIe 3.0 頻寬不過7.877 Gbit/s??紤]到計算需求較大的時,我們會使用顯卡構(gòu)成GPU的集群(SLI),這個頻寬的瓶頸對于性能而言就是一個很大的制約。最后,就是有限的內(nèi)存容量的限制?,F(xiàn)在Intel新推出的E7處理器的內(nèi)存可以達到2TB。但是對于GPU而言,即使是Nvidia 的 P100 提供有16GB的內(nèi)存,將四塊顯卡構(gòu)成SLI(Scalable Link Interface)也只有64GB的顯存容量。如果你的模型需要較大的內(nèi)存,恐怕就需要做更好的優(yōu)化才可以滿足處理的需要。這些都是GPU目前的缺陷和不足。我們在著手使用GPU這種技術(shù)和資源的時候一定要意識到這一點。 GPU除了硬件上具備了一定的優(yōu)勢以外,Nvidia還為程序員提供了一個非常好的開發(fā)框架-CUDA。利用這個編程框架,我們通過簡單的程序語句就可以訪問GPUs中的指令集和并行計算的內(nèi)存。對于這個框架下的并行計算內(nèi)存,CUDA提供了統(tǒng)一管理內(nèi)存的能力。這讓我們可以忽略GPU的差異性。目前的編成接口是C語言的擴展,絕大多數(shù)主流編程語言都可以使用這個框架,例如C/C 、Java、Python以及.NET 等等。 今年的中秋節(jié)假期,我為自己DIY了一臺深度學(xué)**工作站。起因是我買了一塊GeForce GTX 1070顯卡,準(zhǔn)備做一些深度學(xué)**領(lǐng)域的嘗試。因為我的老的電腦上PCIe 2.0 的插槽無法為新的顯卡供電。不得已之下,只好更新了全部設(shè)備,于是就組裝了一臺我自己的深度學(xué)**工作站。這個過程是充滿挑戰(zhàn)的,這并不僅僅是需要熟悉各個部件的裝配。最重要的是要考慮很多細節(jié)的的搭配的問題。比如說供電的問題,要計算出每個單元的能耗功率。這里面又一個重要的指標(biāo)就是TDP( Thermal Design Power)。Intel 6850K的TDP值是140W,1070顯卡的值是150W。于是,系統(tǒng)搭配的電源就選擇了650W的主動電源。其次,如果我們用多塊顯卡(SLI),就必須考慮到系統(tǒng)頻寬的問題。普通的CPU和主板在這方面有很大局限。就我的最基本的需求而言我需要的最大的PCI Expres 與Lanes 是 40。這樣算下來,Intel i7-6850K就是我能找到最便宜而且可以達到要求的CPU了。 本文來自:人機與認知實驗室 人工智能學(xué)家 Aitists 人工智能學(xué)家是權(quán)威的前沿科技媒體和研究機構(gòu),2016年2月成立未來科技學(xué)院,目標(biāo)是研究前沿科技未來發(fā)展趨勢;培養(yǎng)掌握未來科技動向的企業(yè)家和具有獨立創(chuàng)新精神的未來科學(xué)家;孵化和服務(wù)前沿科技創(chuàng)新項目。 |
|
來自: DZANG > 《腦機接口技術(shù)》