<div id="7x91n"></div>
    <progress id="7x91n"><tr id="7x91n"><ruby id="7x91n"></ruby></tr></progress>

    <em id="7x91n"></em>
      <progress id="7x91n"></progress>

      <dl id="7x91n"><ins id="7x91n"></ins></dl>

          <div id="7x91n"></div>

          <dl id="7x91n"></dl>

          <dl id="7x91n"><ins id="7x91n"><thead id="7x91n"></thead></ins></dl>

            <div id="7x91n"><tr id="7x91n"></tr></div>

            <div id="7x91n"></div>
            <div id="7x91n"></div>
            <dl id="7x91n"></dl><dl id="7x91n"><ol id="7x91n"></ol></dl>
            首頁 > 其他 > 詳細

            Deep Learning(深度學習)學習筆記整理

            時間:2017-06-26 09:29:22      閱讀:3508      評論:2      收藏:1      [點我收藏+]

            標簽:設定   線性代數   program   內部   大量   權值更新   學習過程   put   trick   

            http://blog.csdn.net/zouxy09/article/details/8775360

            一、概述

                   Artificial Intelligence,也就是人工智能,就像長生不老和星際漫游一樣,是人類最美好的夢想之中的一個。盡管計算機技術已經取得了長足的進步。可是到眼下為止。還沒有一臺電腦能產生“自我”的意識。是的,在人類和大量現成數據的幫助下,電腦能夠表現的十分強大。可是離開了這兩者,它甚至都不能分辨一個喵星人和一個汪星人。

                   圖靈(圖靈,大家都知道吧。

            計算機和人工智能的鼻祖,分別相應于其著名的“圖靈機”和“圖靈測試”)在 1950 年的論文里,提出圖靈試驗的設想,即。隔墻對話,你將不知道與你談話的,是人還是電腦。這無疑給計算機。尤其是人工智能。預設了一個非常高的期望值。

            可是半個世紀過去了。人工智能的進展。遠遠沒有達到圖靈試驗的標準。

            這不僅讓多年翹首以待的人們,心灰意冷。覺得人工智能是忽悠,相關領域是“偽科學”。

                    可是自 2006 年以來。機器學習領域,取得了突破性的進展。

            圖靈試驗,至少不是那么可望而不可及了。至于技術手段,不僅僅依賴于云計算對大數據的并行處理能力。并且依賴于算法。這個算法就是,Deep Learning。借助于 Deep Learning 算法。人類終于找到了怎樣處理“抽象概念”這個亙古難題的方法。

            技術分享

             

                   2012年6月,《紐約時報》披露了Google Brain項目。吸引了公眾的廣泛關注。這個項目是由著名的斯坦福大學的機器學習教授Andrew Ng和在大規模計算機系統方面的世界頂尖專家JeffDean共同主導。用16000個CPU Core的并行計算平臺訓練一種稱為“深度神經網絡”(DNN,Deep Neural Networks)的機器學習模型(內部共同擁有10億個節點。

            這一網絡自然是不能跟人類的神經網絡相提并論的。要知道,人腦中可是有150多億個神經元。互相連接的節點也就是突觸數更是如銀河沙數。

            以前有人估算過,假設將一個人的大腦中全部神經細胞的軸突和樹突依次連接起來。并拉成一根直線。可從地球連到月亮,再從月亮返回地球)。在語音識別和圖像識別等領域獲得了巨大的成功。

                   項目負責人之中的一個Andrew稱:“我們沒有像通常做的那樣自己框定邊界,而是直接把海量數據投放到算法中。讓數據自己說話,系統會自己主動從數據中學習。

            ”另外一名負責人Jeff則說:“我們在訓練的時候從來不會告訴機器說:‘這是一僅僅貓。’系統事實上是自己發明或者領悟了“貓”的概念。”

              技術分享

                   2012年11月,微軟在中國天津的一次活動上公開演示了一個全自己主動的同聲傳譯系統,講演者用英文演講,后臺的計算機一氣呵成自己主動完畢語音識別、英中機器翻譯和中文語音合成,效果非常流暢。

            據報道,后面支撐的關鍵技術也是DNN。或者深度學習(DL,DeepLearning)。

                   2013年1月,在百度年會上。創始人兼CEO李彥宏高調宣布要成立百度研究院,當中第一個成立的就是“深度學習研究所”(IDL,Institue of Deep Learning)。

             技術分享

                   為什么擁有大數據的互聯網公司爭相投入大量資源研發深度學習技術。聽起來感覺deeplearning非常牛那樣。

            那什么是deep learning?為什么有deep learning?它是怎么來的?又能干什么呢?眼下存在哪些困難呢?這些問題的簡答都須要慢慢來。咱們先來了解下機器學習(人工智能的核心)的背景。

             

            二、背景

                  機器學習(Machine Learning)是一門專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能。又一次組織已有的知識結構使之不斷改善自身的性能的學科。

            機器是否能像人類一樣能具有學習能力呢?1959年美國的塞繆爾(Samuel)設計了一個下棋程序,這個程序具有學習能力。它能夠在不斷的對弈中改善自己的棋藝。4年后。這個程序戰勝了設計者本人。又過了3年,這個程序戰勝了美國一個保持8年之久的常勝不敗的冠軍。這個程序向人們展示了機器學習的能力,提出了很多令人深思的社會問題與哲學問題(呵呵,人工智能正常的軌道沒有非常大的發展,這些什么哲學倫理啊倒發展的挺快。什么未來機器越來越像人,人越來越像機器啊。什么機器會反人類啊,ATM是開第一槍的啊等等。

            人類的思維無窮啊)。

                    機器學習盡管發展了幾十年,但還是存在非常多沒有良好解決的問題:

            技術分享

             

                    比如圖像識別、語音識別、自然語言理解、天氣預測、基因表達、內容推薦等等。

            眼下我們通過機器學習去解決這些問題的思路都是這樣的(以視覺感知為樣例):

            技術分享

             

                    從開始的通過傳感器(比如CMOS)來獲得數據。然后經過預處理、特征提取、特征選擇,再到推理、預測或者識別。最后一個部分,也就是機器學習的部分,絕大部分的工作是在這方面做的。也存在非常多的paper和研究。

                    而中間的三部分。概括起來就是特征表達。良好的特征表達,對終于算法的準確性起了非常關鍵的作用,并且系統基本的計算和測試工作都耗在這一大部分。但,這塊實際中一般都是人工完畢的。靠人工提取特征。

            技術分享

             

                   截止如今,也出現了不少NB的特征(好的特征應具有不變性(大小、尺度和旋轉等)和可區分性):比如Sift的出現。是局部圖像特征描寫敘述子研究領域一項里程碑式的工作。由于SIFT對尺度、旋轉以及一定視角和光照變化等圖像變化都具有不變性,并且SIFT具有非常強的可區分性,的確讓非常多問題的解決變為可能。

            但它也不是萬能的。

            技術分享

             

                   然而,手工地選取特征是一件非常費力、啟示式(須要專業知識)的方法,能不能選取好非常大程度上靠經驗和運氣。并且它的調節須要大量的時間。既然手工選取特征不太好,那么能不能自己主動地學習一些特征呢?答案是能。Deep Learning就是用來干這個事情的,看它的一個別名UnsupervisedFeature Learning。就能夠顧名思義了,Unsupervised的意思就是不要人參與特征的選取過程。

                   那它是怎么學習的呢?怎么知道哪些特征好哪些不好呢?我們說機器學習是一門專門研究計算機怎樣模擬或實現人類的學習行為的學科。好,那我們人的視覺系統是怎么工作的呢?為什么在茫茫人海,蕓蕓眾生,滾滾紅塵中我們都能夠找到還有一個她(由于,你存在我深深的腦海里,我的夢里 我的心里 我的歌聲里……)。

            人腦那么NB,我們能不能參考人腦,模擬人腦呢?(好像和人腦扯上點關系的特征啊,算法啊。都不錯,但不知道是不是人為強加的,為了使自己的作品變得神圣和高雅。)

                    近幾十年以來。認知神經科學、生物學等等學科的發展,讓我們對自己這個神奇的而又奇妙的大腦不再那么的陌生。

            也給人工智能的發展推波助瀾。

             

            三、人腦視覺機理

                   1981 年的諾貝爾醫學獎。頒發給了 David Hubel(出生于加拿大的美國神經生物學家) 和TorstenWiesel。以及 Roger Sperry。前兩位的主要貢獻。是“發現了視覺系統的信息處理”:可視皮層是分級的:

            技術分享

             

                    我們看看他們做了什么。1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University。研究瞳孔區域與大腦皮層神經元的相應關系。

            他們在貓的后腦頭骨上。開了一個3 毫米的小洞。向洞里插入電極。測量神經元的活躍程度。

                  然后。他們在小貓的眼前,展現各種形狀、各種亮度的物體。

            并且,在展現每一件物體時,還改變物體放置的位置和角度。

            他們期望通過這個辦法,讓小貓瞳孔感受不同類型、不同強弱的刺激。

                   之所以做這個試驗,目的是去證明一個推測。位于后腦皮層的不同視覺神經元。與瞳孔所受刺激之間,存在某種相應關系。一旦瞳孔受到某一種刺激。后腦皮層的某一部分神經元就會活躍。經歷了非常多天反復的枯燥的試驗,同一時候犧牲了若干僅僅可憐的小貓,David Hubel 和Torsten Wiesel 發現了一種被稱為“方向選擇性細胞(Orientation Selective Cell)”的神經元細胞。當瞳孔發現了眼前的物體的邊緣。并且這個邊緣指向某個方向時,這樣的神經元細胞就會活躍。

                   這個發現激發了人們對于神經系統的進一步思考。神經-中樞-大腦的工作過程,也許是一個不斷迭代、不斷抽象的過程。

                   這里的關鍵詞有兩個,一個是抽象,一個是迭代。從原始信號,做低級抽象,逐漸向高級抽象迭代。

            人類的邏輯思維,經常使用高度抽象的概念。

                    比如,從原始信號攝入開始(瞳孔攝入像素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是僅僅氣球)。

            技術分享

             

                  這個生理學的發現,促成了計算機人工智能,在四十年后的突破性發展。

                  總的來說,人的視覺系統的信息處理是分級的。從低級的V1區提取邊緣特征。再到V2區的形狀或者目標的部分等。再到更高層,整個目標、目標的行為等。也就是說高層的特征是低層特征的組合。從低層到高層的特征表示越來越抽象。越來越能表現語義或者意圖。而抽象層面越高。存在的可能推測就越少,就越利于分類。

            比如。單詞集合和句子的相應是多對一的,句子和語義的相應又是多對一的。語義和意圖的相應還是多對一的。這是個層級體系。

                  敏感的人注意到關鍵詞了:分層。而Deep learning的deep是不是就表示我存在多少層,也就是多深呢?沒錯。

            那Deep learning是怎樣借鑒這個過程的呢?畢竟是歸于計算機來處理,面對的一個問題就是怎么對這個過程建模?

                   由于我們要學習的是特征的表達,那么關于特征,或者說關于這個層級特征,我們須要了解地更深入點。

            所以在說Deep Learning之前,我們有必要再啰嗦下特征(呵呵。實際上是看到那么好的對特征的解釋,不放在這里有點可惜。所以就塞到這了)。

                   由于我們要學習的是特征的表達,那么關于特征,或者說關于這個層級特征,我們須要了解地更深入點。

            所以在說Deep Learning之前,我們有必要再啰嗦下特征(呵呵。實際上是看到那么好的對特征的解釋。不放在這里有點可惜,所以就塞到這了)。

             

            四、關于特征

                    特征是機器學習系統的原材料,對終于模型的影響是毋庸置疑的。假設數據被非常好的表達成了特征,通常線性模型就能達到愜意的精度。那對于特征,我們須要考慮什么呢?

            4.1、特征表示的粒度

                    學習算法在一個什么粒度上的特征表示,才有能發揮作用?就一個圖片來說。像素級的特征根本沒有價值。

            比如以下的摩托車,從像素級別,根本得不到不論什么信息。其無法進行摩托車和非摩托車的區分。而假設特征是一個具有結構性(或者說有含義)的時候,比方是否具有車把手(handle)。是否具有車輪(wheel),就非常easy把摩托車和非摩托車區分。學習算法才干發揮作用。

             

            技術分享

             技術分享

             

            4.2、0基礎(淺層)特征表示

                    既然像素級的特征表示方法沒有作用,那怎樣的表示才實用呢?

                    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]。基本上都是照片上不同物體的邊緣線。這些線段形狀類似,區別在于方向。

                    Bruno Olshausen和 David Field 的算法結果。與 David Hubel 和Torsten Wiesel 的生理發現,不謀而合。

                    也就是說。復雜圖形。往往由一些基本結構組成。比方下圖:一個圖能夠通過用64種正交的edges(能夠理解成正交的基本結構)來線性表示。比方樣例的x能夠用1-64個edges中的三個依照0.8,0.3,0.5的權重調和而成。而其它基本edge沒有貢獻,因此均為0 。

            技術分享

             

                    另外。大牛們還發現,不僅圖像存在這個規律,聲音也存在。他們從未標注的聲音中發現了20種基本的聲音結構,其余的聲音能夠由這20種基本結構合成。

             

            技術分享

             技術分享

             

            4.3、結構性特征表示

                    小塊的圖形能夠由基本edge構成。更結構化,更復雜的。具有概念性的圖形怎樣表示呢?這就須要更高層次的特征表示,比方V2。V4。因此V1看像素級是像素級。V2看V1是像素級。這個是層次遞進的,高層表達由底層表達的組合而成。專業點說就是基basis。V1取提出的basis是邊緣,然后V2層是V1層這些basis的組合。這時候V2區得到的又是高一層的basis。即上一層的basis組合的結果,上上層又是上一層的組合basis……(所以有大牛說Deep learning就是“搞基”,由于難聽。所以美其名曰Deep learning或者Unsupervised Feature Learning)

            技術分享

             

                    直觀上說,就是找到make sense的小patch再將其進行combine。就得到了上一層的feature,遞歸地向上learning feature。

                    在不同object上做training是,所得的edge basis 是非常類似的,但object parts和models 就會completely different了(那咱們分辨car或者face是不是easy多了):

            技術分享

             

                    從文本來說,一個doc表示什么意思?我們描寫敘述一件事情,用什么來表示比較合適?用一個一個字嘛。我看不是,字就是像素級別了,起碼應該是term。換句話說每一個doc都由term構成。但這樣表示概念的能力就夠了嘛,可能也不夠,須要再上一步,達到topic級,有了topic,再到doc就合理。

            但每一個層次的數量差距非常大。比方doc表示的概念->topic(千-萬量級)->term(10萬量級)->word(百萬量級)。

                    一個人在看一個doc的時候,眼睛看到的是word,由這些word在大腦里自己主動切詞形成term,在依照概念組織的方式。先驗的學習,得到topic,然后再進行高層次的learning。

             

            4.4、須要有多少個特征?

                   我們知道須要層次的特征構建,由淺入深。但每一層該有多少個特征呢?

            不論什么一種方法。特征越多,給出的參考信息就越多,準確性會得到提升。但特征多意味著計算復雜,探索的空間大,能夠用來訓練的數據在每一個特征上就會稀疏,都會帶來各種問題,并不一定特征越多越好。

             

             技術分享

                   好了。到了這一步,終于能夠聊到Deep learning了。

            上面我們聊到為什么會有Deep learning(讓機器自己主動學習良好的特征。而免去人工選取過程。還有參考人的分層視覺處理系統),我們得到一個結論就是Deep learning須要多層來獲得更抽象的特征表達。那么多少層才合適呢?用什么架構來建模呢?怎么進行非監督訓練呢?

             

            五、Deep Learning的基本思想

                   假設我們有一個系統S,它有n層(S1,…Sn),它的輸入是I,輸出是O,形象地表示為: I =>S1=>S2=>…..=>Sn => O,假設輸出O等于輸入I,即輸入I經過這個系統變化之后沒有不論什么的信息損失(呵呵。大牛說,這是不可能的。信息論中有個“信息逐層丟失”的說法(信息處理不等式),設處理a信息得到b。再對b處理得到c,那么能夠證明:a和c的互信息不會超過a和b的互信息。這表明信息處理不會添加信息。大部分處理會丟失信息。當然了,假設丟掉的是無用的信息那多好啊),保持了不變。這意味著輸入I經過每一層Si都沒有不論什么的信息損失,即在不論什么一層Si,它都是原有信息(即輸入I)的第二種表示。如今回到我們的主題Deep Learning,我們須要自己主動地學習特征。假設我們有一堆輸入I(如一堆圖像或者文本),假設我們設計了一個系統S(有n層),我們通過調整系統中參數,使得它的輸出仍然是輸入I,那么我們就能夠自己主動地獲取得到輸入I的一系列層次特征,即S1,…, Sn。

                   對于深度學習來說,其思想就是對堆疊多個層,也就是說這一層的輸出作為下一層的輸入。通過這樣的方式,就能夠實現對輸入信息進行分級表達了。

                   另外,前面是假設輸出嚴格地等于輸入,這個限制太嚴格。我們能夠稍微地放松這個限制。比如我們僅僅要使得輸入與輸出的區別盡可能地小即可,這個放松會導致另外一類不同的Deep Learning方法。

            上述就是Deep Learning的基本思想。

             

            六、淺層學習(Shallow Learning)和深度學習(Deep Learning)

                   淺層學習是機器學習的第一次浪潮。

                   20世紀80年代末期,用于人工神經網絡的反向傳播算法(也叫Back Propagation算法或者BP算法)的發明。給機器學習帶來了希望,掀起了基于統計模型的機器學習熱潮。這個熱潮一直持續到今天。人們發現,利用BP算法能夠讓一個人工神經網絡模型從大量訓練樣本中學習統計規律。從而對未知事件做預測。這樣的基于統計的機器學習方法比起過去基于人工規則的系統。在非常多方面顯出優越性。

            這個時候的人工神經網絡,雖也被稱作多層感知機(Multi-layer Perceptron),但實際是種僅僅含有一層隱層節點的淺層模型。

                    20世紀90年代,各種各樣的淺層機器學習模型相繼被提出。比如支撐向量機(SVM。Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。這些模型的結構基本上能夠看成帶有一層隱層節點(如SVM、Boosting),或沒有隱層節點(如LR)。這些模型不管是在理論分析還是應用中都獲得了巨大的成功。

            相比之下,由于理論分析的難度大,訓練方法又須要非常多經驗和技巧,這個時期淺層人工神經網絡反而相對沉寂。

                    深度學習是機器學習的第二次浪潮。

                    2006年。加拿大多倫多大學教授、機器學習領域的泰斗Geoffrey Hinton和他的學生RuslanSalakhutdinov在《科學》上發表了一篇文章。開啟了深度學習在學術界和工業界的浪潮。

            這篇文章有兩個主要觀點:1)多隱層的人工神經網絡具有優異的特征學習能力,學習得到的特征對數據有更本質的刻畫。從而有利于可視化或分類;2)深度神經網絡在訓練上的難度,能夠通過“逐層初始化”(layer-wise pre-training)來有效克服。在這篇文章中,逐層初始化是通過無監督學習實現的。

                    當前多數分類、回歸等學習方法為淺層結構算法,其局限性在于有限樣本和計算單元情況下對復雜函數的表示能力有限,針對復雜分類問題其泛化能力受到一定制約。深度學習可通過學習一種深層非線性網絡結構,實現復雜函數逼近,表征輸入數據分布式表示,并展現了強大的從少數樣本集中學習數據集本質特征的能力。

            (多層的長處是能夠用較少的參數表示復雜的函數)

             技術分享

                    深度學習的實質,是通過構建具有非常多隱層的機器學習模型和海量的訓練數據,來學習更實用的特征。從而終于提升分類或預測的準確性。因此,“深度模型”是手段。“特征學習”是目的。區別于傳統的淺層學習。深度學習的不同在于:1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2)明白突出了特征學習的重要性,也就是說,通過逐層特征變換。將樣本在原空間的特征表示變換到一個新特征空間。從而使分類或預測更加easy。與人工規則構造特征的方法相比,利用大數據來學習特征。更能夠刻畫數據的豐富內在信息。

             

            七、Deep learning與Neural Network

                    深度學習是機器學習研究中的一個新的領域。其動機在于建立、模擬人腦進行分析學習的神經網絡,它模仿人腦的機制來解釋數據。比如圖像,聲音和文本。深度學習是無監督學習的一種。

                    深度學習的概念源于人工神經網絡的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特征形成更加抽象的高層表示屬性類別或特征,以發現數據的分布式特征表示。

                   Deep learning本身算是machine learning的一個分支,簡單能夠理解為neural network的發展。

            大約二三十年前,neural network以前是ML領域特別火熱的一個方向。可是后來確慢慢淡出了,原因包含以下幾個方面:

            1)比較easy過擬合,參數比較難tune,并且須要不少trick。

            2)訓練速度比較慢。在層次比較少(小于等于3)的情況下效果并不比其它方法更優;

                   所以中間有大約20多年的時間,神經網絡被關注非常少,這段時間基本上是SVM和boosting算法的天下。可是。一個癡心的老先生Hinton。他堅持了下來,并終于(和其它人一起Bengio、Yann.lecun等)提成了一個實際可行的deep learning框架。

                    Deep learning與傳統的神經網絡之間有同樣的地方也有非常多不同。

                    二者的同樣在于deep learning採用了神經網絡類似的分層結構,系統由包含輸入層、隱層(多層)、輸出層組成的多層網絡。僅僅有相鄰層節點之間有連接。同一層以及跨層節點之間相互無連接。每一層能夠看作是一個logistic regression模型;這樣的分層結構,是比較接近人類大腦的結構的。

             技術分享

                    而為了克服神經網絡訓練中的問題,DL採用了與神經網絡非常不同的訓練機制。傳統神經網絡中。採用的是back propagation的方式進行。簡單來講就是採用迭代的算法來訓練整個網絡。隨機設定初值,計算當前網絡的輸出,然后依據當前輸出和label之間的差去改變前面各層的參數。直到收斂(總體是一個梯度下降法)。而deep learning總體上是一個layer-wise的訓練機制。這樣做的原因是由于,假設採用back propagation的機制。對于一個deep network(7層以上),殘差傳播到最前面的層已經變得太小,出現所謂的gradient diffusion(梯度擴散)。這個問題我們接下來討論。

             

            八、Deep learning訓練過程

            8.1、傳統神經網絡的訓練方法為什么不能用在深度神經網絡

                   BP算法作為傳統訓練多層網絡的典型算法。實際上對僅含幾層網絡,該訓練方法就已經非常不理想。

            深度結構(涉及多個非線性處理單元層)非凸目標代價函數中普遍存在的局部最小是訓練困難的主要來源。

            BP算法存在的問題:

            (1)梯度越來越稀疏:從頂層越往下,誤差校正信號越來越小。

            (2)收斂到局部最小值:尤其是從遠離最優區域開始的時候(隨機值初始化會導致這樣的情況的發生)。

            (3)一般,我們僅僅能用有標簽的數據來訓練:但大部分的數據是沒標簽的,而大腦能夠從沒有標簽的的數據中學習;

             

            8.2、deep learning訓練過程

                   假設對全部層同一時候訓練,時間復雜度會太高。假設每次訓練一層,偏差就會逐層傳遞。

            這會面臨跟上面監督學習中相反的問題,會嚴重欠擬合(由于深度網絡的神經元和參數太多了)。

                   2006年。hinton提出了在非監督數據上建立多層神經網絡的一個有效方法。簡單的說,分為兩步。一是每次訓練一層網絡。二是調優。使原始表示x向上生成的高級表示r和該高級表示r向下生成的x‘盡可能一致。方法是:

            1)首先逐層構建單層神經元,這樣每次都是訓練一個單層網絡。

            2)當全部層訓練完后,Hinton使用wake-sleep算法進行調優。

                   將除最頂層的其它層間的權重變為雙向的。這樣最頂層仍然是一個單層神經網絡,而其它層則變為了圖模型。

            向上的權重用于“認知”,向下的權重用于“生成”。然后使用Wake-Sleep算法調整全部的權重。讓認知和生成達成一致,也就是保證生成的最頂層表示能夠盡可能正確的復原底層的結點。

            比方頂層的一個結點表示人臉。那么全部人臉的圖像應該激活這個結點,并且這個結果向下生成的圖像應該能夠表現為一個大概的人臉圖像。Wake-Sleep算法分為醒(wake)和睡(sleep)兩個部分。

            1)wake階段:認知過程,通過外界的特征和向上的權重(認知權重)產生每一層的抽象表示(結點狀態),并且使用梯度下降改動層間的下行權重(生成權重)。

            也就是“假設現實跟我想象的不一樣。改變我的權重使得我想象的東西就是這樣的”。

            2)sleep階段:生成過程,通過頂層表示(醒時學得的概念)和向下權重,生成底層的狀態,同一時候改動層間向上的權重。也就是“假設夢中的景象不是我腦中的相應概念。改變我的認知權重使得這樣的景象在我看來就是這個概念”。

             

            deep learning訓練過程詳細例如以下:

            1)使用自下上升非監督學習(就是從底層開始,一層一層的往頂層訓練):

                   採用無標定數據(有標定數據也可)分層訓練各層參數。這一步能夠看作是一個無監督訓練過程,是和傳統神經網絡區別最大的部分(這個過程能夠看作是feature learning過程):

                   詳細的。先用無標定數據訓練第一層,訓練時先學習第一層的參數(這一層能夠看作是得到一個使得輸出和輸入區別最小的三層神經網絡的隱層),由于模型capacity的限制以及稀疏性約束。使得得到的模型能夠學習到數據本身的結構,從而得到比輸入更具有表示能力的特征;在學習得到第n-1層后。將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數;

            2)自頂向下的監督學習(就是通過帶標簽的數據去訓練,誤差自頂向下傳輸。對網絡進行微調):

                   基于第一步得到的各層參數進一步fine-tune整個多層模型的參數,這一步是一個有監督訓練過程;第一步類似神經網絡的隨機初始化初值過程。由于DL的第一步不是隨機初始化,而是通過學習輸入數據的結構得到的。因而這個初值更接近全局最優,從而能夠取得更好的效果;所以deep learning效果好非常大程度上歸功于第一步的feature learning過程。

            九、Deep Learning的經常使用模型或者方法

            9.1、AutoEncoder自己主動編碼器

                    Deep Learning最簡單的一種方法是利用人工神經網絡的特點,人工神經網絡(ANN)本身就是具有層次結構的系統。假設給定一個神經網絡,我們假設其輸出與輸入是同樣的,然后訓練調整其參數。得到每一層中的權重。

            自然地。我們就得到了輸入I的幾種不同表示(每一層代表一種表示),這些表示就是特征。自己主動編碼器就是一種盡可能復現輸入信號的神經網絡。為了實現這樣的復現,自己主動編碼器就必須捕捉能夠代表輸入數據的最重要的因素。就像PCA那樣,找到能夠代表原信息的主要成分。

                   詳細過程簡單的說明例如以下:

            1)給定無標簽數據,用非監督學習學習特征:

             技術分享

                   在我們之前的神經網絡中。如第一個圖,我們輸入的樣本是有標簽的。即(input, target),這樣我們依據當前輸出和target(label)之間的差去改變前面各層的參數,直到收斂。但如今我們僅僅有無標簽數據,也就是右邊的圖。那么這個誤差怎么得到呢?

            技術分享

                    如上圖。我們將input輸入一個encoder編碼器。就會得到一個code。這個code也就是輸入的一個表示。那么我們怎么知道這個code表示的就是input呢?我們加一個decoder解碼器,這時候decoder就會輸出一個信息,那么假設輸出的這個信息和一開始的輸入信號input是非常像的(理想情況下就是一樣的)。那非常明顯,我們就有理由相信這個code是靠譜的。

            所以,我們就通過調整encoder和decoder的參數,使得重構誤差最小,這時候我們就得到了輸入input信號的第一個表示了,也就是編碼code了。由于是無標簽數據,所以誤差的來源就是直接重構后與原輸入相比得到。

            技術分享

            2)通過編碼器產生特征。然后訓練下一層。這樣逐層訓練:

                   那上面我們就得到第一層的code。我們的重構誤差最小讓我們相信這個code就是原輸入信號的良好表達了,或者牽強點說,它和原信號是一模一樣的(表達不一樣,反映的是一個東西)。

            那第二層和第一層的訓練方式就沒有區別了。我們將第一層輸出的code當成第二層的輸入信號。同樣最小化重構誤差,就會得到第二層的參數,并且得到第二層輸入的code,也就是原輸入信息的第二個表達了。其它層就同樣的方法炮制即可了(訓練這一層,前面層的參數都是固定的。并且他們的decoder已經沒用了。都不須要了)。

            技術分享

            3)有監督微調:

                  經過上面的方法,我們就能夠得到非常多層了。至于須要多少層(或者深度須要多少,這個眼下本身就沒有一個科學的評價方法)須要自己試驗調了。每一層都會得到原始輸入的不同的表達。當然了。我們覺得它是越抽象越好了,就像人的視覺系統一樣。

                   到這里,這個AutoEncoder還不能用來分類數據,由于它還沒有學習怎樣去連結一個輸入和一個類。它僅僅是學會了怎樣去重構或者復現它的輸入而已。

            或者說,它僅僅是學習獲得了一個能夠良好代表輸入的特征,這個特征能夠最大程度上代表原輸入信號。那么。為了實現分類,我們就能夠在AutoEncoder的最頂的編碼層加入一個分類器(比如羅杰斯特回歸、SVM等),然后通過標準的多層神經網絡的監督訓練方法(梯度下降法)去訓練。

                    也就是說,這時候。我們須要將最后層的特征code輸入到最后的分類器。通過有標簽樣本,通過監督學習進行微調,這也分兩種,一個是僅僅調整分類器(黑色部分):

            技術分享

                   還有一種:通過有標簽樣本,微調整個系統:(假設有足夠多的數據,這個是最好的。end-to-end learning端對端學習)

            技術分享

                   一旦監督訓練完畢。這個網絡就能夠用來分類了。

            神經網絡的最頂層能夠作為一個線性分類器。然后我們能夠用一個更好性能的分類器去代替它。

                   在研究中能夠發現,假設在原有的特征中加入這些自己主動學習得到的特征能夠大大提高準確度,甚至在分類問題中比眼下最好的分類算法效果還要好!

                    AutoEncoder存在一些變體,這里簡要介紹下兩個:

            Sparse AutoEncoder稀疏自己主動編碼器:

                  當然,我們還能夠繼續加上一些約束條件得到新的Deep Learning方法,如:假設在AutoEncoder的基礎上加上L1的Regularity限制(L1主要是約束每一層中的節點中大部分都要為0,僅僅有少數不為0,這就是Sparse名字的來源),我們就能夠得到Sparse AutoEncoder法。

            技術分享

                   如上圖。事實上就是限制每次得到的表達code盡量稀疏。由于稀疏的表達往往比其它的表達要有效(人腦好像也是這樣的,某個輸入僅僅是刺激某些神經元,其它的大部分的神經元是受到抑制的)。

            Denoising AutoEncoders降噪自己主動編碼器:

                    降噪自己主動編碼器DA是在自己主動編碼器的基礎上。訓練數據加入噪聲,所以自己主動編碼器必須學習去去除這樣的噪聲而獲得真正的沒有被噪聲污染過的輸入。

            因此,這就迫使編碼器去學習輸入信號的更加魯棒的表達。這也是它的泛化能力比一般編碼器強的原因。DA能夠通過梯度下降算法去訓練。

            技術分享

            9.2、Sparse Coding稀疏編碼

                   假設我們把輸出必須和輸入相等的限制放松,同一時候利用線性代數中基的概念。即O = a11 + a22+….+ ann。 Φi是基。ai是系數,我們能夠得到這樣一個優化問題:

            Min |I – O|。當中I表示輸入,O表示輸出。

                   通過求解這個最優化式子,我們能夠求得系數ai和基Φi,這些系數和基就是輸入的第二種近似表達。

            技術分享

                   因此,它們能夠用來表達輸入I。這個過程也是自己主動學習得到的。

            假設我們在上述式子上加上L1的Regularity限制。得到:

            Min |I – O| + u*(|a1| + |a2| + … + |an |)

                    這樣的方法被稱為Sparse Coding。

            通俗的說。就是將一個信號表示為一組基的線性組合,并且要求僅僅須要較少的幾個基就能夠將信號表示出來。

            “稀疏性”定義為:僅僅有非常少的幾個非零元素或僅僅有非常少的幾個遠大于零的元素。要求系數 ai 是稀疏的意思就是說:對于一組輸入向量。我們僅僅想有盡可能少的幾個系數遠大于零。選擇使用具有稀疏性的分量來表示我們的輸入數據是有原因的。由于絕大多數的感官數據,比方自然圖像,能夠被表示成少量基本元素的疊加。在圖像中這些基本元素能夠是面或者線。

            同一時候,比方與0基礎視覺皮層的類比過程也因此得到了提升(人腦有大量的神經元。但對于某些圖像或者邊緣僅僅有非常少的神經元興奮,其它都處于抑制狀態)。

                     稀疏編碼算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本數據。

            盡管形如主成分分析技術(PCA)能使我們方便地找到一組“完備”基向量,可是這里我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說。基向量的個數比輸入向量的維數要大)。

            超完備基的長處是它們能更有效地找出隱含在輸入數據內部的結構與模式。然而,對于超完備基來說。系數ai不再由輸入向量唯一確定。

            因此,在稀疏編碼算法中。我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。(詳細過程請參考:UFLDL Tutorial稀疏編碼

            技術分享

                   比方在圖像的Feature Extraction的最底層要做Edge Detector的生成,那么這里的工作就是從Natural Images中randomly選取一些小patch,通過這些patch生成能夠描寫敘述他們的“基”,也就是右邊的8*8=64個basis組成的basis,然后給定一個test patch, 我們能夠依照上面的式子通過basis的線性組合得到。而sparse matrix就是a,下圖中的a中有64個維度,當中非零項僅僅有3個,故稱“sparse”。

                   這里可能大家會有疑問。為什么把底層作為Edge Detector呢?上層又是什么呢?這里做個簡單解釋大家就會明白,之所以是Edge Detector是由于不同方向的Edge就能夠描寫敘述出整幅圖像,所以不同方向的Edge自然就是圖像的basis了……而上一層的basis組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)

                   Sparse coding分為兩個部分:

            1)Training階段:給定一系列的樣本圖片[x1, x 2, …]。我們須要學習得到一組基[Φ1, Φ2, …],也就是字典。

                   稀疏編碼是k-means算法的變體,其訓練過程也差點兒相同(EM算法的思想:假設要優化的目標函數包含兩個變量。如L(W, B),那么我們能夠先固定W,調整B使得L最小,然后再固定B。調整W使L最小,這樣迭代交替,不斷將L推向最小值。EM算法能夠見我的博客:“從最大似然到EM算法淺解”)。

                   訓練過程就是一個反復迭代的過程,按上面所說。我們交替的更改a和Φ使得以下這個目標函數最小。

            技術分享

                  每次迭代分兩步:

            a)固定字典Φ[k],然后調整a[k],使得上式。即目標函數最小(即解LASSO問題)。

            b)然后固定住a [k],調整Φ [k],使得上式,即目標函數最小(即解凸QP問題)。

                  不斷迭代,直至收斂。這樣就能夠得到一組能夠良好表示這一系列x的基,也就是字典。

            2)Coding階段:給定一個新的圖片x。由上面得到的字典,通過解一個LASSO問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的一個稀疏表達了。

            技術分享

            比如:

            技術分享

            9.3、Restricted Boltzmann Machine (RBM)限制波爾茲曼機

                   假設有一個二部圖,每一層的節點之間沒有鏈接,一層是可視層。即輸入數據層(v),一層是隱藏層(h),假設假設全部的節點都是隨機二值變量節點(僅僅能取0或者1值)。同一時候假設全概率分布p(v,h)滿足Boltzmann 分布。我們稱這個模型是Restricted BoltzmannMachine (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方法。

            技術分享

                   怎樣訓練呢?也就是可視層節點和隱節點間的權值怎么確定呢?我們須要做一些數學分析。

            也就是模型了。

            技術分享

                    聯合組態(jointconfiguration)的能量能夠表示為:

            技術分享

                    而某個組態的聯合概率分布能夠通過Boltzmann 分布(和這個組態的能量)來確定:

            技術分享

                  由于隱藏節點之間是條件獨立的(由于節點之間不存在連接),即:

            技術分享

                  然后我們能夠比較easy(對上式進行因子分解Factorizes)得到在給定可視層v的基礎上,隱層第j個節點為1或者為0的概率:

            技術分享

                   同理,在給定隱層h的基礎上。可視層第i個節點為1或者為0的概率也能夠easy得到:

            技術分享

                   給定一個滿足獨立同分布的樣本集:D={v(1), v(2),…, v(N)}。我們須要學習參數θ={W,a,b}。

                   我們最大化以下對數似然函數(最大似然預計:對于某個概率模型,我們須要選擇一個參數,讓我們當前的觀測樣本的概率最大):

            技術分享

                    也就是對最大對數似然函數求導,就能夠得到L最大時相應的參數W了。

            技術分享

             

                   假設,我們把隱藏層的層數添加,我們能夠得到Deep Boltzmann Machine(DBM);假設我們在靠近可視層的部分使用貝葉斯信念網絡(即有向圖模型,當然這里依舊限制層中節點之間沒有鏈接),而在最遠離可視層的部分使用Restricted Boltzmann Machine,我們能夠得到DeepBelief Net(DBN)。

            技術分享

             

            9.4、Deep Belief Networks深信度網絡

                    DBNs是一個概率生成模型,與傳統的判別模型的神經網絡相對,生成模型是建立一個觀察數據和標簽之間的聯合分布,對P(Observation|Label)和 P(Label|Observation)都做了評估,而判別模型僅僅而已評估了后者,也就是P(Label|Observation)。對于在深度神經網絡應用傳統的BP算法的時候。DBNs遇到了以下問題:

            (1)須要為訓練提供一個有標簽的樣本集;

            (2)學習過程較慢。

            (3)不適當的參數選擇會導致學習收斂于局部最優解。

            技術分享

                   DBNs由多個限制玻爾茲曼機(Restricted Boltzmann Machines)層組成,一個典型的神經網絡類型如圖三所看到的。這些網絡被“限制”為一個可視層和一個隱層,層間存在連接。但層內的單元間不存在連接。隱層單元被訓練去捕捉在可視層表現出來的高階數據的相關性。

                   首先,先不考慮最頂構成一個聯想記憶(associative memory)的兩層。一個DBN的連接是通過自頂向下的生成權值來指導確定的,RBMs就像一個建筑塊一樣,相比傳統和深度分層的sigmoid信念網絡,它能易于連接權值的學習。

                   最開始的時候。通過一個非監督貪婪逐層方法去預訓練獲得生成模型的權值,非監督貪婪逐層方法被Hinton證明是有效的。并被其稱為對照分歧(contrastive divergence)。

                   在這個訓練階段。在可視層會產生一個向量v,通過它將值傳遞到隱層。反過來,可視層的輸入會被隨機的選擇。以嘗試去重構原始的輸入信號。最后。這些新的可視的神經元激活單元將前向傳遞重構隱層激活單元,獲得h(在訓練過程中,首先將可視向量值映射給隱單元。然后可視單元由隱層單元重建;這些新可視單元再次映射給隱單元。這樣就獲取新的隱單元。執行這樣的反復步驟叫做吉布斯採樣)。這些后退和前進的步驟就是我們熟悉的Gibbs採樣,而隱層激活單元和可視層輸入之間的相關性區別就作為權值更新的主要依據。

                   訓練時間會顯著的降低,由于僅僅須要單個步驟就能夠接近最大似然學習。

            添加進網絡的每一層都會改進訓練數據的對數概率。我們能夠理解為越來越接近能量的真實表達。這個有意義的拓展,和無標簽數據的使用,是不論什么一個深度學習應用的決定性的因素。

            技術分享

                   在最高兩層。權值被連接到一起。這樣更低層的輸出將會提供一個參考的線索或者關聯給頂層,這樣頂層就會將其聯系到它的記憶內容。而我們最關心的,最后想得到的就是判別性能,比如分類任務里面。

                   在預訓練后,DBN能夠通過利用帶標簽數據用BP算法去對判別性能做調整。在這里,一個標簽集將被附加到頂層(推廣聯想記憶)。通過一個自下向上的,學習到的識別權值獲得一個網絡的分類面。這個性能會比單純的BP算法訓練的網絡好。

            這能夠非常直觀的解釋,DBNs的BP算法僅僅須要對權值參數空間進行一個局部的搜索。這相比前向神經網絡來說,訓練是要快的。并且收斂的時間也少。

                   DBNs的靈活性使得它的拓展比較easy。一個拓展就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并沒有考慮到圖像的2維結構信息,由于輸入是簡單的從一個圖像矩陣一維向量化的。而CDBNs就是考慮到了這個問題。它利用鄰域像素的空域關系,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性。并且能夠easy得變換到高維圖像。

            DBNs并沒有明白地處理對觀察變量的時間聯系的學習上。盡管眼下已經有這方面的研究。比如堆疊時間RBMs,以此為推廣,有序列學習的dubbed temporal convolutionmachines,這樣的序列學習的應用。給語音信號處理問題帶來了一個讓人激動的未來研究方向。

                   眼下。和DBNs有關的研究包含堆疊自己主動編碼器。它是通過用堆疊自己主動編碼器來替換傳統DBNs里面的RBMs。這就使得能夠通過同樣的規則來訓練產生深度多層神經網絡架構,但它缺少層的參數化的嚴格要求。

            與DBNs不同,自己主動編碼器使用判別模型,這樣這個結構就非常難採樣輸入採樣空間,這就使得網絡更難捕捉它的內部表達。

            可是。降噪自己主動編碼器卻能非常好的避免這個問題,并且比傳統的DBNs更優。

            它通過在訓練過程加入隨機的污染并堆疊產生場泛化性能。訓練單一的降噪自己主動編碼器的過程和RBMs訓練生成模型的過程一樣。

            9.5、Convolutional Neural Networks卷積神經網絡

                   卷積神經網絡是人工神經網絡的一種,已成為當前語音分析和圖像識別領域的研究熱點。它的權值共享網絡結構使之更類似于生物神經網絡。降低了網絡模型的復雜度,降低了權值的數量。該長處在網絡的輸入是多維圖像時表現的更為明顯。使圖像能夠直接作為網絡的輸入。避免了傳統識別算法中復雜的特征提取和數據重建過程。卷積網絡是為識別二維形狀而特殊設計的一個多層感知器。這樣的網絡結構對平移、比例縮放、傾斜或者共他形式的變形具有高度不變性。

                   CNNs是受早期的延時神經網絡(TDNN)的影響。延時神經網絡通過在時間維度上共享權值降低學習復雜度,適用于語音和時間序列信號的處理。

                   CNNs是第一個真正成功訓練多層網絡結構的學習算法。

            它利用空間關系降低須要學習的參數數目以提高一般前向BP算法的訓練性能。CNNs作為一個深度學習架構提出是為了最小化數據的預處理要求。

            在CNN中。圖像的一小部分(局部感受區域)作為層級結構的最低層的輸入,信息再依次傳輸到不同的層,每層通過一個數字濾波器去獲得觀測數據的最顯著的特征。

            這種方法能夠獲取對平移、縮放和旋轉不變的觀測數據的顯著特征。由于圖像的局部感受區域同意神經元或者處理單元能夠訪問到最基礎的特征,比如定向邊緣或者角點。

            1)卷積神經網絡的歷史

                   1962年Hubel和Wiesel通過對貓視覺皮層細胞的研究,提出了感受野(receptive field)的概念,1984年日本學者Fukushima基于感受野概念提出的神經認知機(neocognitron)能夠看作是卷積神經網絡的第一個實現網絡,也是感受野概念在人工神經網絡領域的首次應用。神經認知機將一個視覺模式分解成很多子模式(特征),然后進入分層遞階式相連的特征平面進行處理。它試圖將視覺系統模型化,使其能夠在即使物體有位移或輕微變形的時候。也能完畢識別。

                   通常神經認知機包含兩類神經元,即承擔特征抽取的S-元和抗變形的C-元。S-元中涉及兩個重要參數。即感受野與閾值參數,前者確定輸入連接的數目,后者則控制對特征子模式的反應程度。

            很多學者一直致力于提高神經認知機的性能的研究:在傳統的神經認知機中,每一個S-元的感光區中由C-元帶來的視覺模糊量呈正態分布。

            假設感光區的邊緣所產生的模糊效果要比中央來得大。S-元將會接受這樣的非正態模糊所導致的更大的變形容忍性。

            我們希望得到的是,訓練模式與變形刺激模式在感受野的邊緣與當中心所產生的效果之間的差異變得越來越大。為了有效地形成這樣的非正態模糊,Fukushima提出了帶雙C-元層的改進型神經認知機。

                   Van Ooyen和Niehuis為提高神經認知機的區別能力引入了一個新的參數。事實上,該參數作為一種抑制信號,抑制了神經元對反復激勵特征的激勵。多數神經網絡在權值中記憶訓練信息。依據Hebb學習規則。某種特征訓練的次數越多。在以后的識別過程中就越easy被檢測。也有學者將進化計算理論與神經認知機結合,通過減弱對反復性激勵特征的訓練學習,而使得網絡注意那些不同的特征以助于提高區分能力。上述都是神經認知機的發展過程,而卷積神經網絡可看作是神經認知機的推廣形式,神經認知機是卷積神經網絡的一種特例。

            2)卷積神經網絡的網絡結構

                  卷積神經網絡是一個多層的神經網絡,每層由多個二維平面組成,而每一個平面由多個獨立神經元組成。

            技術分享

                   圖:卷積神經網絡的概念示范:輸入圖像通過和三個可訓練的濾波器和可加偏置進行卷積。濾波過程如圖一。卷積后在C1層產生三個特征映射圖。然后特征映射圖中每組的四個像素再進行求和,加權值。加偏置。通過一個Sigmoid函數得到三個S2層的特征映射圖。這些映射圖再進過濾波得到C3層。這個層級結構再和S2一樣產生S4。終于,這些像素值被光柵化,并連接成一個向量輸入到傳統的神經網絡,得到輸出。

                   一般地,C層為特征提取層,每一個神經元的輸入與前一層的局部感受野相連。并提取該局部的特征,一旦該局部特征被提取后,它與其它特征間的位置關系也隨之確定下來。S層是特征映射層,網絡的每一個計算層由多個特征映射組成。每一個特征映射為一個平面,平面上全部神經元的權值相等。特征映射結構採用影響函數核小的sigmoid函數作為卷積網絡的激活函數,使得特征映射具有位移不變性。

                   此外。由于一個映射面上的神經元共享權值,因而降低了網絡自由參數的個數。降低了網絡參數選擇的復雜度。

            卷積神經網絡中的每一個特征提取層(C-層)都緊跟著一個用來求局部平均與二次提取的計算層(S-層),這樣的特有的兩次特征提取結構使網絡在識別時對輸入樣本有較高的畸變容忍能力。

            3)關于參數降低與權值共享

                  上面聊到,好像CNN一個牛逼的地方就在于通過感受野和權值共享降低了神經網絡須要訓練的參數的個數。

            那到底是啥的呢?

                   下圖左:假設我們有1000x1000像素的圖像,有1百萬個隱層神經元。那么他們全連接的話(每一個隱層神經元都連接圖像的每一個像素點),就有1000x1000x1000000=10^12個連接,也就是10^12個權值參數。然而圖像的空間聯系是局部的。就像人是通過一個局部的感受野去感受外界圖像一樣,每一個神經元都不須要對全局圖像做感受,每一個神經元僅僅感受局部的圖像區域,然后在更高層,將這些感受不同局部的神經元綜合起來就能夠得到全局的信息了。

            這樣,我們就能夠降低連接的數目,也就是降低神經網絡須要訓練的權值參數的個數了。例如以下圖右:假如局部感受野是10x10,隱層每一個感受野僅僅須要和這10x10的局部圖像相連接,所以1百萬個隱層神經元就僅僅有一億個連接。即10^8個參數。比原來降低了四個0(數量級),這樣訓練起來就沒那么費力了,但還是感覺非常多的啊,那還有啥辦法沒?

             技術分享

                   我們知道,隱含層的每一個神經元都連接10x10個圖像區域,也就是說每一個神經元存在10x10=100個連接權值參數。那假設我們每一個神經元這100個參數是同樣的呢?也就是說每一個神經元用的是同一個卷積核去卷積圖像。這樣我們就僅僅有多少個參數??僅僅有100個參數啊!

            !親!不管你隱層的神經元個數有多少。兩層間的連接我僅僅有100個參數啊!

            親。這就是權值共享啊。親!

            這就是卷積神經網絡的主打賣點啊!

            親!(有點煩了,呵呵)也許你會問,這樣做靠譜嗎?為什么可行呢?這個……共同學習。

                   好了。你就會想,這樣提取特征也忒不靠譜吧,這樣你僅僅提取了一種特征啊?對了,真聰明,我們須要提取多種特征對不?假如一種濾波器,也就是一種卷積核就是提出圖像的一種特征,比如某個方向的邊緣。那么我們須要提取不同的特征,怎么辦,加多幾種濾波器不即可了嗎?對了。所以假設我們加到100種濾波器,每種濾波器的參數不一樣。表示它提出輸入圖像的不同特征。比如不同的邊緣。

            這樣每種濾波器去卷積圖像就得到對圖像的不同特征的放映。我們稱之為Feature Map。所以100種卷積核就有100個Feature Map。這100個Feature Map就組成了一層神經元。到這個時候明了了吧。我們這一層有多少個參數了?100種卷積核x每種卷積核共享100個參數=100x100=10K,也就是1萬個參數。

            才1萬個參數啊!親!(又來了,受不了了。)見下圖右:不同的顏色表達不同的濾波器。

             技術分享

                   嘿喲,遺漏一個問題了。

            剛才說隱層的參數個數和隱層的神經元個數無關,僅僅和濾波器的大小和濾波器種類的多少有關。

            那么隱層的神經元個數怎么確定呢?它和原圖像。也就是輸入的大小(神經元個數)、濾波器的大小和濾波器在圖像中的滑動步長都有關!比如。我的圖像是1000x1000像素,而濾波器大小是10x10,假設濾波器沒有重疊,也就是步長為10,這樣隱層的神經元個數就是(1000x1000 )/ (10x10)=100x100個神經元了,假設步長是8,也就是卷積核會重疊兩個像素。那么……我就不算了,思想懂了就好。注意了。這僅僅是一種濾波器,也就是一個Feature Map的神經元個數哦。假設100個Feature Map就是100倍了。由此可見,圖像越大。神經元個數和須要訓練的權值參數個數的貧富差距就越大。

             技術分享

                  須要注意的一點是,上面的討論都沒有考慮每一個神經元的偏置部分。所以權值個數須要加1 。這個也是同一種濾波器共享的。

                  總之,卷積網絡的核心思想是將:局部感受野、權值共享(或者權值復制)以及時間或空間亞採樣這三種結構思想結合起來獲得了某種程度的位移、尺度、形變不變性。

            4)一個典型的樣例說明

                   一種典型的用來識別數字的卷積網絡是LeNet-5(效果和paper等見這)。當年美國大多數銀行就是用它來識別支票上面的手寫數字的。能夠達到這樣的商用的地步,它的準確性可想而知。畢竟眼下學術界和工業界的結合是最受爭議的。

            技術分享

                  那以下咱們也用這個樣例來說明下。

            技術分享

                    LeNet-5共同擁有7層,不包含輸入,每層都包含可訓練參數(連接權重)。輸入圖像為32*32大小。這要比Mnist數據庫(一個公認的手寫數據庫)中最大的字母還大。這樣做的原因是希望潛在的明顯特征如筆畫斷電或角點能夠出如今最高層特征監測子感受野的中心。

                    我們先要明白一點:每一個層有多個Feature Map,每一個Feature Map通過一種卷積濾波器提取輸入的一種特征,然后每一個Feature Map有多個神經元。

                    C1層是一個卷積層(為什么是卷積?卷積運算一個重要的特點就是。通過卷積運算。能夠使原信號特征增強。并且降低噪音)。由6個特征圖Feature Map構成。

            特征圖中每一個神經元與輸入中5*5的鄰域相連。特征圖的大小為28*28。這樣能防止輸入的連接掉到邊界之外(是為了BP反饋時的計算,不致梯度損失,個人見解)。C1有156個可訓練參數(每一個濾波器5*5=25個unit參數和一個bias參數,一共6個濾波器,共(5*5+1)*6=156個參數),共156*(28*28)=122,304個連接。

                   S2層是一個下採樣層(為什么是下採樣?利用圖像局部相關性的原理,對圖像進行子抽樣,能夠降低數據處理量同一時候保留實用信息),有6個14*14的特征圖。特征圖中的每一個單元與C1中相相應特征圖的2*2鄰域相連接。S2層每一個單元的4個輸入相加,乘以一個可訓練參數,再加上一個可訓練偏置。

            結果通過sigmoid函數計算。可訓練系數和偏置控制著sigmoid函數的非線性程度。

            假設系數比較小,那么運算近似于線性運算,亞採樣相當于模糊圖像。假設系數比較大,依據偏置的大小亞採樣能夠被看成是有噪聲的“或”運算或者有噪聲的“與”運算。

            每一個單元的2*2感受野并不重疊,因此S2中每一個特征圖的大小是C1中特征圖大小的1/4(行和列各1/2)。

            S2層有12個可訓練參數和5880個連接。

            技術分享

            圖:卷積和子採樣過程:卷積過程包含:用一個可訓練的濾波器fx去卷積一個輸入的圖像(第一階段是輸入的圖像,后面的階段就是卷積特征map了),然后加一個偏置bx。得到卷積層Cx。子採樣過程包含:每鄰域四個像素求和變為一個像素,然后通過標量Wx+1加權,再添加偏置bx+1。然后通過一個sigmoid激活函數,產生一個大概縮小四倍的特征映射圖Sx+1

                   所以從一個平面到下一個平面的映射能夠看作是作卷積運算,S-層可看作是模糊濾波器,起到二次特征提取的作用。隱層與隱層之間空間分辨率遞減,而每層所含的平面數遞增,這樣可用于檢測很多其它的特征信息。

                   C3層也是一個卷積層,它同樣通過5x5的卷積核去卷積層S2,然后得到的特征map就僅僅有10x10個神經元。可是它有16種不同的卷積核。所以就存在16個特征map了。這里須要注意的一點是:C3中的每一個特征map是連接到S2中的全部6個或者幾個特征map的。表示本層的特征map是上一層提取到的特征map的不同組合(這個做法也并非唯一的)。(看到沒有。這里是組合。就像之前聊到的人的視覺系統一樣。底層的結構構成上層更抽象的結構,比如邊緣構成形狀或者目標的部分)。

                   剛才說C3中每一個特征圖由S2中全部6個或者幾個特征map組合而成。為什么不把S2中的每一個特征圖連接到每一個C3的特征圖呢?原因有2點。第一,不全然的連接機制將連接的數量保持在合理的范圍內。第二。也是最重要的,其破壞了網絡的對稱性。由于不同的特征圖有不同的輸入,所以迫使他們抽取不同的特征(希望是互補的)。

                  比如,存在的一個方式是:C3的前6個特征圖以S2中3個相鄰的特征圖子集為輸入。接下來6個特征圖以S2中4個相鄰特征圖子集為輸入。然后的3個以不相鄰的4個特征圖子集為輸入。最后一個將S2中全部特征圖為輸入。這樣C3層有1516個可訓練參數和151600個連接。

                   S4層是一個下採樣層,由16個5*5大小的特征圖構成。特征圖中的每一個單元與C3中相應特征圖的2*2鄰域相連接,跟C1和S2之間的連接一樣。

            S4層有32個可訓練參數(每一個特征圖1個因子和一個偏置)和2000個連接。

                   C5層是一個卷積層,有120個特征圖。每一個單元與S4層的全部16個單元的5*5鄰域相連。

            由于S4層特征圖的大小也為5*5(同濾波器一樣)。故C5特征圖的大小為1*1:這構成了S4和C5之間的全連接。之所以仍將C5標示為卷積層而非全相聯層,是由于假設LeNet-5的輸入變大,而其它的保持不變,那么此時特征圖的維數就會比1*1大。C5層有48120個可訓練連接。

                    F6層有84個單元(之所以選這個數字的原因來自于輸出層的設計)。與C5層全相連。

            有10164個可訓練參數。

            如同經典神經網絡,F6層計算輸入向量和權重向量之間的點積,再加上一個偏置。

            然后將其傳遞給sigmoid函數產生單元i的一個狀態。

                  最后,輸出層由歐式徑向基函數(Euclidean Radial Basis Function)單元組成,每類一個單元,每一個有84個輸入。換句話說,每一個輸出RBF單元計算輸入向量和參數向量之間的歐式距離。

            輸入離參數向量越遠,RBF輸出的越大。一個RBF輸出能夠被理解為衡量輸入模式和與RBF相關聯類的一個模型的匹配程度的懲處項。用概率術語來說,RBF輸出能夠被理解為F6層配置空間的高斯分布的負log-likelihood。給定一個輸入模式。損失函數應能使得F6的配置與RBF參數向量(即模式的期望分類)足夠接近。這些單元的參數是人工選取并保持固定的(至少初始時候如此)。這些參數向量的成分被設為-1或1。

            盡管這些參數能夠以-1和1等概率的方式任選。或者構成一個糾錯碼,可是被設計成一個相應字符類的7*12大小(即84)的格式化圖片。這樣的表示對識別單獨的數字不是非常實用。可是對識別可打印ASCII集中的字符串非常實用。

                  使用這樣的分布編碼而非更經常使用的“1 of N”編碼用于產生輸出的還有一個原因是,當類別比較大的時候,非分布編碼的效果比較差。

            原因是大多數時間非分布編碼的輸出必須為0。這使得用sigmoid單元非常難實現。還有一個原因是分類器不僅用于識別字母,也用于拒絕非字母。使用分布編碼的RBF更適合該目標。由于與sigmoid不同。他們在輸入空間的較好限制的區域內興奮,而非典型模式更easy落到外邊。

                    RBF參數向量起著F6層目標向量的角色。

            須要指出這些向量的成分是+1或-1,這正好在F6 sigmoid的范圍內。因此能夠防止sigmoid函數飽和。實際上,+1和-1是sigmoid函數的最大彎曲的點處。

            這使得F6單元執行在最大非線性范圍內。

            必須避免sigmoid函數的飽和,由于這將會導致損失函數較慢的收斂和病態問題。

            5)訓練過程

                    神經網絡用于模式識別的主流是有指導學習網絡。無指導學習網絡很多其它的是用于聚類分析。對于有指導的模式識別,由于任一樣本的類別是已知的。樣本在空間的分布不再是依據其自然分布傾向來劃分。而是要依據同類樣本在空間的分布及不同類樣本之間的分離程度找一種適當的空間劃分方法,或者找到一個分類邊界。使得不同類樣本分別位于不同的區域內。這就須要一個長時間且復雜的學習過程,不斷調整用以劃分樣本空間的分類邊界的位置。使盡可能少的樣本被劃分到非同類區域中。

                   卷積網絡在本質上是一種輸入到輸出的映射,它能夠學習大量的輸入與輸出之間的映射關系,而不須要不論什么輸入和輸出之間的精確的數學表達式,僅僅要用已知的模式對卷積網絡加以訓練,網絡就具有輸入輸出對之間的映射能力。卷積網絡執行的是有導師訓練。所以其樣本集是由形如:(輸入向量,理想輸出向量)的向量對構成的。全部這些向量對,都應該是來源于網絡即將模擬的系統的實際“執行”結果。它們能夠是從實際執行系統中採集來的。在開始訓練前,全部的權都應該用一些不同的小隨機數進行初始化。“小隨機數”用來保證網絡不會因權值過大而進入飽和狀態,從而導致訓練失敗;“不同”用來保證網絡能夠正常地學習。實際上,假設用同樣的數去初始化權矩陣。則網絡無能力學習。

                   訓練算法與傳統的BP算法差點兒相同。主要包含4步,這4步被分為兩個階段:

            第一階段,向前傳播階段:

            a)從樣本集中取一個樣本(X,Yp),將X輸入網絡;

            b)計算相應的實際輸出Op

                  在此階段,信息從輸入層經過逐級的變換,傳送到輸出層。這個過程也是網絡在完畢訓練后正常執行時執行的過程。

            在此過程中,網絡執行的是計算(實際上就是輸入與每層的權值矩陣相點乘,得到最后的輸出結果):

                      Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n)

            第二階段,向后傳播階段

            a)算實際輸出Op與相應的理想輸出Yp的差;

            b)按極小化誤差的方法反向傳播調整權矩陣。

            6)卷積神經網絡的長處

                    卷積神經網絡CNN主要用來識別位移、縮放及其它形式扭曲不變性的二維圖形。由于CNN的特征檢測層通過訓練數據進行學習,所以在使用CNN時,避免了顯式的特征抽取。而隱式地從訓練數據中進行學習;再者由于同一特征映射面上的神經元權值同樣,所以網絡能夠并行學習。這也是卷積網絡相對于神經元彼此相連網絡的一大優勢。

            卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有著獨特的優越性,其布局更接近于實際的生物神經網絡,權值共享降低了網絡的復雜性。特別是多維輸入向量的圖像能夠直接輸入網絡這一特點避免了特征提取和分類過程中數據重建的復雜度。

                    流的分類方式差點兒都是基于統計特征的。這就意味著在進行分辨前必須提取某些特征。然而,顯式的特征提取并不easy,在一些應用問題中也并非總是可靠的。卷積神經網絡。它避免了顯式的特征取樣,隱式地從訓練數據中進行學習。

            這使得卷積神經網絡明顯有別于其它基于神經網絡的分類器。通過結構重組和降低權值將特征提取功能融合進多層感知器。

            它能夠直接處理灰度圖片,能夠直接用于處理基于圖像的分類。

                   卷積網絡較一般神經網絡在圖像處理方面有例如以下長處: a)輸入圖像和網絡的拓撲結構能非常好的吻合。b)特征提取和模式分類同一時候進行,并同一時候在訓練中產生;c)權重共享能夠降低網絡的訓練參數,使神經網絡結構變得更簡單。適應性更強。

            7)小結

                   CNNs中這樣的層間聯系和空域信息的緊密關系,使其適于圖像處理和理解。并且,其在自己主動提取圖像的顯著特征方面還表現出了比較優的性能。在一些樣例當中。Gabor濾波器已經被使用在一個初始化預處理的步驟中,以達到模擬人類視覺系統對視覺刺激的響應。在眼下大部分的工作中。研究者將CNNs應用到了多種機器學習問題中。包含人臉識別,文檔分析和語言檢測等。為了達到尋找視頻中幀與幀之間的相干性的目的,眼下CNNs通過一個時間相干性去訓練。但這個不是CNNs特有的。

                    呵呵,這部分講得太啰嗦了,又沒講到點上。沒辦法了,先這樣的,這樣這個過程我還沒有走過。所以自己水平有限啊,望各位明察。須要后面再改了,呵呵。

            十、總結與展望

            1)Deep learning總結

                  深度學習是關于自己主動學習要建模的數據的潛在(隱含)分布的多層(復雜)表達的算法。

            換句話來說,深度學習算法自己主動的提取分類須要的低層次或者高層次特征。

            高層次特征。一是指該特征能夠分級(層次)地依賴其它特征,比如:對于機器視覺,深度學習算法從原始圖像去學習得到它的一個低層次表達,比如邊緣檢測器,小波濾波器等。然后在這些低層次表達的基礎上再建立表達,比如這些低層次表達的線性或者非線性組合,然后反復這個過程,最后得到一個高層次的表達。

                   Deep learning能夠得到更好地表示數據的feature,同一時候由于模型的層次、參數非常多,capacity足夠,因此,模型有能力表示大規模數據,所以對于圖像、語音這樣的特征不明顯(須要手工設計且非常多沒有直觀物理含義)的問題,能夠在大規模訓練數據上取得更好的效果。此外,從模式識別特征和分類器的角度,deep learning框架將feature和分類器結合到一個框架中,用數據去學習feature,在使用中降低了手工設計feature的巨大工作量(這是眼下工業界工程師付出努力最多的方面)。因此,不僅僅效果能夠更好,并且,使用起來也有非常多方便之處,因此,是十分值得關注的一套框架,每一個做ML的人都應該關注了解一下。

                   當然,deep learning本身也不是完美的,也不是解決世間不論什么ML問題的利器。不應該被放大到一個無所不能的程度。

            2)Deep learning未來

                   深度學習眼下仍有大量工作須要研究。

            眼下的關注點還是從機器學習的領域借鑒一些能夠在深度學習使用的方法,特別是降維領域。比如:眼下一個工作就是稀疏編碼。通過壓縮感知理論對高維數據進行降維。使得非常少的元素的向量就能夠精確的代表原來的高維信號。還有一個樣例就是半監督流行學習。通過測量訓練樣本的類似性,將高維數據的這樣的類似性投影到低維空間。

            另外一個比較鼓勵人心的方向就是evolutionary programming approaches(遺傳編程方法),它能夠通過最小化工程能量去進行概念性自適應學習和改變核心架構。

            Deep learning還有非常多核心的問題須要解決:

            (1)對于一個特定的框架。對于多少維的輸入它能夠表現得較優(假設是圖像,可能是上百萬維)?

            (2)對捕捉短時或者長時間的時間依賴,哪種架構才是有效的?

            (3)怎樣對于一個給定的深度學習架構,融合多種感知的信息?

            (4)有什么正確的機理能夠去增強一個給定的深度學習架構,以改進其魯棒性和對扭曲和數據丟失的不變性?

            (5)模型方面是否有其它更為有效且有理論依據的深度模型學習算法?

                   探索新的特征提取模型是值得深入研究的內容。

            此外有效的可并行訓練算法也是值得研究的一個方向。當前基于最小批處理的隨機梯度優化算法非常難在多計算機中進行并行訓練。

            通常辦法是利用圖形處理單元加速學習過程。

            然而單個機器GPU對大規模數據識別或類似任務數據集并不適用。

            在深度學習應用拓展方面,怎樣合理充分利用深度學習在增強傳統學習算法的性能仍是眼下各領域的研究重點。

             

            十一、參考文獻和Deep Learning學習資源(持續更新……)

                   先是機器學習領域大牛的微博:@余凱_西二旗民工;@老師木;@梁斌penny;@張棟_機器學習;@鄧侃;@大數據皮東;@djvu9……

            (1)Deep Learning

            http://deeplearning.net/

            (2)Deep Learning Methods for Vision

            http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/

            (3)Neural Network for Recognition of Handwritten Digits[Project]

            http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

            (4)Training a deep autoencoder or a classifier on MNIST digits

            http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html

            (5)Ersatz:deep neural networks in the cloud

            http://www.ersatz1.com/

            (6)Deep Learning

            http://www.cs.nyu.edu/~yann/research/deep/

            (7)Invited talk "A Tutorial on Deep Learning" by Dr. Kai Yu (余凱)

            http://vipl.ict.ac.cn/News/academic-report-tutorial-deep-learning-dr-kai-yu

            (8)CNN - Convolutional neural network class

            http://www.mathworks.cn/matlabcentral/fileexchange/24291

            (9)Yann LeCun‘s Publications

            http://yann.lecun.com/exdb/publis/index.html#lecun-98

            (10) LeNet-5, convolutional neural networks

            http://yann.lecun.com/exdb/lenet/index.html

            (11) Deep Learning 大牛Geoffrey E. Hinton‘s HomePage

            http://www.cs.toronto.edu/~hinton/

            (12)Sparse coding simulation software[Project]

            http://redwood.berkeley.edu/bruno/sparsenet/

            (13)Andrew Ng‘s homepage

            http://robotics.stanford.edu/~ang/

            (14)stanford deep learning tutorial

            http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

            (15)「深度神經網絡」(deep neural network)詳細是怎樣工作的

            http://www.zhihu.com/question/19833708?group_id=15019075#1657279

            (16)A shallow understanding on deep learning

            http://blog.sina.com.cn/s/blog_6ae183910101dw2z.html

            (17)Bengio‘s Learning Deep Architectures for AI

             http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf

            (18)andrew ng‘s talk video:

            http://techtalks.tv/talks/machine-learning-and-ai-via-brain-simulations/57862/

            (19)cvpr 2012 tutorial:

            http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf

            (20)Andrew ng清華報告聽后感

            http://blog.sina.com.cn/s/blog_593af2a70101bqyo.html

            (21)Kai Yu:CVPR12 Tutorial on Deep Learning Sparse Coding

            (22)Honglak Lee:Deep Learning Methods for Vision

            (23)Andrew Ng :Machine Learning and AI via Brain simulations

            (24)Deep Learning 【2,3】

            http://blog.sina.com.cn/s/blog_46d0a3930101gs5h.html

            (25)deep learning這件小事……

            http://blog.sina.com.cn/s/blog_67fcf49e0101etab.html

            (26)Yoshua Bengio, U. Montreal:Learning Deep Architectures

            (27)Kai Yu:A Tutorial on Deep Learning

            (28)Marc‘Aurelio Ranzato:NEURAL NETS FOR VISION

            (29)Unsupervised feature learning and deep learning

            http://blog.csdn.net/abcjennifer/article/details/7804962

            (30)機器學習前沿熱點–Deep Learning

            http://elevencitys.com/?p=1854

            (31)機器學習——深度學習(Deep Learning)

            http://blog.csdn.net/abcjennifer/article/details/7826917

            (32)卷積神經網絡

            http://wenku.baidu.com/view/cd16fb8302d276a200292e22.html

            (33)淺談Deep Learning的基本思想和方法

            http://blog.csdn.net/xianlingmao/article/details/8478562

            (34)深度神經網絡

            http://blog.csdn.net/txdb/article/details/6766373

            (35)Google的貓臉識別:人工智能的新突破

            http://www.36kr.com/p/122132.html

            (36)余凱。深度學習-機器學習的新浪潮,Technical News程序天下事

            http://blog.csdn.net/datoubo/article/details/8577366

            (37)Geoffrey Hinton:UCLTutorial on: Deep Belief Nets

            (38)Learning Deep Boltzmann Machines

            http://web.mit.edu/~rsalakhu/www/DBM.html

            (39)Efficient Sparse Coding Algorithm

            http://blog.sina.com.cn/s/blog_62af19190100gux1.html

            (40)Itamar Arel, Derek C. Rose, and Thomas P. Karnowski: Deep Machine Learning—A New Frontier in Artificial Intelligence Research

            (41)Francis Quintal Lauzon:An introduction to deep learning

            (42)Tutorial on Deep Learning and Applications

            (43)Boltzmann神經網絡模型與學習算法

            http://wenku.baidu.com/view/490dcf748e9951e79b892785.html

            (44)Deep Learning 和 Knowledge Graph 引爆大數據革命

            http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html

            (45)……

            Deep Learning(深度學習)學習筆記整理

            標簽:設定   線性代數   program   內部   大量   權值更新   學習過程   put   trick   

            原文:http://www.cnblogs.com/liguangsunls/p/7078977.html

            (0)
            (0)
               
            舉報
            評論 一句話評論(1
            2018-02-08 16:41:19
            一直想學習學習深度學習
            回復
             (0)
             (0)
            1條  
            登錄后才能評論!
            ? 2014 bubuko.com 版權所有 魯ICP備09046678號-4
            打開技術之扣,分享程序人生!
                         

            魯公網安備 37021202000002號

            福建省餐饮许可现场