音声認識メモ(Kaldi)その11(学習率 Karel's DNN)

学習の過程をトレースしてみる。

スクリプト「steps/nnet/train.sh」を実行すると、内部で「steps/nnet/train_scheduler.sh」をコールし、「nnetbin/nnet-train-frmshuff」を実行する。

今回、"もしもし"という発話(198フレーム)の音声ファイルを3つ用意し、ミニバッチサイズは「128」を指定して試した。

学習では、オプションに「--cross-validate=false --randomize=true」を指定して「nnetbin/nnet-train-frmshuff」を実行する。
学習データは、594フレーム(=198フレームx3ファイル)から128フレームをランダムに選択する。

一方、交差検証では、オプションに「--cross-validate=true --randomize=false」を指定して「nnetbin/nnet-train-frmshuff」を実行する。
ランダマイズしないので、検証データ(128フレーム)は固定となる。

学習が進んだかは、クロスバリデーションにおけるクロスエントロピーの値で判定する。

f:id:ichou1:20180501222014p:plain
input : モデル(学習前)
output : モデル(学習後)
AvgLoss(cv) : 学習後のモデルにおけるクロスエントロピーの値


値が悪化したら、学習率を小さくして再度学習する(赤枠)
学習が進まなくなったら、学習率の半減を開始する(緑枠)
改善が閾値(0.001)を下回ったら終了する(青枠)