from:http://farmingyard.diandian.com/post/2013-04-07/40049536511php
來源:十一城 http://elevencitys.com/?p=1854html
深度學習是機器學習研究中的一個新的領域,其動機在於創建、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據,例如圖像,聲音和文本。深度學習是無監督學習的一種。web
深度學習的概念源於人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習經過組合低層特徵造成更加抽象的高層表示屬性類別或特徵,以發現數據的分佈式特徵表示。面試
深度學習的概念由Hinton等人於2006年提出。基於深信度網(DBN)提出非監督貪心逐層訓練算法,爲解決深層結構相關的優化難題帶來但願,隨後提出多層自動編碼器深層結構。此外Lecun等人提出的卷積神經網絡是第一個真正多層結構學習算法,它利用空間相對關係減小參數數目以提升訓練性能。算法
【1】網絡
圖靈在 1950 年的論文裏,提出圖靈試驗的設想,即,隔牆對話,你將不知道與你談話的,是人仍是電腦 [1]。架構
這無疑給計算機,尤爲是人工智能,預設了一個很高的指望值。可是半個世紀過去了,人工智能的進展,遠遠沒有達到圖靈試驗的標準。這不只讓多年翹首以待的人們,心灰意冷,認爲人工智能是忽悠,相關領域是「僞科學」。機器學習
2008 年 6 月,「連線」雜誌主編,Chris Anderson 發表文章,題目是 「理論的終極,數據的泛濫將讓科學方法過期」。而且文中還引述經典著做 「人工智能的現代方法」的合著者,時任 Google 研究總監的 Peter Norvig 的言論,說 「一切模型都是錯的。進而言之,拋棄它們,你就會成功」[2]。分佈式
言下之意,精巧的算法是無心義的。面對海量數據,即使只用簡單的算法,也能獲得出色的結果。與其鑽研算法,不如研究雲計算,處理大數據。ide
若是這番言論,發生在 2006 年之前,可能我不會強力反駁。可是自 2006 年以來,機器學習領域,取得了突破性的進展。
圖靈試驗,至少不是那麼可望而不可即了。至於技術手段,不只僅依賴於雲計算對大數據的並行處理能力,並且依賴於算法。這個算法就是,Deep Learning。
藉助於 Deep Learning 算法,人類終於找到了如何處理 「抽象概念」這個亙古難題的方法。
因而學界忙着延攬相關領域的大師。Alex Smola 加盟 CMU,就是這個背景下的插曲。懸念是 Geoffrey Hinton 和 Yoshua Bengio 這兩位牛人,最後會加盟哪所大學。
Geoffrey Hinton 曾經轉戰 Cambridge、CMU,目前任教University of Toronto。相信挖他的名校必定很多。
Yoshua Bengio 經歷比較簡單,McGill University 得到博士後,去 MIT 追隨 Mike Jordan 作博士後。目前任教 University of Montreal。
Deep Learning 引爆的這場革命,不只學術意義巨大,並且離錢很近,實在太近了。若是把相關技術難題比喻成一座山,那麼翻過這座山,山後就是特大露天金礦。技術難題解決之後,剩下的事情,就是動用資本和商業的強力手段,跑馬圈地了。
因而各大公司重兵集結,虎視眈眈。Google 兵分兩路,左路以 Jeff Dean 和 Andrew Ng 爲首,重點突破 Deep Learning 等等算法和應用 [3]。
Jeff Dean 在 Google 諸位 Fellows 中,名列榜首,GFS 就是他的傑做。Andrew Ng 本科時,就讀 CMU,後來去 MIT 追隨 Mike Jordan。Mike Jordan 在 MIT 人緣很差,後來憤然出走 UC Berkeley。Andrew Ng 絕不猶豫追隨導師,也去了 Berkeley。拿到博士後,任教 Stanford,是 Stanford 新生代教授中的佼佼者,同時兼職 Google。
Google 右路軍由 Amit Singhal 領軍,目標是構建 Knowledge Graph 基礎設施。
1996 年 Amit Singhal 從 Cornell University 拿到博士學位後,去 Bell Lab 工做,2000 年加盟 Google。聽說他去 Google 面試時,對 Google 創始人 Sergey Brian 說,「Your engine is excellent, but let me rewirte it!」[4]
換了別人,說不定一個大巴掌就扇過去了。可是 Sergey Brian 大人大量,不只不怪罪小夥子的輕狂,反而真的讓他從事新一代排名系統的研發。Amit Singhal 目前任職 Google 高級副總裁,掌管 Google 最核心的業務,搜索引擎。
Google 把王牌中之王牌,押寶在 Deep Learning 和 Knowledge Graph 上,目的是更快更大地奪取大數據革命的勝利果實。
Reference
[1] Turing Test.
http://en.wikipedia.org/wiki/Turing_test
[2] The End of Theory: The Data Deluge Makes the Scientific Method Obsolete
http://www.wired.com/science/discoveries/magazine/16-07/pb_theory
[3] Introduction to Deep Learning.
http://en.wikipedia.org/wiki/Deep_learning
[4] Interview with Amit Singhal, Google Fellow.
http://searchengineland.com/interview-with-amit-singhal-google-fellow-121342
【2】
1981 年的諾貝爾醫學獎,頒發給了 David Hubel 和 Torsten Wiesel,以及 Roger Sperry。前兩位的主要貢獻,是 「發現了視覺系統的信息處理」[1]。
1958 年,David Hubel 和 Torsten Wiesel 在 John Hopkins University,研究瞳孔區域與大腦皮層神經元的對應關係。他們在貓的後腦頭骨上,開了一個 3 毫米的小洞,向洞裏插入電極,測量神經元的活躍程度。
而後,他們在小貓的眼前,展示各類形狀、各類亮度的物體。而且,在展示每一件物體時,還改變物體放置的位置和角度。他們指望經過這個辦法,讓小貓瞳孔感覺不一樣類型、不一樣強弱的刺激。
之因此作這個試驗,目的是去證實一個猜想。位於後腦皮層的不一樣視覺神經元,與瞳孔所受刺激之間,存在某種對應關係。一旦瞳孔受到某一種刺激,後腦皮層的某一部分神經元就會活躍。
經歷了數日反覆的枯燥的試驗,同時犧牲了若干只可憐的小貓,David Hubel 和 Torsten Wiesel 發現了一種被稱爲 「方向選擇性細胞(Orientation Selective Cell)」的神經元細胞。當瞳孔發現了眼前的物體的邊緣,並且這個邊緣指向某個方向時,這種神經元細胞就會活躍。
這個發現激發了人們對於神經系統的進一步思考。神經-中樞-大腦的工做過程,或許是一個不斷迭代、不斷抽象的過程。
這裏的關鍵詞有兩個,一個是抽象,一個是迭代。從原始信號,作低級抽象,逐漸向高級抽象迭代。人類的邏輯思惟,常用高度抽象的概念。
例如,從原始信號攝入開始(瞳孔攝入像素 Pixels),接着作初步處理(大腦皮層某些細胞發現邊緣和方向),而後抽象(大腦斷定,眼前的物體的形狀,是圓形的),而後進一步抽象(大腦進一步斷定該物體是隻氣球)。
這個生理學的發現,促成了計算機人工智能,在四十年後的突破性發展。
Reference,
[1] The Nobel Prize in Physiology or Medicine 1981.
http://www.nobelprize.org/nobel_prizes/medicine/laureates/1981/
【3】
1995 年先後,Bruno Olshausen 和 David Field 兩位學者任職 Cornell University,他們試圖同時用生理學和計算機的手段,左右開弓,研究視覺問題。
他們收集了不少黑白風景照片,從這些照片中,提取出 400 個小碎片,每一個照片碎片的尺寸均爲 16x16 像素,不妨把這 400 個碎片標記爲 S[i], i = 0,.. 399。
接下來,再從這些黑白風景照片中,隨機提取另外一個碎片,尺寸也是 16x16 像素,不妨把這個碎片標記爲 T。
他們提出的問題是,如何從這 400 個碎片中,選取一組碎片,S[k], 經過疊加的辦法,合成出一個新的碎片,而這個新的碎片,應當與隨機選擇的目標碎片 T,儘量類似,同時,S[k] 的數量儘量少。用數學的語言來描述,就是,
Sum_k (a[k] * S[k]) --> T, 其中 a[k] 是在疊加碎片 S[k] 時的權重係數。
爲解決這個問題,Bruno Olshausen 和 David Field 發明了一個算法,稀疏編碼(Sparse Coding)。稀疏編碼是一個重複迭代的過程,每次迭代分兩步。
1. 選擇一組 S[k],而後調整 a[k],使得 Sum_k (a[k] * S[k]) 最接近 T。
2. 固定住 a[k],在 400 個碎片中,選擇其它更合適的碎片S’[k],替代原先的 S[k],使得 Sum_k (a[k] * S’[k]) 最接近 T。
通過幾回迭代後,最佳的 S[k] 組合,被遴選出來了。使人驚奇的是,被選中的 S[k],基本上都是照片上不一樣物體的邊緣線,這些線段形狀類似,區別在於方向。[1]
Bruno Olshausen 和 David Field 的算法結果,與 David Hubel 和 Torsten Wiesel 的生理髮現,不謀而合!
人工智能更加逼近天然智能了!
圖一. Illustration of Sparse Coding。
Reference,
[1] Emergence of Simple-Cell Receptive Field Properties by Learning a Sparse Code for Natural Images.
http://redwood.berkeley.edu/bruno/papers/nature-paper.pdf
原文連接:http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html
做者微博:http://weibo.com/kandeng#1360336038853
實際生活中,人們爲了解決一個問題,如對象的分類(對象但是是文檔、圖像等),首先必須作的事情是如何來表達一個對象,即必須抽取一些特徵來表示一個對象,如文本的處理中,經常用詞集合來表示一個文檔,或把文檔表示在向量空間中(稱爲VSM模型),而後才能提出不一樣的分類算法來進行分類;又如在圖像處理中,咱們能夠用像素集合來表示一個圖像,後來人們提出了新的特徵表示,如SIFT,這種特徵在不少圖像處理的應用中表現很是良好,特徵選取得好壞對最終結果的影響很是巨大。所以,選取什麼特徵對於解決一個實際問題很是的重要。
然而,手工地選取特徵是一件很是費力、啓發式的方法,能不能選取好很大程度上靠經驗和運氣;既然手工選取特徵不太好,那麼能不能自動地學習一些特徵呢?答案是能!Deep Learning就是用來幹這個事情的,看它的一個別名Unsupervised Feature Learning,就能夠顧名思義了,Unsupervised的意思就是不要人蔘與特徵的選取過程。所以,自動地學習特徵的方法,統稱爲Deep Learning。
1)Deep Learning的基本思想
假設咱們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示爲: I =>S1=>S2=>…..=>Sn => O,若是輸出O等於輸入I,即輸入I通過這個系統變化以後沒有任何的信息損失,保持了不變,這意味着輸入I通過每一層Si都沒有任何的信息損失,即在任何一層Si,它都是原有信息(即輸入I)的另一種表示。如今回到咱們的主題Deep Learning,咱們須要自動地學習特徵,假設咱們有一堆輸入I(如一堆圖像或者文本),假設咱們設計了一個系統S(有n層),咱們經過調整系統中參數,使得它的輸出仍然是輸入I,那麼咱們就能夠自動地獲取獲得輸入I的一系列層次特徵,即S1,…, Sn。
另外,前面是假設輸出嚴格地等於輸入,這個限制太嚴格,咱們能夠略微地放鬆這個限制,例如咱們只要使得輸入與輸出的差異儘量地小便可,這個放鬆會致使另一類不一樣的Deep Learning方法。上述就是Deep Learning的基本思想。
2)Deep Learning的經常使用方法
a). AutoEncoder
最簡單的一種方法是利用人工神經網絡的特色,人工神經網絡(ANN)自己就是具備層次結構的系統,若是給定一個神經網絡,咱們假設其輸出與輸入是相同的,而後訓練調整其參數,獲得每一層中的權重,天然地,咱們就獲得了輸入I的幾種不一樣表示(每一層表明一種表示),這些表示就是特徵,在研究中能夠發現,若是在原有的特徵中加入這些自動學習獲得的特徵能夠大大提升精確度,甚至在分類問題中比目前最好的分類算法效果還要好!這種方法稱爲AutoEncoder。固然,咱們還能夠繼續加上一些約束條件獲得新的Deep Learning方法,如若是在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要爲0,只有少數不爲0,這就是Sparse名字的來源),咱們就能夠獲得Sparse AutoEncoder方法。
b). Sparse Coding
若是咱們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即O = w1*B1 + W2*B2+….+ Wn*Bn, Bi是基,Wi是係數,咱們能夠獲得這樣一個優化問題:
Min |I – O|
經過求解這個最優化式子,咱們能夠求得係數Wi和基Bi,這些係數和基礎就是輸入的另一種近似表達,所以,它們能夠特徵來表達輸入I,這個過程也是自動學習獲得的。若是咱們在上述式子上加上L1的Regularity限制,獲得:
Min |I – O| + u*(|W1| + |W2| + … + |Wn|)
這種方法被稱爲Sparse Coding。
c) Restrict Boltzmann Machine (RBM)
假設有一個二部圖,每一層的節點之間沒有連接,一層是可視層,即輸入數據層(v),一層是隱藏層(h),若是假設全部的節點都是二值變量節點(只能取0或者1值),同時假設全機率分佈p(v, h)知足Boltzmann 分佈,咱們稱這個模型是Restrict Boltzmann Machine (RBM)。下面咱們來看看爲何它是Deep Learning方法。首先,這個模型由於是二部圖,因此在已知v的狀況下,全部的隱藏節點之間是條件獨立的,即p(h|v) =p(h1|v)…..p(hn|v)。同理,在已知隱藏層h的狀況下,全部的可視節點都是條件獨立的,同時又因爲全部的v和h知足Boltzmann 分佈,所以,當輸入v的時候,經過p(h|v) 能夠獲得隱藏層h,而獲得隱藏層h以後,經過p(v|h) 又能獲得可視層,經過調整參數,咱們就是要使得從隱藏層獲得的可視層v1與原來的可視層v若是同樣,那麼獲得的隱藏層就是可視層另一種表達,所以隱藏層能夠做爲可視層輸入數據的特徵,因此它就是一種Deep Learning方法。
若是,咱們把隱藏層的層數增長,咱們能夠獲得Deep Boltzmann Machine (DBM);若是咱們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,固然這裏依然限制層中節點之間沒有連接),而在最遠離可視層的部分使用Restrict Boltzmann Machine,咱們能夠獲得Deep Belief Net (DBN) 。
固然,還有其它的一些Deep Learning 方法,在這裏就不敘述了。總之,Deep Learning可以自動地學習出數據的另一種表示方法,這種表示能夠做爲特徵加入原有問題的特徵集合中,從而能夠提升學習方法的效果,是目前業界的研究熱點。
原文連接:http://blog.csdn.net/xianlingmao/article/details/8478562
查看最新論文
深度(Depth)
從一個輸入中產生一個輸出所涉及的計算能夠經過一個流向圖(flow graph)來表示:流向圖是一種可以表示計算的圖,在這種圖中每個節點表示一個基本的計算而且一個計算的值(計算的結果被應用到這個節點的孩子節點的值)。考慮這樣一個計算集合,它能夠被容許在每個節點和可能的圖結構中,並定義了一個函數族。輸入節點沒有孩子,輸出節點沒有父親。
對於表達sin(a^2+b/a) 的流向圖,能夠經過一個有兩個輸入節點a和b的圖表示,其中一個節點經過使用a和b做爲輸入(例如做爲孩子)來表示b/a ;一個節點僅使用a做爲輸入來表示平方;一個節點使用a^2和b/a 做爲輸入來表示加法項(其值爲a^2+b/a);最後一個輸出節點利用一個單獨的來自於加法節點的輸入計算SIN。
這種流向圖的一個特別屬性是深度(depth):從一個輸入到一個輸出的最長路徑的長度。
傳統的前饋神經網絡可以被看作擁有等於層數的深度(好比對於輸出層爲隱層數加1)。SVMs有深度2(一個對應於核輸出或者特徵空間,另外一個對應於所產生輸出的線性混合)。
深度架構的動機
學習基於深度架構的學習算法的主要動機是:
不充分的深度是有害的;
大腦有一個深度架構;
認知過程是深度的;
在許多情形中深度2就足夠(好比logical gates, formal [threshold] neurons, sigmoid-neurons, Radial Basis Function [RBF] units like in SVMs)表示任何一個帶有給定目標精度的函數。可是其代價是:圖中所須要的節點數(好比計算和參數數量)可能變的很是大。理論結果證明那些事實上所須要的節點數隨着輸入的大小指數增加的函數族是存在的。這一點已經在logical gates, formal [threshold] neurons 和rbf單元中獲得證明。在後者中Hastad說明了但深度是d時,函數族能夠被有效地(緊地)使用O(n)個節點(對於n個輸入)來表示,可是若是深度被限制爲d-1,則須要指數數量的節點數O(2^n)。
咱們能夠將深度架構看作一種因子分解。大部分隨機選擇的函數不能被有效地表示,不管是用深地或者淺的架構。可是許多可以有效地被深度架構表示的卻不能被用淺的架構高效表示(see the polynomials example in the Bengio survey paper)。一個緊的和深度的表示的存在乎味着在潛在的可被表示的函數中存在某種結構。若是不存在任何結構,那將不可能很好地泛化。
例如,視覺皮質獲得了很好的研究,並顯示出一系列的區域,在每個這種區域中包含一個輸入的表示和從一個到另外一個的信號流(這裏忽略了在一些層次並行路徑上的關聯,所以更復雜)。這個特徵層次的每一層表示在一個不一樣的抽象層上的輸入,並在層次的更上層有着更多的抽象特徵,他們根據低層特徵定義。
須要注意的是大腦中的表示是在中間緊密分佈而且純局部:他們是稀疏的:1%的神經元是同時活動的。給定大量的神經元,任然有一個很是高效地(指數級高效)表示。
人類層次化地組織思想和概念;
人類首先學習簡單的概念,而後用他們去表示更抽象的;
工程師將任務分解成多個抽象層次去處理;
學習/發現這些概念(知識工程因爲沒有檢討而失敗?)是很美好的。對語言可表達的概念的檢討也建議咱們一個稀疏的表示:僅全部可能單詞/概念中的一個小的部分是可被應用到一個特別的輸入(一個視覺場景)。
學習深度架構的突破
2006年前,嘗試訓練深度架構都失敗了:訓練一個深度有監督前饋神經網絡趨向於產生壞的結果(同時在訓練和測試偏差中),而後將其變淺爲1(1或者2個隱層)。
2006年的3篇論文改變了這種情況,由Hinton的革命性的在深度信念網(Deep Belief Networks, DBNs)上的工做所引領:
Hinton, G. E., Osindero, S. and Teh, Y., A fast learning algorithm for deep belief nets.Neural Computation 18:1527-1554, 2006
Yoshua Bengio, Pascal Lamblin, Dan Popovici and Hugo Larochelle, Greedy Layer-Wise Training of Deep Networks, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems 19 (NIPS 2006), pp. 153-160, MIT Press, 2007
Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra and Yann LeCun Efficient Learning of Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems (NIPS 2006), MIT Press, 2007
在這三篇論文中如下主要原理被發現:
表示的無監督學習被用於(預)訓練每一層;
在一個時間裏的一個層次的無監督訓練,接着以前訓練的層次。在每一層學習到的表示做爲下一層的輸入;
用無監督訓練來調整全部層(加上一個或者更多的用於產生預測的附加層);
DBNs在每一層中利用用於表示的無監督學習RBMs。Bengio et al paper 探討和對比了RBMs和auto-encoders(經過一個表示的瓶頸內在層預測輸入的神經網絡)。Ranzato et al paper在一個convolutional架構的上下文中使用稀疏auto-encoders(相似於稀疏編碼)。Auto-encoders和convolutional架構將在之後的課程中講解。
從2006年以來,大量的關於深度學習的論文被髮表,一些探討了其餘原理來引導中間表示的訓練,查看Learning Deep Architectures for AI
原文連接: http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201782.html
Deep Learning 經典閱讀材料:
The monograph or review paper Learning Deep Architectures for AI (Foundations & Trends in Machine Learning, 2009).
The ICML 2009 Workshop on Learning Feature Hierarchieswebpage has a list of references.
The LISA public wiki has a reading list and a bibliography.
Geoff Hinton has readings from last year’s NIPS tutorial.
Deep Learning工具—— Theano:
Theano是deep learning的Python庫,要求首先熟悉Python語言和numpy,建議讀者先看Theano basic tutorial,而後按照Getting Started 下載相關數據並用gradient descent的方法進行學習。
學習了Theano的基本方法後,能夠練習寫如下幾個算法:
有監督學習:
Logistic Regression - using Theano for something simple
Multilayer perceptron - introduction to layers
Deep Convolutional Network - a simplified version of LeNet5
無監督學習:
Auto Encoders, Denoising Autoencoders - description of autoencoders
Stacked Denoising Auto-Encoders - easy steps into unsupervised pre-training for deep nets
Restricted Boltzmann Machines - single layer generative RBM model
Deep Belief Networks - unsupervised generative pre-training of stacked RBMs followed by supervised fine-tuning
最後呢,推薦給你們基本ML的書籍:
Chris Bishop, 「Pattern Recognition and Machine Learning」, 2007
Simon Haykin, 「Neural Networks: a Comprehensive Foundation」, 2009 (3rd edition)
Richard O. Duda, Peter E. Hart and David G. Stork, 「Pattern Classification」, 2001 (2nd edition)
原文連接:http://blog.csdn.net/abcjennifer/article/details/7826917
一、計算機視覺。
ImageNet Classification with Deep Convolutional Neural Networks, Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton, NIPS 2012.
Learning Hierarchical Features for Scene Labeling, Clement Farabet, Camille Couprie, Laurent Najman and Yann LeCun, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013.
Learning Convolutional Feature Hierachies for Visual Recognition, Koray Kavukcuoglu, Pierre Sermanet, Y-Lan Boureau, Karol Gregor, Michaël Mathieu and Yann LeCun, Advances in Neural Information Processing Systems (NIPS 2010), 23, 2010.
二、語音識別。
微軟研究人員經過與hintion合做,首先將RBM和DBN引入到語音識別聲學模型訓練中,而且在大詞彙量語音識別系統中得到巨大成功,使得語音識別的錯誤率相對減低30%。可是,DNN尚未有效的並行快速算法,目前,不少研究機構都是在利用大規模數據語料經過GPU平臺提升DNN聲學模型的訓練效率。
在國際上,IBM、google等公司都快速進行了DNN語音識別的研究,而且速度飛快。
國內方面,科大訊飛、百度、中科院自動化所等公司或研究單位,也在進行深度學習在語音識別上的研究。
三、天然語言處理等其餘領域
不少機構在開展研究,但目前深度學習在天然語言處理方面尚未產生系統性的突破。
1.http://baike.baidu.com/view/9964678.htm?subLemmaId=10105430&fromenter=deep+learning
2.http://www.cnblogs.com/ysjxw/archive/2011/10/08/2201819.html