音声認識メモ(Kaldi)その20(トレーニング Dan's DNN(nnet2))

nnet2での学習の流れを追ってみる。

今回は、活性化関数に「tanh」を使った「nnet4c」を対象とした。

${KALDI_ROOT}/egs/rm/s5/local/nnet2/run_4c.sh
# for CPU only (with --use-gpu false).
steps/nnet2/train_tanh_fast.sh \
    --stage -10 \
    --minibatch-size 128 \
    --num-epochs 20 \
    --add-layers-period 1 \
    --num-hidden-layers 2 \
    --mix-up 4000 \
    --initial-learning-rate 0.02 \
    --final-learning-rate 0.004 \
    --hidden-layer-dim 375 \
    data/train \                    # <data>
    data/lang \                     # <lang>
    exp/tri3b_ali \                 # <ali-dir>
    exp/nnet4c_manual               # <exp-dir>

内部処理の確認。

stage: -4
steps/nnet2/get_lda.sh \
    --transform-dir exp/tri3b_ali \
    --splice-width 4 \
    data/train \
    data/lang \
    exp/tri3b_ali \
    exp/nnet4c
stage: -3

トレーニングデータを"validation"用と"training"用に分ける。

steps/nnet2/get_egs.sh \
    --transform-dir exp/tri3b_ali \
    --splice-width 4 \
    --stage 0 \
    data/train \
    data/lang \
    exp/tri3b_ali \
    exp/nnet4c
stage: -2

初期モデルを作成。

nnet-am-init \
    exp/tri3b_ali/tree \
    data/lang/topo \
    'nnet-init exp/nnet4c/nnet.config -|' \
    exp/nnet4c/0.mdl

==>モデルのComponent数は「6」

Splice / FixedAffine / AffinePre / Tanh / AffinePre / Softmax

"AffinePre"は"AffineComponentPreconditionedOnline"の略

stage: -1

transition probabilities(遷移確率)の更新

nnet-train-transitions \
    exp/nnet4c/0.mdl \
    'ark:gunzip -c exp/tri3b_ali/ali.*.gz|' \
    exp/nnet4c/0.mdl

ここから、ループする。
ループ回数は「25」($num_epochs + $num_epochs_extra)。

  • カウンタが「1」で隠れ層の追加

==> モデルのComponent数が「8」になる("Tanh"と"AffinePre"を追加)

Splice / FixedAffine / AffinePre / Tanh / AffinePre / Tanh / AffinePre / Softmax
  • カウンタが「13」でmixup

==> モデルのComponent数が「9」になる("SumGroup"を追加)

Splice / Fixed Affine / AffinePre / Tanh / AffinePre / Tanh / AffinePre / Softmax / SumGroup

ループの各段階でやっていることを書き出してみると下表のとおり。
f:id:ichou1:20180715130237p:plain

mixup後のモデルを使って「final.mdl」を生成する。

nnet-combine-fast \
    exp/nnet4c/14.mdl \
    exp/nnet4c/15.mdl \
    <snip> \
    exp/nnet4c/25.mdl \
    ark:exp/nnet4c/egs/combine.egs \    #  <valid-examples-in>
    exp/nnet4c/final.mdl