1. 計算機系統開發學習哪一種編程語言最佳
在成為一個「高手」的過程中,我們要學會的是找到最適合自己的編程語言。
python
Python 是可讀的最強大的語言。—Pau Dubois
選Python還是選Java?2020年,頂尖程序員最應該掌握的7種編程語言
Python 編程。圖源:Unsplash。
Python 開發於 1991 年,一項民意調查表明,在開發 AI 時,超過 57% 的開發者將 Python 作為首選編程語言,而不是 C++。因為易於學習,Python 讓程序員和數據科學家可以更輕松地進入開發 AI 的世界。
Python 是一個程序員需要多少自由度的「實驗」。太自由,沒人可以讀懂別人的代碼;太不自由,就會沒那麼強的表現力。—Guido van Rossum
使用 Python,你不僅可以獲得優秀的社區支持和廣泛的庫集,還能享受到其靈活性。你從 Python 中得到的最大的好處可能是平台獨立性和針對深度學習和機器學習的廣泛框架。
用 Python 編碼的樂趣在於可以看到短小精悍、可讀性高的類,這些類可以用少量清晰的代碼表達大量行為(而不是用大量代碼煩死讀者)。——Guido van Rossum
Python 代碼片段示例:
選Python還是選Java?2020年,頂尖程序員最應該掌握的7種編程語言
Python 代碼段落示例。
常用的庫
TensorFlow——用於機器學習工作負載和用數據集處理;
scikit-learn——訓練機器學習模型;
PyTorch——計算機視覺和自然語言處理;
Keras——高度復雜性的數學計算和操作的代碼介面;
SparkMLib——類似 Apache Spark 的機器學習庫,通過演算法和實用程序等工具,讓每一個人都能輕松地進行機器學習;
MXNet——Apache 的另一個庫,可以簡化深度學習流程;
Theano——定義、優化和評價數學表達式的庫;
Pybrain——用於強大的機器學習演算法。
另外,根據 GitHub 庫的貢獻度,Python 已經超越了 Java,成為世界第二受歡迎的語言。Stack Overflow 將 Python 稱為「成長最快」的主流編程語言。
2. 程序員為什麼要學深度學習
費良宏:程序員為什麼要學深度學習?
深度學習本身是一個非常龐大的知識體系。本文更多想從程序員的視角出發,讓大家觀察一下深度學習對程序員意味著什麼,以及我們如何利用這樣一個高速發展的學科,來幫助程序員提升軟體開發的能力。
本文根據費良宏在2016QCon全球軟體開發大會(上海)上的演講整理而成。
前言
1973年,美國上映了一部熱門的科幻電影《WestWorld》,三年之後又有一個續集叫做《FutureWorld》。這部電影在80年代初被引進到中國叫《未來世界》。那部電影對我來講簡直可以說得上是震撼。影片中出現了很多機器人,表情豐富的面部下面都是集成電路板。這讓那時候的我覺得未來世界都是那麼遙遠、那麼神秘。
時間到了2016年,很多朋友可能都在追看HBO斥巨資拍攝的同一題材的系列劇《WestWorld》。如果前兩部電影還是局限在機器人、人工智慧這樣的話題,2016年的新劇則在劇情和人工智慧的思考方面有了很大的突破。不再渲染機器人是否會威脅到人類,而是在探討「Dreamsaremainlymemories」這一類更具哲理的問題。
「記憶究竟如何影響了智能」這個話題非常值得我們去思考,也給我們一個很好的啟示——今天,人工智慧領域究竟有了怎樣的發展和進步。
今天我們探討的話題不僅僅是簡單的人工智慧。如果大家對深度學習感興趣,我相信各位一定會在搜索引擎上搜索過類似相關的關鍵字。我在Google上以deeplearning作為關鍵字得到了2,630萬個搜索的結果。這個數字比一周之前足足多出了300多萬的結果。這個數字足以看得出來深度學習相關的內容發展的速度,人們對深度學習的關注也越來越高。
從另外的一個角度,我想讓大家看看深度學習在市場上究竟有多麼熱門。從2011年到現在一共有140多家專注人工智慧、深度學習相關的創業公司被收購。僅僅在2016年這種並購就發生了40多起。
其中最瘋狂的是就是Google,已經收購了 11 家人工智慧創業公司,其中最有名的就是擊敗了李世石九段的 DeepMind。排名之後的就要數 Apple、Intel以及Twitter。以Intel 公司為例,僅在今年就已經收購了 3 家創業公司,Itseez、Nervana 和 Movidius。這一系列大手筆的並購為了布局人工智慧以及深度學習的領域。
當我們去搜索深度學習話題的時候,經常會看到這樣的一些晦澀難懂的術語:Gradient descent(梯度下降演算法)、Backpropagation(反向傳播演算法)、Convolutional Neural Network(卷積神經網路)、受限玻耳茲曼機(Restricted Boltzmann Machine)等。
如打開任何一篇技術文章,你看到的通篇都是各種數學公式。大家看到如下左邊的圖,其實並不是一篇高水準的學術論文,而僅僅是維基網路關於玻耳茲曼機的介紹。維基網路是科普層面的內容,內容復雜程度就超過了大多數數學知識的能力。
在這樣的背景之下,我今天的的話題可以歸納成三點:第一,我們為什麼要學習深度學習;第二,深度學習最核心的關鍵概念就是神經網路,那麼究竟什麼是神經網路;第三,作為程序員,當我們想要成為深度學習開發者的時候,我們需要具備怎樣的工具箱,以及從哪裡著手進行開發。
為什麼要學習深度學習
首先,我們談談為什麼要學習深度學習。在這個市場當中,最不缺乏的就是各種概念以及各種時髦新技術的詞彙。深度學習有什麼不一樣的地方?我非常喜歡AndrewNg(吳恩達)曾經用過的一個比喻。
他把深度學習比喻成一個火箭。這個火箭有一個最重要的部分,就是它的引擎,目前來看在這個領域裡面,引擎的核心就是神經網路。大家都知道,火箭除了引擎之外還需要有燃料,那麼大數據其實就構成了整個火箭另外的重要組成部分——燃料。以往我們談到大數據的時候,更多是強調存儲和管理數據的能力,但是這些方法和工具更多是對於以往歷史數據的統計、匯總。
而對於今後未知的東西,這些傳統的方法並不能夠幫助我們可以從大數據中得出預測的結論。如果考慮到神經網路和大數據結合,我們才可能看清楚大數據真正的價值和意義。AndrewNg就曾經說過「我們相信(神經網路代表的深度學習)是讓我們獲得最接近於人工智慧的捷徑」。這就是我們要學習深度學習的一個最重要的原因。
其次,隨著我們進行數據處理以及運算能力的不斷提升,深度學習所代表的人工智慧技術和傳統意義上人工智慧技術比較起來,在性能上有了突飛猛進的發展。這主要得益於在過去幾十間計算機和相關產業不斷發展帶來的成果。在人工智慧的領域,性能是我們選擇深度學習另一個重要的原因。
這是一段Nvidia在今年公布的關於深度學習在無人駕駛領域應用的視頻。我們可以看到,將深度學習應用在自動駕駛方面,僅僅經歷了3千英里的訓練,就可以達到什麼樣的程度。在今年年初進行的實驗上,這個系統還不具備真正智能能力,經常會出現各種各樣的讓人提心吊膽的狀況,甚至在某些情況下還需要人工干預。
但經過了3千英里的訓練之後,我們看到在山路、公路、泥地等各種復雜的路況下面,無人駕駛已經有了一個非常驚人的表現。請大家注意,這個深度學習的模型只經過了短短幾個月、3千英里的訓練。
如果我們不斷完善這種模型的話,這種處理能力將會變得何等的強大。這個場景裡面最重要的技術無疑就是深度學習。我們可以得出一個結論:深度學習可以為我們提供強大的能力,如果程序員擁有了這個技術的話,無異於會讓每個程序員如虎添翼。
神經網路快速入門
如果我們對於學習深度學習沒有任何疑慮的話,接下來就一定會關心我需要掌握什麼樣的知識才能讓我進入到這個領域。這裡面最重要的關鍵技術就是「神經網路」。說起「神經網路」,容易混淆是這樣兩個完全不同的概念。
一個是生物學神經網路,第二個才是我們今天要談起的人工智慧神經網路。可能在座的各位有朋友在從事人工智慧方面的工作。當你向他請教神經網路的時候,他會拋出許多陌生的概念和術語讓你聽起來雲里霧里,而你只能望而卻步了。
對於人工智慧神經網路這個概念,大多數的程序員都會覺得距離自己有很大的距離。因為很難有人願意花時間跟你分享神經網路的本質究竟是什麼。而你從書本上讀的到的理論和概念,也很讓你找到一個清晰、簡單的結論。
今天就我們來看一看,從程序員角度出發神經網路究竟是什麼。我第一次知道神經網路這個概念是通過一部電影——1991年上映的《終結者2》。男主角施瓦辛格有一句台詞:
「MyCPUisaneural-netprocessor;alearningcomputer.」(我的處理器是一個神經處理單元,它是一台可以學習的計算機)。從歷史來看人類對自身智力的探索,遠遠早於對於神經網路的研究。
1852年,義大利學者因為一個偶然的失誤,將人類的頭顱掉到硝酸鹽溶液中,從而獲得第一次通過肉眼關注神經網路的機會。這個意外加速了對人類智力奧秘的探索,開啟了人工智慧、神經元這樣概念的發展。
生物神經網路這個概念的發展,和今天我們談的神經網路有什麼關系嗎?我們今天談到的神經網路,除了在部分名詞上借鑒了生物學神經網路之外,跟生物學神經網路已經沒有任何關系,它已經完全是數學和計算機領域的概念,這也是人工智慧發展成熟的標志。這點大家要區分開,不要把生物神經網路跟我們今天談到的人工智慧有任何的混淆。
90年代中期,由Vapnik等人提出了支持向量機演算法(Support Vector Machines,支持向量機)。很快這個演算法就在很多方面體現出了對比神經網路的巨大優勢,例如:無需調參、高效率、全局最優解等。基於這些理由,SVM演算法迅速打敗了神經網路演算法成為那個時期的主流。而神經網路的研究則再次陷入了冰河期。
在被人摒棄的十年裡面,有幾個學者仍然在堅持研究。其中很重要的一個人就是加拿大多倫多大學的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發表了論文,首次提出了「深度信念網路」的概念。
與傳統的訓練方式不同,「深度信念網路」有一個「預訓練」(pre-training)的過程,這可以方便的讓神經網路中的權值找到一個接近最優解的值,之後再使用「微調」(fine-tuning)技術來對整個網路進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網路的時間。在他的論文裡面,他給多層神經網路相關的學習方法賦予了一個新名詞— 「深度學習」。
很快,深度學習在語音識別領域嶄露頭角。接著在2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網路成功地對包含一千個類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。
這個結果充分證明了多層神經網路識別效果的優越性。從那時起,深度學習就開啟了新的一段黃金時期。我們看到今天深度學習和神經網路的火熱發展,就是從那個時候開始引爆的。
利用神經網路構建分類器,這個神經網路的結構是怎樣的?
其實這個結構非常簡單,我們看到這個圖就是簡單神經網路的示意圖。神經網路本質上就是一種「有向圖」。圖上的每個節點借用了生物學的術語就有了一個新的名詞 – 「神經元」。連接神經元的具有指向性的連線(有向弧)則被看作是「神經」。這這個圖上神經元並不是最重要的,最重要的是連接神經元的神經。每個神經部分有指向性,每一個神經元會指向下一層的節點。
節點是分層的,每個節點指向上一層節點。同層節點沒有連接,並且不能越過上一層節點。每個弧上有一個值,我們通常稱之為」權重「。通過權重就可以有一個公式計算出它們所指的節點的值。這個權重值是多少?我們是通過訓練得出結果。它們的初始賦值往往通過隨機數開始,然後訓練得到的最逼近真實值的結果作為模型,並可以被反復使用。這個結果就是我們說的訓練過的分類器。
節點分成輸入節點和輸出節點,中間稱為隱層。簡單來說,我們有數據輸入項,中間不同的多個層次的神經網路層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結果也被稱作輸出節點,輸出節點是有限的數量,輸入節點也是有限數量,隱層是我們可以設計的模型部分,這就是最簡單的神經網路概念。
如果簡單做一個簡單的類比,我想用四層神經網路做一個解釋。左邊是輸入節點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數據項。中間隱層就是我們設計出來的神經網路,這個網路現在有不同的層次,層次之間權重是我們不斷訓練獲得一個結果。
最後輸出的結果,保存在輸出節點裡面,每一次像一個流向一樣,神經是有一個指向的,通過不同層進行不同的計算。在隱層當中,每一個節點輸入的結果計算之後作為下一層的輸入項,最終結果會保存在輸出節點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經網路的簡單概述。
除了從左到右的形式表達的結構圖,還有一種常見的表達形式是從下到上來表示一個神經網路。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以AndrewNg和LeCun的文獻使用較多。而在Caffe框架里則使用的則是從下到上的表達。
簡單來說,神經網路並不神秘,它就是有像圖,利用圖的處理能力幫助我們對特徵的提取和學習的過程。2006年Hinton的那篇著名的論文中,將深度學習總結成三個最重要的要素:計算、數據、模型。有了這三點,就可以實現一個深度學習的系統。
程序員需要的工具箱
對於程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們看看,對於程序員來說,著手深度學習的實踐需要准備什麼樣的工具。
硬體
從硬體來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構以外,還出現了附加有乘法器的CPU,用以提升計算能力。此外在不同領域會有DSP的應用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學習應用比較熱門的領域。最後一類就是FPGA(可編程邏輯門陣列)。
這四種方法各有其優缺點,每種產品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調度,比如讀取數據,管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。
這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的演算法。GPU的管理能力更弱一些,但是運算能力更強。但由於計算單元數量多,更適合整塊數據進行流處理的演算法。
FPGA在管理與運算處理方面都很強,但是開發周期長,復雜演算法開發難度較大。就實時性來說,FPGA是最高的。單從目前的發展來看,對於普通程序員來說,現實中普遍採用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領域。
這是我前天為這次分享而准備的一個AWS 上p2的實例。僅僅通過幾條命令就完成了實例的更新、驅動的安裝和環境的設置,總共的資源創建、設置時間大概在10分鍾以內。而之前,我安裝調試前面提到的那台計算機,足足花了我兩天時間。
另外,從成本上還可以做一個對比。p2.8xLarge 實例每小時的費用是7.2美元。而我自己那台計算機總共的花費了是¥16,904元。這個成本足夠讓我使用350多個小時的p2.8xLarge。在一年裡使用AWS深度學習站就可以抵消掉我所有的付出。隨著技術的不斷的升級換代,我可以不斷的升級我的實例,從而可以用有限的成本獲得更大、更多的處理資源。這其實也是雲計算的價值所在。
雲計算和深度學習究竟有什麼關系?今年的8月8號,在IDG網站上發表了一篇文章談到了這個話題。文章中做了這樣一個預言:如果深度學習的並行能力不斷提高,雲計算所提供的處理能力也不斷發展,兩者結合可能會產生新一代的深度學習,將帶來更大影響和沖擊。這是需要大家考慮和重視的一個方向!
軟體
深度學習除了硬體的基礎環境之外。程序員會更關心與開發相關的軟體資源。這里我羅列了一些曾經使用過的軟體框架和工具。
Scikit-learn是最為流行的一個Python機器學習庫。它具有如下吸引人的特點:簡單、高效且異常豐富的數據挖掘/數據分析演算法實現; 基於NumPy、SciPy以及matplotlib,從數據探索性分析,數據可視化到演算法實現,整個過程一體化實現;開源,有非常豐富的學習文檔。
Caffe專注在卷及神經網路以及圖像處理。不過Caffe已經很久沒有更新過了。這個框架的一個主要的開發者賈揚清也在今年跳槽去了Google。也許曾經的霸主地位要讓位給他人了。
Theano 是一個非常靈活的Python 機器學習的庫。在研究領域非常流行,使用上非常方便易於定義復雜的模型。Tensorflow 的API 非常類似於Theano。我在今年北京的QCon 大會上也分享過關於Theano 的話題。
Jupyter notebook 是一個很強大的基於ipython的python代碼編輯器,部署在網頁上,可以非常方便的進行互動式的處理,很適合進行演算法研究合數據處理。
Torch 是一個非常出色的機器學習的庫。它是由一個比較小眾的lua語言實現的。但是因為LuaJIT 的使用,程序的效率非常出色。Facebook在人工智慧領域主打Torch,甚至現在推出了自己的升級版框架Torchnet。
深度學習的框架非常之多,是不是有一種亂花漸欲迷人眼的感覺?我今天向各位程序員重點介紹的是將是TensorFlow。這是2015年穀歌推出的開源的面向機器學習的開發框架,這也是Google第二代的深度學習的框架。很多公司都使用了TensorFlow開發了很多有意思的應用,效果很好。
用TensorFlow可以做什麼?答案是它可以應用於回歸模型、神經網路以深度學習這幾個領域。在深度學習方面它集成了分布式表示、卷積神經網路(CNN)、遞歸神經網路(RNN) 以及長短期記憶人工神經網路(Long-Short Term Memory, LSTM)。
關於Tensorflow 首先要理解的概念就是Tensor。在辭典中對於這個詞的定義是張量,是一個可用來表示在一些向量、標量和其他張量之間的線性關系的多線性函數。實際上這個表述很難理解,用我自己的語言解釋Tensor 就是「N維數組」而已。
使用 TensorFlow, 作為程序員必須明白 TensorFlow這樣幾個基礎概念:它使用圖 (Graph) 來表示計算任務;在被稱之為 會話 (Session) 的上下文 (context) 中執行圖;使用 Tensor 表示數據;通過 變數 (Variable) 維護狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據。
一句話總結就是,TensorFlow 就是有狀態圖的數據流圖計算環境,每個節點就是在做數據操作,然後提供依賴性和指向性,提供完整數據流。
TensorFlow安裝非常簡單,但官網提供下載的安裝包所支持的CUDA 的版本是7.5。考慮到CUDA 8 的讓人心動的新特以及不久就要正式發布的現狀。或許你想會考慮立即體驗CUDA 8,那麼就只能通過編譯Tensorflow源代碼而獲得。目前TensorFlow已經支持了Python2.7、3.3+。
此外,對於使用Python 語言的程序員還需要安裝所需要的一些庫,例如:numpy、protobuf等等。對於卷積處理而言,cuDNN是公認的性能最好的開發庫,請一定要安裝上。常規的Tensorsorflow的安裝很簡單,一條命令足矣:
$ pip3 install —upgrade https://storage.233.wiki/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl
如果想評估一下或者簡單學習一下,還可以通過Docker進行安裝,安裝的命令如下:
$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
TensorFlow有很多優點。首先,目前為止,深度學習的開發框架裡面TensorFlow的文檔做的最好,對程序員學習而言是非常好的一點。第二,TensorFlow有豐富的參考實例,作為參考學習起來非常容易。
第三,開發者社區活躍,在任何一個深度學習的社區里,都有大量關於TensorFlow的討論。第四,谷歌的支持力度非常大,從2015年到現在升級速度非常快,這是其他開源框架遠遠達不到的結果。
參考TensorFlow的白皮書,我們會看到未來TensorFlow還將會有巨大的發展潛力。讓我特別感興趣是這兩個方向。第一,支持跨多台機器的 parallelisation。盡管在0.8版本中推出了並行化的能力,但是目前還不完善。隨著未來不斷發展,依託雲計算的處理能力的提升這個特性將是非常讓人振奮的。
第二,支持更多的開發語言,對於開發者來說這是一個絕大的利好,通過使用自己擅長的語言使用TensorFlow應用。這些開發語言將會擴展到Java、Lua以及R 等。
在這里我想給大家展示一個應用Tensorflow 的例子。這個例子的代碼託管在這個網址上 https://github.com/anishathalye/neural-style。白俄羅斯的現代印象派藝術家Leonid Afremov善於用濃墨重彩來表現都市和風景題材,尤其是其雨景系列作品。他習慣用大色塊的鋪陳來營造光影效果,對反光物體和環境色的把握非常精準。
於是我就找到了一張上海東方明珠電視塔的一張攝影作品,我希望通過Tensorflow 去學習一下Leonid Afremov 的繪畫風格,並將這張東方明珠的照片處理成那種光影色彩豐富的作品風格。利用Tensorflow 以及上面提到的那個項目的代碼,在一個AWS 的p2類型的實例上進行了一個一千次的迭代,於是就得到了下圖這樣的處理結果。
這個處理的代碼只有350行里,模型使用了一個成名於2014年ImageNet比賽中的明星 VGG。這個模型非常好,特點就是「go depper」。
TensorFlow 做出這樣的作品,並不僅僅作為娛樂供大家一笑,還可以做更多有意思的事情。將剛才的處理能力推廣到視頻當中,就可以看到下圖這樣的效果,用梵高著名的作品」星月夜「的風格就加工成了這樣新的視頻風格。
可以想像一下,如果這種處理能力在更多領域得以應用,它會產生什麼樣的神奇結果?前景是美好的,讓我們有無限遐想。事實上我們目前所從事的很多領域的應用開發都可以通過使用神經網路和深度學習來加以改變。對於深度學習而言,掌握它並不是難事。每一個程序員都可以很容易的掌握這種技術,利用所具備的資源,讓我們很快成為深度學習的程序開發人員。
結束語
未來究竟是什麼樣,我們沒有辦法預言。有位作家Ray Kurzweil在2005年寫了《奇點臨近》一書。在這本書裡面他明確告訴我們,那個時代很快到來。作為那個時代曙光前的人群,我們是不是有能力加速這個過程,利用我們學習的能力實現這個夢想呢?
中國人工智慧的發展
人工智慧的時代無疑已經到來,這個時代需要的當然就是掌握了人工智慧並將其解決具體問題的工程師。坦率的說,市場上這一類的工程師還屬於鳳毛麟角。職場上的薪酬待遇可以看得出來這樣的工程師的搶手的程度。人工智慧這門學科發展到今天,就學術自身而言已經具備了大規模產業化的能力。
所以說,對於工程師而言當務之急就是盡快的掌握應用人工智慧的應用技術。當下在互聯網上關於人工智慧的學習資料可以說已經是「汗牛充棟」,那些具備了快速學習能力的工程師一定會在人工智慧的大潮當中脫穎而出。
中國發展人工智慧產業的環境已經具備。無論從創業環境、人員的素質乃至市場的機遇而言完全具備了產生產業變革的一切條件。與美國相比較,在人工智慧的許多領域中國團隊的表現也可以說是不逞多讓。就人工智慧的技術層面而言,中國的工程師與全球最好的技術團隊正處於同一個起跑線上。
時不我待,中國的工程師是有機會在這個領域大展身手的。不過值得注意的是,要切忌兩點:一是好高騖遠,盲目與國外攀比。畢竟積累有長短,術業有專攻,我們要立足於已有的積累,尋求逐步的突破。二是一擁而上,盲目追求市場的風口。人工智慧的工程化需要大量的基礎性的積累,並非一蹴而就簡單復制就可以成功。
中國的科研技術人員在人工智慧領域的成就有目共睹。在王詠剛的一篇文章裡面,他統計了從2013年到2015年SCI收錄的「深度學習」論文,中國在2014年和2015年超已經超過了美國居於領跑者的位置。
另外一讓我感到驚訝的事情,Google的JeffDean在2016年發表過一篇名為《TensorFlow:Asystemforlarge-scalemachinelearning》的論文。文章的22個作者裡面,明顯是中國名字的作者占已經到了1/5。如果要列舉中國人/華人在人工智慧領域里的大牛,吳恩達、孫劍、楊強、黃廣斌、馬毅、張大鵬……很容易就可以說出一大串。
對於中國來說目前的當務之急是人工智慧技術的產業化,唯有如此我們才可以講科研/智力領域的優勢轉化為整體的、全面的優勢。在這一點上,中國是全球最大的消費市場以及製造業強國,我們完全有機會藉助市場的優勢成為這個領域的領先者。
矽谷創新企業
矽谷雖然去過許多回,但一直無緣在那裡長期工作。在人工智慧領域的市場我們聽到的更多是圍繞Google、Apple、Intel、Amazon這樣的一些大型科技公司的一舉一動。但是在美國市場上還有一大批小型的創業企業在人工智慧這個領域有驚艷的表現。僅以矽谷區域的公司為例:
Captricity,提供了手寫數據的信息提取;
VIVLab,針對語音識別開發了虛擬助手服務;
TERADEEP,利用FPGA提供了高效的卷積神經網路的方案;
還有提供無人駕駛解決方案的NetraDyne。
這個名單還可以很長,還有許許多多正在利用人工智慧技術試圖去創造歷史的團隊正在打造他們的夢想。這些團隊以及他們正在專注的領域是值得我們去學習和體會的。
3. 什麼是深度學習
隨著阿爾法狗、無人駕駛、智能翻譯的橫空出世,「人工智慧」這個已經存在60多年的詞語,彷彿一夜之間重新成為熱詞。同時被科技圈和企業界廣泛提及的還有「機器學習」「深度學習」「神經網路」…… 但事實是,如此喧囂熱烈的氣氛之下,大部分人對這一領域仍是一知半解。
如果要說誰有資格談論目前正在進行的「人工智慧革命」,特倫斯·謝諾夫斯基(Terry Sejnowski)必然是其中一個。
在智能翻譯、無人駕駛、阿爾法狗、微軟小冰還被認為是遠在天邊的願景時,謝諾夫斯基就已經在為深度學習領域奠定基礎了。
《深度學習:智能時代的核心驅動力量》
中信出版集團 2019.2
Q:首先,我想問一下定義。人們幾乎可以互換地使用「人工智慧」,「神經網路」,「深度學習」和「機器學習」等詞語。 但這些是不同的東西。你能解釋一下嗎?
人工智慧可以追溯到1956年的美國,那時工程師們決定編寫一個試圖仿效智能的計算機程序。
在人工智慧中,一個新領域成長起來,稱為機器學習。不是編寫一個按部就班的程序來做某事——這是人工智慧中的傳統方法——而是你收集了大量關於你試圖理解的事物的數據。例如,設想您正在嘗試識別對象,因此您可以收集大量它們的圖像。然後,通過機器學習,這是一個可以剖析各種特徵的自動化過程,就可以確定一個物體是汽車,而另一個是訂書機。
機器學習是一個非常大的領域,其歷史可以追溯到更久遠的時期。最初,人們稱之為「模式識別」。後來演算法在數學上變得更加廣泛和復雜。
在機器學習中有受大腦啟發的神經網路,然後是深度學習。深度學習演算法具有特定的體系結構,其中有許多層數據流經的網路。
基本上,深度學習是機器學習的一部分,機器學習是人工智慧的一部分。
Q: 有什麼「深度學習」能做而其他程序不能做的嗎?
編寫程序非常耗費人力。在過去,計算機是如此之慢,內存非常昂貴,以至於人們採用邏輯,也就是計算機的工作原理,來編寫程序。他們通過基礎機器語言來操縱信息。計算機太慢了,計算太貴了。
但現在,計算力越來越便宜,勞動力也越來越昂貴。而且計算力變得如此便宜,以至於慢慢地,讓計算機學習會比讓人類編寫程序更有效。在那時,深度學習會開始解決以前沒有人編寫過程序的問題,比如在計算機視覺和翻譯等領域。
機器學習是計算密集型的,但你只需編寫一個程序,通過給它不同的數據集,你可以解決不同的問題。並且你不需要是領域專家。因此,對於存在大量數據的任何事物,都有對應的大量應用程序。
Q:「深度學習」現在似乎無處不在。 它是如何變得如此主導潮流?
我可以在歷史上精確地找到這一特定時刻:2012年12月在NIPS會議(這是最大的AI會議)上。在那裡,計算機科學家Geoff Hinton和他的兩個研究生表明你可以使用一個名為ImageNet的非常大的數據集,包含10,000個類別和1000萬個圖像,並使用深度學習將分類錯誤減少20%。
通常,在該數據集上,錯誤在一年內減少不到1%。 在一年內,20年的研究被跨越了。
這真的打開了潮水的閘門。
Q:深度學習的靈感來自大腦。那麼計算機科學和神經科學這些領域如何協同工作呢?
深度學習的靈感來自神經科學。最成功的深度學習網路是由Yann LeCun開發的卷積神經網路(CNN)。
如果你看一下CNN的架構,它不僅僅是很多單元,它們以一種基本上鏡像大腦的方式連接起來。大腦中被研究的最好的一部分在視覺系統,在對視覺皮層的基礎研究工作中,表明那裡存在簡單和復雜細胞。如果你看一下CNN架構,會發現有簡單細胞和復雜細胞的等價物,這直接來自我們對視覺系統的理解。
Yann沒有盲目地試圖復制皮質。他嘗試了許多不同的變種,但他最終收斂到的方式和那些自然收斂到的方式相同。這是一個重要的觀察。自然與人工智慧的趨同可以教給我們很多東西,而且還有更多的東西要去探索。
Q:我們對計算機科學的理解有多少取決於我們對大腦的理解程度?
我們現在的大部分AI都是基於我們對大腦在60年代的了解。 我們現在知道的更多,並且更多的知識被融入到架構中。
AlphaGo,這個擊敗圍棋冠軍的程序不僅包括皮質模型,還包括大腦的一部分被稱為「基底神經節」的模型,這對於制定一系列決策來實現目標非常重要。 有一種稱為時間差分的演算法,由Richard Sutton在80年代開發,當與深度學習相結合時,能夠進行人類以前從未見過的非常復雜的玩法。
當我們了解大腦的結構,並且當我們開始了解如何將它們集成到人工系統中時,它將提供越來越多的功能,超越我們現在所擁有的。
Q:人工智慧也會影響神經科學嗎?
它們是並行的工作。創新神經技術已經取得了巨大的進步,從一次記錄一個神經元到同時記錄數千個神經元,並且同時涉及大腦的許多部分,這完全開辟了一個全新的世界。
我說人工智慧與人類智能之間存在著一種趨同。隨著我們越來越多地了解大腦如何工作,這些認識將反映到AI中。 但與此同時,他們實際上創造了一整套學習理論,可用於理解大腦,讓我們分析成千上萬的神經元以及他們的活動是如何產生的。 所以神經科學和人工智慧之間存在這種反饋循環,我認為這更令人興奮和重要。
Q:你的書討論了許多不同的深度學習應用,從自動駕駛汽車到金融交易。你覺得哪個特定領域最有趣?
我完全被震撼到的一個應用是生成對抗網路,或稱GANS。使用傳統的神經網路,你給出一個輸入,你得到一個輸出。 GAN能夠在沒有輸入的情況下開展活動 - 產生輸出。
是的,我在這些網路創建假視頻的故事背景下聽說過這個。他們真的會產生看似真實的新事物,對吧?
從某種意義上說,它們會產生內部活動。事實證明這是大腦運作的方式。你可以看某處並看到一些東西,然後你可以閉上眼睛,你可以開始想像出那裡沒有的東西。你有一個視覺想像,當周圍安靜時,你鬧鍾聲會浮現想法。那是因為你的大腦是生成性的。現在,這種新型網路可以生成從未存在過的新模式。所以你可以給它,例如,數百張汽車圖像,它會創建一個內部結構,可以生成從未存在的汽車的新圖像,並且它們看起來完全像汽車。
Q:另一方面,您認為哪些想法可能是過度炒作?
沒有人可以預測或想像這種新技術的引入會對未來的事物組織方式產生什麼影響。當然這其中有炒作。我們還沒有解決真正困難的問題。我們還沒有通用智能,就有人說機器人將不久後會取代我們,其實機器人遠遠落後於人工智慧,因為復制身體被發現比復制大腦更復雜。
讓我們看一下這一種技術進步:激光。它是在大約50年前發明的,當時占據了整個房間。從占據整個房間到我現在演講時使用的激光筆需要50年的技術商業化。它必須被推進到體積足夠小並可以用五美元購買它的程度。同樣的事情將發生在像自動駕駛汽車這樣的被炒作的技術上。它並不被期望在明年或者未來10年,就變得無處不在。這過程可能需要花費50年,但重點是,在此過程中會有逐步推進,使它越來越靈活,更安全,更兼容我們組織運輸網路的方式。炒作的錯誤在於人們的時標設定錯了。他們期待太多事情太快發生,其實事物只在適當的時候。
關於深度學習的問題可以看下這個網頁的視頻講解:AI深度學習---中科院公開課。
4. 自學計算機專業要學習哪些課程
那要看你是什麼方向的,自學計算機最關鍵的是興趣,你自己定一個目標,然後發奮圖強。我當初讀計算機專業為的是有朝一日能開發一個病毒侵入小日本的國家安全系統里,就是這個目標,雖然有點不合法,但是激勵了我努力讀書,星期六日我經常的學校圖書館看一些軟體開發,編程的書。
我現在讀計算機專業大二,多少知道一點這方面的書,給你列一下
1計算機科學與技術硬體:計算機基礎理論與技術、高級語言程序設計、Windows程序設計(MFC)、電路分析與系統、大學物理、離散數學、、模擬電子技術、演算法與數據結構、數字電路、數字信號處理、計算機組成原理與匯編語言、資料庫原理及應用、軟體工程、數據通信與計算機網路、操作系統、計算機系統體系結構、嵌入式系統。
2軟體工程:計算機基礎理論與技術、C++面向對象程序設計、離散數學、工程經濟學、軟體工程概論、編譯原理、計算機組成原理與匯編、演算法與數據結構、軟體代碼開發及人機交互技術、資料庫原理及應用、軟體質量保證與測試、軟體系統設計與體系結構、操作系統、計算機網路、系統建模與分析、軟體過程與管理、計算機系統體系結構。
3信息管理與信息系統:計算機基礎理論與技術、管理學原理、市場營銷學、C++面向對象程序設計、運籌學、信息經濟學概論、概率論與數理統計、經濟學原理、會計學原理、數據結構、資料庫原理及應用、信息管理學概論、信息組織管理與存儲檢索、計算機網路、信息系統安全、操作系統應用、生產與運作管理、管理信息系統的分析與設計、電子商務原理及其應用。
這些只代表我個人看法,希望對你有用。
5. 什麼是深度學習與機器視覺
深度學習框架,尤其是基於人工神經網路的框架可以追溯到1980年福島邦彥提出的新認知機[2],而人工神經網路的歷史更為久遠。1989年,燕樂存(Yann LeCun)等人開始將1974年提出的標准反向傳播演算法[3]應用於深度神經網路,這一網路被用於手寫郵政編碼識別。盡管演算法可以成功執行,但計算代價非常巨大,神經網路的訓練時間達到了3天,因而無法投入實際使用[4]。許多因素導致了這一緩慢的訓練過程,其中一種是由於爾根·施密德胡伯(Jürgen Schmidhuber)的學生賽普·霍克賴特(Sepp Hochreiter)於1991年提出的梯度消失問題[5][6]。與此同時,神經網路也受到了其他更加簡單模型的挑戰,支持向量機等模型在20世紀90年代到21世紀初成為更加流行的機器學習演算法。
「深度學習」這一概念從2007年前後開始受到關注。當時,傑弗里·辛頓(Geoffrey Hinton)和魯斯蘭·薩拉赫丁諾夫(Ruslan Salakhutdinov)提出了一種在前饋神經網路中進行有效訓練的演算法。這一演算法將網路中的每一層視為無監督的受限玻爾茲曼機,再使用有監督的反向傳播演算法進行調優[7]。在此之前的1992年,在更為普遍的情形下,施密德胡伯也曾在遞歸神經網路上提出一種類似的訓練方法,並在實驗中證明這一訓練方法能夠有效提高有監督學習的執行速度[8][9].
自深度學習出現以來,它已成為很多領域,尤其是在計算機視覺和語音識別中,成為各種領先系統的一部分。在通用的用於檢驗的數據集,例如語音識別中的TIMIT和圖像識別中的ImageNet, Cifar10上的實驗證明,深度學習能夠提高識別的精度。
硬體的進步也是深度學習重新獲得關注的重要因素。高性能圖形處理器的出現極大地提高了數值和矩陣運算的速度,使得機器學習演算法的運行時間得到了顯著的縮短[10][11]。
基本概念[編輯]
深度學習的基礎是機器學習中的分散表示(distributed representation)。分散表示假定觀測值是由不同因子相互作用生成。在此基礎上,深度學習進一步假定這一相互作用的過程可分為多個層次,代表對觀測值的多層抽象。不同的層數和層的規模可用於不同程度的抽象[1]。
深度學習運用了這分層次抽象的思想,更高層次的概念從低層次的概念學習得到。這一分層結構常常使用貪婪演算法逐層構建而成,並從中選取有助於機器學習的更有效的特徵[1].
不少深度學習演算法都以無監督學習的形式出現,因而這些演算法能被應用於其他演算法無法企及的無標簽數據,這一類數據比有標簽數據更豐富,也更容易獲得。這一點也為深度學習贏得了重要的優勢[1]。
人工神經網路下的深度學習[編輯]
一部分最成功的深度學習方法涉及到對人工神經網路的運用。人工神經網路受到了1959年由諾貝爾獎得主大衛·休伯爾(David H. Hubel)和托斯坦·威澤爾(Torsten Wiesel)提出的理論啟發。休伯爾和威澤爾發現,在大腦的初級視覺皮層中存在兩種細胞:簡單細胞和復雜細胞,這兩種細胞承擔不同層次的視覺感知功能。受此啟發,許多神經網路模型也被設計為不同節點之間的分層模型[12]。
福島邦彥提出的新認知機引入了使用無監督學習訓練的卷積神經網路。燕樂存將有監督的反向傳播演算法應用於這一架構[13]。事實上,從反向傳播演算法自20世紀70年代提出以來,不少研究者都曾試圖將其應用於訓練有監督的深度神經網路,但最初的嘗試大都失敗。賽普·霍克賴特(Sepp Hochreiter)在其博士論文中將失敗的原因歸結為梯度消失,這一現象同時在深度前饋神經網路和遞歸神經網路中出現,後者的訓練過程類似深度網路。在分層訓練的過程中,本應用於修正模型參數的誤差隨著層數的增加指數遞減,這導致了模型訓練的效率低下[14][15]。
為了解決這一問題,研究者們提出了一些不同的方法。於爾根·施密德胡伯(Jürgen Schmidhuber)於1992年提出多層級網路,利用無監督學習訓練深度神經網路的每一層,再使用反向傳播演算法進行調優。在這一模型中,神經網路中的每一層都代表觀測變數的一種壓縮表示,這一表示也被傳遞到下一層網路[8]。
另一種方法是賽普·霍克賴特和於爾根·施密德胡伯提出的長短期記憶神經網路(long short term memory,LSTM)[16]。2009年,在ICDAR 2009舉辦的連筆手寫識別競賽中,在沒有任何先驗知識的情況下,深度多維長短期記憶神經網路取得了其中三場比賽的勝利[17][18]。
斯文·貝克提出了在訓練時只依賴梯度符號的神經抽象金字塔模型,用以解決圖像重建和人臉定位的問題[19]。
其他方法同樣採用了無監督預訓練來構建神經網路,用以發現有效的特徵,此後再採用有監督的反向傳播以區分有標簽數據。辛頓等人於2006年提出的深度模型提出了使用多層隱變數學習高層表示的方法。這一方法使用斯摩棱斯基於1986年提出的受限玻爾茲曼機[20]對每一個包含高層特徵的層進行建模。模型保證了數據的對數似然下界隨著層數的提升而遞增。當足夠多的層數被學習完畢,這一深層結構成為一個生成模型,可以通過自上而下的采樣重構整個數據集[21]。辛頓聲稱這一模型在高維結構化數據上能夠有效低提取特徵[22]。
吳恩達和傑夫·迪恩(Jeff Dean)領導的谷歌大腦(英語:Google Brain)團隊創建了一個僅通過YouTube視頻學習高層概念(例如貓)的神經網路[23] [24]。
其他方法依賴了現代電子計算機的強大計算能力,尤其是GPU。2010年,在於爾根·施密德胡伯位於瑞士人工智慧實驗室IDSIA的研究組中,丹·奇雷尚(Dan Ciresan)和他的同事展示了利用GPU直接執行反向傳播演算法而忽視梯度消失問題的存在。這一方法在燕樂存等人給出的手寫識別MNIST數據集上戰勝了已有的其他方法[10]。
截止2011年,前饋神經網路深度學習中最新的方法是交替使用卷積層(convolutional layers)和最大值池化層(max-pooling layers)並加入單純的分類層作為頂端。訓練過程也無需引入無監督的預訓練[25][26]。從2011年起,這一方法的GPU實現[25]多次贏得了各類模式識別競賽的勝利,包括IJCNN 2011交通標志識別競賽[27]和其他比賽。
這些深度學習演算法也是最先在某些識別任務上達到和人類表現具備同等競爭力的演算法[28]。
深度學習結構[編輯]
深度神經網路是一種具備至少一個隱層的神經網路。與淺層神經網路類似,深度神經網路也能夠為復雜非線性系統提供建模,但多出的層次為模型提供了更高的抽象層次,因而提高了模型的能力。深度神經網路通常都是前饋神經網路,但也有語言建模等方面的研究將其拓展到遞歸神經網路[29]。卷積深度神經網路(Covolutional Neuron Networks, CNN)在計算機視覺領域得到了成功的應用[30]。此後,卷積神經網路也作為聽覺模型被使用在自動語音識別領域,較以往的方法獲得了更優的結果[31]。
深度神經網路[編輯]
深度神經網路(deep neuron networks, DNN)是一種判別模型,可以使用反向傳播演算法進行訓練。權重更新可以使用下式進行隨機梯度下降求解:
其中,為學習率,為代價函數。這一函數的選擇與學習的類型(例如監督學習、無監督學習、增強學習)以及激活函數相關。例如,為了在一個多分類問題上進行監督學習,通常的選擇是使用Softmax函數作為激活函數,而使用交叉熵作為代價函數。Softmax函數定義為,其中代表類別的概率,而和分別代表對單元和的輸入。交叉熵定義為,其中代表輸出單元的目標概率,代表應用了激活函數後對單元的概率輸出[32]。
深度神經網路的問題[編輯]
與其他神經網路模型類似,如果僅僅是簡單地訓練,深度神經網路可能會存在很多問題。常見的兩類問題是過擬合和過長的運算時間。
深度神經網路很容易產生過擬合現象,因為增加的抽象層使得模型能夠對訓練數據中較為罕見的依賴關系進行建模。對此,權重遞減(正規化)或者稀疏(-正規化)等方法可以利用在訓練過程中以減小過擬合現象[33]。另一種較晚用於深度神經網路訓練的正規化方法是丟棄法("dropout" regularization),即在訓練中隨機丟棄一部分隱層單元來避免對較為罕見的依賴進行建模[34]。
反向傳播演算法和梯度下降法由於其實現簡單,與其他方法相比能夠收斂到更好的局部最優值而成為神經網路訓練的通行方法。但是,這些方法的計算代價很高,尤其是在訓練深度神經網路時,因為深度神經網路的規模(即層數和每層的節點數)、學習率、初始權重等眾多參數都需要考慮。掃描所有參數由於時間代價的原因並不可行,因而小批量訓練(mini-batching),即將多個訓練樣本組合進行訓練而不是每次只使用一個樣本進行訓練,被用於加速模型訓練[35]。而最顯著地速度提升來自GPU,因為矩陣和向量計算非常適合使用GPU實現。但使用大規模集群進行深度神經網路訓練仍然存在困難,因而深度神經網路在訓練並行化方面仍有提升的空間。
深度信念網路[編輯]
一個包含完全連接可見層和隱層的受限玻爾茲曼機(RBM)。注意到可見層單元和隱層單元內部彼此不相連。
深度信念網路(deep belief networks,DBN)是一種包含多層隱單元的概率生成模型,可被視為多層簡單學習模型組合而成的復合模型[36]。
深度信念網路可以作為深度神經網路的預訓練部分,並為網路提供初始權重,再使用反向傳播或者其他判定演算法作為調優的手段。這在訓練數據較為缺乏時很有價值,因為不恰當的初始化權重會顯著影響最終模型的性能,而預訓練獲得的權重在權值空間中比隨機權重更接近最優的權重。這不僅提升了模型的性能,也加快了調優階段的收斂速度[37]。
深度信念網路中的每一層都是典型的受限玻爾茲曼機(restricted Boltzmann machine,RBM),可以使用高效的無監督逐層訓練方法進行訓練。受限玻爾茲曼機是一種無向的基於能量的生成模型,包含一個輸入層和一個隱層。圖中對的邊僅在輸入層和隱層之間存在,而輸入層節點內部和隱層節點內部則不存在邊。單層RBM的訓練方法最初由傑弗里·辛頓在訓練「專家乘積」中提出,被稱為對比分歧(contrast divergence, CD)。對比分歧提供了一種對最大似然的近似,被理想地用於學習受限玻爾茲曼機的權重[35]。當單層RBM被訓練完畢後,另一層RBM可被堆疊在已經訓練完成的RBM上,形成一個多層模型。每次堆疊時,原有的多層網路輸入層被初始化為訓練樣本,權重為先前訓練得到的權重,該網路的輸出作為新增RBM的輸入,新的RBM重復先前的單層訓練過程,整個過程可以持續進行,直到達到某個期望中的終止條件[38]。
盡管對比分歧對最大似然的近似十分粗略(對比分歧並不在任何函數的梯度方向上),但經驗結果證實該方法是訓練深度結構的一種有效的方法[35]。
卷積神經網路[編輯]
主條目:卷積神經網路
卷積神經網路(convolutional neuron networks,CNN)由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入數據的二維結構。與其他深度學習結構相比,卷積神經網路在圖像和語音識別方面能夠給出更優的結果。這一模型也可以使用反向傳播演算法進行訓練。相比較其他深度、前饋神經網路,卷積神經網路需要估計的參數更少,使之成為一種頗具吸引力的深度學習結構[39]。
卷積深度信念網路[編輯]
卷積深度信念網路(convolutional deep belief networks,CDBN)是深度學習領域較新的分支。在結構上,卷積深度信念網路與卷積神經網路在結構上相似。因此,與卷積神經網路類似,卷積深度信念網路也具備利用圖像二維結構的能力,與此同時,卷積深度信念網路也擁有深度信念網路的預訓練優勢。卷積深度信念網路提供了一種能被用於信號和圖像處理任務的通用結構,也能夠使用類似深度信念網路的訓練方法進行訓練[40]。
結果[編輯]
語音識別[編輯]
下表中的結果展示了深度學習在通行的TIMIT數據集上的結果。TIMIT包含630人的語音數據,這些人持八種常見的美式英語口音,每人閱讀10句話。這一數據在深度學習發展之初常被用於驗證深度學習結構[41]。TIMIT數據集較小,使得研究者可以在其上實驗不同的模型配置。
方法
聲音誤差率 (PER, %)
隨機初始化RNN 26.1
貝葉斯三音子GMM-HMM 25.6
單音子重復初始化DNN 23.4
單音子DBN-DNN 22.4
帶BMMI訓練的三音子GMM-HMM 21.7
共享池上的單音子DBN-DNN 20.7
卷積DNN 20.0
圖像分類[編輯]
圖像分類領域中一個公認的評判數據集是MNIST數據集。MNIST由手寫阿拉伯數字組成,包含60,000個訓練樣本和10,000個測試樣本。與TIMIT類似,它的數據規模較小,因而能夠很容易地在不同的模型配置下測試。Yann LeCun的網站給出了多種方法得到的實驗結果[42]。截至2012年,最好的判別結果由Ciresan等人在當年給出,這一結果的錯誤率達到了0.23%[43]。
深度學習與神經科學[編輯]
計算機領域中的深度學習與20世紀90年代由認知神經科學研究者提出的大腦發育理論(尤其是皮層發育理論)密切相關[44]。對這一理論最容易理解的是傑弗里·艾爾曼(Jeffrey Elman)於1996年出版的專著《對天賦的再思考》(Rethinking Innateness)[45](參見斯拉格和約翰遜[46]以及奎茲和賽傑諾維斯基[47]的表述)。由於這些理論給出了實際的神經計算模型,因而它們是純計算驅動的深度學習模型的技術先驅。這些理論指出,大腦中的神經元組成了不同的層次,這些層次相互連接,形成一個過濾體系。在這些層次中,每層神經元在其所處的環境中獲取一部分信息,經過處理後向更深的層級傳遞。這與後來的單純與計算相關的深度神經網路模型相似。這一過程的結果是一個與環境相協調的自組織的堆棧式的轉換器。正如1995年在《紐約時報》上刊登的那樣,「……嬰兒的大腦似乎受到所謂『營養因素』的影響而進行著自我組織……大腦的不同區域依次相連,不同層次的腦組織依照一定的先後順序發育成熟,直至整個大腦發育成熟。」[48]
深度結構在人類認知演化和發展中的重要性也在認知神經學家的關注之中。發育時間的改變被認為是人類和其他靈長類動物之間智力發展差異的一個方面[49]。在靈長類中,人類的大腦在出生後的很長時間都具備可塑性,但其他靈長類動物的大腦則在出生時就幾乎完全定型。因而,人類在大腦發育最具可塑性的階段能夠接觸到更加復雜的外部場景,這可能幫助人類的大腦進行調節以適應快速變化的環境,而不是像其他動物的大腦那樣更多地受到遺傳結構的限制。這樣的發育時間差異也在大腦皮層的發育時間和大腦早期自組織中從刺激環境中獲取信息的改變得到體現。當然,伴隨著這一可塑性的是更長的兒童期,在此期間人需要依靠撫養者和社會群體的支持和訓練。因而這一理論也揭示了人類演化中文化和意識共同進化的現象[50]。
公眾視野中的深度學習[編輯]
深度學習常常被看作是通向真正人工智慧的重要一步[51],因而許多機構對深度學習的實際應用抱有濃厚的興趣。2013年12月,Facebook宣布僱用燕樂存為其新建的人工智慧實驗室的主管,這一實驗室將在加州、倫敦和紐約設立分支機構,幫助Facebook研究利用深度學習演算法進行類似自動標記照片中用戶姓名這樣的任務[52]。
2013年3月,傑弗里·辛頓和他的兩位研究生亞歷克斯·克里澤夫斯基和伊利婭·蘇特斯科娃被谷歌公司僱用,以提升現有的機器學習產品並協助處理谷歌日益增長的數據。谷歌同時並購了辛頓創辦的公司DNNresearch[53]。
批評[編輯]
對深度學習的主要批評是許多方法缺乏理論支撐。大多數深度結構僅僅是梯度下降的某些變式。盡管梯度下降已經被充分地研究,但理論涉及的其他演算法,例如對比分歧演算法,並沒有獲得充分的研究,其收斂性等問題仍不明確。深度學習方法常常被視為黑盒,大多數的結論確認都由經驗而非理論來確定。
也有學者認為,深度學習應當被視為通向真正人工智慧的一條途徑,而不是一種包羅萬象的解決方案。盡管深度學習的能力很強,但和真正的人工智慧相比,仍然缺乏諸多重要的能力。理論心理學家加里·馬庫斯(Gary Marcus)指出:
就現實而言,深度學習只是建造智能機器這一更大挑戰中的一部分。這些技術缺乏表達因果關系的手段……缺乏進行邏輯推理的方法,而且遠沒有具備集成抽象知識,例如物品屬性、代表和典型用途的信息。最為強大的人工智慧系統,例如IBM的人工智慧系統沃森,僅僅把深度學習作為一個包含從貝葉斯推理和演繹推理等技術的復雜技術集合中的組成部分[54]。
6. 究竟什麼是「深度學習」
深度學習的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現數據的分布式特徵表示。[1]
深度學習的概念由Hinton等人於2006年提出。基於深度置信網路(DBN)提出非監督貪心逐層訓練演算法,為解決深層結構相關的優化難題帶來希望,隨後提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網路是第一個真正多層結構學習演算法,它利用空間相對關系減少參數數目以提高訓練性能。
深度學習是機器學習中一種基於對數據進行表徵學習的方法。觀測值(例如一幅圖像)可以使用多種方式來表示,如每個像素強度值的向量,或者更抽象地表示成一系列邊、特定形狀的區域等。而使用某些特定的表示方法更容易從實例中學習任務(例如,人臉識別或面部表情識別)。深度學習的好處是用非監督式或半監督式的特徵學習和分層特徵提取高效演算法來替代手工獲取特徵。
深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。
同機器學習方法一樣,深度機器學習方法也有監督學習與無監督學習之分.不同的學習框架下建立的學習模型很是不同.例如,卷積神經網路(Convolutional neural networks,簡稱CNNs)就是一種深度的監督學習下的機器學習模型,而深度置信網(Deep Belief Nets,簡稱DBNs)就是一種無監督學習下的機器學習模型。
7. 計算機科學與技術 與軟體工程 與網路工程有什麼區別
計算機科學與技術專業 培養具有良好綜合素質和開拓創新能力,系統掌握本專業的基本理論、基礎知識和基本技能與方法,具有實際應用和科學研究能力的計算機及其相關技術與產業領域的復合型應用技術人才。
主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、操作系統原理、匯編語言程序設計、資料庫系統原理、編譯原理、軟體工程導論、計算機網路、計算機體系結構、並行與分布式計算、計算機圖形學、信息安全技術、多媒體技術、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
網路工程專業 培養具有實際運用先進的工程化方法和工具從事網路規劃、設計、開發和維護等工作,具備工程項目的組織與管理能力的實用型、復合型網路工程技術與管理的高級人才。
主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、計算機網路、操作系統原理、計算機體系結構、計算機介面技術、通信原理、網路系統設計、密碼學與網路安全、無線通信與網路、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
信息安全專業 培養具有扎實的數理基礎,較好的外語和計算機技術運用能力,掌握信息安全的基本理論與技術、計算機與網路通信及其安全技術以及信息安全法律法規等方面的知識,能運用所學知識與技能去分析和解決相關的實際問題,具有較高的綜合業務素質、較強的創新與實踐能力,可以在政府、國防、金融、公安和商業等部門從事信息安全產品研發、信息系統安全分析與設計、信息安全技術咨詢與評估服務、信息安全教育、信息安全管理與執法等工作的高級專業人才。
主要課程:數學分析、數理邏輯、集合論與圖論、信息安全數學基礎、計算機組成原理、程序設計基礎、數據結構與演算法、資料庫系統原理、軟體工程導論、計算機介面技術、計算機網路、通信原理、資訊理論基礎、操作系統安全、Linux原理與應用、網路協議與驗證、移動計算、計算機密碼學、網路安全技術、計算機病毒、信息隱藏技術、電子商務技術、信息安全法律法規等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
上述專業的畢業生適合在計算件軟硬體企業、網路公司、電信企業、金融、交通、銀行等各類企事業單位就職,從事計算機技術管理、計算機控制、軟體和信息安全產品的生產、開發、應用和維護工作,也可在政府管理部門、金融和經濟管理部門從事計算機應用、網路信息管理和維護工作,還可在高等學校和研究部門從事教學、科研工作。
電子與通信工程系
電子信息科學與技術專業 培養基礎扎實、知識面較寬、素質高、能力強,有一定創新能力、科學研究能力和解決實際問題的能力,適應21世紀社會和經濟發展的需要,能從事電子信息科學與技術領域的科學研究、教學與應用技術等工作的復合型人才。
畢業生具有堅實的數理基礎,掌握電子學與信息系統的基本理論和方法。熟悉電路與系統、電磁場與電磁波理論、微波與射頻技術、計算機網路以及通信和計算機應用等技術。具有較高的實驗能力和一定的分析和解決實際問題的能力;了解電子學與信息系統的新發展並具有一定的科學研究、應用研究、技術開發及教學等方面的能力。較為熟練地使用一種外國語閱讀專業書刊及外文資料。
學生畢業後適合在通訊、銀行、企業、機關等部門,從事電子技術和計算機技術管理、生產方面的開發應用,以及在高等學校和研究部門從事教學、科研工作。
主要課程:高等數學、概率論與數理統計、大學物理及實驗、高級程序設計、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、集成電路設計、資訊理論、微波技術與實驗、數字信號處理、計算機通信與網路、通信原理、EDA原理及應用、單片機原理及應用、數據結構與演算法、現代通信技術、資料庫系統原理等,學生還可選修學校及學院其他專業的相關課程。
自動化專業 自動化是以電子技術、計算機技術、檢測技術、通信技術和控制理論為基礎,研究自動控制系統的組成結構、控制規律及其應用的學科。該專業培養德、智、體全面發展,注重德、智、體、美、勞,具有健全的心理素質和健康的體格。基礎扎實、知識面寬、綜合素質高、實踐能力強,適應適應21世紀社會和經濟發展的需要,能從事自動化和計算機網路控制工程領域的先進技術研究、設計、應用開發及教學等方面的高級復合型人才。
畢業生應具有控制科學與工程學科扎實的基礎理論、基本技能和方法;具有對電子電氣電路、控制系統進行分析、設計和研究開發的能力;掌握信號自動檢測、數據處理的基礎知識與技能;掌握計算機與網路控制技術;有嚴謹的科學作風和創新能力;具有獨立進行科學研究、應用研究、分析和解決實際問題的能力。
學生畢業後適合在各類企業、國家政府部門、事業、通信、銀行、軍事等部門從事電子技術、計算機技術、通信技術及生產過程自動化方面的應用研究、產品開發及行政管理工作,以及在高等學校和研究等部門從事教學、科研及管理工作。
主要課程:高等數學、概率論與數理統計、工程數學、數值計算、高級程序設計、大學物理及實驗、電路基礎理論及實驗、模擬電子技術及實驗、數字電路與邏輯設計及實驗、電力電子技術、電機及拖動基礎、微型計算機原理及實驗、自動控制原理及實驗、信號與系統、現代控制理論、計算機控制技術及實驗、計算機通信與網路、數字信號處理、電氣與可編程式控制制器、過程式控制制工程、單片機原理及應用、自動測量技術、電力拖動自動控制系統、虛擬儀器技術、數據結構、操作系統、資料庫系統原理、科技信息檢索等,學生還可選修學校及學院其他專業的相關課程。
通信工程專業 培養基礎扎實、知識面較寬、綜合素質高、實踐能力強,適應21世紀社會和經濟發展的需要,系統掌握電路分析與信號處理理論、通信原理、網路理論、電磁場理論、傳輸原理、現代電信交換等專業基礎理論;掌握各類通信網、通信系統及其主要設備的構成原理、技術性能、設計、調試、運行維護和管理的基本知識;對國內外通信工程及相關學科的現狀和發展趨勢有一定的了解;有嚴謹的科學作風和創新能力;具有獨立對一般的通信系統和網路進行分析、設計和研究開發的能力。能從事現代通信工程和電信網路先進技術研究、設計、開發及教學等方面的高級復合型人才。
學生畢業後適合在電信企業、郵電管理部門、銀行、交通等部門從事通信、電子技術和計算機應用等方面的管理和技術開發工作,也可以在高等學校和研究部門從事教學和科研工作。
主要課程:高等數學、概率論與數理統計、高級程序設計、大學物理及實驗、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、微波技術實驗、通信原理、計算機網路、數字信號處理、資訊理論、操作系統、資料庫系統原理、數字通信系統及實驗、無線通信原理、現代電信交換、光纖通信、數字圖象處理、數據結構、單片機原理及應用、計算機視覺等。學生還可選修該學院其他專業的相關課程。
8. 自學計算機編程應該看些什麼書
一:第一階段
C語言-------《C語言設計》 作者:譚浩強
大多數人都推薦譚浩強這本書,譚浩強的C語言程序設計,我覺得更適合當教科書,主要是篇幅沒有那麼大,書本的內容不是很全,由老師帶入門是最好的。
《C Primer Plus》第五版 作者:Stephen Prata
這本書比較厚,內容也比較基礎,擴展的也比較廣,自學容易上手,唯一的缺陷在於它是外國人編寫,而國內的翻譯往往讓人難以滿意,如果你有較好的英語水平,最好閱讀英文版的。
《C語言入門經典》第四版 作者:Ivor Horton
二:第二階段
這一階段看個人主攻的方向了,安卓一般就JAVA,PC游戲、軟體C++,也有推薦C#,這些都是主流語言,其他語言要看個人愛好與發展。
面向對象的語言,一般懂一門,之後要轉其他語言也很容易的,其實思想都差不多,主要的不同在於語法。C#容易上手,一個月入門,一年精通,而C++卻有點難,一年入門,二十年也未必敢說自己精通。如果有時間,可以了解一下匯編語言。
C++ Primer, 4rd Edition
(入門類:
C++ Primer, 4rd Edition
Thinking in C++, 2nd Edition
The C++ Standard Library: A Tutorial and Reference
進階類:
The C++ Programming Language, Special Edition
The Design and Evolution of C++
Inside C++ Object Model
C++ Templates: The Complete Guide
STL 源碼剖析
Generic Programming and the STL
Modern C++ Design: Generic Programming and Design Patterns Applied
應用技巧類:
Effective C++, 2nd Editon
More Effective C++
Exceptional C++
More Exceptional C++
Effective STL
Ruminations on C++)
三:第三階段
API/SDK------------- 《windows程序設計》(Jeff Prosise)
這書主要是開發Windows軟體要深入研讀的,畢竟是WindowsAPI。如果是主攻C++,那麼這本書你可以大概略讀一遍,不用過多的深入追究,QT才是C++主要深入思慮的關鍵。
四:第四階段
MFC----《VC++技術內幕》、《深入淺出MFC》及視頻教程孫鑫 VC++6.0
如果是C++,QT是要重點學習的對象。
五:第五階段
COM/DCOM/ATL/COM+---------《COM技術內幕》
未知階段:
《數據結構》,《演算法導論》這些基本是編程的核心了,編程的很大情況都依賴於演算法的實現,這個兩門基本要深入研究,這是決定編程能力的核心標准。
如果不弄底層的話,《操作系統原理》可以簡單地了解。
9. 在做深度學習的時候會用到哪些計算機語言
最容易入門的就是Python語言,u就業的深度學習課程就送Python的入門課。
10. 人工智慧需要學習哪些課程
人工智慧專業學習的主要課程有認知心理學、神經科學基礎、人類的記憶與學習、語言與思維、計算神經工程等。人工智慧專業是中國高校人才計劃設立的專業,旨在培養中國人工智慧產業的應用型人才,推動人工智慧一級學科建設。