天天看點

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

品味LSTM的細枝末節

  • 閑聊
  • RNN
    • 概念
    • 公式圖
    • 栗子
  • LSTM術語
  • 細說LSTM
  • summary
  • 梯度消失

閑聊

? 人們能夠了解語言,從來不是從零開始,而是根據以往經驗來做出判斷。故“以往經驗”對于判斷與認知是十分重要的,設想一下,人類如果沒有“經驗”(記憶)或隻有三秒記憶,那跟鹹魚有什麼差別,人類就不會有什麼文明。

LSTM 就能讓機器開始記住他們所讀過的内容。

RNN

概念

RNN能夠在一定程度上記住之前的知識,通過訓練序列資料,能夠記住某詞前面出現的詞語,這樣就能産生些許“經驗”。不要以為這個功能很簡單,其實大有作用,就好比如,你說上一句,它就知道下一句是啥?

而且實踐證明RNN在經驗方面已經開始嶄露頭角?,不過仍需進一步研究。 要知道其工作原理,需要了解去模型圖。如下圖所示

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

公式圖

Xt是輸入序列中某一個單元,Ht為輸出序列的某一個單元。上圖是RNN縮略圖,因是一個自循環圖,看起來有些困難,将其展開後如下圖所示:

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

栗子

舉一個非常簡單的例子,讓RNN看10000次"我愛你,我也愛你 ???" 後,此時她的眼裡隻有你,當我們問RNN:“我愛你"時,RNN會毫不猶豫的回答"我也愛你???”。此案例中,RNN眼裡隻有[我,愛,你,也]四個詞,甚至都沒有一個不字,并且在她的認知裡面,“我愛你”後面隻會有“我也愛你”的情況,沒有第三+者,這隻是一個很簡單的例子,可現實中的情況會複雜的多,RNN會看各種各樣的事情,出現的頻率也不同,則根據前後序列的關聯性建立不同的權重。

好了,再舉一個栗子,你的那個她一生中會經曆很多不同的異性,出現的頻率都不同,可是如果你想要讓她的眼裡隻有你的話,就需要經常在她的眼前轉悠,慢慢讓她熟悉你,眼裡隻有你,時間久了,就會離不開你,哈哈哈~這個經驗對于很多方面都還是比較有效的。

沒想到在RNN中還學到了一招兒~

LSTM術語

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

? 上圖就是LSTM内部的模型圖。在介紹LSTM之前,cue一下基本符号與概念:

  • 基本符号
    品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失
  • Cell State

    存儲目前Cell的狀态資訊,包含資料的序列資訊。比如當輸入為“I love you”時,第三個cell中能夠儲存“I”和“Love”的資訊,那麼第三個Cell就可以大機率預測出“you”。

  • Gate

    Gate主要是控制在Cell State添加或删除資訊,由上圖中的Sigmoid函數和點乘操作組成。每個輸入和曆史CellState都是需要進行選擇性記憶和遺忘,這個記憶和遺忘就是在不同階段給不同對象不同的權重。比如LSTM在讀過“I Love”之後,“you”的記憶可能比較明确和清晰(權重比較大),而“him”的記憶可能比較模糊(權重比較小),究其原因還是因為“you”在“I Love”附近轉悠的次數比較多而已。

    此外,Sigmoid函數輸出在(0,1)之間,當輸出為0的時候,不讓目前資訊流入到Cell State中;當輸出為1的時候,就目前資訊全部流入到Cell State中。

  • x t _{x_t} xt​​是輸入序列中第t個元素
  • h t _{h_t} ht​​是輸出序列中第t個元素
品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

上圖展示了 C t − 1 _{C_t-1} Ct​−1​如何變成 C t _{C_t} Ct​​。LSTM中的關鍵是每個單元格的狀态(cell state),而這個單元格狀态就類似于傳送帶,能夠将一些資訊沿着序列資料一直傳遞到序列最低端,且每經過一個cell,都能夠攜帶上該單元格的資訊,這樣後面的單元格是知道之前序列的資料,故具有記憶的功能。

細說LSTM

接下來将一步一步的講解LSTM中不同子產品,逐層解剖出核心含義。

(1)選擇性遺忘

首先第一步就是要決定之前的經驗( C t − 1 _{C_t-1} Ct​−1​),有多少能夠流向下一個Cell State( C t _{C_t} Ct​​),具體公式如下圖所示:

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

如何遺忘,是由一個“Forget Gate Layer”控制的,上圖所示便是。由 h t − 1 _{h_t-1} ht​−1​和 x t _{x_t} xt​​經過 s i g m o i d sigmoid sigmoid函數之後輸出一個(0,1)的數字,而這個數字就決定了上一個Cell State 有多少資訊能夠流向下一個Cell State。

當LSTM看了很多“我喜歡打籃球”的語句時,突然來了十句“我喜歡打乒乓球”,此時就需要将乒乓球加入到我的愛好清單中,從另一個層面看,需要對“打籃球”進行一定程度的遺忘,才能空出來“打乒乓球”。因為這是有權重比例的,而所有的愛好比例總和為1(非嚴格意義上來講)。而每個愛好可能在不同上下文環境中的比例是不一樣的。

(2)選擇性記憶

接下來就是要根據目前序列元素的輸入和上一個輸出來選擇性記憶,決定哪些資訊需要存儲到Cell State中。而這個過程就包含兩個過程,如下圖所示:

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

第一個過程是由“Input Gate Layer”組成,此層決定了我們要把輸入資訊中的哪些資訊輸入嵌入到目前的Cell State中。第二個過程就是通過Tanh建立一個 C t ~ \tilde{C_t} Ct​~​通過與 i t _{i_t} it​​ 的組合來決定哪些資訊是需要儲存下來的。

在實際案例中就類似于上文中的“我喜歡打乒乓球”選擇性的加入到到新的Cell State中。 i t _{i_t} it​​ 和 C t ~ \tilde{C_t} Ct​~​ 共同決定“乒乓球”加入到我的愛好清單中。

(3)New Cell State

Old Cell State是如何變成New Cell State呢?如下圖所示:

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

首先對Old Cell State進行選擇性遺忘,然後對Input進行選擇性記憶,然後加起來就是New Cell State。這個過程就比較容易了解了。

(4)輸出

輸出是根據目前Cell State,上一個輸出,和目前輸入決定的。具體的邏輯圖如下所示:

品味LSTM的細枝末節閑聊RNNLSTM術語細說LSTMsummary梯度消失

與“Forget Gate Layer”相反, 通過上一個輸出和目前輸入,決定目前輸入資訊有多少資訊可以影響輸出。最終生成一個(0,1)的比例資料。另外上一個 Cell State 通過tanh後再和 o t {o_t} ot​ 點乘, 就可生成目前Cell 的輸出 h t {h_t} ht​。

LSTM是具有在cell上添加或删除資訊的功能,而這個功能結構化的表現為Gate,中文了解為門閥。門閥是讓資料能夠一直在序列資料上流下去的關鍵。上圖就是一個門閥,由一個sigmoid函數和矩陣點乘組成。

在實際應用當中,有這樣的一個場景,我們要判斷一個動詞是單數還是複數,就需要知道主語是單數還是複數。

summary

? LSTM能夠儲存訓練過程中的序列資訊,并通過Gate能夠決定哪些資訊需要記住,删除,和讀取,就類似于計算機的記憶體存儲。每個Cell能夠根據對應輸入和上一個輸出決定接下來我要存儲哪些資訊,遺忘哪些資訊,然後組裝成記憶存儲起來,同時産生對應的輸出。

梯度消失

??? ? 下一次再講,see you later ~~~~~~~~

參考連結:

  • Understanding LSTM
  • wiki-lstm

繼續閱讀