參考文獻如下:
(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記憶模塊的公式表達分別如下:
2.DFSMN結構解析
觀察結構圖可以發現,DFSMN是在cFSMN的基礎上,在不同層之間的記憶模塊上添加了跳轉鏈接skip connection
,從而使得低層記憶模塊的輸出會被直接累加到高層記憶模塊里。這樣在訓練過程中,高層記憶模塊的梯度會直接賦值給低層的記憶模塊,從而可以克服由於網絡的深度造成的梯度消失問題,使得可以穩定地訓練深層的網絡。
並且,通過借鑒擴張卷積的思路,DFSMN在記憶模塊中引入了一些步幅因子stripe
,具體的計算公式如下:
關於變換H可以是任意的線性或者非線性函數,特別的,如果每一層的記憶模塊都是相同維度的,可以直接使用恆等映射:
至於為什么要引入步幅因子,是因為在實際工作處理中,臨近單元信息會有大量的冗余,而步幅因子就可以幫助模型適當地消除這種冗余,從而加快模型的訓練。