天天看點

深度學習:循環神經網絡(RNN)

作者:微說網際網路

前面《深度學習:卷積神經網絡(CNN)》介紹的CNN網絡結構,層與層之間有連接配接,但是每層之間的節點無連接配接。這種結構适合于圖像識别,但不适合對序列資料模組化。比如預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子前後的單詞是有關聯的。

RNN(Recurrent Neuron Network)就是一種對序列資料模組化的神經網絡,即一個序列目前的輸出與之前的輸出也有關。

RNN結構

深度學習:循環神經網絡(RNN)

RNN基本結構如上圖。箭頭右側是左側網絡展開後的示例。如果我們輸入RNN模型的是包含10個單詞的句子,那麼按照上圖的展開方式,将會展開為10層的神經網絡,每個單詞會對應一個層。

相比較于其他深度學習的網絡結構在每層都使用不同的參數,一個RNN模型共享每一步的(U,V,W)參數,這樣就減少了大量要學習的參數,每一步都相當于用同一套參數拟合不同的輸入。

Seq2Seq

針對自然語言處理(NLP)任務,研究者們在2014年提出了基于RNN模型的Seq2Seq結構【1】,解決了非等長序列到序列的問題。Seq2Seq結構包括編碼器 (Encoder) 和解碼器 (Decoder) 兩部分,是以也被稱為Encoder-Decoder結構。

Encoder 用于編碼序列的資訊,将任意長度的序列資訊編碼到一個向量 c 裡。 Decoder 是解碼器,解碼器得到上下文資訊向量 c 之後可以将資訊解碼,并輸出為序列。Encoder-Decoder結構不止一種,下圖展示了常用的幾種結構,主要差別在于Decoder不同。

深度學習:循環神經網絡(RNN)

Encoder-Decoder結構

深度學習:循環神經網絡(RNN)
深度學習:循環神經網絡(RNN)

RNN Encoder-Decoder 在實際的應用中,主要是解決序列到序列的問題,即"短語/一句話/一段話/一篇文章"到"短語/一句話/一段話/一篇文章"的問題。是以Seq2Seq 可以用于機器翻譯、對話系統、自動文摘等。

由于RNN模型是在序列資料上進行訓練的,為了能夠記憶這種類型的資料,可以了解為類似人對之前的事情産生了記憶。但是由于RNN的設計結構,隻對離得近的記憶更多,對較遠的序列因素則記憶較差。為了解決這個問題,新的循環神經網絡結構被設計出來。

LSTM

從RNN的網絡結構上來看,因為輸入在權重參數和激活函數的層層作用下,容易在傳導過程中發生梯度消失或梯度爆炸的問題,造成之前的記憶指數級被遺忘,進而造成資訊很難在很長的結構中進行傳遞的問題。這種長期依賴問題對于自然語言處理等場景來說是需要處理的問題。

為了解決這個問題,研究人員設計了LSTM(Long Short Term Memory Networks),也稱為長期記憶網絡。

深度學習:循環神經網絡(RNN)

RNN基本網絡結構

深度學習:循環神經網絡(RNN)

LSTM網絡結構

LSTM相比較于傳統RNN,會多出三個門控制器,輸入門(Input Gate)、輸出門(Output Gate)和遺忘門(Forget Gate)。三種門控制器的結構相同,由Sigmoid函數(圖中α符号)和點積運算(圖中×符号)構成。

深度學習:循環神經網絡(RNN)

LSTM通過增加長期記憶單元Ct來儲存長期記憶的資訊。

深度學習:循環神經網絡(RNN)

長期記憶單元

每一個時刻,遺忘門用于控制上一時刻記憶的遺忘程度。

深度學習:循環神經網絡(RNN)

每一個時刻,輸入門用于控制新記憶寫入長期記憶的程度。其中tanh函數取值範圍為[-1,1]。

深度學習:循環神經網絡(RNN)
深度學習:循環神經網絡(RNN)

長期記憶單元的整體更新是由遺忘門和輸入門共同作用産生。

深度學習:循環神經網絡(RNN)

對于短期記憶的更新如圖所示,其中表示輸出門,它控制着短期記憶如何受長期記憶影響。

深度學習:循環神經網絡(RNN)

LSTM對基礎RNN的優化具體展現在通過門控制器增加了對不同時刻的權重的控制,通過跨層權重的連接配接減少了梯度消失的影響。這與CNN中的跳層連接配接的思想也很相近。

GRU(Gated Recurrent Unit)

GRU作為LSTM的一種變體,将遺忘門和輸入門合成了一個單一的更新門,另外還有一個重置門。重置門決定了如何将新的輸入資訊與前面的記憶相結合,更新門定義了前面記憶儲存到目前時間步的量。

深度學習:循環神經網絡(RNN)

總的來說,标準LSTM和GRU的差别并不大,GRU的構造比LSTM少一個gate,在訓練資料很大的情況下GRU能節省很多時間。

RNN變種

研究人員基于基本的RNN又設計出了新的RNN變種,例如雙向循環神經網絡、注意力(Attention)機制、深度循環網絡等。

雙向RNN

由于在某些自然語言處理的場景下,時刻t的輸出,不僅會依賴于前面的上下文,還可能會依賴于後面的上下文。例如,預測一個句子中缺失的單詞,也希望能夠參考前面和後面的上下文,綜合考慮進行預測。

如圖所示,雙向RNN有兩個隐藏層RNN,輸出結果是基于這兩層的隐藏層輸出綜合計算出來的。

深度學習:循環神經網絡(RNN)

深度雙向RNN

深度雙向RNN與雙向RNN非常相近,相當于多層的雙向RNN疊加起來,這樣就使得模型具有更強的拟合能力,但是需要更長的訓練時間和訓練資料才能讓模型收斂。

深度學習:循環神經網絡(RNN)

注意力機制

注意力機制(Attention Mechanism)可以提升基于RNN中Encoder-Decoder模型的效果。注意力機制由于其較好的效果,廣泛應用于機器翻譯、語音識别、圖像标注等領域。

注意力機制的思想可以參考這篇具有代表性的論文《Recurrent Models of Visual Attention》。人在觀察圖像時傾向于根據需求将注意力集中到圖像的特定部分。而且人類會根據之前觀察的圖像學習到未來要觀察圖像時注意力應該集中的位置。可以将這部分經驗融入模型中,讓模型能夠有針對性地學習到對預測有幫助的重要因素。

在自然語言進行中,注意力機制為每個詞賦予不同的權重,使神經網絡模型的學習變得更加靈活。

【1】Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation.

繼續閱讀