2019년 7월 14일 일요일

음성인식 메모(kaldi) 16 - Backpropagation Dan's DNN(nnet2)

「原作者へ」

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

아래 포스트의 번역입니다.

http://work-in-progress.hatenablog.com/entry/2018/06/17/100622


이전편에 이어서

Backpropagation에 의한 파라미터 업데이트를 따라가보자.

Softmax의 출력결과(확률)이 아래와 같이 있다고 치자(정답이 되는 pdf-class만 표시).

(소수점 여섯째자리부터는 버림)

확률의 역수에 weight을 곱한 것을 구하자(여기서 weight는 전부 1)

(소수점 셋째자리부터 버림)

확률이 낮은 것일수록 값(=오차)는 커진다.

이 값을 가지고 이전 component의 오차를 구해가면서 파라미터를 업데이트해간다.

Propagation에 의한 프레임의 전이가 아래와 같이 있다고 치자.

(splice、FixedAffine(LDA변환)이 끝난 상태부터 시작)

< 그림의 설명 >

주황색 원은 프레임의 데이터를 나타냄
" A x B"는 데이터의 행 수 A, 열 수 B를 나타냄("mini"는 미니배치 사이즈, 여기선 64)
화살표는 각 component를 나타냄

error backpropagation(1)

일단은 「Softmax」 component부터

nnet2/nnet-component.cc

in_deriv->DiffSoftmaxPerRow(out_value, out_deriv);

< 그림의 설명 >

녹색의 원이 프레임의 오차 데이터를 나타냄 (차원수는 주황색 원과 같음)
그림 내의 1이 소스의 out_value에 해당
그림 내의 2가 소스의 out_deriv에 해당
그림 내의 3이 소스의 in_deriv에 해당

error backpropagation(2)

이어서, 「AffineComponentPreconditionedOnline」 component.

nnet2/nnet-component.cc

in_deriv->AddMatMat(1.0, out_deriv, kNoTrans, linear_params_, kNoTrans, 0.0);

< 그림의 설명 >

그림 내의 1이 소스의 out_deriv에 해당
그림 내의 2가 소스의 linear_params_"(모델의 파라미터 부분)에 해당
그림 내의 3이 in_deriv에 해당

또한, input layer와 output 오차를 가지고 모델의 파라미터를 업데이트 함

error backpropagation(3)

이어서, 「Normalize」 component.

nnet2/nnet-component.cc

cu::DiffNormalizePerRow(in_value, out_deriv, BaseFloat(1), false, in_deriv);

< 그림의 설명 >

그림 내의 1이 소스의 out_value에 해당
그림 내의 2가 소스의 out_deriv에 해당
그림 내의 3이 소스의 in_deriv에 해당

error backpropagation(4)

이어서, 「Pnorm」 component.

nnet2/nnet-component.cc

in_deriv->DiffGroupPnorm(in_value, out_value, out_deriv, p_);

< 그림의 설명 >

그림 내의 1이 소스의 in_value에 해당
그림 내의 2가 소스의 out_value에 해당
그림 내의 3이 소스의 out_deriv에 해당
그림 내의 4가 소스의 in_deriv에 해당

error backpropagation(5)

이어서, 「AffineComponentPreconditionedOnline」 component.

nnet2/nnet-component.cc

in_deriv->AddMatMat(1.0, out_deriv, kNoTrans, linear_params_, kNoTrans, 0.0);

< 그림의 설명 >

그림 내의 1이 소스의 out_deriv에 해당
그림 내의 2가 소스의 linear_params_"(모델의 파라미터 부분)에 해당
그림 내의 3이 in_deriv에 해당

마찬가지로, input 값과 output 오차를 가지고 모델의 파라미터를 업데이트 한다.

댓글 없음:

댓글 쓰기