「原作者へ」
連絡先を存じ上げませんでしたので、不本意ながら無断で翻訳しました。
正式に翻訳を許可されたいです。
gogyzzz@gmail.comでご連絡ください。
아래 포스트의 번역입니다.
http://work-in-progress.hatenablog.com/entry/2018/04/02/214421
DNN모델의 학습 과정을 따라가보자.
학습에는 「nnetbin/nnet-train-frmshuff」 커맨드를 사용한다.
nnetbin/nnet-train-frmshuff \
--minibatch-size=128 \
--randomize=false \
scp:train/feats.scp \ <--input이 되는 feature
ark:mosimosi_ali2post.ark \ <-- 정답 파일
nnet.init \ <-- 모델
dbn_dnn_iter1 <-- 업데이트 후의 모델
옵션으로 아래와 같이 지정. 처리의 흐름을 파악하는 것이 목적이므로 randomize는 off로 한다.
mini-batch의 사이즈는 「128」(=2의 7승, 198프레임에 대한 coverage는 65%)
randomize은 사용하지 않는다(input이 되는 MFCC의 프레임을 shuffle하지 않는다)
초기 모델(nnet.init)은 아래의 조건으로 생성
- input layer : 13 (MFCC13차원)
- output layer : 6 (pdf-id의 수)
- hidden layer(중간층)의 수 : 1
- hidden layer의 neuron 수 : 256
Propagate(Forward)의 흐름은 아래 그림과 같다.
그림의 의미
- mini : mini-batch size(여기 예시에서는 「128」)
- prop_buf : forward-pass buffers
- transpose : transpose 행렬을 사용
그림의 "prop_buf[5]"가 output layer에 있어서의 activation(softmax)의 출력이 된다.
값은 아래와 같이 나타났다. 각 프레임에서 가장 확률이 높은 것을 녹색, 정답에 해당하는 것은 빨간색으로 표시하였다.
한편 정답이 되는 Matrix는 아래 그림과 같다.
이것은 "bin/ali-to-post" 커맨드의 출력 결과인 "mosimosi_ali2post.ark"에서 생성된 것
mosimosi_ali2post.ark
utterance_id_001 [ 3 1 ] [ 3 1 ] [ 3 1 ] [ 3 1 ] [ 3 1 ] ...(이후 193개 생략)
2개의 Matrix의 차를 얻자
이것이 back propagation의 input이 된다.
Propagate(backward)의 흐름은 아래 그림과 같다(2개의 Matrix의 차를 구한 것은 "backprop_buf[5]"에 해당)
그림의 의미
- backprop_buf : backward-pass buffers
모델의 파라미터 업데이트에 사용되는 gradient를 구해보자.
그림의 의미
linearitycorr : gradient
gradient
이것에 learning rate 「0.008」을 곱한 것을 업데이트 전의 파라미터에 빼서 파라미터를 업데이트한다.
댓글 없음:
댓글 쓰기