機器學習研究人員需要了解的8個神經網路架構(上)
在這篇文章中,我想與大家分享8個神經網路體系結構,我相信任何一個機器學習的研究人員都應該熟悉這一過程來促進他們的工作。
為什麼我們需要機器學習?
機器學習對於那些對人類來說太複雜而不能直接編碼的任務是必需的。有些任務非常複雜,因此人類不可能明確地計算出所有細微差別並對其進行編碼,這是不切實際的。相反,我們向機器學習演算法提供大量數據,讓演算法通過探索數據並搜索一個能夠實現程序員設定的模型來解決這個問題。
我們來看看這兩個例子:
- 編寫解決問題的程序非常困難,例如在一個混亂的場景中,新的光照條件下,從一個新穎的視角來識別三維物體。我們不知道要寫什麼程序,因為我們不知道它是如何在我們的大腦中完成的。即使我們知道如何去做,這個程序可能會非常複雜。
- 很難編寫一個程序來計算信用卡交易欺詐的可能性。可能沒有任何既簡單又可靠的規則。我們需要結合大量的弱規則。欺詐是一個移動的目標,而程序需要不斷變化。
然後是機器學習方法:我們不是為每個特定任務手動編寫程序,而是收集大量的例子來指定給定輸入的正確輸出。然後,機器學習演算法就會使用這些例子,並生成一個執行該任務的程序。學習演算法產生的程序可能與典型的手寫程序看起來非常不同。它可能包含數百萬的數字。如果我們做得對,該計劃適用於新案例以及我們訓練的案例。 如果數據發生變化,程序也可以通過對新數據進行訓練來改變。你應該注意到,大量的計算現在比付錢給某人編寫一個特定任務的程序要便宜。
鑒於此,機器學習最能解決的一些任務包括:
- 識別模式:真實場景中的物體,人臉識別或面部表情,口語單
- 識別異常:不尋常的信用卡交易序列,核電站感測器讀數異常模式
- 預測:未來股票價格或貨幣匯率,將會感興趣的電影
什麼是神經網路?
神經網路是通用機器學習文獻中的一類模型。舉個例子,如果你參加一個關於機器學習的Coursera課程,神經網路很可能會被覆蓋。神經網路是一組特定的演算法,對機器學習領域發生了革命性的變化。它們受到了生物神經網路的啟發,目前所謂的深層神經網路已經被證明非常有效。神經網路本身就是一般的函數逼近,這就是為什麼它們幾乎可以應用於幾乎任何機器學習問題,其中問題的關鍵是學習從輸入到輸出空間的複雜映射。
以下是說服你學習神經計算的三個理由:
- 要理解大腦的實際工作原理:它非常龐大而且非常複雜,並且當你戳到它時會死掉。所以我們需要使用計算機模擬。
- 了解受神經元及其適應性連接啟發的並行計算風格:這是一種與順序計算非常不同的風格。
- 用新的學習演算法來解決實際問題:學習演算法是非常有用的,即使它們不是大腦實際工作的方式。
在完成著名的Andrew Ng的機器學習Coursera課程後,我開始對神經網路和深度學習產生興趣。因此,我開始尋找最好的在線資源來了解這些主題,並找到了Geoffrey Hinton的機器學習神經網路課程。如果你是一個深度學習實踐者或想要進入深度學習/機器學習世界的人,你應該真的參加這門課程。Geoffrey Hinton毫無疑問是深度學習世界的教父。而且他在這門課程中提供了一些特別的東西。在這篇博客文章中,我想分享我認為機器學習研究人員應該熟悉的課程中的8個神經網路架構,以推進他們的工作。
通常,這些體系結構可以分為3個特定的類別:
1.前饋神經網路
這些是實際應用中最常見的神經網路類型。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱它們為「深層」 神經網路。它們計算出一系列改變案例之間相似性的轉變。每層神經元的活動都是下層中活動的非線性函數。
2.遞歸神經網路
它們在它們的連接圖中有直接的循環。這意味著你有時可以回到你開始的地方。它們可能有複雜的動態,這可能會使它們很難訓練。 它們更具生物現實性。
目前在尋找有效的訓練回歸網方面有很多的興趣。遞歸神經網路是建模時序數據的一種非常自然的方法。它們相當於每個時間片具有一個隱藏層的非常深的網路; 除了它們在每個時間片上使用相同的權重並且它們在每個時間片都得到輸入。它們有能力長時間記住隱藏狀態的信息,但很難訓練它們使用這種潛力。
3.對稱連接網路
這些就像遞歸網路,但是單元之間的連接是對稱的(它們在兩個方向上具有相同的權重)。對稱網路比遞歸網路更容易分析。 因為它們服從能量函數,所以它們在做的事情上也受到更多的限制。沒有隱藏單元的對稱連接的網路被稱為「霍普菲爾德網路」。具有隱藏單元的對稱連接網路稱為「玻爾茲曼機器」。
1.感知器
考慮到第一代神經網路,感知器只是單個神經元的計算模型。它們是由Frank Rosenblatt在20世紀60年代早期推廣的。它們似乎有一個非常強大的學習演算法,並且為它們可以學習的東西做了很多重大的宣傳。1969年,Minsky和Papers發表了一本名為《感知器》的書,分析了它們可以做什麼並展示了它們的局限性。許多人認為這些限制適用於所有的神經網路模型。然而,感知器學習過程在今天仍然被廣泛地應用於包含數百萬個特性的巨大特徵向量的任務。
在統計模式識別的標準範例中,我們首先將原始輸入向量轉換為特徵激活向量。 然後,我們使用基於常識的手寫程序來定義特徵。 接下來,我們將學習如何對每個特徵激活進行加權以獲得單個標量數量。如果這個數量高於某個閾值,我們就決定輸入向量是目標類的一個正面例子。
標準的感知器體系結構遵循前饋模型,這意味著輸入被發送到神經元中,被處理併產生輸出。在下面的圖中,這意味著網路是自下而上的:輸入來自底部,輸出從頂部輸出。
然而,感知器確實有局限性:如果你遵循手動選擇特性並使用足夠的特性,那麼你幾乎可以做任何事情。對於二元輸入向量,我們可以為每個指數多的二進位向量分別設置一個特徵單元,因此我們可以對二進位輸入向量進行任何可能的區分。但是,一旦確定了手工編碼的特性,就會對感知器的學習有很大的限制。
這個結果對感知器來說是毀滅性的,因為整個模式識別的重點是識別模式,儘管像翻譯這樣的轉換。Minsky和Papert的「群體不變定理」說,如果轉化形成一個群體,學習感知器的部分不能學會這樣做。為了處理這種轉換,感知器需要使用多個特徵單元來識別信息性子模式的轉換。所以模式識別的棘手部分必須通過手動編碼特徵檢測器來解決,而不是學習過程。
沒有隱藏單元的網路在它們可以學習建模的輸入輸出映射方面非常有限。更多層次的線性單元不起作用。它仍然是線性的。固定輸出非線性是不夠的。 因此,我們需要多層自適應非線性隱藏單元。 但我們如何訓練這樣的網?我們需要一種有效的方法來適應所有的權重,而不僅僅是最後一層。這是很難的。學習進入隱藏單位的權重等同於學習功能。這很難,因為沒有人直接告訴我們隱藏單位應該做什麼。
2.卷積神經網路
機器學習研究一直以來都集中在對象檢測問題上。有很多東西讓我們很難識別物體:
分割:真實場景與其他對象混雜在一起。很難分辨哪些部分是同一個對象的一部分。對象的某些部分可以隱藏在其他對象後面。
照明:像素的強度取決於物體的照明程度。
變形:物體以各種非仿射方式變形。一個手寫的也可以有一個大的圈,或者只是一個尖頭。
可用性:對象類通常由它們的使用方式來定義。例如,椅子是專為坐著而設計的,因此它們具有各種各樣的外形。
觀點:觀點的改變導致標準學習方法無法處理的圖像變化。輸入維度(即像素)之間的信息跳躍。
設想一個醫學資料庫,其中患者的年齡有時希望達到通常編碼體重的輸入維度! 為了應用機器學習,我們首先要消除這種維度跳躍。
複製特徵方法是目前神經網路解決目標檢測問題的主要方法。它使用不同位置的同一功能檢測器的許多不同副本。它也可以在規模和方向上進行複製,這很棘手,也很昂貴。
複製大大減少了要學習的可用參數的數量。它使用了幾種不同的特性類型,每個特徵類型都有自己的複製檢測器映射。它還允許每個圖像塊以多種方式表示。
那麼複製特徵探測器是如何實現的?
等效活動:複製的特性不會使神經活動不變數轉換。這些活動是等變的。
不變知識:如果在訓練過程中某個特性在某些位置有用,那麼在測試期間,該特性的檢測器將在所有位置都可用。
1998年,Yann LeCun和他的合作者開發出了一種名為LeNet的手寫數字識別器。它在具有許多隱藏層的前饋網中使用反向傳播,在每層中複製單元的許多映射,彙集附近複製單元的輸出,即使它們重疊也能夠一次處理幾個字元的寬網,以及聰明的訓練一個完整的系統,而不僅僅是一個識別器。後來,它被命名為卷積神經網路。 有趣的事實:這個網路用於讀取北美地區約10%的支票。
卷積神經網路可以用於所有與物體識別有關的工作,從手寫數字到3D對象。然而,從網上下載彩色照片中的真實物體要比識別手寫數字複雜得多。有100倍的類(1000比10),100倍的像素(256 x 256色vs 28 x 28灰色),二維圖像的三維場景,雜亂的場景需要分割,以及每個對象中有多個對象圖片。相同類型的卷積神經網路會起作用嗎?
之後,ILSVRC-2012競賽在ImageNet上進行,該數據集包含大約120萬張高解析度訓練圖像。測試圖像將顯示沒有初始注釋(無分割或標籤),演算法將不得不產生指定圖像中存在什麼對象的標籤。一些最優秀的計算機視覺方法是通過來自牛津,INRIA, XRCEa的計算機視覺組來測試的。通常,計算機視覺系統使用複雜的多級系統和早期通常是手工調整通過優化幾個參數。
大賽的獲勝者Alex Krizhevsky(NIPS 2012)開發了一種非常複雜的神經網路,由Yann LeCun首創。它的體系結構包括7個隱藏層,而不包括一些混合池。早期的層是卷積的,而最後兩層是全局連接的。激活函數在每個隱藏層中被糾正為線性單位。這些訓練比物流單位訓練速度更快,表現力更強。除此之外,當附近的單位有更強的活動時,它還使用競爭性標準化來壓制隱藏的活動。這有助於強度的變化。
有幾個技術訣竅可以顯著提高神經網路的泛化程度:
從256 x 256圖像中隨機抽取224 x 224個補丁,以獲得更多的數據,並使用圖像的左右反射。在測試時,結合10個不同補丁的意見:4個224 x 224角補丁加上中央224 x 224補丁加上這5個補丁的反射。
使用dropout在全局連接的層中調整權重(包含大多數參數)。中途退出意味著每一個訓練實例中,有一半的隱藏單元被隨機移除。這阻止了隱藏單位過多地依賴其他隱藏單位。
就硬體要求而言,Alex在2個Nvidia GTX 580 GPU(超過1000個快速小內核)上使用了非常高效的卷積網路實現。GPU非常適合矩陣矩陣乘法,並且還具有非常高的內存帶寬。這使他可以在一周內訓練網路,並使測試時快速結合10個補丁的結果。如果我們能夠以足夠快的速度交流狀態,我們可以在許多核心上擴展網路。隨著核心越來越便宜,數據集越來越大,大型神經網路將比老式計算機視覺系統提高得更快。
下文我們繼續介紹另外6種神經網路架構,希望可以給大家帶來幫助。
數十款阿里雲產品限時折扣中,趕緊點擊領劵開始雲上實踐吧!
以上為譯文,由阿里云云棲社區組織翻譯。
譯文鏈接
文章原標題《The 8 Neural Network Architectures Machine Learning Researchers Need to Learn》
作者:Nand Kishor,譯者:董昭男,審校:
文章為簡譯,更為詳細的內容,請查看原文。
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
TAG:深度學習DeepLearning | 架構 | 神經網路 |