DL 3 迴圈神經網路(RNN)

2022-06-17 15:42:14 字數 3057 閱讀 4447

rnn概述

rnn模型

rnn前向傳播

rnn反向傳播演算法

其它rnn

rnn(recurrent neural network)是一類用於處理序列資料的神經網路。

常見的序列有:一段連續的語音,一段連續的手寫文字,一條句子等。這些序列比較長,且長度不一,比較難直接的拆分成乙個個獨立的樣本來通過dnn/cnn進行訓練。

說明:基礎的神經網路只在層與層之間建立權連線,rnn最大的不同之處就是在層之間的神經元之間也建立的權連線

rnn模型有比較多的變種,這裡介紹最主流的rnn模型結構如下:

圖中每個箭頭代表做一次變換,也就是說箭頭連線帶有權值。左側是摺疊起來的樣子,右側是展開的形式,左側中h旁邊的箭頭代表此結構中的"迴圈"體現在隱層。右圖體現了按照時間展開的情形,也是本文重點關注的物件。

這幅圖描述了在序列索引號t 附近rnn的模型。其中:

1)x(t)代表在序列索引號 t 時訓練樣本的輸入。同樣的,x(t-1) 和 x(t+1) 代表在序列索引號 t−1 和 t+1 時訓練樣本的輸入。

2)h(t) 代表在序列索引號 t 時模型的隱藏狀態。h(t)由x(t)和 h(t-1) 共同決定。

3)o(t) 代表在序列索引號 t 時模型的輸出。o(t)只由模型當前的隱藏狀態 h(t) 決定。

4)l(t) 代表在序列索引號 t 時模型的損失函式,模型整體的損失函式是所有的l(t)相加和。

5)y(t) 代表在序列索引號 t 時訓練樣本序列的真實輸出。

6)u,w,v這三個矩陣就是我們的模型的線性關係引數,它在整個rnn網路中是共享的。也正是因為是共享的,它體現了rnn的模型的"迴圈反饋"的思想。

迴圈網路的前向傳播演算法非常簡單,對於t時刻:

其中ϕ(.)為啟用函式,一般來說會選擇tanh函式,b為偏置。則 t 時刻的輸出:

最終模型的**輸出為:

其中σ為啟用函式,啟用函式通常選擇softmax函式。

bptt(back-propagation through time)演算法是常用的訓練rnn的方法,其實本質還是bp演算法,只不過rnn處理時間序列資料,故叫隨時間反向傳播。bptt的中心思想和bp演算法相同,沿著需要優化的引數的負梯度方向不斷尋找更優的點直至收斂。當然這裡的bptt和dnn中的bp演算法也有很大的不同點,即這裡所有的 u, w, v 在序列的各個位置是共享的,反向傳播時我們更新的是相同的引數。

對於rnn,由於我們在序列的每個位置都有損失函式,因此最終的損失l為:

對v求偏導:

而在求w和u的時候就比較的複雜了。在反向傳播時,在某一串行位置 t 的梯度損失由當前文職的輸出對應的梯度損失和序列索引位置 t + 1 時的梯度損失兩部分共同決定的。對於w在某一串行位置 t 的梯度損失需要反向傳播一步步的計算。

比如以t=3 時刻為例:

因此,在某個時刻的對 w 或是 u 的偏導數,需要追溯這個時刻之前所有時刻的資訊。根據上面的式子可以歸納出 l 在 t 時刻對 w 和 u 偏導數的通式:

而對於裡面的乘積部分,我們引入啟用函式,則可以表示為:

或者是

然而對於 sigmoid 函式和 tanh 函式及其導數有以下的特點

sigmoid 函式及其導數

tanh 函式及其導數

我們從中觀察到,sigmoid 函式的導數範圍是(0, 0.25], tanh 函式的導數範圍是 (0, 1] ,它們的導數最大都不大於 1。因此在上面求梯度的乘積中,隨著時間序列的不斷深入,小數的累乘就會導致梯度越來越小,直到接近於 0,這就會引起梯度消失現象。梯度消失就意味著那一層的引數再也不更新了,則模型的訓練毫無意義。relu 函式一定程度上可以解決梯度消失的問題,但是容易引起梯度**的問題。此外 tanh 函式的收斂速度要快於 sigmoid 函式,而且梯度消失的速度要慢於 sigmoid 函式。

rnn的特點本來就是能"追根溯源"利用歷史資料,現在告訴我可利用的歷史資料竟然是有限的,這就令人非常難受,解決"梯度消失"是非常必要的。解決"梯度消失"的方法主要有:

1、選取更好的啟用函式

2、改變傳播結構

關於第一點,一般選用relu函式作為啟用函式,relu函式的影象為:

relu函式的左側導數為0,右側導數恒為1,這就避免了"梯度消失"的發生。但恒為1的導數容易導致"梯度**",但設定合適的閾值可以解決這個問題。還有一點就是如果左側橫為0的導數有可能導致把神經元學死,不過設定合適的步長(學習旅)也可以有效避免這個問題的發生。

以上是rnn的標準結構,然而在實際中這一種結構並不能解決所有問題,例如我們輸入為一串文字,輸出為分類類別,那麼輸出就不需要乙個序列,只需要單個輸出。如圖:

同樣的,我們有時候還需要單輸入但是輸出為序列的情況。那麼就可以使用如下結構:

更多其他型別:

RNN迴圈神經網路

評測乙個句子出現的可能性 文字自動生成 rnn迴圈處理相同的任務,就是 句子接下來的單詞是什麼。rnn迴圈記錄前面所有文字的資訊 也叫做記憶 作為 當前詞的乙個輸入 1.語言模型和文字生成 語言模型中,輸入是經過編碼的詞向量序列,輸出是一系列 的詞 2.機器翻譯 機器翻譯必須等待所有輸入結束後才能輸...

迴圈神經網路 RNN

from torchnlp.word to vector import glove vectors glove vectors hello torch.nn.utils.clip grad norm p,10 10就是最大梯度的模閾值,即保留原來梯度的方向,但梯度大小縮放至10對與梯度瀰散現象,考慮...

RNN迴圈神經網路

神經網路基礎 神經網路可以當做是擬合任意函式的黑盒子,給定特定的輸入x,就能夠的得到希望的輸出y。神經網路結構如下圖 將神經網路模型訓練好之後,輸入層輸入乙個x,通過網路之後就能夠在輸出層輸出特定的y.有了這麼強大的模型,為什麼會出現rnn 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...