1. 程式人生 > >深度學習綜述

深度學習綜述

1概述

深度學習入門概述,內容包括網路結構,判別模型和生成模型的基本內容,略帶講解前沿模型和相關總結。

2神經網路

2.1結構:

這裡寫圖片描述
神經網路是這樣的一個結構:

  • 輸入層有多個輸入神經元,然後將輸入沿著邊傳播到隱含層中,每條邊有附屬的權值,隱含層神經元有自己的偏置。
  • 在某個隱含層的神經元中,該神經元的輸出為輸入神經元的加權乘積和與隱含層偏置的總和。
  • 隱含層的神經元輸出到輸出層中,以此類推,輸出層的輸出依然為隱含層神經元的的加權乘積和與輸出層偏置的總和。

在一個特定的神經網路中,可以有多個隱含層。而且,由於每個神經元的權值和偏置不一定一樣,所以對於不一樣的輸入資料,這些神經元的輸出都不太一樣。對於較多隱藏層的神經網路我們稱為深度神經網路。
這裡寫圖片描述

網路結構也可以分為兩種,監督型和非監督型:

  • 非監督型的從最開始的RBM和AE演化到DBN和SAE。
  • 監督型的從最開始的單個感知機,演化到多層感知機(MLP,CNN,RNN,RNTN)。

而其他的稀疏自編碼,ResNet,InceptionNet等等都是這些網路上的一些優化性改進而已。

2.2步驟

這裡寫圖片描述
對於神經網路而言,最重要的是能恰當配置好隱藏層和輸出層神經元的權值和偏置。幸好的是,這個配置是由機器來做,而不是人類。使用神經網路的步驟一般為三個:

  • 建立模型,按照業務場景建立網路結構,多少個輸入神經元和輸出神經元,多少層隱含層,層與層之間是全連線,還是部分連線等等。
  • 訓練模型,對於已經標記好的大量資料,將它們扔到神經網路中,神經網路通過預測輸出與實際輸出的差值來自動調整隱藏層和輸出層神經元權值和偏置。
  • 資料預測,對於新的資料,將他們直接扔到輸入層,得到的輸出就是預測輸出。
    *
2.3應用

機器學習的主要用途為分類,聚類,迴歸,關聯規則等等。現有的機器學習方法有SVM,logistic迴歸,決策樹,隨機森林等方法。但是,在需要高精度,難以提取特徵的無結構化資料機器學習中,深度學習幾乎是唯一的選擇。

深度學習也有它的問題,它對訓練資料很敏感,它的訓練目標也是最小化訓練資料的訓練誤差,所以容易受到噪音和過擬合的影響。因此,在一些高噪音的環境下,深度學習是失效的。例如,短期日內股票交易中,股票的波動可能是完全隨機性的,上漲可能跟之前的股票走向有關,還可能跟隨機性因素有關。所以,通過之前走向和未來走向扔進神經網路後,神經網路無法識別出哪些是因為隨機性因素影響,哪些是真正可以使用的走向。高噪音讓它無法收斂,或者只是收斂到一個過擬合的網路中。

3判別模型

3.1反向傳播演算法(BP)

使用梯度下降演算法來不斷調整權重與偏置。反向從輸出層的權重與偏置開始調整起,然後是隱藏層,最後是輸入層。

最大的問題是梯度消失:梯度在不斷往後調整的過程中會越來越小,到輸入層時幾乎為0。導致梯度消失,輸入層附近沒有有效地調整權重與偏置。

3.2限制玻爾茲曼機(RBM)

限制波爾茲曼機的解決辦法是,先從前面的層開始訓練起,直至後面的層。

首先,建立一個三層網路,輸入層,隱藏層1,和輸出層。將輸出層的結果調整為輸入層一樣的資料,然後訓練隱藏層和輸出層的權重與偏置。與此同時,要求隱藏層和輸出層的權重與偏置儘可能一樣。最後,丟棄輸出層的權重與偏置,得到隱藏層1的權重與偏置。
這裡寫圖片描述

很明顯,把輸入和輸出直接設定成一樣來訓練,就是一個加密和解密的過程。這樣做的原因是,將隱藏層1看成是特徵提取機,輸入層到隱藏層1的權重與偏置看成是提取特徵,隱藏層1到虛擬輸出層的的權重與偏置看成是特徵復原。顯然這兩層的權重與偏置應該是要一樣。

通過這樣的方法,我們可以將RBM看成是原始資料的特徵提取機。而且,RBM的虛擬輸出層是固定為輸入資料,完全不需要資料人工標註,這是一個非常好的無監督學習方法。

最後,將隱藏層的輸出作為BP的輸入資料來訓練,能得到更好的訓練效果。畢竟提取資料特徵來訓練要簡單得多。

3.3深度信念網路(DBN)

這裡寫圖片描述
既然我們可以用RBM來無監督提取一層原始資料的特徵,為什麼不在隱藏層的後面再加多一個RBM呢,也就是說,將RBM層疊就成為了傳說中的深度信念網路DBN了。
這裡寫圖片描述
一個典型的DBN就是輸入資料後面層疊多個RBM,每個RBM單獨訓練,然後在最後一層的RBM後面加上一個傳統的分類器就可以了,例如是BP,SVM等等。

3.4自動編碼機(AE)

和RBM一樣,也是個自動特徵提取器,甚至他們訓練的結構都是一樣的。唯一的區別是,RBM的優化模型是一個極大似然優化,AE是個最小損失函式優化。所以,RBM輸出的是概率型結果,AE是個確定型結果。總體來說,AE限制更少,更優秀一點。
這裡寫圖片描述
另外,對於同一個資料而言,同一個AE由於訓練方式的不同可能會構造出完全不同的特徵提取器。那麼,如何去選擇和度量更好的特徵提取器了,答案就是稀疏自編碼器,降噪自編碼器和正則自編碼器

  • 稀疏自編碼器認為高維而稀疏的網路表達是最好的,然後我們指定一個稀疏性引數ρ,代表隱藏神經元的平均活躍程度(在訓練集上取平均)。比如,當ρ=0.05時,可以認為隱層節點在95%的時間裡都是被一直的,只有5%的機會被啟用。那麼,我們在損失函式中加入懲罰項,如果每次啟用的隱含節點越多,懲罰項越大。

  • 降噪自編碼器認為一個能夠從中恢復出原始訊號的表達未必是最好的,能夠對“被汙染/破壞”的原始資料編碼、解碼,然後還能恢復真正的原始資料,這樣的特徵才是好的。那麼,我們在訓練時會隨機加入一些資料噪音,而能夠適應這樣噪音的特徵器才會被選取。

  • 正則自編碼器認為權值和偏置的數值越小,特徵提取就越好。那麼,我們在損失函式中加入懲罰項,如果節點的權值和偏置的數值越大,懲罰項就越大。

3.5層疊自動編碼機(SAE)

與層疊RBM就成為了DBN一樣,層疊AE就成為了SAE,這是一個深度的特徵提取器。由於AE比RBM更優秀的緣故,一般SAE的效果都比DBN更加優秀。而這兩個都是一樣的無監督特徵學習器,也就是個預訓練器

3.6卷積神經網路(CNN)

卷積神經網路是從另外一個角度來解決BP的梯度消失的問題:那就是減少連線,和減少需要訓練的權值和偏置的數量
這裡寫圖片描述
之前使用RBM提取特徵時使用的是隱藏層全連線輸入層的,可是提取影象特徵時根本就不需要這麼多,只需要提取這個點周邊的8個點做加權和就可以了,這個加權和就是傳說中的卷積。而且,這樣的特徵提取方式同一個特徵應該是共用權值和偏置的。例如,我們opencv做邊緣時,常用的卷積核就是
這裡寫圖片描述

然後用這個卷積核對所有畫素點都遍歷一遍就可以了。同樣的,我們在CNN時,提取同一種特徵的神經元它們就是共享同一堆權值和偏置就可以了,唯一的區別就是它們對映的位置不一樣而已。
這裡寫圖片描述

當然僅僅只有一種特徵是不夠的,我們要多鍾,所以我們建立了多個特徵提取,同一個特徵提取中所有神經元都是共享權值和偏置的。同一個特徵提取中所有神經元被稱為一個特徵圖。

這裡寫圖片描述

就這樣,我們得到了cnn的卷積層。一副32x32的影象能提取出8個特徵圖。

這裡寫圖片描述

再然後,因為單個特徵圖的神經元數量還是太多了,我們做一個子抽樣,將單個特徵圖鄰近的神經元取最大值或平均值來取一個單獨輸出,就能大幅減少數量。

這裡寫圖片描述

就這樣,我們得到了子抽樣層,也被稱為池化層。卷積層和池化層兩個合起來就是單次的特徵提取過程。

這裡寫圖片描述

跟DBN的一樣,我們不斷層疊卷積層和池化層,然後中途插入幾個全連線層,就得到了一個卷積神經網路cnn了。由於卷積層減少了連線數量,而且單個特徵圖中共享共享權值和偏置,所以整個神經網路需要訓練的權值和偏置其實很少,直接用bp的全域性梯度下降訓練就完事了。CNN的效果非常屌,成為一個真正的深度學習網路,大幅提高了ImageNet的識別率。

3.7網路中的網路(NIN)

Network In Network(NIN)結構是對CNN的一個重大優化,傳統的CNN在卷積層後面直接加上池化層,沒有對卷積的資訊進行有效的非線性分析。所以,NIN的一個優化就是在卷積層後面加入了局部的全連線層,也就是MLPconv層。用程式碼來表示就是1x1的卷積核,相當amazing。
這裡寫圖片描述
這裡寫圖片描述
另外,在CNN最後的全連線層被更換為全域性池化層(Global Average Pooling),避免過擬合,這樣得出的網路所需的引數更少,收斂更快,泛化效果更好。

3.8遞迴神經網路(RNN)

4生成模型

4.1自動編碼機(AE)

自動編碼機在之前的判別模型中已經介紹過了,每次訓練完一層後,將編碼器留下,解碼器扔掉,就變為一個特徵提取器了。可是,如果我們將編碼器扔掉,解碼器留下,會是什麼?輸入是一段很短的code,輸出是一幅完整的image,顯然,這就是一個生成模型。我們可以任意輸入code,然後讓機器生成我們想要的目標資料。就這樣,我們得到了一個簡單的自監督形式的生成器模型。
這裡寫圖片描述
可問題是,當我們訓練好這樣的生成模型後,最大的問題是生成出來的圖片特別的假,不直觀。那是因為AE訓練時的自監督使用的是MSE對比方式,像下圖的兩幅圖,左圖是原圖,右圖是生成圖,即使右圖看起來有個點,但是MSE對比時loss就是比較少(MSE對比就是逐個畫素一一對比),所以AE訓練時就會認為右圖比較逼真。
這裡寫圖片描述
當然AE也有它特別的應用,AE的輸入是經過噪音處理後的圖片,輸出是原圖片時,經過一段時間訓練的AE就學會了處理去除噪音的方法。這種方法十分適用於只知道編碼方法,但不知道解碼方法的場景,例如是去噪音,去水印,去馬賽克,去霧,去雨等等。

4.2變分自動編碼機(VAE)

5配置

初始化 正則化 啟用函式,sigmod,tanh,Relu 訓練方法。
梯度下降:
1. 批量梯度下降法BGD
2. 隨機梯度下降法SGD
3. 小批量梯度下降法MBGD

5.1啟用函式

啟用函式是加在神經元輸出後面的一個函式,例如,神經元本身的輸出是y1的,經過啟用函式f後,就變為y2=f(y1)來輸出的。啟用函式的本質就是用來加入非線性因素的,解決線性模型所不能解決的問題,並有其他一些特殊的性質。
這裡寫圖片描述
未加入啟用函式時,圖形只能被線性劃分,加入特定的啟用函式後,圖形的劃分是非線形劃分的。

6前沿模型

7庫與平臺

8總結

參考文章