Sequence Models(Week1)---Recurrent Neural Networks

一、Why sequence models

所有上述問題都可以認爲是監督學習,給X打標籤。

但其中的情況也各有不同,如輸入和輸出都是有順序的,但X和Y的順序不同或有相同的情況

二、Notation

索引t來指示序列中的位置

在一個序列中如何表示一個單詞

在句子中表示某個單詞,首先準備一個包含所有詞的字典,即把將要用到的單詞放在一起做一個清單

在商業規模下,常用的字典規模一般爲3到5萬詞彙,10萬級詞彙的字典也較爲常見

如果構建一個1萬詞的字典,方法一:是從訓練集中查找,找到出現頻率最高的1萬個詞;方法二是查找一些網上的字典,將最常見的1萬詞作爲擬構建的字典

然後用one-hot構建單詞的representation,每個詞的維數就是1萬

如果遇到不在詞彙表中的單詞,就創建一個新的標誌,即僞詞,記爲unknown word

三、Recurrent Neural Network Model

RNN缺點是隻使用先前的信息來做出預測,即在預測y3時,是使用x1,x2,x3的值,而不會使用詞語x4,x5,x6等信息

即對某一個詞進行預測時,僅僅使用之前輸入信息而不使用序列後的信息

具體所做的計算爲:

四、Backpropagation through time

標準的邏輯迴歸loss也叫交叉熵損失即cross-entry loss

上述爲一種特殊情況,即輸入序列的長度等於輸出序列的長度(判斷句子中的每一個單詞是否爲名字)

五、Different types of RNNs

討論輸入和輸出序列不等情況的RNN

1.many to one:如情感分類,不對輸入的每個詞做輸出,而只在最後做預測輸出y^.

2.one to many----music generation

輸入喜歡的音樂類型(用一個整數代替),輸出是對應一段音樂的樂譜

 

 

六、Language model and sequence generation

語言建模是nlp 中最基礎和最重要的任務之一——適合用RNN解決

討論如何用RNN構建一個語言模型(如生成莎士比亞風格或其他風格的文字)

語言模型的功能就是輸入一個句子,然後給出判斷是否是某一句子的概率

將輸入句子映射成各個標記或表中單詞的集合

然後使用RNN爲不同序列的概率建模

七、Sampling novel sequences

nlp中很多還是在處理字符級語言模型

在News上進行訓練得到的是news的版本,如果在莎士比亞類型的文字上訓練就會得到莎士比亞類型的小說文字

八、Vanishing gradients with RNNs

RNN會存在比較嚴重的梯度消失的問題

出現梯度爆炸時參數會顯示Nan或非數字之類的,意味着神經網絡計算中數值溢出

如果出現梯度爆炸,解決辦法是使用gradient clipping,這樣會重新縮放梯度

梯度消失的問題很難消失

九、Gated Recurrent Unit (GRU)

對RNN的隱藏層進行修正,捕捉長範圍的連接,幫助解決梯度爆炸的問題

而在GRU中的門責任是判斷是否要更新某些值

十、Long Short Term Memory (LSTM)

LSTM比GRU更強大且更爲泛化

 

對於存儲在記憶單元的某些實數值可以維持很多步驟

peephole connection即c<t-1>會被用來影響門控的數值

LSTM的發源較GRU早,在解決不同問題中兩個算法的優劣不一

GRU模型簡單(只有兩個門控),更適合於構建較大的網絡

LSTM更加強大和靈活(有三個門控),可以把LSTM作爲默認第一個去嘗試的方法

十一、Bidirectional RNN

在一個時間點同時獲得序列中前部分和後部分的信息

對於NLP問題,輸入一個句子,可以首先使用Bi-LSTM進行實驗

對基本的RNN、GRU、LSTM的結構進行修改,預測任何地方甚至是序列的中間

BRNN的缺點是需要整個數據序列才能在任何地方進行預測

十二、Deep RNNs

對於學習非常複雜的函數時,把多層RNNs堆在一起形成更深層的這些模型版本會有很大幫助

對於RNN來說3層已經很深了,因爲有時間這一維度的存在,而對於普通的NN來說,100層也是可以的