天天看點

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

參考:

慕課《人工智能導論:模型與算法》

pytorch中文教程

曆史

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

pytorch神經網絡建構

神經網絡可以通過 torch.nn 包來建構。

神經網絡是基于自動梯度 (autograd)來定義一些模型。一個 nn.Module 包括層和一個方法 forward(input) 它會傳回輸出(output)。

一個典型的神經網絡訓練過程包括以下幾點:

1.定義一個包含可訓練參數的神經網絡

2.疊代整個輸入

3.通過神經網絡處理輸入

4.計算損失(loss)

5.反向傳播梯度到神經網絡的參數

6.更新網絡的參數,典型的用一個簡單的更新方法:weight = weight - learning_rate *gradient

代碼:http://pytorch.panchuang.net/SecondSection/neural_networks/

前饋神經網絡 理論

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

神經元:基于神經元細胞的結構特性與傳遞資訊方式,神經科學家Warren McCulloch和邏輯學家Walter Pitts合作提出了“McCulloch–Pitts (MCP) neuron”模型[McCulloch 1943]。在人工神經網絡中,MCP模型成為人工神經網絡中的最基本結構。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

神經元是深度學習模型中基本機關,功能如下:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

激活函數:神經網絡使用非線性函數作為激活函數(activation function),通

過對多個非線性函數進行組合,來實作對輸入資訊的非線性變換

常用softmax函數,一般用于多分類問題中,其将輸入資料𝒙𝒊映射到第𝒊個類别的

機率。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

其他激活函數:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

損失函數/loss function:

用來計算模型預測值與真實值之間的誤差。損失函數是神經網絡設計中的一個重要組成部分。通過定義與任務相關的良好損失函數,在訓練過程中可根據損失函數來計算神經網絡的誤差大小,進而優化神經網絡參數。

兩種最常用損失函數:

⚫ 均方誤差損失函數

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

⚫ 交叉熵損失函數。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

感覺機模型:早期的感覺機結構和MCP模型相似,由一個輸入層和一個輸出層構成,是以也被稱為“單層感覺機”。感覺機的輸入層負責接收實數值的輸入向量,輸出層則能輸出1或-1兩個值。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

單層感覺機:被用來區分線性可分資料。在圖6.5中,邏輯與(AND)、邏輯與非(NAND)和邏輯或(OR)為線性可分函數,是以可利用單層感覺機來模拟這些邏輯函數。但是,由于邏輯異或(XOR)是非線性可分的邏輯函數,是以單層感覺機無法模拟邏輯異或函數的功能。

多層感覺機

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

梯度下降/Gradient Descent:優化參數

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

誤差反向傳播/error back propagation, BP:優化參數

⚫ BP算法是一種将輸出層誤差反向傳播給隐藏層進行參數更新的方法。

⚫ 将誤差從後向前傳遞,将誤差分攤給各層所有單元,進而獲得各層單元所産

生的誤差,進而依據這個誤差來讓各層單元負起各自責任、修正各單元參數。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

例子:通過一個三類分類的具體例子來介紹神經網絡中參數更新過程。給定一個

包含輸入層、一層隐藏層和輸出層的多層感覺機,其中隐藏層由兩個神經元構成。網絡使用Sigmoid函數作為神經元的激活函數,使用均方損失函數來計算網絡輸出值與實際值之間的誤差。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

卷積神經網絡CNN

背景:

原因:在前饋神經網絡中,輸入層的輸入資料直接與第一個隐藏層中所有神經元互相連接配接。

結果/影響:如果輸入資料是一幅圖像,需要把灰階圖像(二維矩陣)或彩色圖像(三維矩陣)轉換為向量形式。則給定一幅分辨率1000*1000的灰階圖像,輸入資料為一個1,000,000維的向量,如果輸入資料與第一個隐藏層中所有神經元均相連,且第一個隐藏層次元和輸入次元一緻,則輸入層到第一個隐藏層之間待訓練參數數目為1012個,模型參數數量如此巨大不僅會占用大量計算機記憶體,同時也使神經網絡模型變得難以訓練收斂。

方案:對于圖像這樣的資料,不能直接将所構成的像素點向量與前饋神經網絡神經元相連。1959年,David Hubel和Torsten Wiesel發現了人腦“視覺系統的資訊處理”這一機制,即可視皮層對外界資訊是分級感受的。受這一發現啟發,1980年Kunihiko Fukishima将神經科學所發現的結構進行了計算機模拟,提出通過級聯方式(cascade,即逐層濾波)來實作一種滿足平移不變性的網絡Neocognitron,

這就是卷積神經網絡的前身。20世紀90年代,LeCun等人,設計了一種被稱為LeNet-5的卷積神經網絡用于手寫體識别,初步确立了卷積神經網絡的基本結構

重要性

如今,雖然針對不同應用場景的卷積神經網絡結構已變得愈發複雜、性能也變得更加強健,但是究其本質,這些複雜網絡結構仍是以卷積操作與池化操作為核心建構而成。

要點

⚫ 圖像中像素點具有很強的空間依賴性,卷積(convolution)就是針對像素點的空間依賴性來對圖像進行處理的一種技術。

⚫ 在圖像卷積計算中,需要定義一個卷積核(kernel)。卷積核是一個二維矩陣,矩陣中數值為對圖像中與卷積核同樣大小的子塊像素點進行卷積計算時所采用的權重。

⚫ 卷積核中的權重系數𝑤𝑖是通過資料驅動機制學習得到,其用來捕獲圖像中某像素點及其鄰域像素點所構成的特有空間模式。一旦從資料中學習得到權重系數,這些權重系數就刻畫了圖像中像素點構成的空間分布不同模式。

卷積操作

給定一個權重分别為𝒘𝒊(𝟏 ≤ 𝒊 ≤ 𝟗)、大小為𝟑 × 𝟑的卷積核以及一個𝟓 × 𝟓大小灰階圖像

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

77大小的圖像,通過33大小卷積矩陣以1的步長進行卷積操作,可得到5*5大小的卷積結果

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

神經科學家發現,人的視覺神經細胞對不同的視覺模式具有特征選擇性(Feature Selectivity),即不同視覺神經細胞對邊界、運動和顔色等不同資訊具有強弱不同的選擇性。是以,不同卷積核可被用來刻畫視覺神經細胞對外界資訊感受時的不同選擇性。同時也可以看到,卷積所得結果中,每個輸出點的取值僅依賴于其在輸入圖像中該點及其鄰域區域點的取值,與這個區域之外的其他點取值均無關,該區域被稱為感受野(receptive field),正所謂“管中窺豹、見微知著”。在卷積神經網絡中,感受野是卷積神經網絡每一層輸出的特征圖(feature map)上的像素點在輸入圖像上映射的區域大小。也就是說,感受野是特征圖上一個點對應輸入圖像上的區域。

池化操作

由于圖像中存在較多備援,在圖像進行中,可用某一區域子塊的統計資訊(如最大值或均值等)來刻畫該區域中所有像素點呈現的空間分布模式,以替代區域子塊中所有像素點取值,這就是卷積神經網絡中池化(pooling)操 作。池化操作對卷積結果特征圖進行約減,實作了下采樣,同時保留了特征圖中主要資訊。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

對于輸入的海量标注資料,通過多次疊代訓練,卷積神經網絡在若幹次卷積操作、接着對卷積所得結果進行激活函數操作和池化操作下,最後通過全連接配接層來學習得到輸入資料的特征表達,即分布式向量表達(distributed vectorrepresentation)。

正則化

為了緩解神經網絡在訓練過程中出現的過拟合問題,需要采取一些正則化技術來提升神經網絡的泛化能力(generalization)

• Dropout

• Batch-Normalization

• L1-Norm & L2-Norm

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

循環神經網絡 RNN

循環神經網絡/Recurrent Neural Network是:

1.一類處理序列資料(如文本句子、視訊幀等)時所采用的網絡結構.先前所介紹的前饋神經網絡或卷積神經網絡所需要處理的輸入資料一次性給定,難以處理存在前後依賴關系的資料。

2.可以儲存某種狀态的神經網絡。比如說, 神經網絡中上個時刻的輸出可以作為下個 刻的輸入的一部分, 以此資訊就可以 通過序列在網絡中一直往後傳遞。對于LSTM (Long-Short Term Memory) 來說, 序列中的每個元素都有一個相應的隐狀态, 該隐狀态原則上可以包含序列目前結點之前的任一節點的資訊。我們可以使用隐藏狀态來預測語言模型中的單詞, 詞性标簽以及其他。

本質:

希望模拟人所具有的記憶能力,在學習過程中記住部分已經出現的資訊,并利用所記住的資訊影響後續結點輸出。

應用:自然語言處理,例如語音識别、情感分析、機器翻譯等領域有重要應用

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

按照時間将循環神經網絡展開後,可以得到一個和前饋神經網絡相似的網絡結構。這個網絡結構可利用反向傳播算法和梯度下降算法來訓練模型參數,這種訓練方法稱為“沿時間反向傳播算法(backpropagation through time,BPTT)”。由于循環神經網絡每個時刻都有一個輸出,是以在計算循環神經網絡的損失時,通常需要将所有時刻(或者部分時刻)上的損失進行累加。

應用示例:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐
深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

假設時刻𝑡隐式編碼如下得到:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

使用交叉熵損失函數計算時刻𝑡預測輸出與實際輸出的誤差𝐸𝑡。顯然,整個序列産生的誤差為

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

下面介紹如何根據時刻𝑡所得誤差來更新參數𝑊𝑥。在時刻𝑡計算所得𝑂𝑡不僅涉及到了時刻𝑡的𝑊𝑥,而且也涉及了前面所有時刻的𝑊𝑥,按照鍊式求導法則,𝐸𝑡在對𝑊𝑥求導時候,也需要對前面時刻的𝑊𝑥依次求導,然後再将求導結果進行累加,即:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

由于𝑡𝑎𝑛ℎ函數的導數取值位于0到1區間,對于長序列而言,若幹多個0到1區間的小數相乘,會使得參數求導結果很小,引發梯度消失問題。𝐸𝑡對𝑊ℎ的求導類似,這裡就不列出了。

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

根據輸入序列資料與輸出序列資料中所包含“單元”的多寡,循環神經網絡可以實作三種模式:

1.“多對多”(即輸入和輸出序列資料中包含多個單元,常用于機器翻譯)、

2.“多對一”(即輸入序列資料包含多個單元、輸出序列資料隻包含一個單元,常用于文本的情感分類)

3.“一對多”(即輸入序列資料包含一個單元、輸出序列資料包含多個單元,常用于圖像描述生成)。

更多:

為了解決梯度消失問題,長短時記憶模型(Long Short-Term Memory,LSTM)被提出。LSTM詳情了解,與LSTM類似的是GRU/門控循環單元神經網絡,計算更少,但使用場景沒有前者廣,GRU網絡結果如圖:

深度學習前饋、卷積、循環神經網絡介紹及pytorch實踐

繼續閱讀