Stanford UFLDL教程 深度網路概覽_Stanford

來源:互聯網
上載者:User
深度網路概覽 Contents [hide] 1概述 2深度網路的優勢 3訓練深度網路的困難 3.1資料擷取問題 3.2局部極值問題 3.3梯度彌散問題 4逐層貪婪訓練方法 4.1資料擷取 4.2更好的局部極值 5中英文對照 6中文譯者 概述

在之前的章節中,你已經構建了一個包括輸入層、隱藏層以及輸出層的三層神經網路。雖然該網路對於MNIST手寫數字資料庫非常有效,但是它還是一個非常“淺”的網路。這裡的“淺”指的是特徵(隱藏層的啟用值)只使用一層計算單元(隱藏層)來得到的。


在本節中,我們開始討論深度神經網路,即含有多個隱藏層的神經網路。通過引入深度網路,我們可以計算更多複雜的輸入特徵。因為每一個隱藏層可以對上一層的輸出進行非線性變換,因此深度神經網路擁有比“淺層”網路更加優異的表達能力(例如可以學習到更加複雜的函數關係)。


值得注意的是當訓練深度網路的時候,每一層隱層應該使用非線性啟用函數 。這是因為多層的線性函數組合在一起本質上也只有線性函數的表達能力(例如,將多個線性方程組合在一起僅僅產生另一個線性方程)。因此,在啟用函數是線性情況下,相比於單隱藏層神經網路,包含多隱藏層的深度網路並沒有增加表達能力。


深度網路的優勢

為什麼我們要使用深度網路呢。使用深度網路最主要的優勢在於,它能以更加緊湊簡潔的方式來表達比淺層網路大得多的函數集合。正式點說,我們可以找到一些函數,這些函數可以用 層網路簡潔地表達出來(這裡的簡潔是指隱層單元的數目只需與輸入單元數目呈多項式關係)。但是對於一個只有 層的網路而言,除非它使用與輸入單元數目呈指數關係的隱層單元數目,否則不能簡潔表達這些函數。


舉一個簡單的例子,比如我們打算構建一個布爾網路來計算 個輸入位元的同位碼(或者進行異或運算)。假設網路中的每一個節點都可以進行邏輯“或”運算(或者“與非”運算),亦或者邏輯“與”運算。如果我們擁有一個僅僅由一個輸入層、一個隱層以及一個輸出層構成的網路,那麼該同位函數所需要的節點數目與輸入層的規模 呈指數關係。但是,如果我們構建一個更深點的網路,那麼這個網路的規模就可做到僅僅是 的多項式函數。


當處理對象是映像時,我們能夠使用深度網路學習到“部分-整體”的分解關係。例如,第一層可以學習如何將映像中的像素組合在一起來檢測邊緣(正如我們在前面的練習中做的那樣)。第二層可以將邊緣組合起來檢測更長的輪廓或者簡單的“目標的組件”。在更深的層次上,可以將這些輪廓進一步組合起來以檢測更為複雜的特徵。


最後要提的一點是,大腦皮層同樣是分多層進行計算的。例如視覺映像在人腦中是分多個階段進行處理的,首先是進入大腦皮層的“V1”區,然後緊跟著進入大腦皮層“V2”區,以此類推。


訓練深度網路的困難

雖然幾十年前人們就發現了深度網路在理論上的簡潔性和較強的表達能力,但是直到最近,研究者們也沒有在訓練深度網路方面取得多少進步。問題原因在於研究者們主要使用的學習演算法是:首先隨機初始化深度網路的權重,然後使用有監督的目標函數在有標籤的訓練集 上進行訓練。例如通過使用梯度下降法來降低訓練誤差。然而,這種方法通常不是十分奏效。這其中有如下幾方面原因:


資料擷取問題

使用上面提到的方法,我們需要依賴於有標籤的資料才能進行訓練。然而有標籤的資料通常是稀缺的,因此對於許多問題,我們很難獲得足夠多的樣本來擬合一個複雜模型的參數。例如,考慮到深度網路具有強大的表達能力,在不充足的資料上進行訓練將會導致過擬合。


局部極值問題

使用監督學習方法來對淺層網路(只有一個隱藏層)進行訓練通常能夠使參數收斂到合理的範圍內。但是當用這種方法來訓練深度網路的時候,並不能取得很好的效果。特別的,使用監督學習方法訓練神經網路時,通常會涉及到求解一個高度非凸的最佳化問題(例如最小化訓練誤差,其中參數 是要最佳化的參數。對深度網路而言,這種非凸最佳化問題的搜尋地區中充斥著大量“壞”的局部極值,因而使用梯度下降法(或者像共軛梯度下降法,L-BFGS等方法)效果並不好。 梯度彌散問題

梯度下降法(以及相關的L-BFGS演算法等)在使用隨機初始化權重的深度網路上效果不好的技術原因是:梯度會變得非常小。具體而言,當使用反向傳播方法計算導數的時候,隨著網路的深度的增加,反向傳播的梯度(從輸出層到網路的最初幾層)的幅度值會急劇地減小。結果就造成了整體的損失函數相對於最初幾層的權重的導數非常小。這樣,當使用梯度下降法的時候,最初幾層的權重變化非常緩慢,以至於它們不能夠從樣本中進行有效學習。這種問題通常被稱為“梯度的彌散”.


與梯度彌散問題緊密相關的問題是:當神經網路中的最後幾層含有足夠數量神經元的時候,可能單獨這幾層就足以對有標籤資料進行建模,而不用最初幾層的協助。因此,對所有層都使用隨機初始化的方法訓練得到的整個網路的效能將會與訓練得到的淺層網路(僅由深度網路的最後幾層組成的淺層網路)的效能相似。


逐層貪婪訓練方法

那麼,我們應該如何訓練深度網路呢。逐層貪婪訓練方法是取得一定成功的一種方法。我們會在後面的章節中詳細闡述這種方法的細節。簡單來說,逐層貪婪演算法的主要思路是每次只訓練網路中的一層,即我們首先訓練一個只含一個隱藏層的網路,僅當這層網路訓練結束之後才開始訓練一個有兩個隱藏層的網路,以此類推。在每一步中,我們把已經訓練好的前 層固定,然後增加第 層(也就是將我們已經訓練好的前 的輸出作為輸入)。每一層的訓練可以是有監督的(例如,將每一步的分類誤差作為目標函數),但更通常使用無監督方法(例如自動編碼器,我們會在後邊的章節中給出細節)。這些各層單獨訓練所得到的權重被用來初始化最終(或者說全部)的深度網路的權重,然後對整個網路進行“微調”(即把所有層放在一起來最佳化有標籤訓練集上的訓練誤差).


逐層貪婪的訓練方法取得成功要歸功於以下幾方面:


資料擷取

雖然擷取有標籤資料的代價是昂貴的,但擷取大量的無標籤資料是容易的。自學習方法(self-taught learning)的潛力在於它能通過使用大量的無標籤資料來學習到更好的模型。具體而言,該方法使用無標籤資料來學習得到所有層(不包括用於預測標籤的最終分類層) 的最佳初始權重。相比純監督學習方法,這種自學習方法能夠利用多得多的資料,並且能夠學習和探索資料中存在的模式。因此該方法通常能夠提高分類器的效能。


更好的局部極值

當用無標籤資料訓練完網路後,相比於隨機初始化而言,各層初始權重會位於參數空間中較好的位置上。然後我們可以從這些位置出發進一步微調權重。從經驗上來說,以這些位置為起點開始梯度下降更有可能收斂到比較好的局部極值點,這是因為無標籤資料已經提供了大量輸入資料中包含的模式的先驗資訊。


在下一節中,我們將會具體闡述如何進行逐層貪婪訓練。


中英文對照 深度網路 Deep Networks 深度神經網路 deep neural networks 非線性變換 non-linear transformation 啟用函數 activation function 簡潔地表達 represent compactly “部分-整體”的分解 part-whole decompositions 目標的組件 parts of objects 高度非凸的最佳化問題 highly non-convex optimization problem 共軛梯度 conjugate gradient 梯度的彌散 diffusion of gradients 逐層貪婪訓練方法 Greedy layer-wise training 自動編碼器 autoencoder 微調 fine-tuned 自學習方法 self-taught learning from: http://ufldl.stanford.edu/wiki/index.php/%E6%B7%B1%E5%BA%A6%E7%BD%91%E7%BB%9C%E6%A6%82%E8%A7%88

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.