RNN、LSTM神經網絡輸入輸出究竟是怎樣的?

原本以爲自己懂的,可是看着看着論文,就越來越不知道Recurrent NNs(這裏不區分LSTM,GRU)的輸入輸出到底是怎麼樣的。所以,查閱多篇資料,整合如下,希望能幫到大家。

首先用「動圖」和「舉例子」講講 RNN(裏面的動圖非常容易讓大家理解每個timestep如何喂數據的)

其次,以一個操做實例來具體講一下Recurrent NNs的工作流程:
答案來源於知乎作者Scofield

  • step 1 raw text:
    sentence : “今天天氣真好”
  • step 2 tokenize (中文分詞)
    今天 天氣 真好
  • step 3 dictionarize(將每個詞轉化爲在字典中的索引)
    31 45 2
  • step 4 padding every sentence to fixed length
    31 45 2 0 0
    (假設fixed length = 5)
  • step 5 mapping token to an embeddings

    每一列代表一個詞向量,維度自定義。矩陣的列數爲一個句子的token個數,也是time_step length。對當前句子來說,token值爲5,time_step也爲5。
  • step 6 feed into RNNs as input
    每個sentence的每個token的embedding對應了每個時序 t 的輸入。即time_step=1時,input爲第一個詞的詞向量,詞向量中的每一個元素對應輸入層的每個節點。
  • step 7 get output
    在這裏插入圖片描述
    (後面會講隱藏層和最後輸出的區別,這點在pytorch中困擾我好久了)
  • step 8 further processing with the output
    我們可以將output根據分類任務或迴歸擬合任務的不同,分別進一步處理。比如,傳給cross_entropy&softmax進行分類,或者獲取每個time_step對應的隱狀態 ,做seq2seq 網絡

最後,講一下“隱藏”和“輸出”之間有什麼區別。
PyTorch LSTM中“隱藏”和“輸出”之間有什麼區別

(這個圖很好的解釋了我的疑惑,非常感謝原作者)
output 包括最後一層中的所有隱藏狀態(“最後”深度方式,而不是時間方式,即所有時刻最後一層的隱層狀態)。 (h_n, c_n) 包括最後一個時間步後的隱藏狀態,所以你可以將它們送入另一個LSTM。

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