吳恩達Deeplearning.ai 知識點梳理(course 5,week 1)

  本週主要講的是RNN,LSTM。
  序列數據在很多場景下都有出現,下面是幾個序列模型的例子。

幾個例子

這裏寫圖片描述
  例如語音識別(序列-序列),音樂生成(1-序列),情感分類(序列-1)等等。
這裏寫圖片描述
  輸入句子是向量x ,每一個詞彙是x<t> ,第i個樣本的第t個詞彙是x(i)<t> ,輸出y 也同理。

詞語的表示

這裏寫圖片描述
  一般來說會做一個詞彙表,然後對詞彙進行編碼1,2,3,4…,然後轉換成獨熱碼。然後作爲輸入即可。

基本的RNN模型

這裏寫圖片描述
幾個要點:

每一級的輸入,不僅取決於輸入,也取決於網絡內部狀態。
有一種簡介的模式

這裏寫圖片描述

Forward & Backward Propagation

這裏寫圖片描述
其實這裏僅僅是簡單的寫了一下,附錄裏邊做個詳細推導吧。

RNN的類型

這裏寫圖片描述
第一種many to many的,是Tx=Ty 的,例如名字檢測。然後是many to one,例如Sentiment Classification。還有one to one的,這種就是一個很trival的模型了。
這裏寫圖片描述
還有這種one to many的,例如music generation,給了初始化的一個a<0>x ,一般都是zero vector,然後通過隨機採樣輸出一個序列。後邊每一個的輸入是前一集輸出的隨機採樣。還有後邊這種many to many的,比方說machine translation,這個是TxTy 的,一般前邊給出的是encoder-decoder的方式。
總結如下:
這裏寫圖片描述

Language Modeling

  Language Modeling其實就是給定一個sentence,然後給出這個sentence的出現概率是多少:
這裏寫圖片描述
  那應該如何用RNN來做呢?
這裏寫圖片描述
  如圖所示,我們首先輸入一個x<1>=0 以及a<0>=0 然後輸出y^<1> ,這個表達的是整體詞表的分佈。比方說P(a),P(aron)等等。然後把cat作爲x<2>=y<1> 輸入給網絡,這個時候讓網絡輸出P(average|cat),以此類推。而Loss則是熟悉的交叉熵Loss。用來估計概率。當我們依次輸入了0,y<1>,y<2>,...,y<n> ,這樣我們就得到了P(y<1>),P(y<2>|y<1>),..., 等一系列的概率,把它們乘起來就得到了語言模型。也就是句子的概率。

序列採樣

這裏寫圖片描述
  當我們訓練好了一個模型之後,輸入初始的0,然後我們可以得到一個詞彙表的概率分佈。從中按照概率分佈隨機採樣一個詞彙,然後輸入給後級,以此類推。最後得到最終結果。直到採集到一個EOS,或者一個預先設定的句子長度。

RNN的梯度消失問題

這裏寫圖片描述
隨着RNN一級一級的加深,會出現一個梯度爆炸或者梯度消失的問題。梯度爆炸就容易出現NaN,這種其實還比較容易解決,就是cliping一下過大的梯度就可以了。梯度消失就變得非常麻煩。尤其是有的時候作爲文字(英語),後邊的動詞可能依賴之前很長的主語,但是後級其實很難將梯度傳播到很靠前的一級。這就是普通RNN的問題。

GRU

  GRU是Gated Recurrent Unit,用來解決長鏈中的dependence問題。
這裏寫圖片描述

  在GRU中,首先有一個memory cell,c,這個c=a,也就是inner state。每次更新時,先計算一個c~ 作爲一個c的candidate。然後在計算一個Γ 作爲門控參數,也就是更新多少。最後c<t>=Γuc~<t>+(1Γu)c<t1> ,這樣即使是在長鏈中,由於有記憶單元和更新門控參數的存在,也能學習到長鏈中的dependence信息。

LSTM

這裏寫圖片描述
  LSTM是一個比GRU早很多的結構。這個結構的提出帶來了巨大的影響和進步。可以看到,在LSTM中,基本的memory 思路是不變的,但是增加了遺忘參數Γf ,以及輸出參數Γo 。這樣模型的表達能力更強。在GRU中,遺忘參數是(1Γu)

雙向RNN

  之前說的都是單向的RNN:
這裏寫圖片描述
但是比方說有些時候,只看之前的序列做出預測會出現問題,比方說Teddy在這句Teddy bears裏其實是毛絨玩具,然而在下一句中則是總統名。這兩個Teddy的前邊都是一樣的,但是一個是人名,一個不是。所以不僅僅要看前邊,也要看後邊。因此,出現了雙向RNN。
這裏寫圖片描述
也就是在順時間輸入的情況下,加上一個逆時間輸入的網絡。然後對這兩個網絡的輸出進行一個合併,然後得到最終的輸出。

Deep RNN

這裏寫圖片描述
  爲了增強模型的表達能力,可以RNN變深。如圖所示,最左側是普通的DNN,然後我們按照時間維度展開即可。由於時間維度的存在,訓練RNN是一個非常耗時的計算。所以通常來說一般也就3就夠了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章