注:歡迎關注本人分享有關個性化推薦系統公衆号:Tiany_RecoSystem
最近看一些基于LSTM網絡的NLP案例代碼,其中涉及到一些input_size, num_hidden等變量的時候,可能容易搞混,首先是參照了知乎上的一個有關LSTM網絡的回答https://www.zhihu.com/question/41949741, 以及github上對于LSTM比較清晰的推導公式http://arunmallya.github.io/writeups/nn/lstm/index.html#/3, 對于lstm cell中各個門處理,以及隐含層的實際實體實作有了更深刻的認識,前期一些了解上還模糊的點 也在不斷的分析中逐漸清晰。 首先,在DNN網絡中全連接配接是一個非常重要的概念,在整個深度網絡中,會存在多個全連接配接層,是以我們先給出一個簡單的全連接配接網絡結構圖以及對應的矩陣計算公式,能夠清晰的明白全連接配接網絡的計算原理,對我們在了解輸入向量次元與隐含層次元之間的關系有一定的幫助, 首先給出一個簡單的全連接配接結構圖:
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 其中,x1、x2、x3為全連接配接層的輸入,a1、a2、a3為輸出,那麼該全連接配接網絡對應的計算公司可推到如下 :
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 可以寫成如下矩陣形式:
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 還有更大的一些全連接配接層:
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 其中,左邊n=800是輸入X的向量長度,右邊N=500則是隐含層(也就是圖中的全連接配接層)的神經元個數,也就是經常看到的num_hidden大小,從結構圖和推到公式可以看出,上一層的資料向量,無論向量大小如何,在通過全連接配接計算後,輸出的向量長度即為隐含層的神經元個數num_hidden。 接下來我們給出LSTM網絡的三種不同的架構圖:
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 其中前兩種是網上最常見的,圖二相對圖一,進一步解釋了cell内各個門的作用,但是在實際的神經網絡中,各個門處理函數 其實是由一定數量的隐含層神經元來處理,在RNN中,M個神經元組成的隐含層,實際的功能應該是f(wx + b), 這裡實作了兩部,首先M個隐含層神經元與輸入向量X之間全連接配接,通過w參數矩陣對x向量進行權重求和,其實就是對x向量各個次元上進行篩選,加上bias偏置矩陣後,通過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 * N, bias的次元為N, 是以平時我們在初始化lstm cell的時候,樣本輸入的embedding_size 與 num_hidden 之間沒有直接關聯,而是會決定每個門的w矩陣次元, 而且之前的一片BasicLSTMCell 源碼分析中,我們提到了BasicLSTMCell 是直接要求embedding_size 與 num_hidden 是相等的,這也大大簡化了多個w矩陣的計算,這也說明了BasicLSTMCell是最簡單和最常用的一種lstm cell
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 從上圖中可以看出,每個門都對應一個w 以及bias矩陣
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 最終目前時刻的輸出h 是有cell内多個門函數共同作用的結果。 關于time_step的問題: 假設 文本的樣本資料集是(100, 80 , 50), 其中100指的是batch_size, 即樣本個數,80 是指句子sentence的最大長度, 也是指參數優化過程中一次處理的最大時間步長max_time steps, 50則是詞向量次元embedding_size, 假如num_hidden = 256, 那麼每個時間步 輸出的是256次元的一階向量,那麼在一次梯度優化過程中輸出的二階向量為80 * 256, 具體可以看下面的公式:
bp神經網絡隐含層神經元個數_LSTM 實際神經元隐含層實體架構原了解析 這裡的T 就是樣本集中的80,也是指一個sentence最大長度,我們在參數優化的過程中,以一個完整句子的輸出進行梯度下降計算。 以上隻是參考了别人的想法,自己對lstm cell 的一個初步的了解和認識,後續在閱讀源碼和案例代碼的過程中,還需要反複揣摩RNN網絡的實際底層架構和計算原理,下一篇準備針對LSTMCell 進行源碼分析。