A. 模型CNN-RNN-LSTM和GRU簡介
深度學習技術自2006年以來風靡全球,其應用廣泛,尤其在計算機視覺、語音識別和自然語言處理(NLP)領域。近年來,工業界積極探索其在游戲、內容推薦和廣告匹配等更多場景的應用。深度模型架構主要包括三種:卷積神經網路(CNN)、循環神經網路(RNN)和長短時記憶(LSTM)、門控遞歸單元(GRU)。以下是深度學習模型架構的簡介。
深度學習模型架構分為三種:卷積神經網路(CNN)、循環神經網路(RNN)、長短時記憶(LSTM)和門控遞歸單元(GRU)。其中,CNN在計算機視覺領域影響最大,RNN允許隨時間在一系列向量上操作,LSTM和GRU則提供了解決長序列問題的機制。
在深度學習中,人工神經網路或一般神經網路由多層感知器組成,每層包含多個隱藏單元。具有多層感知器的NN模型包括一個或多個隱藏層,具有線性組合器和激活函數。神經元接收輸入信號,計算線性組合並應用非線性激活函數以產生輸出。神經元功能可以數學表示為:輸出 = φ(∑權重×輸入 + 偏移)。
訓練深度神經網路涉及學習率的選擇,常數、因子和指數衰減是常用的方法。梯度下降法用於尋找目標函數的局部最小值,隨機梯度下降(SGD)方法用於訓練DNN。反向傳播(BP)演算法和SGD用於深度NN的訓練。
動量和權重衰減是訓練深度學習模型的輔助方法,動量加速訓練過程,權重衰減作為L2正則化方法防止過度擬合。批處理歸一化(BN)通過線性轉換輸入樣本,加速深度學習過程,防止梯度消失問題。
CNN架構包括特徵提取和分類器,由卷積層、最大池化層和分類層組成。特徵提取層接收前一層的輸出,生成特徵圖,分類層使用全連接網路計算類別得分。CNN的反向傳播更新卷積層的濾波器,計算參數數量衡量模型復雜性。
RNN允許信息在時間步驟之間傳遞,Elman架構使用隱層輸出和正常輸入,Jordan網路使用輸出單元的輸出作為隱藏層輸入。LSTM和GRU提供了解決長序列問題的機制,其中LSTM包含單元狀態和門機制,GRU則簡化了LSTM的計算成本和復雜性。
在深度學習領域,不同架構各具優勢,選擇模型需考慮問題性質、數據規模和計算資源。理解模型架構和參數選擇對深度學習應用至關重要。
B. 高效實現最大池化
探索高效最大池化技術:提升特徵提取效率的關鍵
在深度學習的世界裡,池化(Pooling)是一項不可或缺的技術,它猶如神經網路的減壓閥,通過智能地降低卷積神經網路(CNN)和循環神經網路(RNN)的特徵圖維度,實現了參數減少、過擬合的預防和計算效率的提升。其中,最大池化(Max Pooling)憑借其獨特的優勢,成為了眾多實踐者們的首選。
最大池化的核心在於,它對每個子區域內的特徵值進行評估,然後挑選出其中的最大值,這一過程就像是為圖像數據進行了「濾鏡」般的處理,保留了最具代表性的特徵。例如,如果一個池化核大小為2x2,步幅為2,那麼每個子區域將被分為4個小單元,其中最大的一個像素值會被保留下來,其餘則被忽略。
在Python的實踐中,我們可以用簡單函數實現這一過程,如下面的示例所示:
通過這種方式,原始數據經過最大池化後,不僅尺寸縮小,而且每個位置的特徵被轉化為其區域內的強度指標,這對於圖像分類和特徵提取至關重要。
在PyTorch中,MaxPool2d函數是實現最大池化的關鍵工具,其參數如kernel_size(窗口大小)、stride(滑動步長)、padding(邊緣填充)以及dilation(孔徑大小)等,為用戶提供了一定的靈活性。例如,對一張16x16的圖片進行池化,設置pool_size=2和stride=2,最終輸出的特徵圖會縮小到8x8。這在處理高解析度圖像時,如讀取"output.jpg"並應用於"example_pool.jpg",能顯著降低存儲需求和計算負載。
然而,最大池化並非唯一的選擇,還有Average Pooling(計算窗口的平均值)和Adaptive Pooling(自適應調整窗口大小),它們根據場景和需求靈活調整池化策略。了解並靈活運用這些池化方法,可以幫助我們更高效地提取和處理數據,從而提升模型的性能。
C. Pytorch | RNN 和CNN的區別
卷積神經網路(CNN)
卷積神經網路(CNN)是深度學習的代表演算法之一,具備表徵學習能力,能對輸入信息進行平移不變分類。其結構包括卷積層、池化層和全連接層,適用於監督學習和非監督學習。在處理圖像等格點化特徵時,CNN以較小的計算量實現穩定效果,無需額外特徵工程。輸入數據需標准化處理,如將像素值歸一化至0-1區間,以提升學習效率。
隱含層包含卷積層、池化層和全連接層,常見構築順序為:輸入-卷積層-池化層-全連接層-輸出。公式計算特徵圖大小,池化層通過預設定的函數進行特徵選擇和信息過濾。全連接層將特徵圖展開為向量,傳遞至下一層。
輸出層結構與傳統前饋神經網路相同,對於圖像分類問題,使用邏輯函數或softmax函數輸出分類標簽;在物體識別問題中,輸出層設計為物體的中心坐標、大小和分類;在圖像語義分割中,直接輸出每個像素的分類結果。
循環神經網路(RNN)
循環神經網路(RNN)是一種節點定向連接成環的人工神經網路,適用於處理任意時序的輸入序列,如手寫識別、語音識別等。RNN利用內部記憶處理時間序列信息,每一刻輸出依賴於前一刻的輸出值加權結果。然而,RNN在長期記憶輸出上受限,可能導致權重累加過大,運算效率低下。
為解決RNN的長期記憶問題,長短期記憶網路(LSTM)應運而生,其核心結構包含異或門和與門。通過異或門和與門的運算,LSTM能減少數據量,遺忘重復信息,記錄未知信息,並更新結果後輸出。
RNN Regressor
時間步長(timestep)是序列的長度,RNN Regressor經過多個時間步得到輸出,適用於序列預測任務。
D. 幾種常見的循環神經網路結構RNN、LSTM、GRU
傳統文本處理任務的方法中一般將TF-IDF向量作為特徵輸入。顯而易見,這樣的表示實際上丟失了輸入的文本序列中每個單詞的順序。在神經網路的建模過程中,一般的前饋神經網路,如卷積神經網路,通常接受一個定長的向量作為輸入。卷積神經網路對文本數據建模時,輸入變長的字元串或者單詞串,然後通過滑動窗口加池化的方式將原先的輸入轉換成一個固定長度的向量表示,這樣做可以捕捉到原文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關系還是很難被學習到。
循環神經網路卻能很好地處理文本數據變長並且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到後閱讀文章中的每一個單詞,將前面閱讀到的有用信息編碼到狀態變數中去,從而擁有了一定的記憶能力,可以更好地理解之後的文本。
其網路結構如下圖所示:
由圖可見,t是時刻,x是輸入層,s是隱藏層,o是輸出層,矩陣W就是隱藏層上一次的值作為這一次的輸入的權重。
如果反復把式 2 帶入到式 1,將得到:
其中f和g為激活函數,U為輸入層到隱含層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣。在文本分類任務中,f可以選取Tanh函數或者ReLU函數,g可以採用Softmax函數。
通過最小化損失誤差(即輸出的y與真實類別之間的距離),我們可以不斷訓練網路,使得得到的循環神經網路可以准確地預測文本所屬的類別,達到分類目的。相比於卷積神經網路等前饋神經網路,循環神經網路由於具備對序列順序信息的刻畫能力,往往能得到更准確的結果。
RNN的訓練演算法為:BPTT
BPTT的基本原理和BP演算法是一樣的,同樣是三步:
1.前向計算每個神經元的輸出值;
2.反向計算每個神經元的誤差項值,它是誤差函數E對神經元j的加權輸入的偏導數;
3.計算每個權重的梯度。
最後再用隨機梯度下降演算法更新權重。
具體參考: https://www.jianshu.com/p/39a99c88a565
最後由鏈式法則得到下面以雅可比矩陣來表達的每個權重的梯度:
由於預測的誤差是沿著神經網路的每一層反向傳播的,因此當雅克比矩陣的最大特徵值大於1時,隨著離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸;反之,若雅克比矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,產生梯度消失。對於普通的前饋網路來說,梯度消失意味著無法通過加深網路層次來改善神經網路的預測效果,因為無論如何加深網路,只有靠近輸出的若干層才真正起到學習的作用。 這使得循環神經網路模型很難學習到輸入序列中的長距離依賴關系 。
關於RNN梯度下降的詳細推導可以參考: https://zhuanlan.hu.com/p/44163528
梯度爆炸的問題可以通過梯度裁剪來緩解,即當梯度的範式大於某個給定值時,對梯度進行等比收縮。而梯度消失問題相對比較棘手,需要對模型本身進行改進。深度殘差網路是對前饋神經網路的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網路表示;而對於循環神經網路來說,長短時記憶模型及其變種門控循環單元等模型通過加入門控機制,很大程度上彌補了梯度消失所帶來的損失。
LSTM的網路機構圖如下所示:
與傳統的循環神經網路相比,LSTM仍然是基於xt和ht−1來計算ht,只不過對內部的結構進行了更加精心的設計,加入了輸入門it 、遺忘門ft以及輸出門ot三個門和一個內部記憶單元ct。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。
在經典的LSTM模型中,第t層的更新計算公式為
其中it是通過輸入xt和上一步的隱含層輸出ht−1進行線性變換,再經過激活函數σ得到的。輸入門it的結果是向量,其中每個元素是0到1之間的實數,用於控制各維度流過閥門的信息量;Wi 、Ui兩個矩陣和向量bi為輸入門的參數,是在訓練過程中需要學習得到的。遺忘門ft和輸出門ot的計算方式與輸入門類似,它們有各自的參數W、U和b。與傳統的循環神經網路不同的是,從上一個記憶單元的狀態ct−1到當前的狀態ct的轉移不一定完全取決於激活函數計算得到的狀態,還由輸入門和遺忘門來共同控制。
在一個訓練好的網路中,當輸入的序列中沒有重要信息時,LSTM的遺忘門的值接近於1,輸入門的值接近於0,此時過去的記憶會被保存,從而實現了長期記憶功能;當輸入的序列中出現了重要的信息時,LSTM應當把其存入記憶中,此時其輸入門的值會接近於1;當輸入的序列中出現了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近於0,這樣舊的記憶被遺忘,新的重要信息被記憶。經過這樣的設計,整個網路更容易學習到序列之間的長期依賴。
GRU是在LSTM上進行簡化而得到的,GRU的網路結構如下所示:
Zt代表更新門,更新門的作用類似於LSTM中的遺忘門和輸入門,它能決定要丟棄哪些信息和要添加哪些新信息。
Rt代表重置門,重置門用於決定丟棄先前信息的程度。
要注意的是,h只是一個變數,因此在每個時刻,包括最後的線性組合,h都是在用以前的自己和當前的備選答案更新自己。舉例來說,這一個變數好比一杯酒,每次我們要把一部分酒倒出去,並把倒出去的酒和新加入的原料混合,然後在倒回來,這里的reset控制的就是要倒出去的,並且混合好之後再倒回來的酒的比例,而update控制的則是用多大的比例混合新原料和倒出來的之前調制好的酒。同理,也可以以此理解LSTM,LSTM的遺忘門功能上和reset相似,而輸入門與update相似,不同之處在於LSTM還控制了當前狀態的exposure,也就是輸出門的功能,這是GRU所沒有的。
1.百面機器學習
2. https://zhuanlan.hu.com/p/45649187
3. https://www.jianshu.com/p/39a99c88a565