(1) Feedforward Sequential Memory Neural Networks without Recurrent Feedback編碼
(2) Feedforward Sequential Memory Networks: A New Structure to Learn Long-term Dependencyspa
注意:!!!
小寫字母表明單個標量
大寫字母表明矩陣
小寫字母頭上帶個小箭頭表明向量code
觀察圖(a),能夠發現,在隱藏層的旁邊,FSMN掛了一個記憶模塊Memory Block
,記憶模塊的做用與LSTM門結構相似,能夠用來記住t
時刻輸入信息的相鄰時刻序列的信息。blog
根據記憶模塊編碼方式的區別,FSMN又能夠分爲sFSMN
和vFSMN
,前者表明以標量係數編碼,後者表明以向量係數編碼。it
如圖(b)的結構,以記住前N個時刻信息爲例,其計算公式以下:class
\[ \vec{\tilde{h}_t^l} = \sum_{i=0}^{N}a_i^l\cdot \vec{h_{t-i}^l},in...sFSMN\tag{1} \]表單
\[ \vec{\tilde{h}_t^l} = \sum_{i=0}^{N}\vec{a_i^l}\odot\vec{h_{t-i}^l},in...vFSMN\tag{2} \]im
其中,(1)式表明的標量乘積,(2)式表明的是Hadamard積db
所以,能夠獲得sFSMN下的編碼係數向量和vFSMN下的編碼係數矩陣:img
\[ \vec{a^l}=\{ a_0^l,a_1^l,...,a_N^l\},in...sFSMN\tag{3} \]
\[ A^l =\{ \vec{a_0^l},\vec{a_1^l},...,\vec{a_N^l}\},in...vFSMN\tag{4} \]
有了這一個隱藏層旁掛着的記憶模塊,就要將此記憶模塊做爲輸入傳遞到下一個隱藏層,如圖(a):
\[ \vec{h_t^{l+1}} =f(W^l\vec{h_t^l}+\tilde{W}^l\vec{\tilde{h}_t^l} +\vec{b^l} )\tag{5} \]
多出來的權重矩陣和偏置係數向量,都是後續訓練模型須要調整的參數。
以上就是簡單的回看式FSMN,也就是說當下的記憶模塊只關注了它以前的信息,若是還要關注將來的信息,實現上下文聯通,也就是所謂的雙向的FSMN,直接在(1)式和(2)式中添加後看的階數便可,以下:
\[ \vec{\tilde{h}_t^l} = \sum_{i=0}^{N_1}a_i^l\cdot \vec{h_{t-i}^l}+\sum_{j=1}^{N_2}c_j^l\cdot \vec{h_{t+j}^l},in...sFSMN\tag{6} \]
\[ \vec{\tilde{h}_t^l} = \sum_{i=0}^{N_1}\vec{a_i^l}\odot\vec{h_{t-i}^l}+\sum_{j=1}^{N_2}\vec{c_j^l}\odot\vec{h_{t+j}^l},in...vFSMN\tag{7} \]
其中N1和N2分別表明前看和後看的階數。
給定一個包含T個單詞的序列X,咱們能夠構造一個T階的方陣M:
\[ M = \left[ \begin{matrix} a_0 & a_1 & \cdots& a_N&0 & \cdots&0\\ 0 & a_0 &a_1 &\cdots& a_N &\cdots&0 \\ \vdots & \vdots & \ddots &\vdots&&&\vdots \\ 0 & 0 & \cdots & a_0&a_1&\cdots&a_N \\\vdots&\cdots&&&\ddots&&\vdots\\\\0&\cdots&&&&&a_0\\ \end{matrix} \right]_{T\times T}in...sFSMN\tag{8} \]
\[ M = \left[ \begin{matrix} a_0 & a_1 & \cdots& a_{N_1}&0 & \cdots&\cdots&\cdots&0\\ c_1 & a_0 &a_1 &\cdots& a_{N_1}&\cdots&\cdots&\cdots&0\\c_{N_2}&\cdots&c_1&a_0&a_1&\cdots&a_{N_1}&\cdots&0 \\ \vdots && \vdots & \ddots &\ddots&&&\vdots \\ 0 &\cdots &c_{N_2}& \cdots &c_1& a_0&a_1&\cdots&a_{N_1} \\\vdots&\cdots&&&&&\ddots&&\vdots\\\\0&\cdots&&&&c_{N_2}&\cdots&c_1&a_0\\ \end{matrix} \right]_{T\times T}in...vFSMN\tag{9} \]
鑑於上式,咱們就有了很美的如下這個公式:
\[ \tilde{H} =HM\tag{10} \]
更爲推廣的,對於給定的K個序列:
\[ L=\{X_1,X_2,...,X_K\}\tag{11} \]
一個更美的公式誕生了:
\[ \tilde{H} =\left[ \begin{matrix}H_1,H_2,...,H_K\end{matrix} \right]\left[ \begin{matrix}M_1&&&\\&M_2\\&&\ddots\\&&&&M_K\end{matrix} \right]=\bar{H}\bar{M}\tag{12} \]