【深度學習】大牛的《深度學習》筆記,Deep Learning速成教程
深度學習,即Deep Learning,是一種學習演算法(Learning algorithm),亦是人工智慧領域的一個重要分支。從快速發展到實際應用,短短几年時間裡,深度學習顛覆了語音識別、影像分類、文字理解等眾多領域的演算法設計思路,漸漸形成了一種從訓練資料出發,經過一個端到端(end-to-end)的模型,然後直接輸出得到最終結果的一種新模式。那麼,深度學習有多深?學了究竟有幾分?本文將帶你領略深度學習高階範兒背後的方法與過程。
|一、概述
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之前,我們有必要再囉嗦下特徵(呵呵,實際上是看到那麼好的對特徵的解釋,不放在這裡有點可惜,所以就塞到這了)。
|四、關於特徵
特徵是機器學習系統的原材料,對最終模型的影響是毋庸置疑的。如果資料被很好的表達成了特徵,通常線性模型就能達到滿意的精度。那對於特徵,我們需要考慮什麼呢?
4.1、特徵表示的粒度
學習演算法在一個什麼粒度上的特徵表示,才有能發揮作用-?就一個圖片來說,畫素級的特徵根本沒有價值。例如下面的摩托車,從畫素級別,根本得不到任何資訊,其無法進行摩托車和非摩托車的區分。而如果特徵是一個具有結構性(或者說有含義)的時候,比如是否具有車把手(handle),是否具有車輪(wheel),就很容易把摩托車和非摩托車區分,學習演算法才能發揮作用。
4.2、初級(淺層)特徵表示
既然畫素級的特徵表示方法沒有作用,那怎樣的表示才有用呢?
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是不是容易多了):
從文字來說,一個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)明確突出了特徵學習的重要性,也就是說,通過逐層特徵變換,將樣本在原空間的特徵表示變換到一個新特徵空間,從而使分類或預測更加容易。與人工規則構造特徵的方法相比,利用大資料來學習特徵,更能夠刻畫資料的豐富內在資訊。
|七、Deep learning與Neural Network
深度學習是機器學習研究中的一個新的領域,其動機在於建立、模擬人腦進行分析學習的神經網路,它模仿人腦的機制來解釋資料,例如影像,聲音和文字。深度學習是無監督學習的一種。
深度學習的概念源於人工神經網路的研究。含多隱層的多層感知器就是一種深度學習結構。深度學習通過組合低層特徵形成更加抽象的高層表示屬性類別或特徵,以發現資料的分散式特徵表示。
Deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發展。大約二三十年前,neural network曾經是ML領域特別火熱的一個方向,但是後來確慢慢淡出了,原因包括以下幾個方面:
1)比較容易過擬合,引數比較難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 = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是係數,我們可以得到這樣一個優化問題:
Min |I – O|,其中I表示輸入,O表示輸出。
通過求解這個最優化式子,我們可以求得係數ai和基Φi,這些係數和基就是輸入的另外一種近似表達。
因此,它們可以用來表達輸入I,這個過程也是自動學習得到的。如果我們在上述式子上加上L1的Regularity限制,得到:
Min |I – O| + u*(|a1| + |a2| + … + |an |)
這種方法被稱為Sparse Coding。通俗的說,就是將一個訊號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將訊號表示出來。“稀疏性”定義為:只有很少的幾個非零元素或只有很少的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,我們只想有儘可能少的幾個係數遠大於零。選擇使用具有稀疏性的分量來表示我們的輸入資料是有原因的,因為絕大多數的感官資料,比如自然影像,可以被表示成少量基本元素的疊加,在影像中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的類比過程也因此得到了提升(人腦有大量的神經元,但對於某些影像或者邊緣只有很少的神經元興奮,其他都處於抑制狀態)。
稀疏編碼演算法是一種無監督學習方法,它用來尋找一組“超完備”基向量來更高效地表示樣本資料。雖然形如主成分分析技術(PCA)能使我們方便地找到一組“完備”基向量,但是這裡我們想要做的是找到一組“超完備”基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入資料內部的結構與模式。然而,對於超完備基來說,係數ai不再由輸入向量唯一確定。因此,在稀疏編碼演算法中,我們另加了一個評判標準“稀疏性”來解決因超完備而導致的退化(degeneracy)問題。
比如在影像的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推向最小值。
訓練過程就是一個重複迭代的過程,按上面所說,我們交替的更改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 分佈(和這個組態的能量)來確定:
因為隱藏節點之間是條件獨立的(因為節點之間不存在連線),即:
然後我們可以比較容易(對上式進行因子分解Factorizes)得到在給定可視層v的基礎上,隱層第j個節點為1或者為0的概率:
同理,在給定隱層h的基礎上,可視層第i個節點為1或者為0的概率也可以容易得到:
給定一個滿足獨立同分布的樣本集: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的靈活性使得它的擴充比較容易。一個擴充就是卷積DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs並沒有考慮到影像的2維結構資訊,因為輸入是簡單的從一個影像矩陣一維向量化的。而CDBNs就是考慮到了這個問題,它利用鄰域畫素的空域關係,通過一個稱為卷積RBMs的模型區達到生成模型的變換不變性,而且可以容易得變換到高維影像。DBNs並沒有明確地處理對觀察變數的時間聯絡的學習上,雖然目前已經有這方面的研究,例如堆疊時間RBMs,以此為推廣,有序列學習的dubbed temporal convolutionmachines,這種序列學習的應用,給語音訊號處理問題帶來了一個讓人激動的未來研究方向。
目前,和DBNs有關的研究包括堆疊自動編碼器,它是通過用堆疊自動編碼器來替換傳統DBNs裡面的RBMs。這就使得可以通過同樣的規則來訓練產生深度多層神經網路架構,但它缺少層的引數化的嚴格要求。與DBNs不同,自動編碼器使用判別模型,這樣這個結構就很難取樣輸入取樣空間,這就使得網路更難捕捉它的內部表達。但是,降噪自動編碼器卻能很好的避免這個問題,並且比傳統的DBNs更優。它通過在訓練過程新增隨機的汙染並堆疊產生場泛化效能。訓練單一的降噪自動編碼器的過程和RBMs訓練生成模型的過程一樣。
|十、總結與展望
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對大規模資料識別或相似任務資料集並不適用。在深度學習應用擴充方面,如何合理充分利用深度學習在增強傳統學習演算法的效能仍是目前各領域的研究重點。
詳解深度學習的一些關鍵術語
深度學習已經成為程式設計界的一股潮流,因為其在許多領域取得了令人難以置信的成功,使其在研究和工業領域廣受歡迎。那麼到底什麼是深度學習呢?
深度學習是應用深層神經網路技術:即利用具有多個隱藏層的神經網路結構來解決問題的過程。深度學習是一個過程,如資料探勘,它採用深度神經網路架構,它是特定型別的機器學習演算法。
深度學習最近取得了令人吃驚的成就。但,至少在我看來,謹記一些事情是很重要的:
1. 深度學習不是萬能的——它不是一個解決所有問題的萬能的解決方案。
2.它不是傳說中的王牌演算法——深度學習不會取代所有其他機器學習演算法和資料科學技術、或者至少它還沒有證明如此。
3.有期望是必要的——儘管最近它在所有型別的分類問題上取得了很大進展,特別是計算機視覺和自然語言處理以及強化學習和其他領域,當代深度學習並沒有擴充套件到處理非常複雜的問題,如“解決世界和平”。
4.深度學習和人工智慧並不是同義詞。
5.深度學習可以通過附加的過程和工具來幫助解決問題,從而為資料科學提供了極大的幫助。當從這個角度觀察時,深度學習對資料科學領域是非常有價值的補充。
如上圖所示,深度學習其本質就是資料探勘,因為(深度)神經網路是機器學習(過程與體系結構)。同樣可以看到的事實是,深度神經網路與當代人工智慧有很大關係,至少兩者可以交織在一起(然而,它們不是同一事物,人工智慧是具有許多其他演算法以及超越神經網路的技術)。還需要注意的是深度學習/深度神經網路與計算機視覺、自然語言處理和生成模型之間的聯絡,鑑於近年來在這些領域取得的巨大進步,深度學習和神經網路技術的聯絡是微妙的,但這種聯絡具有特別重要的意義。
那麼,讓我們來看看一些與深度學習相關的術語。
1. 深度學習:
如上所述,深度學習是應用深度神經網路技術解決問題的過程。深度神經網路是具有最小隱藏層的神經網路(見下文)。像資料探勘一樣,深度學習是指一個過程,它採用深層神經網路體系結構,其是特定型別的機器學習演算法。
2. 人工神經網路(ANN):
機器學習架構最初是由深度學習的腦神經(尤其是神經元)所啟發的。實際上,單獨的人工神經網路(非深度變種)已經存在了很長時間,並且歷史上能夠解決某些型別的問題。然而,相對最近,神經網路架構被設計出來,其中包括隱藏的神經元層(不僅僅是輸入層和輸出層),而且這種複雜程度增加了深度學習的能力,並提供了一套更強大的問題解決工具。
人工神經網路在結構上與深度神經網路有很大的不同,因此沒有明確的神經網路定義。所有人工神經網路通常引用的特徵是擁有自適應加權集合,以及將輸入的非線性函式逼近神經元的能力。
3. 生物神經元
通常,生物神經網路和人工神經網路之間存在明確的聯絡。流行的出版物宣傳了人工神經網路在某種程度上是人類(或其他生物)大腦中發生的確切複本,但這顯然是不準確的。充其量,早期的人工神經網路受到生物學的啟發。兩者之間的抽象關係不比原子與太陽系的組成和功能之間的抽象比較明確。
也就是說,如果僅僅瞭解人工神經網路的靈感,它確實能讓我們看到生物神經元如何在很高的水平上工作。
我們感興趣的生物神經元的主要組成部分是:
· 核:儲存遺傳資訊(即,DNA)。
· 細胞主體:處理輸入啟用,並將其轉換成輸出啟用。
· 樹突:從其他神經元接受啟用。
· 軸突:傳遞啟用到其他神經元。
· 軸突末梢:與相鄰的樹突形成神經元之間的突觸。
被稱為神經遞質的化學物質然後擴散穿過軸突末端和鄰近的樹突之間的突觸間隙,構成神經傳遞。神經元的基本操作是啟用神經元,處理,然後通過其軸突末端再傳播出軸突,穿過突觸間隙併到達許多接受神經元的樹突,重複這個過程。
4. 感知器
感知器是一個簡單的線性二元分類器。感知器獲取輸入和相關權重(表示相對輸入重要性),並將它們組合以產生輸出,然後用於分類。感知器已經存在了很長時間,早期的實現可以追溯到20世紀50年代,其中第一個涉及早期的ANN實現。
5. 多層感知機(MLP)
多層感知機(MLP)是幾個完全相鄰連線的感知機層的實現,形成一個簡單的前饋神經網路(見下文)。這種多層感知機具有單感知機不具備的非線性啟用功能的優勢。
6. 前饋神經網路
前饋神經網路是神經網路結構的最簡單形式,其中的連線是非週期性的。原始的人工神經網路,前饋網路中的資訊從輸入節點(隱藏層)向輸出節點單向前進,沒有周期存在。前饋網路不同於後來的經常性網路架構(RNN)(見下文),其中連線形成有向迴圈。
7. 經常性神經網路(RNN)
與上述前饋神經網路相比,遞迴神經網路的連線形成有向迴圈。這種雙向流動允許使用內部的時間狀態表示,這反過來又允許序列處理,並且提供了識別語音和手寫的能力。
8. 啟用函式
在神經網路中,啟用函式通過組合網路的加權輸入產生輸出決策邊界。啟用函式的範圍是從線性到sigmoid(邏輯)再到雙曲線(相切)和超越。為了採用反向傳播(見下文),網路中必須利用可區分的啟用函式。
9. 反向傳播
我曾經遇到過的最簡潔、最基本的反向傳播定義是資料科學家Mikio L. Braun 對Quora給出了以下答案:
BP只是個別錯誤的漸變下降,你可以將神經網路的預測與期望的輸出進行比較,然後根據神經網路的權重計算誤差的梯度。這將給你一個引數權重空間的方向,在這個空間中誤差會變小。
10. 成本函式
在訓練神經網路時,必須評估網路輸出的正確性。由於我們知道訓練資料的正確輸出,所以可以比較訓練的輸出。成本函式衡量實際產出與訓練產出之間的差異。實際產出和預期產出之間的零成本意味著網路一直在儘可能地進行訓練,這顯然是理想的。
那麼,通過什麼機制來調整成本函式,並將其最小化呢?
11. 梯度消失
梯度下降是一種用於尋找區域性函式最小值的優化演算法。儘管不能保證全域性最小值,但梯度下降法對於精確求解或者難以求解的函式特別有用,例如將導數設定為零並求解。
如上所述,在神經網路的情況下,隨機梯度下降用於對網路引數做出明智的調整,目的是最小化成本函式,從而使網路的實際輸出更接近於迭代地達到預期的輸出。這種迭代最小化成本過程採用的是微積分,即微分。在訓練步驟之後,網路權重根據成本函式的梯度和網路的當前權重來接收更新,以便下一個訓練步驟的結果可能更接近正確(通過較小的成本函式測量)。反向傳播(錯誤的後向傳播)是用於將這些更新分發給網路的方法。
12. 消失漸變問題
反向傳播使用鏈式規則來計算梯度,其中朝向n層神經網路的“前”(輸入)的層將其小數更新的梯度值乘以n倍,然後將該穩定值用作更新。這意味著梯度將呈指數形式下降,這是一個n值較大的問題,而前面的層次需要越來越多的時間進行有效訓練。
13. 卷積神經網路
通常與計算機視覺和影像識別相關聯,卷積神經網路(CNN)採用卷積的數學概念來模擬生物視覺皮層的神經連線網格。
首先,如Denny Britz所描述的那樣,卷積可以被認為是影像矩陣表示上的滑動視窗(參見下文)。
這個概念在神經網路結構中的實現導致神經元集合專用於處理影像部分,至少在計算機視覺中被使用時。在其他領域(如自然語言處理)中使用時,也可以使用相同的方法,因為輸入(單詞,句子等)可以排列在矩陣中並以類似的方式處理。
14. 長短期記憶網路(LSTM)
長短期記憶網路(LSTM)是一種經常性神經網路,它經過優化,可以從相關事件之間的時間相關資料中學習,這些資料可能具有未定義或未知的時間長度。他們特殊的架構允許永續性,給ANN帶來“記憶”。LSTM網路最近在手寫識別和自動語音識別方面取得了突破。
這只是深度學習術語的一小部分,並且隨著你對機器學習研究瞭解,許多其他的概念正在等待你的探索。
人工智慧賽博物理作業系統
AI-CPS OS
“人工智慧賽博物理作業系統”(新一代技術+商業作業系統“AI-CPS OS”:雲端計算+大資料+物聯網+區塊鏈+人工智慧)分支用來的今天,企業領導者必須瞭解如何將“技術”全面滲入整個公司、產品等“商業”場景中,利用AI-CPS OS形成數字化+智慧化力量,實現行業的重新佈局、企業的重新構建和自我的煥然新生。
AI-CPS OS的真正價值並不來自構成技術或功能,而是要以一種傳遞獨特競爭優勢的方式將自動化+資訊化、智造+產品+服務和資料+分析一體化,這種整合方式能夠釋放新的業務和運營模式。如果不能實現跨功能的更大規模融合,沒有顛覆現狀的意願,這些將不可能實現。
領導者無法依靠某種單一戰略方法來應對多維度的數字化變革。面對新一代技術+商業作業系統AI-CPS OS顛覆性的數字化+智慧化力量,領導者必須在行業、企業與個人這三個層面都保持領先地位:
重新行業佈局:你的世界觀要怎樣改變才算足夠?你必須對行業典範進行怎樣的反思?
重新構建企業:你的企業需要做出什麼樣的變化?你準備如何重新定義你的公司?
重新打造自己:你需要成為怎樣的人?要重塑自己並在數字化+智慧化時代保有領先地位,你必須如何去做?
AI-CPS OS是數字化智慧化創新平臺,設計思路是將大資料、物聯網、區塊鏈和人工智慧等無縫整合在雲端,可以幫助企業將創新成果融入自身業務體系,實現各個前沿技術在雲端的優勢協同。AI-CPS OS形成的數字化+智慧化力量與行業、企業及個人三個層面的交叉,形成了領導力模式,使數字化融入到領導者所在企業與領導方式的核心位置:
精細:這種力量能夠使人在更加真實、細緻的層面觀察與感知現實世界和數字化世界正在發生的一切,進而理解和更加精細地進行產品個性化控制、微觀業務場景事件和結果控制。
智慧:模型隨著時間(資料)的變化而變化,整個系統就具備了智慧(自學習)的能力。
高效:企業需要建立實時或者準實時的資料採集傳輸、模型預測和響應決策能力,這樣智慧就從批量性、階段性的行為變成一個可以實時觸達的行為。
不確定性:數字化變更顛覆和改變了領導者曾經仰仗的思維方式、結構和實踐經驗,其結果就是形成了複合不確定性這種顛覆性力量。主要的不確定性蘊含於三個領域:技術、文化、制度。
邊界模糊:數字世界與現實世界的不斷融合成CPS不僅讓人們所知行業的核心產品、經濟學定理和可能性都產生了變化,還模糊了不同行業間的界限。這種效應正在向生態系統、企業、客戶、產品快速蔓延。
AI-CPS OS形成的數字化+智慧化力量通過三個方式激發經濟增長:
創造虛擬勞動力,承擔需要適應性和敏捷性的複雜任務,即“智慧自動化”,以區別於傳統的自動化解決方案;
對現有勞動力和實物資產進行有利的補充和提升,提高資本效率;
人工智慧的普及,將推動多行業的相關創新,開闢嶄新的經濟增長空間。
給決策制定者和商業領袖的建議:
超越自動化,開啟新創新模式:利用具有自主學習和自我控制能力的動態機器智慧,為企業創造新商機;
迎接新一代資訊科技,迎接人工智慧:無縫整合人類智慧與機器智慧,重新
評估未來的知識和技能型別;
制定道德規範:切實為人工智慧生態系統制定道德準則,並在智慧機器的開
發過程中確定更加明晰的標準和最佳實踐;
重視再分配效應:對人工智慧可能帶來的衝擊做好準備,制定戰略幫助面臨
較高失業風險的人群;
開發數字化+智慧化企業所需新能力:員工團隊需要積極掌握判斷、溝通及想象力和創造力等人類所特有的重要能力。對於中國企業來說,創造兼具包容性和多樣性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《論語·子路》雲端計算、大資料、物聯網、區塊鏈和 人工智慧,像君子一般融合,一起體現科技就是生產力。
如果說上一次哥倫布地理大發現,擴充的是人類的物理空間。那麼這一次地理大發現,擴充的就是人們的數字空間。在數學空間,建立新的商業文明,從而發現新的創富模式,為人類社會帶來新的財富空間。雲端計算,大資料、物聯網和區塊鏈,是進入這個數字空間的船,而人工智慧就是那船上的帆,哥倫布之帆!
新一代技術+商業的人工智慧賽博物理作業系統AI-CPS OS作為新一輪產業變革的核心驅動力,將進一步釋放歷次科技革命和產業變革積蓄的巨大能量,並創造新的強大引擎。重構生產、分配、交換、消費等經濟活動各環節,形成從巨集觀到微觀各領域的智慧化新需求,催生新技術、新產品、新產業、新業態、新模式。引發經濟結構重大變革,深刻改變人類生產生活方式和思維模式,實現社會生產力的整體躍升。
產業智慧官 AI-CPS
用“人工智慧賽博物理作業系統”(新一代技術+商業作業系統“AI-CPS OS”:雲端計算+大資料+物聯網+區塊鏈+人工智慧),在場景中構建狀態感知-實時分析-自主決策-精準執行-學習提升的認知計算和機器智慧;實現產業轉型升級、DT驅動業務、價值創新創造的產業互聯生態鏈。
長按上方二維碼關注微信公眾號: AI-CPS,更多資訊回覆:
新技術:“雲端計算”、“大資料”、“物聯網”、“區塊鏈”、“人工智慧”;新產業:“智慧製造”、“智慧金融”、“智慧零售”、“智慧駕駛”、“智慧城市”;新模式:“財富空間”、“工業網際網路”、“資料科學家”、“賽博物理系統CPS”、“供應鏈金融”。
官方網站:AI-CPS.NET
本文系“產業智慧官”(公眾號ID:AI-CPS)收集整理,轉載請註明出處!
版權宣告:由產業智慧官(公眾號ID:AI-CPS)推薦的文章,除非確實無法確認,我們都會註明作者和來源。部分文章推送時未能與原作者取得聯絡。若涉及版權問題,煩請原作者聯絡我們,與您共同協商解決。聯絡、投稿郵箱:erp_vip@hotmail.com
相關文章
- 深度學習 DEEP LEARNING 學習筆記(一)深度學習筆記
- 深度學習 DEEP LEARNING 學習筆記(二)深度學習筆記
- 《DEEP LEARNING·深度學習》深度學習
- 深度學習(Deep Learning)深度學習
- 深度學習模型調優方法(Deep Learning學習記錄)深度學習模型
- 深度學習(Deep Learning)優缺點深度學習
- 貝葉斯深度學習(bayesian deep learning)深度學習
- 《深度學習》PDF Deep Learning: Adaptive Computation and Machine Learning series深度學習APTMac
- Searching with Deep Learning 深度學習的搜尋應用深度學習
- 深度學習框架Pytorch學習筆記深度學習框架PyTorch筆記
- 深度學習 筆記一深度學習筆記
- 深度學習keras筆記深度學習Keras筆記
- 深度殘差學習筆記:Deep Residual Networks with Dynamically Weighted Wavelet筆記
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 學習筆記:深度學習中的正則化筆記深度學習
- 深度學習問題記錄:Building your Deep Neural深度學習UI
- 剛剛,阿里開源首個深度學習框架 X-Deep Learning!阿里深度學習框架
- 林軒田機器學習技法課程學習筆記13 — Deep Learning機器學習筆記
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- 【深度學習筆記】Batch Normalization (BN)深度學習筆記BATORM
- 深度學習不得不會的遷移學習Transfer Learning深度學習遷移學習
- 學習筆記【深度學習2】:AI、機器學習、表示學習、深度學習,第一次大衰退筆記深度學習AI機器學習
- 【部分】Java速成學習筆記Java筆記
- 深度互學習-Deep Mutual Learning:三人行必有我師
- 深度學習入門筆記——Transform的使用深度學習筆記ORM
- 深度學習入門筆記——DataLoader的使用深度學習筆記
- 基於深度學習的醫學影像配準學習筆記2深度學習筆記
- 李巨集毅深度學習 筆記(四)深度學習筆記
- Deep Crossing模型——經典的深度學習架構ROS模型深度學習架構
- 《深度學習入門:基於Python的理論與實現》 Deep Learning from Scratch深度學習Python
- 深度學習與CV教程(8) | 常見深度學習框架介紹深度學習框架
- Python深度學習(處理文字資料)--學習筆記(十二)Python深度學習筆記
- 深度學習+深度強化學習+遷移學習【研修】深度學習強化學習遷移學習
- 【AAAI 2024】解鎖深度表格學習(Deep Tabular Learning)的關鍵:算術特徵互動AI特徵
- 吳恩達《神經網路與深度學習》課程筆記(1)– 深度學習概述吳恩達神經網路深度學習筆記
- 【筆記】動手學深度學習-預備知識筆記深度學習
- 深度學習及深度強化學習研修深度學習強化學習
- 基於深度學習模型Wide&Deep的推薦深度學習模型IDE