2018년 8월 22일 수요일

180822 Automatic Speech Recognition - A Deep Learning Approach 요약

읽은 기간: 2018.08.19 ~ 08.21

필요한 챕터만 읽음.

읽지 않은 챕터: 1, 5, 13, 14

소챕터 당 가능한 한 3줄 이내로 요약.

읽었지만 굳이 요약하지 않아도 되는 내용은 쓰지 않음

2 Gaussian Mixture Models

2.3 Parameter Estimation

  • (무슨 말인지 이해 안됨) EM 알고리즘은 (데이터가 충분히 많은 경우) 내부적으로 확률벡터(누구?)에 대해 constraint을 주고 샘플 사이즈가 충분히 크면 covariance가 positive definite이 됨. 다른 알고리즘은 외부적으로 constraint를 줘야 함
  • 수렴 빠름
  • 초기값 세팅에 따라 결과가 달라질 수 있음. local maxima 문제 있음. peak가 몇개인지도 모름. 그래서 처음에 peak 하나짜리로 출발한다음에 점점 쪼개는 해결책이 있음

2.4 Mixture of Gaussians as a Model for the Distribution of Speech Features

  • 수학적으로 기술하기 쉬움(이건 정말 중요함)
  • non-linear manifold에 있는 데이터들에 대해 적합하지 않음
  • 음성은 적은 수의 파라미터로 만들어지는(변조되는) dynamic system. 실제로는 낮은 차원에 있음

3 Hidden Markov Models and the Variants

3.1 Introduction

  • uniformly spaced discrete time에 대해 사용

3.2 Markov Chains

  • markov chain은 discrete-state markov sequence markov sequence
  • state-occupation 확률이 있는데 이건 recursively 계산되는 것으로 무한 번 계산했을 때 HMM의 initial transition 확률에 해당.
  • state-occupation 확률 덕분에 수학적으로 기술하기 까다로운 것들도 그냥 비벼서 다 기술 가능하다는 장점이 있음.

3.3 Hidden Markov Sequences and Models

  • 그냥 markov chain은 관찰 가능함. 쓰면 output을 만든 state가 그대로 보이기 때문에 state에 randomness가 없음.
  • 그래서 안보이게끔 한층 더 넣어서 HMM 만듬

3.4 EM Algorithm and Its Application to Learning HMM Parameters

3.4.1 Introduction to EM Algorithm

  • 관찰 데이터에 대해 local optimum likelihood를 줌
  • 좋은 초기상태가 필요함
  • log likelihood는 closed-form으로 기술가능한데 expectation은 closed-form으로 만들기 어려움

3.6 The HMM and Variants for Generative Speech Modeling and Recognition

3.6.1 GMM-HMMs for Speech Modeling and Recognition

  • context-dependency 중요함(critically)

3.6.2 Trajectory and Hidden Dynamic Models for Speech Modeling and Recognition

  • (무슨 말인지 이해 안됨) GMM-HMM 좋은데 piece-wise stationary assumption이 있다는 단점이 있음
  • (그 다음 부분은 무슨 HMM 변종들을 잔뜩 설명하고 있는데 패스)

4 Deep Neural Networks

4.3 Practical Considerations

4.3.1 Data Preprecessing

  • normalization 빼먹지 말고 해라
  • (이건 정확하지 않은 말인 것 같은데?) 발화별 MFCC에 CMN적용하는 건 acoustic channel distortion을 줄임
  • (CMN이랑 standardization이랑 어떻게 다른지?) feature의 각 차원에 대해서는 보통 standardization(zero-mean unit-variance) 적용. 이건 global transformation

4.3.2 Model Initialization

  • DNN은 매우 비선형 모델, 파라미터 non convex, 초기값 매우 중요.
  • 그래서 weight들이 sigmoid 선형기울기 내에서 움직이도록 초기값을 0~1 사이로 해줘야 함.
  • 랜덤으로 초기화 하는 것도 중요함. 랜덤으로 안하면 만약의 경우 weight가 전부 1일때 그냥 아래층하고 똑같아지기 때문 -> symmetry breaking을 위함

4.3.4 Dropout

  • 각 뉴런이 서로에게 덜 의존하도록 해줌, 트레이닝 데이터에 노이즈를 추가하는 것과 같은 효과
  • DNN의 capacity를 줄임 -> generalization
  • training 시 매번 랜덤 monte carlo 샘플링 돌려야 해서 속도가 많이 느려질 수 있음 -> gaussian approximation(?)을 사용(무슨 샘플링의 일종인듯?)

4.3.5 Batch Size Selection

  • batch training(데이터 전체에 대해 한번씩 모델 업데이트 하는것) 하면 gradient의 variance가 안정적이긴 한데 느림
  • SGD로 하면 unbiased이고 좋은데 샘플 하나씩 해야 되서 gradient variance가 커져서 수렴이 잘 안됨(noisy). 물론 그래서 local optima를 빠져나올 수 있기도 함.
  • minibatch 써라

4.3.7 Momentum

  • convex condition에서 optimal이라고 알려짐 (하지만 이건 DNN인데…? momentum이 정말 효과가 있는지 비판하는 논문도 있음)
  • 수렴 속도 향상됨. oscillation 문제 줄여줌
  • mini batch size에 따라 조정해줘야 함(뭘?)

4.3.8 Learning Rate and Stopping Criterion

  • 샘플 수에 따른 적절한 rate가 있음
  • criterion이 한번 뛸 때마다(fluctuation이 있을 때마다) 배치사이즈를 줄여준다든지 하는 것이 필요

6 Deep Neural Network-Hidden Markov Model Hybrid Systems

6.1.1 Architecture

  • DNN이 senones(triphone 같은 것들)을 바로 모델링 하게끔 학습시키는게 젤 좋음.

6.1.3 Training Procedure for CD-DNN-HMMs

  • 모델 업데이트 시 likelihoo 식을 보면 성능이 올라가긴 하는데 개별 문장 하나에 대해 더 likelihood가 올라가는지는 장담못함.

6.2 Key Components in the CD-DNN-HMM and Their Analysis

  • CD-DNN-HMM 은 GMM의 likelihood 를 DNN의 posterior로 대체한 것이고, 그 이외엔 전부 같음.

6.2.2 Modeling Monophone States or Senones

  • senone을 바로 모델링 하면 DNN 자체의 성능은 좀 떨어질 수 있지만, overfitting을 방지할 수 있고 HMM하고 결합 시 더 성능이 좋아짐

6.2.6 Better Alignment Helps

  • 이미 트레이닝 된 DNN-HMM에서 나온 alignment로 새로운 DNN-HMM을 트레이닝하면 더 성능이 좋아짐(…)

7 Training and Decoding Speedup

7.1.1 Pipelined Backpropagation Using Multiple GPUs

  • 병렬화 제대로 안하면 minibatch 방식으로 모델 업데이트 할 때 bandwidth를 잡아먹어서 안좋음. gradient가 PCIe-2 limit(6GB)를 넘어감(…)
  • minibatch 사이즈를 작게 하면 업데이트를 많이 해야 해서 안 좋고, 크게 하면 batch를 크게 봐야 해서 안좋음(왜?). 적절하게 조정해야 함

7.1.4 Reduce Model Size

  • DNN weight는 low rank임. 마지막 layer가 전체 계산의 50%를 담당함(전체 계산이라는게??).
  • 적은 output target만 활성화됨. 활성화된 output들은 서로 correlated임.
  • low rank factorization으로 layer 하나를 linear layer + non-linear layer로 만듬. 이렇게 하면 파라미터 수가 줄어듬

7.2 Decoding Speedup

  • 실시간 디코딩 매우 챌린지함.
  • quantization + parallel computing + sparse DNN + low-rank factorization + multiframe DNN + SSE + lazy evaluation 전부 사용해봄. (multiframe DNN?)

7.2.2 Sparse Network

  • 대부분의 connection은 작은 weight를 가지고 있음. 70% 정도가 0.1보다 작음
  • (잘 모르겠음 패스)

7.2.3 Low-Rank Approximation

  • 보통 DNN weight나 그것들의 singular value는 0에 가까움. (SVD등을 했을 시) 크기 순으로 봤을 때 40% 정도의 singular value들이 전체 singular value의 80%를 차지함(크기를 말하는것 같음)
  • 모델 사이즈를 30%로 만들어도 성능 저하가 크게 없었음

7.2.4 Teach Small DNN with Large DNN

  • 제목 그대로…
  • criterion은 여러가지가 있을 수 있는데, 두 모델 간의 DL divergence를 최소화 한다든지 등
  • unlabeled data도 도움됨(어차피 큰 모델의 output을 사용하면 되니까…)

7.2.5 Multiframe DNN

  • 어차피 현재프레임이나 옆 프레임이나 다 비슷하니까 한번에 여러 프레임을 맞추는 모델을 만들자
  • 속도 빨라짐. (프레임을 한번에 많이 맞추려 할수록 약간씩 성능 저하가 있음)

8 Deep Neural Network Sequence-Discriminative Training

  • 음성인식은 사실 sequence classification임

8.1 Sequence-Discriminative Training Criteria

  • cross entropy(CE) criterion은 사실 expected frame error를 줄이고 있었음

8.1.1 Maximum Mutual Information (이건 좀 중요해서 여러 줄을 할애)

  • MMI loss = log{(post(label 문장 | observed) / marg(post(한 문장 | observed)}
  • MMI loss의 gradient = (모든 발화 * 시간 만큼 sum)(error signal * (irrelvant term))
  • 여기서 error signal을 어떻게 계산하느냐가 중요
  • error signal = k * [{1 - (DEN of label)} + sum{-(DEN of others)}] * (log posterior from DNN)
  • marg: marginalization을 줄여서 쓴 것
  • k: acoustic scaling factor
  • DEN of xx: [marg{post(xx를 가지는 모든 문장 | observed)}] / [marg{post(모든 문장 | observed)}]
  • (주의: 자의적 해석이 있습니다)
  • 실제로 '모든 문장'에 대해 marg. 계산을 할 수는 없으므로, decoded speech lattice 내에 있는 문장에 대해서만 함.
  • (이것들이 전부 sum 형태로 가능한 이유는 log를 붙여서임. log 참 좋다)

8.1.2 Boosted MMI

  • MMI loss 의 분모에 exp(-b * A(w,w_m)) 을 붙임. A(.,.)는 Accuracy라 하고, (# correct phones - # insertions) 임.
  • A(.,.)는 phone으로 하든 state로 하든 word로 하든 상관 없음

8.1.3 MPE/sMBR

  • MBR loss = marg{post(어떤 문장, o) * A(어떤 문장,label 문장)} / marg{post(또 어떤 문장)}
  • 여기서 '어떤 문장' 같은게 두개나 나와서 이해를 못하고 패스
  • state 기준으로 accuracy를 보면 A(w,wm)은 w와 wm 간에 같은 state가 몇개나 있는지 단순히 센 것
  • MBR loss gradient의 error signal = k * DEN' * {A'(r) - A'}
  • 여기서 DEN'과 A'(r), A'는 위에서 등장한 것들과 다름.
  • 더 구체적으로 써보려고 했는데 말이 늘어지고 너무 복잡해져서 그냥 수식을 볼 것을 권장드립니다

8.1.4 A Uniformed Formulation

  • loss 의 numerator lattice는 reference transcription에 해당, denominator는 후보 hypothesis들이라 볼 수 있음

8.2 Practical Considerations

8.2.1 Lattice Generation

  • sequence-discriminative 학습은 GMM-HMM lattice를 쓰든 DNN-HMM의 그것을 쓰든 성능이 좋다

8.2.2 Lattice Compensation

  • 결국 lattice를 어떻게 준비해놓느냐가 중요
  • 그런데 lattice에 silence가 많이 들어있으면 괜히 training epoch, deletion err만 증가. 심지어 overfitting 땜에 epoch 돌지도 못하고 멈춤
  • demoninator lattice의 silence frame를 적절히 제거하면 epoch도 많이 돌고 성능 올라감

8.2.3 Frame smoothing

  • 이것도 lattice를 미리 가공하는 건데 잘은 모르겠음.
  • L1, L2 regularization 도움 안됨

8.2.5 Training Criterion Selection

  • MMI, BMMI, MPE, sMBR 다 비슷비슷함. MMI가 가장 구현이 쉬우므로 이것 먼저 해보길 바람 (…)

9 Feature Representation Learning in Deep Neural Networks

9.1 Joint Learning of Feature Representation and Classifier

  • DNN 이전엔 domain knowledge로 feature 잘 가공하면 그게 장땡이었음

9.2 Feature Hierarchy

  • 대략 상위레이어로 갈 수록 대부분의 뉴런이 1 또는 0에 수렴. 그런데 0으로 수렴하는 경우가 훨씬 많음(즉 sparse feature를 만듬)
  • (왜 그렇지?) 상위 레이어는 invariant, discriminative인데, 이는 non-linear 변환을 많이 적용한 결과임
  • weight norm 측면에서 봐도 상위 레이어로 갈 수록 average norm은 작아지는데 maximum norm은 유지됨
  • 즉 discrimination 성능이 좋아짐(어느 한 차원에 대해 확실히 구별)
  • normalization -> filterbank -> non-linear -> pooling
  • filterbank: 높은 차원으로 projection
  • non-linear: sparsity에 robust, saturation
  • pooling: invariant feature 추출, 차원 축소

9.5.2 Robustness Across Speaking Rates

  • speaking rate: 얼마나 빨리 말하는지 시간 당 비율
  • 너무 빨리 말하거나 너무 느리게 말하면 WER이 올라감. 영어 기준으로 (7~9 phones / sec) 이 가장 인식 성능이 좋음 (데이터셋 때문인가?)

9.6 Lack of Generalization Over Large Distortions

  • mixed-bandwidth 방식(한 발화에 대한 16kHz, 8kHz feature 합치는 등)으로 학습 시키면 인식 성능이 더 좋음

10 Fuse Deep Neural Network and Gaussian Mixture Model Systems

10.2 Fuse Recognition Results (여러 음성인식 시스템 간 퓨전)

  • 대표적인게 ROVER와 SCARF가 있음. (SCARF는 어려워서 패스). ROVER는 2 step(alignment, voting)으로 되어 있음.
  • ROVER step 1: 여러 시스템에서 예측한 단어 시퀀스에 대해 word transition network를 만듬(겹치는 단어를 고려해서 시간 순으로 정렬)
  • ROVER step 2: transition network 내의 시점 별로 competing 단어 중 단어의 중복 수를 세서 하나를 고름
  • 뭔가 굉장히 나이브한테 성능이 좋음

10.2.3 MBR Lattice Combination

  • 각 시스템에서 나온 여러 Lattice들을 결합해서 하나의 Lattice를 만듬

11 Adaptation of Deep Neural Networks

11.4.3 Reducing Per-Speaker Footprint

  • Adaptation 할 때마다 새로운 모델을 저장하면 넘므 용량이 크니까 delta(변한 부분)만 저장하자. delta라 해도 matrix가 너무 크니까 SVD로 쪼개서 저장하자. 원래 delta의 10% 사이즈로 만들어서 저장해도 성능 저하가 별로 없음(;;;)
  • 쪼갤 layer를 하나 정하고, layer의 weight에 대해 SVD로 (U, S*V) 형태의 matrix 두개를 준비하고 아래처럼 레이어를 구성
  • S*V -> linear activation -> U
  • (실제로는 V가 아니라 V^T인데 편의상 V로)
  • adaptation 시킬 squared mat 하나를 준비해서 S*아래처럼 레이어를 다시 구성
  • S*V -> linear activation -> squared mat -> linear activation -> U
  • 다른 matrix는 고정시키고 adaptation set에 대해 squared mat만 학습시키면 효율적으로 adaptation 이 됨.
  • 이 방법 말고 SVD 결과로 나오는 U S V 중 S를 학습시키는 것도 좋음(S는 diagonal이라 파라미터 수가 거의 없음)

11.6.1 KL-Divergence Regularization Approach

  • adaptation이 정말 효과가 있는가? -> adaptation set 사이즈가 커질수록 성능이 향상

댓글 없음:

댓글 쓰기