天天看點

詳解 DNN 在聲學應用中的模型訓練

本文通過簡單kaldi源碼,分析dnn訓練聲學模型時神經網絡的輸入與輸出。在進行dnn訓練之前需要用到之前gmm-hmm訓練的模型,以訓練好的mono模型為例,對模型進行維特比alignement(對齊),該部分主要完成了每個語音檔案的幀到 transition-id 的映射。

不妨檢視對齊後的結果:

對于一個訓練語音檔案speaker001_00003,後面的每一個數字标示一個transition-id,同時每個數字對應一個特征向量,對應的向量可以 copy-matrix 檢視,可參考特征提取相關内容,連結如下:

<a href="http://t.cn/rx2n4dx" target="_blank">http://t.cn/rx2n4dx</a>

同樣檢視 transition-id:

唯一的transition-state對應唯一的pdf,其下又包括多個 transition-id,

接下來看神經網絡的輸入與輸出到底是什麼。這裡以steps/nnet為例。追溯腳本到steps/nnet/train.sh,找到相關的指令:

從上面關鍵的幾個神經網絡的訓練的準備階段可以看出,神經網絡的輸入很清楚是變換後的特征向量(feats_tr),輸出是labels_tr,下面單獨運作上面的指令,來檢視神經網絡的輸出(target)是什麼。labels_tr的生成分兩步:

ali-to-pdf: 将上面對齊檔案中的transition-id轉化為對應的pdf-id;

ali-to-post: 根據得到的pdf-id,生成[pdf, post]對,即pdf與其對應的後驗機率。

觀察前兩幀,結合文章一開始,transition-id 分别為4和1,而對應的pdf均為0。對該結果再進行ali-to-post:

得到pdf-id以及相應的後驗機率,這裡均為1。

由此得到了訓練資料以及對應的target label。進一步來看神經網絡的輸入與輸出的次元,網絡結構被utils/nnet/make_nnet_proto.py寫到nnet_proto檔案中,該python腳本的兩個重要參數 num_fea和num_tgt分别為神經網絡的輸入與輸出的次元。其中num_fea是由feat-to-dim獲得:

這裡為fbank特征,次元為40,而在真正作為神經網絡輸入時,進一步對特征向量進行的變換,從源碼steps/nnet/train.sh也可以看到splice參數(預設值為5),指定了對特征向量的變換:取對應幀前後5幀,拼成一個11幀組成的大向量(次元為440)。該部分特征變換的拓撲也被儲存到final.feature_transform:

後面在進行神經網絡的訓練時會使用該拓撲對特征向量進行變換,最終的神經網絡輸入次元為440。

而num_tgt的次元則是通過hmm-info獲得:

是以,看到神經網絡的輸出次元為1026,這時檢視nnet_proto:

這裡可以看到神經網絡的輸入次元有40變為440,輸出為pdf的個數(對應hmm狀态的個數)。

如果繼續追查代碼,最後可以找到單次神經網絡的訓練實作,kaldi/src/nnetbin/nnet-train-frmshuff.cc:

解析訓練參數,配置網絡

讀取特征向量和target label,輸入為matrix&lt; basefloat &gt;類型,輸出為posterior類型,即&lt;pdf-id, posterior&gt;對。

随機打亂訓練資料,作為神經網絡輸入與期望輸出:

前向傳播,計算估計值nnet_out

計算cost,這裡支援交叉熵和平方差和multitask。結果為obj_diff

根據誤差反向傳播,更新參數

完成一次參數更新,繼續疊代。

最終由調用該部分代碼的/steps/nnet/train_scheduler.sh指定最大疊代次數max_iters或accept訓練的模型,

在進行dnn訓練前:

訓練gmm-hmm模型,聚類,并得到音素(或狀态)的後驗。

對語音資料進行對齊,這裡得到語音檔案按時間順序transition-id到幀特征向量的對應。

生成&lt; pdf-id, posterior &gt; 對作為訓練目标target

語音檔案特征向量進行變換,這裡取前後5幀,拼成一個11幀次元更高的特征向量,作為神經網絡輸入。

神經網絡輸入變換後的特征向量,通過前向傳播,經softmax層,得到該幀特征對應每個pdf的機率預測值。

對每個pdf根據&lt; pdf-id, posterior &gt;查到目标後驗機率,與預測值求誤差

反向傳播更新參數。

不斷疊代,直到達到最大訓練次數,或模型經過cross validation得到較低的誤差(loss)停止訓練。

解碼時,用訓練好的dnn-hmm模型,輸入幀的特征向量,得到該幀為每個狀态(對應pdf)的機率。

詳解 DNN 在聲學應用中的模型訓練

其中 x_t 對應t時刻的觀測值(輸入),q_t=s_i 即表示t時刻的狀态為 s_i。p(x_t) 為該觀測值出現機率,對結果影響不大。p(s_i) 為 s_i 出現的先驗機率,可以從語料庫中統計得到。最終得到了與gmm相同的目的:hmm狀态到觀測幀特征向量的輸出機率。就有了下面的示意圖:

詳解 DNN 在聲學應用中的模型訓練

====================================分割線================================

本文作者:ai研習社

繼續閱讀