읽은 기간: 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 사이즈가 커질수록 성능이 향상
댓글 없음:
댓글 쓰기