最近看到一個巨牛的人工智能教程,分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。平時碎片時間可以當小說看,【點這裏可以去膜拜一下大神的“小說”】。
文章轉自《https://blog.csdn.net/shenxiaoming77/article/details/79390595》
LSTM不經常用,所以每次看完原理後不久就會忘記,今天從【LSTM 實際神經元隱含層物理架構原理解析】 看到一篇對LSTM的詳解,覺得寫得挺好的,於是轉載過來,文章排版格式上略作修改。
一些基於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
中各個門處理,以及隱含層的實際物理實現有了更深刻的認識,前期一些理解上還模糊的點 也在不斷的分析中逐漸清晰。
首先給出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