lstm结构图_神经网络——单层LSTM
LSTM神經(jīng)網(wǎng)絡(luò)全稱(chēng)長(zhǎng)短時(shí)記憶神經(jīng)網(wǎng)絡(luò)(Long Short-term Memory),是一種特殊的RNN(Recurrent Neural Network)。下面從一下幾個(gè)部分對(duì)LSTM進(jìn)行介紹。
- LSTM–cell、gate的基本概念
- LSTM內(nèi)部結(jié)構(gòu)
- 基于Tensorflow的LSTM實(shí)現(xiàn)代碼解析
- LSTM推斷在FPGA實(shí)現(xiàn)思路
1. 基本概念
1.1 cell
Cell是構(gòu)成RNN神經(jīng)網(wǎng)絡(luò)的基本單元,Cell能夠記憶之前輸入的狀態(tài)。LSTM是RNN的一種變種,解決了RNN在訓(xùn)練過(guò)程中梯度爆炸和梯度消失的問(wèn)題。在LSTM中保持了Cell的概念,但與RNN不同的是,LSTM中Cell記憶的是兩種狀態(tài):1)記憶之前輸入的狀態(tài)c(Tensorflow中稱(chēng)c-state);2)當(dāng)前輸出狀態(tài)h(Tensorflow中稱(chēng)m-state)。
cell結(jié)構(gòu)圖LSTM的輸入是按照時(shí)間序列分步進(jìn)行輸入,在每個(gè)時(shí)間步(Timestep)cell都進(jìn)行狀態(tài)更新。在t時(shí)刻,cell的記憶狀態(tài)
表示Cell記憶t-1以及以前時(shí)刻的輸入狀態(tài), 表示t-1時(shí)刻Cell的輸出。于是當(dāng)多個(gè)Cell邏輯連接在一起時(shí),就組成了一個(gè)完整的LSTM推斷過(guò)程,如下圖。在一輪LSTM推斷中,LSTM輸入序列為 ,Timestep=t。此時(shí)LSTM輸出為 ,然后輸入新的序列進(jìn)行下一輪的推斷。LSTM推斷過(guò)程圖
1.2 門(mén)
門(mén)(Gate)是將LSTM與RNN區(qū)分開(kāi)來(lái)的一個(gè)重要概念,cell更新?tīng)顟B(tài)靠的是門(mén)。在cell中,有三個(gè)門(mén):遺忘門(mén)(Forget Gate),輸入門(mén)(Input Gate)和輸出門(mén)(Output Gate)。門(mén)的作用是控制數(shù)據(jù)范圍,接下來(lái)會(huì)圍繞下面三個(gè)問(wèn)題對(duì)門(mén)和cell結(jié)構(gòu)進(jìn)行解釋,1)門(mén)的輸入數(shù)據(jù)是什么;2)門(mén)的輸出數(shù)據(jù)是什么;3)門(mén)控制誰(shuí)的數(shù)據(jù)范圍。
1)門(mén)的輸入數(shù)據(jù)是什么?
門(mén)的輸入數(shù)據(jù)是前一個(gè)時(shí)刻cell的輸出
和當(dāng)前的輸入 。2)門(mén)的輸出數(shù)據(jù)是什么?
門(mén)的輸入數(shù)據(jù)乘以權(quán)值矩陣,然后經(jīng)過(guò)激活函數(shù),即為門(mén)的輸出,門(mén)輸出的數(shù)據(jù)范圍與激活函數(shù)的類(lèi)型有關(guān)。用函數(shù)表示:
, 是激活函數(shù),常用sigmoid函數(shù), 表示門(mén)的輸入數(shù)據(jù), 表示權(quán)值和偏置(與神經(jīng)元中的概念是一致的)。3)門(mén)控制誰(shuí)的數(shù)據(jù)范圍?
- 遺忘門(mén):之前的狀態(tài) 會(huì)對(duì)當(dāng)前cell輸出有影響,遺忘門(mén)的作用是對(duì)之前的狀態(tài)進(jìn)行部分遺忘。(過(guò)去不開(kāi)心的事情該忘記的就忘記吧==)
- 輸入門(mén):對(duì)當(dāng)前cell的輸入的數(shù)據(jù)進(jìn)行控制。(選擇性吸收?)
- 輸出門(mén):對(duì)當(dāng)前cell的輸出的數(shù)據(jù)進(jìn)行控制。(誰(shuí)還不能留點(diǎn)小秘密..)
2. LSTM結(jié)構(gòu)
LSTM是由cell構(gòu)成,而cell則是由gate構(gòu)成。下面來(lái)看看gate是怎么構(gòu)成cell的吧!
好吧...圖是我不知道在哪copy的..懶得畫(huà)了- forget gate:
- input gate :
- new cell :
- output gate:
前一個(gè)時(shí)刻cell的輸出和當(dāng)前時(shí)刻序列的輸入拼接作為各個(gè)門(mén)的輸入,拼接后乘以不同權(quán)值矩陣(加上偏置)可以得到不同的門(mén):遺忘門(mén)、輸入門(mén)和輸出門(mén)。上一時(shí)刻cell的記憶狀態(tài)與遺忘門(mén)做element-wise(對(duì)應(yīng)元素相乘),表示遺忘之前時(shí)刻的部分信息;輸入門(mén)與new cell做element-wise,表示加入當(dāng)前時(shí)刻的部分信息;經(jīng)過(guò)遺忘和加入新的記憶,得到cell新的記憶狀態(tài)。最后與輸出門(mén)做element-wise,將cell部分信息作為cell的輸出。
3. 代碼實(shí)現(xiàn)
github上有比較好的基于tensorflow實(shí)現(xiàn)lstm的例子,對(duì)其中部分代碼做一些說(shuō)明和拓展。
lstm?github.comlstm_cell = tf.contrib.rnn.BasicLSTMCell(n_hidden) 1) n_hidden: 表示Cell中h的維度 2) lstm_cell.weights[0]: 獲取lstm內(nèi)部權(quán)值, 按照i,j,f,o順序 3) lstm_cell.weights[1]: 獲取偏置outputs, states = tf.contrib.rnn.static_rnn(lstm_cell, x, dtype=tf.float32,sequence_length=seqlen) 1) outputs: 每個(gè)timestep輸出一組outputs, 分別表示每個(gè)時(shí)間步Cell的輸出h 2) states: 分為s-state和m-state, 分別表示最后一個(gè)時(shí)間步Cell的c和h第一步解析: 1. c = np.array(10*[0]) 2. x1 = np.array(test_data[0,0]) 3. h1 = np.array(10*[0]) 4. xh1 = np.append(x1,h1,axis=0) 5. concat = np.dot(xh1,lstm_kernel) + lstm_bias 6. i, j, f, o = np.split(concat,4) 7. new_c = (c*sigmoid(f + 1.0) + sigmoid(i)*mytanh(j)) 8. new_h = (mytanh(new_c)*sigmoid(o))第一步解析說(shuō)明: 1-3:Cell初始狀態(tài)輸入 4:[x,h] 5-6:計(jì)算隔各個(gè)門(mén),得到i,j,f,o(j是new cell) 7-8:Cell更新c,h4. FPGA實(shí)現(xiàn)
加速計(jì)算一般是加速推斷部分,而訓(xùn)練是在CPU/GPU中進(jìn)行。將各個(gè)權(quán)值數(shù)據(jù)范圍弄清楚,設(shè)計(jì)各個(gè)模塊就比較簡(jiǎn)單了。這里記錄一下主要模塊,在FPGA中實(shí)現(xiàn)推斷部分需要的計(jì)算模塊:矩陣計(jì)算、存儲(chǔ)控制、cell結(jié)構(gòu)。
- 矩陣計(jì)算:在乘法器資源充足的條件下,可以采用并行方式計(jì)算,先計(jì)算向量相乘再累加,然后進(jìn)行模塊例化,實(shí)現(xiàn)矩陣計(jì)算。
- Cell結(jié)構(gòu):實(shí)現(xiàn)單個(gè)cell邏輯,激活函數(shù)采用分段非線(xiàn)性逼近,激活函數(shù)的處理對(duì)最終精度有很大影響。
- 存儲(chǔ)控制:控制矩陣計(jì)算和cell運(yùn)算的數(shù)據(jù)流。
需要注意的點(diǎn):
- 在仿真時(shí)需要弄清權(quán)值的數(shù)據(jù)范圍,以及各個(gè)輸入、輸出和中間變量的數(shù)據(jù)范圍,對(duì)進(jìn)行數(shù)據(jù)定點(diǎn)化處理,確定數(shù)據(jù)位寬。
- 為了降低延時(shí),可以將數(shù)據(jù)處理速率提升至數(shù)據(jù)輸入速率的n倍(需要計(jì)算每次運(yùn)算需要多少個(gè)時(shí)鐘)。
總結(jié)
以上是生活随笔為你收集整理的lstm结构图_神经网络——单层LSTM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 图综合练习--拓扑排序_03 数据结构与
- 下一篇: mac 更换默认蓝牙适配器_Win7连接