深度学习之LSTM完全图解
在學習LSTM的過程中,一直對lstm的內部機制一知半解,網上查找的資料大多千篇一律的翻譯稿,大多列列公式了事,并沒有做細致深入的解釋。于是乎自己最近仔細debug了一遍tensorflow的seq2seq源碼,總算是徹底搞清了LSTM的計算流程,下面通過一個圖來對LSTM內部的計算流程進行詳細解析,先上圖:
首先看這個廣為流傳的圖,我做了一些注釋,大體流程是:
? ? 1.input與h進行concat操作,記結果為x
? ? 2.x分別于權重矩陣w(f),w(i),w(j),w(o)進行矩陣點乘操作,分別得到結果矩陣f、i、j、o,其中w(f),w(i),w(j),w(o)就是該LSTM細胞的核心權重參數,訓練的目的也就是訓練這四個權重矩陣參數,至于權重的維度,下面有圖能夠解釋
? ? 3.對矩陣f進行sigmod操作即sigmod(f),對矩陣i也進行sigmod操作,即sigmod(i),對矩陣j進行tanh操作,即tanh(j),對矩陣o進行sigmod操作即sigmod(o)
? ? 4.計算新的c? ,新c=老c*sigmod(f)+(sigmod(i)*tanh(j))
? ? 5.計算新的h ,新h=tanh(新c)*sigmod(o)
經過這5個步驟,一次cell計算完畢 得到新的c和新的h,然后將h作為本次的output,將元組(c,h)作為本次的細胞state保存作為下次cell計算的原料。
? ? 基于對LSTM大體框架的了解,下面我們通過一個具體的圖,來對計算過程中數據的維度變化進行了解,上圖:
這個圖有點大,可以放大查看,在這里我們對幾個參數做預先說明,本圖中,embedding_size為512,num_units即隱層的神經個數(決定w(f),w(i),w(j),w(o)等權重參數矩陣的維度)必須與embedding_size一致為512。batch_size設為64。下面對整個圖的流程進行解釋:
?1.首先要將單詞經過embedding轉換為詞向量,即每個單詞對應一個1*512的向量,因此最終inputs的維度為(sequence_length,batch_size,512)
2.每次拿出一個單詞進行計算,就是拿出inputs(sequence_length)的第一個元素input,維度為[64,512],即一個batch的第一個單詞
3.設置初始的state,這個state可以自己初始化,其值為元組形式 (c,h),維度為【64,512】 64為batch_size
4.拿出state中的h,維度為【64,512】與input 【64,512】進行concat得到一個維度為【64,1024】的輸入矩陣x
5.x分別與w(f),w(i),w(j),w(o)進行計算,計算的結果必須是512維(num_units),故w(f),w(i),w(j),w(o)四個權重矩陣的維度都必須是【1024,512】的,【64,1024】dot 【1024,512】=【64,512】如下圖:
計算的結果f、i、j、o的維度均為【64,512】
6,進行激活操作sigmod(f+b) sigmod(i)? tanh(j)? sigmod(o),激活操作不改變維度,故而維度都是【64,512】,注意這里對f進行了一個偏置,源碼中b=1.0。其作用應該是避免忘記太多內容
7,忘記門,old_c*sigmod(f+b) 對一些信息進行忘記,multiply操作就是矩陣對應元素相乘,由于sigmod操作的結果是大部分值為0,所以起到忘記的作用。結果維度依然是【64,512】
8.記憶門,記憶門采用add操作,結果得到新的c,即new_c=multiply(old_c,sigmod(f+b)) +multiply(sigmod(i),tanh(j)) ,維度依然不改變 【64,512】
9.輸出,計算新的h new_h=multiply(sigmod(o),tanh(multiply(c,sigmod(f+b)) +multiply(sigmod(i),tanh(j))) )? 維度【64,512】
至此,一次cell計算完畢。
可以看出,一個LSTM_CELL中最重要的就是四個權重參數矩陣,四個矩陣的維度均為【1024,512】,此處的512就是embedding_size也是num_units,而1024為2*512,即權重參數維度只跟num_units有關 【2*unm_units,num_units】。
這是一層LSTM結構,如果是多層的,就將輸出ouput作為下一層的input,其他一樣計算。
公式在此就不列出了,網上一片一片。下一篇將對tensorflow的attention機制源碼進行解讀,tensorflow的attention機制源碼與中國blog翻譯稿所述略微不同,下篇再做詳解
總結
以上是生活随笔為你收集整理的深度学习之LSTM完全图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kubernetes网络设计原则
- 下一篇: 于仕琪的人脸检测算法