DFSMN結構快速解讀

參考文獻以下:

(1) Deep Feed-Forward Sequential Memory Networks for Speech Synthesis網絡

(2) Deep FSMN for Large Vocabulary Continuous Speech Recognition函數

1. cFSMN結構解析

       有了以前對FSMN結構的瞭解,如今看cFSMN結構就很簡單。因爲FSMN須要將記憶模塊的輸出做爲下一個隱層的額外輸入,這樣就會引入額外的模型參數。而隱層包含的節點越多,則引入的參數越多。編碼

       基於此,cFSMN結合矩陣低秩分解的思路,經過在網絡的隱層後添加一個低維度的線性投影層,而且將記憶模塊添加在這些線性投影層上。進一步的,cFSMN對記憶模塊的編碼公式進行了一些改變,經過將當前時刻的輸出顯式的添加到記憶模塊的表達中,從而只須要將記憶模塊的表達做爲下一層的輸入。這樣能夠有效的減小模型的參數量,加快網絡的訓練。具體的,單向和雙向的cFSMN記憶模塊的公式表達分別以下:spa

\[ \vec{\tilde{p}_t^l} = \vec{p_t^l}+\sum_{i=0}^{N}\vec{a_i^l}\odot \vec{p_{t-i}^l}\tag{1} \]3d

\[ \vec{\tilde{p}_t^l} = \vec{p_t^l}+\sum_{i=0}^{N_1}\vec{a_i^l}\odot\vec{p_{t-i}^l}+\sum_{j=0}^{N_2}\vec{c_j^l}\odot\vec{p_{t+j}^l}\tag{2} \]code

2.DFSMN結構解析

       觀察結構圖能夠發現,DFSMN是在cFSMN的基礎上,在不一樣層之間的記憶模塊上添加了跳轉連接skip connection,從而使得低層記憶模塊的輸出會被直接累加到高層記憶模塊裏。這樣在訓練過程當中,高層記憶模塊的梯度會直接賦值給低層的記憶模塊,從而能夠克服因爲網絡的深度形成的梯度消失問題,使得能夠穩定地訓練深層的網絡。
       而且,經過借鑑擴張卷積的思路,DFSMN在記憶模塊中引入了一些步幅因子stripe,具體的計算公式以下:blog

\[ \vec{\tilde{p}_t^l} = H(\vec{\tilde{p}_t^{l-1}})+\vec{p_t^l}+\sum_{i=0}^{N_1^l}\vec{a_i^l}\odot\vec{p_{t-{s_1*i}}^l}+\sum_{j=0}^{N_2^l}\vec{c_j^l}\odot\vec{p_{t+{s_2*j}}^l}\tag{3} \]ip

       關於變換H能夠是任意的線性或者非線性函數,特別的,若是每一層的記憶模塊都是相同維度的,能夠直接使用恆等映射:it

\[ H(\vec{\tilde{p}_t^{l-1}}) = \vec{\tilde{p}_t^{l-1}}\tag{4} \]io

       至於爲何要引入步幅因子,是由於在實際工做處理中,臨近單元信息會有大量的冗餘,而步幅因子就能夠幫助模型適當地消除這種冗餘,從而加快模型的訓練。

相關文章
相關標籤/搜索