LSTM內部實現原理詳解

原文鏈接:https://blog.csdn.net/shenxiaoming77/article/details/79390595

最近看到一個巨牛的人工智能教程,分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。平時碎片時間可以當小說看,【點這裏可以去膜拜一下大神的“小說”】

文章轉自《https://blog.csdn.net/shenxiaoming77/article/details/79390595》

LSTM不經常用,所以每次看完原理後不久就會忘記,今天從【LSTM 實際神經元隱含層物理架構原理解析】 看到一篇對LSTM的詳解,覺得寫得挺好的,於是轉載過來,文章排版格式上略作修改。

一些基於LSTM網絡的NLP案例代碼,涉及到一些input_sizenum_hidden等變量的時候,可能容易搞混,首先是參照了知乎上的一個有關LSTM網絡的回答https://www.zhihu.com/question/41949741, 以及github上對於LSTM比較清晰的推導公式http://arunmallya.github.io/writeups/nn/lstm/index.html#/3, 對於lstm cell中各個門處理,以及隱含層的實際物理實現有了更深刻的認識,前期一些理解上還模糊的點 也在不斷的分析中逐漸清晰。

首先給出LSTM網絡的三種不同的架構圖:

LSTM Ceil 圖解

其中前兩種是網上最常見的,圖二相對圖一,進一步解釋了cell內各個門的作用。

在實際的神經網絡中,各個門處理函數 其實是由一定數量的隱含層神經元來處理。

RNN中,M個神經元組成的隱含層,實際的功能應該是f(wx + b).

這裏實現了兩步:

  1. 首先M個隱含層神經元與輸入向量X之間全連接,通過w參數矩陣對x向量進行加權求和,其實就是對x向量各個維度上進行篩選,加上bias偏置矩陣。
  2. 通過f激勵函數, 得到隱含層的輸出。

而在LSTM Cell中,一個cell包含了若干個門處理函數,假如每個門的物理實現,我們都可以看做是由num_hidden個神經元來實現該門函數功能, 那麼每個門各自都包含了相應的w參數矩陣以及bias偏置矩陣參數,就是在圖3物理架構圖中的實現。

從圖3中可以看出,cell單元裏有四個門,每個門都對應128個隱含層神經元,相當於四個隱含層,每個隱含層各自與輸入x全連接,而輸入x向量是由兩部分組成,一部分是上一時刻cell 輸出,大小爲128, 還有部分就是當前樣本向量的輸入,大小爲6,因此通過該cell內部計算後,最終得到當前時刻的輸出,大小爲128,即num_hidden,作爲下一時刻cell的一部分輸入。

比如在NLP場景下,當一個詞向量維度爲M時, 可以認爲當前x維度爲M,如果num_hidden = N, 那麼與x全連接的某個隱含層神經元的w矩陣大小爲 M * Nbias的維度爲N, 所以平時我們在初始化lstm cell的時候,樣本輸入的embedding_sizenum_hidden之間沒有直接關聯,而是會決定每個門的w矩陣維度, 而且之前的一片BasicLSTMCell源碼分析中,我們提到了BasicLSTMCell 是直接要求embedding_sizenum_hidden 是相等的,這也大大簡化了多個w矩陣的計算,這也說明了BasicLSTMCell是最簡單和最常用的一種lstm cell

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