2019년 7월 14일 일요일

음성인식 메모(kaldi) 20 - Training Dan's DNN(nnet2)

「原作者へ」

連絡先を存じ上げませんでしたので、不本意ながら無断で翻訳しました。 
正式に翻訳を許可されたいです。 
gogyzzz@gmail.comでご連絡ください。

아래 포스트를 번역한 것입니다.

http://work-in-progress.hatenablog.com/entry/2018/07/15/121825


nnet2 학습의 흐름을 따라가보자.

이번엔 activation 함수로 「tanh」을 사용한 「nnet4c」을 대상으로 하였다.

${KALDIROOT}/egs/rm/s5/local/nnet2/run4c.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

여기서 loop를 한다.

loop 횟수는 「25」($numepochs + $numepochs_extra)。

  • 카운터가 1일때 hidden layer를 추가

==> 모델의 Component수가 「8」이 된다("Tanh"와 "AffinePre"을 추가)

Splice / FixedAffine / AffinePre / Tanh / AffinePre / Tanh / AffinePre / Softmax

카운터가 「13」일 때 mixup

==> 모델의 Component 수가 「9」가 된다("SumGroup"을 추가)

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

loop의 각 단계에서 하고 있는 것을 정리하면 아래와 같다.

![](https://cdn-ak.f.st-hatena.com/images/fotolife/i/ichou1/20180715/20180715130237.png)

mixup 후의 모델을 사용하여 「final.mdl」을 생성한다.

bash nnet-combine-fast \ exp/nnet4c/14.mdl \ exp/nnet4c/15.mdl \ \ exp/nnet4c/25.mdl \ ark:exp/nnet4c/egs/combine.egs \ # exp/nnet4c/final.mdl ```

댓글 없음:

댓글 쓰기