神經網路:比原來更容易學習了
作者:Steven Dufresne
翻譯:雁驚寒
隨著黑客、學生、研究人員以及企業數量的增加,神經網路越來越流行。最近一次復甦是在80、90年代,當時幾乎沒有網路,也沒有神經網路相關的工具。本次復甦始於2006年左右。從一個黑客的角度來看,在那個時候都有哪些可用的工具和資源?現在又有哪些?我們對將來的期望又是怎麼樣的呢?對我個人來說,樹莓派上的GPU正是我所期盼的。
80、90年代
閱讀本文的年輕人可能想知道,在互聯網沒有發明之前,我們這些老傢伙是如何接觸到新知識的。其實,紙質雜誌在當時起到了相當大的作用。比如,《科學美國人》雜誌在1992年9月的心靈與大腦特刊便讓我第一次接觸到了神經網路,既是在生物學上,也是在人工智慧學上。
在當時,你既可以自己從頭編寫神經網路程序,也可以從其他地方訂購一套包含源代碼的軟盤。我就曾經在《科學美國人》雜誌的《美國科學家》專欄訂購了這麼一套軟盤。當然,你也可以購買一套能夠開發低級別的、複雜的數學神經網路開發庫。比如,在多倫多大學,就有一個名叫Xerion的免費的模擬器。
如果你經常關注書店裡科學類書刊的話,你有時候也會發現這方面的書籍,最經典的就是曾經出版過兩卷的《並行分布式處理探索》,作者是Rumelhart、 McClelland等人。我最喜歡的一本書是《神經計算與自組織映射導論》,如果你對利用神經網路來控制機械臂感興趣,這本書對你來說將會受益匪淺。
當然,你也可以參加一些短期的課程和會議。我在1994年曾經參加了一個為期兩天的免費會議,這個會議最早是由Geoffrey Hinton主辦的,後來改由多倫多大學主辦。這個會議無論是在當時,還是在現在,都是神經網路領域的領導者。當時被譽為最好的年度會議是神經信息處理系統會議,它在當今仍然很受歡迎。
最後,我把為了發布論文而開發的神經網路程序整理了一遍。同時,我把所有的會議論文、課程講義、複印的文章和手寫的筆記統統摞了起來,足足達到了3英尺厚。
神經網路在經歷了80、90年代的復甦後,又逐漸變得相對低調起來。從整個世界來看,除了對於個別研究團隊,它已經變得不再重要。伴隨著緩慢的改進以及一些小小的突破,神經網路始終保持著很低調。直到大概2006年左右,它又在世界範圍內引發了一場大爆炸。
現在
現在我們來看一下神經網路工具得到重大突破的一些地方:
超過了三層甚至四層深度的新的訓練網路技術,稱之為深層神經網路
通過使用GPU(圖像處理單元)來加速訓練
包含大量樣本的訓練數據的有效性
神經網路框架
現在有非常多的神經網路框架,他們使用了各種不同的授權協議,允許用戶免費下載。其中很多還是開源框架。大部分的流行框架允許你在GPU上運行神經網路,並且支持大多數的神經網路演算法。
下文將介紹一些流行的框架,他們都支持GPU,除了模糊神經網路。
TensorFlow
開發語言:Python,C++
TensorFlow是Google公司推出的最新的神經網路框架,它專門為分布式而設計。作為一個底層框架,雖然有著非常大的靈活性,但是也比高級框架(例如Keras和TFLearn,下文會有介紹)擁有更陡的學習曲線。目前,Google正在開發Keras集成在TensorFlow中的版本。
推薦Hackaday網站上的兩篇文章「能識別鎚子和啤酒瓶的機器人」和「TensorFlow入門」一睹TensorFlow的風采。
Theano
開發語言:Python
這是一款用來做多維矩陣高效數值計算的開源庫。它出自蒙特利爾大學,可運行在Windows、Linux和OS X上。Theano發佈於2009年,已經存在了很長時間。
Caffe
開發語言:命令行, Python, MATLAB
Caffe是一款由伯克利人工智慧研究所和社區貢獻者共同開發的開源庫。在Caffe中,你可以使用文本文件來定義模型,然後通過命令行工具來進行處理。Caffe同時也有Python和MATLAB介面。例如,首先使用文本文件定義模型,然後在另外一個文本文件中給出詳細的訓練方法,然後通過命令行工具讀入這兩個文件,這樣就能開始訓練神經網路了。最後,你可以使用Python程序來調用這個已經訓練好的神經網路來實現一些功能了,比如說把圖片進行分類。
CNTK
開發語言:Python, C++, C#
這是微軟的認知開發包(CNTK),可運行在Windows和Linux上。微軟目前正在開發一個內部使用Keras的版本。
Keras
開發語言:Python
這個庫以TensorFlow或者Theano作為底層,這樣可以使其用起來更加簡單。Keras同時也有支持CNTK的計劃。目前,把Keras融入到TensorFlow的工作正在進行中,而以後就會出現一個僅支持TensorFlow的獨立的版本。
TF Learn
開發語言:Python
跟Keras一樣,是一個基於TensorFlow的高級別的庫。
FANN
開發語言:支持超過15種語言,但不支持GPU
這是一個使用C語言開發的高級別的開源庫,僅可用於完全連接和稀疏連接的神經網路。然而,FANN卻已經流行了很多年,甚至已經包含在一些Linux發行版中。Hackaday最近的一篇「通過強化學習來讓機器人學習走路」中提到了關於FANN的使用。
Torch
開發語言:Lua
一款使用C語言開發的開源庫。特別要注意的一點,在Rorch官網上特別註明了該框架支持嵌入式設備,例如iOS、Android和FPGA。
PyTorch
開發語言:Python
PyTorch相對來說還是比較新的,在其官網上註明了目前還屬於早起的測試版,但似乎現在已經吸引了很多人的目光。它運行在Linux和OS X上,並以Torch作為底層。
你應該選擇哪一個框架呢?除編程語言或者操作系統對你來說是影響選擇的一個大問題,如果你覺得數學太難,或者不想深入地挖掘神經網路的細節,那麼盡量選擇一個高級的框架吧。在這種情況下,請遠離TensorFlow,因為相對於Kera、TFLearn或者其他高級框架,你必須去學習更多的API函數。該框架在強調自身具有強大數學功能的同時,也需要你去花費更多的精力來創建神經網路。另外一個影響你選擇框架的因素是你是否需要做基礎研究,一個高級框架可能不會讓你能接觸到內部邏輯。
在線服務
你是否正在尋找一種可用的神經網路庫,但你又不想花費太多的時間去學習呢?這裡有一些互聯網在線服務可以滿足你的要求。
我們已經看到了無數使用亞馬遜Alexa語音識別服務的例子。Google也提供了包括視覺和語音的雲機器學習服務。這方面的例子有:使用樹莓派來對糖果進行排序,以及識別人類的表情。Wekinator是一款針對藝術家和音樂家的軟體,它可用於訓練神經網路,可以讓人們用手勢來控制屋內的電器的開關。當然了,微軟也有自己的認知服務API,包括視覺、語音、語言等多個方面。
GPU和TPU
遍歷一個神經網路
訓練一個神經網路需要循環迭代訪問整個神經網路,包括正向的和反向的,每次迭代都會提高神經網路的精度。從某種程度上來說,迭代的越多,最後的精度也越高。總的迭代次數可能會達到幾百次甚至上千次。對於80、90年代的計算機來說,要實現足夠多的迭代次數可能需要花費的不可思議的時間。文章「深度學習神經網路:概述」提到,在2004年,GPU的使用使得完全連接神經網路的速度提高了20倍,在2006年,卷積神經網路的速度提高了4倍,到2010年,使用CPU來訓練的速度比使用GPU提高了50倍,神經網路的精度也越來越高。
Nvidia Titan Xp顯卡。 圖片來源: Nvidia
GPU是如何來提高訓練的速度的呢?訓練神經網路最重要的部分是做矩陣乘法運算,在這方面,GPU要比CPU快得多。顯卡和GPU的市場領導者,Nvidia公司,創建了一套名叫CUDA的API,神經網路軟體可以使用這套API來充分利用GPU。今後,我們會經常看到CUDA這個詞。隨著深度學習的發展,Nvidia公司又增加了不少API,包括CuDNN(用於深度神經網路的CUDA)。
Nvidia也有自己的單板計算機:Jetson TX2。該計算機主要用來設計自動駕駛汽車的大腦、自動拍照的無人機等等。當然,我們也要指出,這個電腦的價格還是有點高的。
Google公司也一直致力於設計自己的硬體加速系統:張量處理單元(Tensor Processing Unit,TPU)。你可能也注意到這個名字與上文介紹的Google框架TensorFlow有相似地方。根據Google關於TPU的論文描述,TPU是為神經網路的歸納階段而設計的。歸納不是指訓練神經網路,而是說使用訓練後的神經網路。我們目前還沒有看到有任何框架使用TPU,但是我們還是要記住這個東西的。
使用其他人的硬體
你是否有一個不支持GPU,或者你不想耗費自己的計算資源但是又需要花很長時間來訓練的神經網路?在這種情況下,你可以使用互聯網上的雲計算服務。例如,FloydHub,它對於個人來說並沒有月租費,而且每小時只需要話費幾分錢。還有另外一個選擇:Amazon EC2。
數據集
使用打過標記的數據來訓練神經網路
神經網路的突破之一是包含大量樣本的訓練數據有效性。在訓練一個使用監督訓練演算法的神經網路的時候,需要有大量的數據作為輸入,並且也要告知預期的輸出結果是什麼。在這種情況下,輸入的數據需要打上標記。如果你給神經網路的輸入是一匹馬的圖片,而它的輸出卻說這個圖片看起來像一隻獵豹,那麼它需要知道這個輸出是錯誤的。預期輸出稱為標籤,而輸入數據就是「打了標記的數據」。
在網上有很多這樣的數據集可用來訓練神經網路。MNIST是用來訓練手寫字元識別的數據集,ImageNet和CIFAR是用於標記圖像的兩個不同的數據集。而更多的數據集可以在維基百科上找到。上文列出的很多框架都提供了相應的教程以及必需的數據集。
當然了,這並不是說你必須要有一個大的數據集才能獲得高的準確性。我們上文提到的使用FNN框架的步行機器人,它是使用伺服電機的位置來作為訓練數據的。
其他資源
不同於80、90年代,雖然你現在仍然可以購買到關於神經網路的印刷書籍,但是很多都是在線的了。我喜歡的兩本在線書籍,一本是麻省理工學院出版社的《深度學習》,還有一本是《神經網路與深度學習》。上文列出的那些框架都包含了初學者的入門教程,並且只要你能上網上進行搜索,都能找到無數的網站和YouTube視頻資源。我發現YouTube上的講座和會議視頻非常的有用。
未來
包含GPU的樹莓派7
毫無疑問,未來將會看到更多的框架。
長期以來,雖然我們一直能在市場上看到一些專門的神經晶元和電路板,但是它們並沒有形成一個巨大的市場,因為它們並不是為神經網路軟體這個真正快速增長的領域而設計的。而GPU正是服務於這個市場的。由於包含圖像、聲音、語言的神經網路會越來越多的進入到小型的消費者設備中,因此需要針對該軟體量身定製更多的GPU或處理器,而這些可能會成為樹莓派或Arduino板上的一個新模塊(註:事實證明,樹莓派上有一個GPU)。這並不意味著所有上文提到的框架都會使用這個新模塊,例如,TensorFlow僅支持Nvidia CUDA。 但是,您仍然可以使用GPU來運行自己的神經網路代碼。
目前,GPU已經受到了來自於像TPU這樣的ASIC的競爭,並且以後我們還會看到更多的競爭者,甚至它們可能在神經網路中完全取代GPU。
神經網路作為我們日常生活的一部分一直都存在著,人工智慧會長期保持一定的低調,直到有人做出重大的突破時,它才能再次引起轟動。
在線直播 | 人工智慧核心技術解析與應用實戰峰會由CSDN學院傾力打造,力邀一線公司技術骨幹做深度解讀。本期直播(5月13日)邀請來自阿里巴巴、思必馳、第四範式、一點資訊、58集團、PercepIn等在AI領域有著領先技術研究的一批專家,他們將針對人臉識別、卷積神經網路、大規模分布式機器學習系統搭建、推薦系統、自然語言處理及SLAM在機器人領域應用等熱點話題進行分享。限時特惠199元即可聽6位技術專家的在線分享,歡迎報名參加,加微信csdncxrs入群交流。


※從開發零基礎到登上Steam和Oculus:一個VR遊戲開發者的自述
TAG:CSDN |
※還差一步之學習神經網路
※深度學習還是之前的神經網路嗎?
※神經網路簡史:BP演算法後的又一突破—信念網路
※深度學習與神經網路概述
※新的神經網路即將問世,它看起來很恐怖
※輕鬆機器學習-神經網路的歷史
※機器學習、深度學習、神經網路、深度神經網路之間有何區別?
※世界都是神經網路的
※機器學習與神經網路
※掌握神經網路,入門深度學習
※AI的口述歷史:深度學習三巨頭講述神經網路復興史
※紐約大學:參考兒童認知發展,通過簡單神經網路學習歸納偏置
※中國的量子密鑰網路是有史以來最大的網路,正式上線
※這些都不懂,還說你會網路?未來網路工程師前景將越來越熱門
※一個專門用來模仿飛蛾識別味道的神經網路,說明了為什麼飛蛾的學習速度遠超機器
※說網路,談網路,講網路,網路無所不能
※初學者需要了解的8種神經網路結構!
※邊緣側AI興起,神經網路和深度學習如何實現一個更智能的互連世界?
※基於「意圖」的網路,喊起來簡單,做起來不易!
※何常在:跡於生活,紮根於讀者的網路文學更貼合時代