官术网_书友最值得收藏!

1.1 神經網絡發展簡史

神經網絡的發展同人類發展一樣,經歷了各種起伏和挫折、淘汰和進化。正是發展過程中的一些意外成就了人工神經網絡今天的輝煌,正如人類進化過程中所遇到的意外一樣,充滿了不確定的意外和驚喜。正是有了不確定才出現了另外一個詞,叫希望。

1.1.1 神經網絡的前世今生

人工智能的起源可能要追溯到第二次世界大戰,其間涌現出很多優秀的科學家,包括神經學家格雷·沃爾特和數學家艾倫·圖靈。其中,沃爾特制造了人類歷史上的第一個機器人;圖靈則提出了一種測試,這種測試旨在驗證機器是否可以達到真正的智能,而這種測試后來被稱為圖靈測試。圖靈測試的思想是測試者在與被測試者(一個人和一臺機器)隔開的情況下,通過一些裝置(如鍵盤)向被測試者隨意提問,進行多次測試后,如果有超過30%的測試者不能確定被測試者是人還是機器,那么這臺機器就通過了測試,并且被認為具有人類智能。

1956年,在美國達特莫斯大學舉行了兩個月的學術討論會,從不同學科的角度探討用機器模擬人類智能等問題,并且首次提出了人工智能(AI)的術語,同時出現了最初的成就和最早的一批研究者,這一事件被看作AI誕生的標志。由于計算機的產生與發展,人們開始了具有真正意義的人工智能的研究。

1957年,羅森·布拉特基于神經感知科學的背景提出并設計出第一個計算機神經網絡模型,這個模型模擬了人類大腦的生物學特性,被稱為感知機(Perceptron)。

1960年,維德羅首次將Delta學習規則用于感知機的訓練步驟,這種方法后來被稱為最小二乘方法。最小二乘法和感知機的結合創造了一個良好的線性分類器。

1968年,馬文·明斯基將感知機推到頂峰。他提出了著名的異或(XOR)問題和感知機數據線性不可分的情形,在數學上證明了單層或多層網絡的堆疊無法解決數據線性不可分的問題(后來人們通過引入激活函數來解決線性不可分的問題)。此后,神經網絡的研究長期處于休眠狀態。

1970年,林納因馬提出反向傳播(Back Propagation, BP)神經的概念,并將其稱為自動分化反向模式,但是并未引起足夠的關注。

1980年,在美國的卡內基梅隆大學召開了第一屆機器學習國際研討會,標志著機器學習研究已在全世界興起。此后,機器歸納學習進入應用。經過一些挫折后,多層感知機(Multilayer Perceptron, MLP)由偉博斯在1981年的神經網絡BP算法中具體提出。有了反向傳播的新思想,神經網絡的研究進程逐漸加快。

1983年,J. J. Hopfield和D. W. Tank建立了互相連接的神經網絡模型,被稱為霍普菲爾德神經網絡,并用它成功地探討了旅行商(TSP)問題的求解。

1986年,D.E.Rumelhart等人實現了多層網絡BP算法,把學習結果反饋到中間層次的隱藏單元中,改變它們的聯系矩陣,從而達到預期的學習目的。迄今為止,它仍是應用最廣泛的神經網絡訓練更新算法。

20世紀90年代,統計學習出現并迅速占領了歷史舞臺,支持向量機(Support Vector Machine,SVM)就是這一時代的產物,SVM在數據分類、圖像壓縮等應用領域取得了非常好的成績。

2006年,Hinton及其學生發表了利用(Restricted Boltzmann Machine)自編碼的深層神經網絡的論文——Reducing the Dimensionality of Data with Neural Networks,目前這篇論文的實用性并不強,它的作用是把神經網絡又拉回人們的視線中,利用單層的RBM自編碼預訓練使深層的神經網絡訓練變成可能,但那時候深度學習(Deep Learning)的爭議很多。

2016年被稱為人工智能的元年。在這一年,AlphaGo在圍棋比賽中贏了專業棋手李世石,打破了人類自尊的最后的堡壘。

目前,深度學習在不經意間就會出現在我們的日常生活中——它是Google的聲音和圖像識別,是Netflix和Amazon的推薦引擎,是Apple的Siri,是電子郵件和短信的自動回復,是智能聊天機器人,是百度的智能導航,是阿里巴巴的自動風險感知,是字節抖動的智能推薦。神經網絡的發展史如圖1.1所示。

圖1.1 神經網絡的發展史

1.1.2 深度學習框架對比

深度學習框架發展迅速,各種語言實現的框架層出不窮,最廣為人知的是TensorFlow,但最好用且Python友好又便于調試的首推PyTorch。TensorFlow是使用人數最多的深度學習框架,但其是基于靜態圖定義的框架,使用和調試都非常困難。因為靜態圖首先需要定義,定義好之后就不能修改。要定義靜態圖涉及很多特殊的語法及概念,提升了學習門檻,對于初學者來說,無異于學習一門新的語言。而PyTorch是基于動態圖構建的,可以使用Python一般的語法,如If/Else/While/For等,天然的Python友好且便于調試,熟悉Python的人們可以快速上手。

測試一個框架熱門程度的最直接方式就是搜索指數。通過對比GitHub統計指數,可以直觀地發現一個框架的流行程度,如圖1.2所示是最常用的幾個深度學習框架TensorFlow、Keras、PyTorch、Theano的GitHub統計指數,通過對比可以發現一些趨勢。

圖1.2 深度學習框架GitHub統計指數變化趨勢

在Star和Fork的數量上,TensorFlow在深度學習領域用得最多,但從趨勢來看其地位是否能在接下來繼續保持第一位仍然值得關注,因為排名靠后的PyTorch、PaddlePaddle、MXNet等深度學習框架的影響度正在逐年上升。深度學習框架已經變成TensorFlow和PyTorch之爭,也是動態圖與靜態圖之間的“斗爭”。PyTorch能否登頂非常值得期待。

下面筆者以各個深度學習框架出現的先后順序進行對比分析。

分析各個框架出現的時間會發現一個很有意思的規律,在2015—2016年,不管是深度學習框架還是其他大數據框架(如Spark等),都呈現爆發式增長。這與2015年和2016年大數據及AI市場得到資本青睞息息相關,被投資的團隊開始集中攻克技術難點及開源技術產品,所有的讀者都是開源的受益者。

2008年1月,Theano誕生于蒙特利爾大學的LISA實驗室。它是一個Python庫,結合計算機代數系統CAS和編譯器的優化,可以達到與C語言媲美的速度,可以用于定義、計算數學表達式,尤其是計算多維數組。Theano中的多維數組類似于NumPy中的Ndarray。因為Theano誕生于研究機構,具有濃厚的學術氣息,并且很難調試,圖的構建非常困難,缺乏文檔,以及疏于宣傳等缺點,所以使用的人很少。2017年9月,LISA實驗室負責人Yoshua Bengio宣布“Theano is Dead”,在Theano 1.0正式發布后將不再進行維護。但是Theano作為第一個Python深度學習框架,其退出歷史舞臺時已完成了它的歷史使命,為其他深度學習框架指明了設計方向:以計算圖為核心,采用GPU設備加速。后來出現的深度學習框架(如TensorFlow、PyTorch、Caffe/Caffe2等)都采用計算圖的方式來定義計算的Pipeline。

2012年1月,Torch項目誕生于紐約大學,Torch采用的是Lua語言,但是使用Lua語言的人不多,因此Torch這個深度學習框架在市場上應用得很少。但是Torch的幕后團隊在2017年基于Python語言對Torch的技術架構進行了全面的重構,于是誕生了當下非常流行的動態圖框架PyTorch。

2013年12月,使用Java語言開發的深度學習框架Deeplearning4j誕生,Deeplearning4j是使用Java語言開發的深度學習框架,同時支持Clojure接口和Scala接口,由開源科學計算庫ND4J驅動,可選擇在CPU設備或GPU設備上運行。Deeplearning4j還可以運行在Hadoop/Spark集群中,可以提高運行速度及大數據處理能力。

2013年9月,加利福尼亞大學伯克利分校的賈揚清博士在GitHub上首度發布Caffe,它的全稱是Convolutional Architecture for Fast Feature Embedding,是一個清晰、高效的深度學習框架,核心語言采用C++,支持命令行、Python、MATLAB接口,可以選擇在CPU設備或GPU設備上運行。Caffe使用簡單,代碼也易于擴展,運行速度得到了工業界的認可,社區也非常龐大。2017年4月發布的Caffe2是Caffe的升級優化版。

2015年3月誕生的Keras是一個高層的神經網絡API,使用純Python語言編寫。它并不是獨立的深度學習框架,后端采用TensorFlow、Theano及CNTK作為支持。Keras為實驗室而生,能夠將想法快速轉換為結果,高層的API非常易于使用,因此是所有深度學習框架中最易上手的一個。Keras并不獨立,是在其他框架上的層層封裝。層層封裝導致Keras運行速度慢,擴展性也不好,很多時候BUG被隱藏在封裝之中,因此缺少靈活性,使用Keras很快將遇到瓶頸。

2015年5月MXNet誕生了。雖然由一群學生開發,但是MXNet擁有超強的分布式支持,對內存及顯存的優化也非常好。2016年11月,MXNet被AWS正式選擇為云計算官方深度學習平臺。2017年1月MXNet進入Apache基金會,成為Apache孵化器項目。但是MXNet一直不溫不火,主要是因為文檔維護緩慢而代碼更新過快,讓老用戶面對新接口也不知道如何使用,另外一個原因要歸結于推廣不力。MXNet是中國人開發的項目,筆者希望它能越來越好。

2015年11月,Google官宣TensorFlow開源。TensorFlow的開源確實在業界引起了不小的轟動,TensorFlow的大火得益于Google在深度學習領域巨大的影響力及強大的推廣能力。目前,TensorFlow是用戶數最多的深度學習框架,支持Python及C++編程接口,并且采用C++的Eigen庫,所以可以在ARM架構上編譯和優化。用戶可以在各種服務器和移動設備上部署訓練模型而無須執行單獨的解碼器或Python的解釋器。業界對TensorFlow的褒貶不一,其中最大的問題是頻繁變動的接口;另外一個問題是復雜的系統設計,TensorFlow源碼超過百萬行,想通過閱讀源碼弄懂底層的運行機制是非常痛苦的事情。

2016年1月Microsoft發布的CNTK支持在CPU設備和GPU設備上運行,并且把神經網絡描述成一個計算圖結構,這一點與其他的深度學習框架是一致的。CNTK的性能比Caffe、Theano、TensorFlow的都好,但是其文檔設計晦澀難懂,推廣也不給力,因此用戶較少。

2016年8月,百度開源PaddlePaddle深度學習框架,PaddlePaddle的前身是百度于2013年自主研發的深度學習平臺,并且一直被百度內部工程師研發使用。全球各大科技巨頭開源的深度學習平臺都極具各自的技術特點,對于百度,由于其自身具有搜索、圖像識別、語音語義識別理解、情感分析、機器翻譯、用戶畫像推薦等多領域的業務和技術方向,所以PaddlePaddle的表現更加全面,是一個功能相對較全的深度學習框架。

總之,在這個發生翻天覆地變化的年代,只有不斷地學習和進步才能趕上時代的步伐,只有抓住機遇才能更好地迎接挑戰。

主站蜘蛛池模板: 晴隆县| 进贤县| 棋牌| 沁阳市| 庄浪县| 亳州市| 沈丘县| 淮阳县| 沛县| 道真| 万宁市| 大田县| 景德镇市| 清水河县| 大竹县| 古田县| 南华县| 永善县| 杭锦后旗| 周口市| 龙泉市| 文登市| 鹤峰县| 砚山县| 霍州市| 泗水县| 吉安县| 磴口县| 共和县| 寿光市| 海宁市| 托克逊县| 博客| 中江县| 鄂尔多斯市| 深州市| 康定县| 永修县| 沧源| 澎湖县| 建阳市|