본문 바로가기

audio/audio generation (tts)

[논문리뷰] Parallel WaveNet: Fast High-Fidelity Speech Synthesis (ICML18)

논문제목: Parallel WaveNet: Fast High-Fidelity Speech Synthesis
저자: Aaron van den Oord, Yazhe Li, Igor Babuschkin, Karen Simonyan, Oriol Vinyals, Koray Kavukcuoglu, George van den Driessche, Edward Lockhart, Luis C. Cobo, Florian Stimberg, Norman Casagrande, Dominik Grewe, Seb Noury, Sander Dieleman, Erich Elsen, Nal Kalchbrenner, Heiga Zen, Alex Graves, Helen King, Tom Walters, Dan Belov, Demis Hassabis
소속: DeepMind
발표: ICML 2018

논문: https://arxiv.org/abs/1711.10433

웹페이지: https://www.deepmind.com/blog/high-fidelity-speech-synthesis-with-wavenet

 

- WaveNet의 느려도 너무 느린 생성속도를 개선함.
- 속도빠르기로 유명한 flow방식 중 IAF[Kingma16]를 이용하는데, IAF network를 WaveNet network와 최대한 동일하게 만들기 위해 distillation [Hinton15]을 사용 (Probability Density Distillation라고 이름 붙임)
- 그러니 엄청 빨라졌음. 리얼타임보다 20배 이상. 
- (이때 당시) Google Assistant에 탑재됨

 

Story

WaveNet[Oord16]은 그전까지 없는 수준으로 퀄리티 있는 사운드를 만들어냄. 훈련할 때는 병렬로 할 수 있지만 생성할 때는 한번에 샘플 하나씩 만들고 병렬처리도 할 수 없기 때문에 느려도 너무 느림ㅠㅜ

그러는 중 Inverse autoregressive flows (IAFs)[Kingma16]라는 것이 나왔는데 autoregressive model의 dual formulation 버전으로 샘플링을 병렬로 할 수 있게 함. 하지만 인퍼런스는 sequential하고 느림. 그래서 이 둘을 잘 섞어보면 어떨까 생각이 듬. WaveNet은 훈련이 빠르고 IAF는 샘플링이 빠르기 때문. 그러면 좀 빠른 WaveNet을 만들 수 있을 것 같은데?

 

WaveNet

Autoregressive network이란 복잡한 고차원 데이터를 conditional distribution의 곱으로 표현하는 방식:

여기서 conditional distribution은 netral network으로 모델링됨. 즉 인풋으로 $t$이전에 데이터$(x_{<t})$가 들어오면 $x_t$의 distribution이 출력되는 방식.

WaveNet은 causal convoution을 이용하여 순서대로 쭉 $p$를 생성하는 방식. 이러한 causal convolution은 병렬로 처리할 수 있기 때문에(어차피 데이터는 다 있으니) RNN등과 비교하여 훈련을 빠르게 할 수 있음. 하지만 생성할 때는 $x_t$는 한번에 하나씩 순서대로 생성되야 하기 때문에 느림. autoregressive model은 항상 이런게 문제임;

 

raw audio data에서는 long-term dependency를 모델링하는 것이 중요한데, 일반 방법을 쓰면 네트워크를 너무 깊게 만들어야 함. 그대신 dilated causal convolution을 사용하면 레이어가 추가될 때마다 receptive field를 exponential하게 증가시킬 수 있음. 그리고 gated activation functions도 사용함. 더 자세한 설명은 원본 논문 혹은 [논문리뷰]를 참고. 

 

Higher Fidelity WaveNet: 그 사이에 WaveNet을 좀 개선했음. 원본에서는 8비트 오디오를 사용했는데 여기서는 16비트 오디오를 사용. 그러면 categorical distribution의 차원이 65,536으로 늘어나버리는데, 이를 discretized mixture of logistics distribution[Salimans17]를 사용하여 효율적으로 모델링함. 그리고 sampling rate을 16kHz에서 24kHz로 늘렸음. 이를 위해서 dislated convolution의 필터 사이즈를 2에서 3으로 늘려 더 넓은 receptive field를 갖게 했음. 

 

Parallel WaveNet

Inverse-autoregressive flows(IAFs)[Kingma16]은 flow기반 생성 모델 중 하나인데, 고차원 데이터도 parallel하게 샘플링할 수 있는 방법을 제안했음. 간단하게 말해 flow 모델들은 어떤 복잡한 distribution $p_X(x)$를 invertible non-linear transformation $f$를 통해 간단한 distribution $p_Z(z)$로 변형하게 됨(그리고 다시 돌아갈 수 있음). $p_X$와 $p_Z$ 사이의 유명한 관계는 다음과 같음:

$|dx/dz|$는 $f$의 Jacobian의 determinant. $f$는 invertible하면서도 Jacobian determinant가 계산하기 쉬운 모양으로 선택됨. IAF의 경우에는 $x_t$는 $p(x_t | z_{ \leq t})$로 모델링됨. Jacobian은 triangular 모양으로 만들어 간단하게 계산되게 함. 그러면 그냥 diagonal 값들을 곱하면 됨:

먼저 랜덤 샘플은 $z \sim logistic(0,I)$에서 샘플링되고 아래 transformation이 적용됨

훈련된 네트워크에서는 $x$ 샘플과 함께 $\mu$랑 $s$도 함께 출력하게 됨. $\mu$랑 $s$는 logistic distribution의 파라미터들이기 때문에, 다음과 같이 모델링 될 수 있음

$\mu$랑 $s$는 어떤한 autoregressive 모델이어도 가능함. 따라서 오리지널 WaveNet을 사용함. 

 

normalizing flows는 일반적으로 정확한 스트럭쳐를 모델링 하기 위해서는 여러번 iteration을 돌려야 하지만, IAF에서는 한번만에도 중요한 구조를 캐치할 수 있음. 하지만 4번 정도 하면 더 정확한 퀄리티로 모델링 할 수 있음. 따라서 네트워크를 4개 쌓아서 사용함. 가장 첫번째 네트워크는 white logistic noise: $x_0 = z$를 인풋으로 받고 각 네트워크의 아웃풋은 다음 네트워크의 인풋으로 들어감.

그러면 마지막 distribution은 다음과 같이 모델링 될 수 있음.

 

Probability Density Distillation

IAFs 네트워크는 feed-forward 모델이기 때문에 매우 빠름. 이제 이 모델을 훈련해야 하는데... 일반적으로 maximum likelihood를 써서 훈련시키는 것은 너무 시간이 많이 걸리는 일임. 그래서 다른 방법이 필요한데, neural network distillation [Hinton15] 방법을 한번 써보겠음. 이미 훈련완료된 WaveNet이 'teacher'로, 그리고 parallel WaveNet(=IAFs network)이 'student'가 되어 난 선생이고 넌 학생이야 선생님이 학생을 가르치는 방식으로 훈련하는 것임. normalized density model을 다룬다는 의미에서 Probability Density Distillation이라는 이름을 붙임(Probability Density Estimation 패러디정도의 느낌). 

 

distillation할 때 쓰이는 로스, Probability Density Distillation loss는 학생$P_S$과 선생$P_T$의 KL 디스턴스로 정의함

학생의 distribution을 선생의 distribution과 같게 만드는 것이 최종 목표($D_{KL}=0$). [Hinton15]에서는 둘간의 엔트로피로 로스를 정의했지만, 이렇게 KL디스턴스로 나타내는 것이 더 좋음. $H(P_S, P_T$), 즉 cross-entropy는 사실 둘간의 샘플을 같게 만드는 MAP(maximum a posterior) 형태의 estimation임. 하지만 이러면 distribution의 mode에서만 데이터를 뽑아낼 수 있음. 낼 수 있다는 단점이 있음. KL거리를 사용해 $P_S$의 엔트로피까지 같이 고려해야지, 즉 두 사이의 distribution을 전체적으로 고려해야지 제대로된 결과를 얻을 수 있음.

학생이 생성한 샘플 $x$를 선생이 평가하게 되고, 학생은 최대한 선생님과 같은 distribution과 비슷하게 학습되려고 노력함. 즉 선생님과 유사한 샘플을 생성하는 log-likelihood를 최대화하면서도 자신의 엔트로피 또한 최대화하려고 훈련함. 크로스 엔트로피 계산에 필요한 샘플링은 모두 병렬로 처리할 수 있기 때문에 효율적으로 학습이 가능함.

 

Additional loss terms: 사실 Probability Density Distillation 하나만으로는 고퀄 오디오를 만들어내지는 못함. 고로 아래에 있는 로스들을 더함

1) Power loss: 생성되는 데이터의 frequency bands의 power가 실제 데이터와도 비슷해야 함. 두 데이터간의 STFT의 각 값들의 차이를 로스로 설정하는데, 각 frequency의 power를 평균내서 유클리디안 거리로 계산해도 거의 차이가 없었음.

2) Perceptual loss: 오디오에서 phone을 예측하는 classifier를 만들어서 이를 이용하여 보다 high-level feature를 계산할 수도 있음. 이러면 발음을 더 정확하게 만들 수 있음. classifier의 feature map들간의 유클리디안 거리와, Gram matrices[Johnson16]간의 유클리디안 거리를 이용하는 방법을 실험해보았는데 두 번째가 더 나았음.

3) Contrastive loss: contrastive distillation loss는 아래와 같이 정의됨

즉 같은 조건($c_1$)에서는 최대한 거리가 가깝게, 다른 조건($c_2$)에서는 최대한 거리가 멀도록 학습시킴. 다른 조건은 랜덤하게 선택. negative에 대한 웨이트는 0.3정도.

 

Experiments

liquistic features(phonetic + duration)과 피치($F_0$)를 조건으로 주는 TTS 모델로 실험. teacher WaveNet 네트워크는 10개씩 쌓인 dilated residual block 3개로 구성된 30 레이어 모델. output distribution에서는 10개의 MoL(mixure of logistics)로 구성. student network의 아키텍쳐는 같지만 스킵커넥션이 없고 인풋과 아웃풋이 다름. 앞에서 말한 것처럼 4개의 flow (10+10+10+30레이어)로 구성. 히든레이어도 더 적음.

 

Audio Generation Speed: 원본모델(autoregressive)은 1초당 172 timestep정도 계산되었는데 distilled 모델은 500,000이상의 timestep을 보여주었음. 많이 빠름.

 

Audio Fidelity: 오디오 퀄리티 비교. WaveNet이 기존 다른 모델(LSTM, HMM)보다 더 좋은 점수를 보여주는 것을 확인하고, Distilled 모델의 차이도 거의 없다는 것을 알 수 있음. 그리고 위에 소개한 약간의 개선(24kHz, 16bit PCM)로 인해 품질 개선도 더 이루어졌다는 것도 확인.

 

 

Multi-speaker Generation: speaker id를 조건으로 줘서 여러명의 보이스를 만들 수도 있음(언어도 다르게 할 수 있음). 그러기 위해서 레이어를 약간 더 추가했음(각 flow마다 30레이어). LSTM(parametric)과 HMM(concatenative)와 비교한 결과 WaveNet이 가장 좋음.

Ablation Studies: 여러 로스들이 정말 좋은가를 봄. MOS로는 별 차이가 없어서 A/B 테스트형식으로 비교해봄. KL만으로는 너무 꼬져서 리포팅하지 않았고, Power+Perceptual 까지 추가하면 품질이 확실히 좋아졌음. contrastive를 넣으면 성능적인 차이는 별로 없었지만 덜 노이지한 오디오가 만들어졌음. 마지막으로 flow를 싱글로 하면 MOS가 4.21였는데 4번을 돌리니 4.41로 올라갔음.

  

WaveNet의 멋진 진화! 오디오 분야에서도 flow모델이 전면적으로 등장하게 되는 계기.
Google Assistant에서 사용되었다니 제법 간지...

 

  • [Hinton15] Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.
  • [Kingma16] Diederik P Kingma, Tim Salimans, and Max Welling. Improving variational inference with inverse autoregressive flow. arXiv preprint arXiv:1606.04934, 2016.
  • [Johnson16] Justin Johnson, Alexandre Alahi, and Li Fei-Fei. Perceptual losses for real-time style transfer and super-resolution. In European Conference on Computer Vision, pages 694–711. Springer, 2016.
  • [Oord16] A.van den Oord, S.Dieleman, H.Zen, K.Simonyan, O.Vinyals, A.Graves, N.Kalchbrenner, A.Senior, K.Kavukcuoglu. WaveNet: A generative model for raw audio. arXiv preprint arXiv:1609.03499, 2016. [논문리뷰]
  • [Salimans17] Tim Salimans, Andrej Karpathy, Xi Chen, and Diederik P Kingma. Pixelcnn++: Improving the pixelcnn with discretized logistic mixture likelihood and other modifications. arXiv preprint arXiv:1701.05517, 2017.