深度學習之三 RNN

2021-09-02 13:50:36 字數 1606 閱讀 1034

rnn,也就是recurrent neural network,迴圈神經網路,是非線性動態系統,將序列對映到序列,主要引數有五個:[

whv, whh, woh, bh, bo, h0] ,典型的結構圖如下:

解釋一下上圖:

rnn的計算方式:

之前看過了一般神經網路和cnn,再看rnn其實覺得結構並不複雜, 計算過程看起來的話,rnn的計算方式和普通的前饋演算法也沒有什麼大的區別,不過是上一時刻的隱含層的輸出結果又在現在時刻的計算過程裡面用到了,也就是不斷傳遞的過程,這也就是為什麼rnn是從序列到序列,乙個狀態的出入和前面幾個狀態的輸出都有關係。

給定乙個損失函式l:

當然不同的神經網路對應的訓練方法也不一樣, rnn因為加入了時間序列,因此訓練過程也是和之前的網路不一樣,rnn的訓練使用的是bptt(back prropagation through time),該方法是由werbo等人在2023年弄出來的

具體的訓練過程如下:

上面的演算法也就是求解梯度的過程,使用的也是經典的bp演算法,並沒有什麼新鮮的,但是值得一提的是,在 t-1  時刻對  h

t−1的求導值,也需加上 t 時刻的求導中對  h

t−1 的求導值,因此bptt也是乙個鏈式的求導過程。

但是因為上面演算法中的第10行,在訓練t時刻的時候,出現了t-1的引數,因此對單個的求導就變成了對整個之前狀態的求導之和,比如說我們在t時刻對whh求導,計算公式如下:

也正是因為存在長依賴關係,bptt無法解決長時依賴問題(即當前的輸出與前面很長的一段序列有關,一般超過十步就無能為力了),因為bptt會帶來所謂的梯度消失或梯度**問題(the vanishing/exploding gradient problem)。這篇文章很好的解釋了為什麼會產生梯度消失和為什麼會梯度**的問題,其實主要問題就是因為在bptt演算法中,以w為例,其求導過程的鏈太長,而太長的求導鏈在以tanh為啟用函式(其求導值在0~1之間的bptt中,連乘就會使得最終的求導為0,這就是梯度消失問題,也就是t時刻已經學習不到t-n時刻的引數了。當然,有很多方法去解決這個問題,如lstms便是專門應對這種問題的,還有一些方法,比如設計乙個更好的初始引數以及更換啟用函式(如換成relu啟用函式)。

以上就是經典的rnn模型以及推導過程,最近幾年依賴rnn有了很多的變體和拓展,詳見:rnns擴充套件和改進模型

參考文獻:

sutskever,training recurrent neural networks.phd thesis,univ.toronto(2012)

迴圈神經網路(rnn, recurrent neural networks)介紹

深度學習之三 RNN

rnn,也就是recurrent neural network,迴圈神經網路,是非線性動態系統,將序列對映到序列,主要引數有五個 whv,whh,woh,bh,bo,h0 典型的結構圖如下 解釋一下上圖 rnn的計算方式 之前看過了一般神經網路和cnn,再看rnn其實覺得結構並不複雜,計算過程看起來...

RNN系列之三 RNN簡單應用

將以語言模型進行分析。建立語言模型所採用的訓練集是乙個大型的語料庫 corpus 建立過程中,需要先建立乙個字典,之後將語料庫中每個詞表示為對應的one hot向量。此外需要額外定義乙個標記eos end of sentence 表示乙個句子的結尾,也可以將其中的標點符號加入字典後也用one hot...

深度學習 迴圈網路 RNN

迴圈網路區別於之前提到的前饋網路在於,它能夠將每一層的輸出帶到後面的神經層,使用state向量來儲存和傳遞處理過的資訊,用遞迴函式表示如下。s i f s x i 這裡的s i表示新的狀態,s 表示前乙個狀態,x i則是輸入 用圖來表示,舉個例子,s i tanh w ss w xx i b 這裡的...