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記憶模塊的公式表達分別如下:

\[\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} \]

\[\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} \]

2.DFSMN結構解析

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

\[\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} \]

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

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

       至於為什么要引入步幅因子,是因為在實際工作處理中,臨近單元信息會有大量的冗余,而步幅因子就可以幫助模型適當地消除這種冗余,從而加快模型的訓練。

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM