본문 바로가기

audio/audio generation (tts)

[논문리뷰] ClariNet: Parallel Wave Generation in End-to-End Text-to-Speech (ICLR19)

논문제목: ClariNet: Parallel Wave Generation in End-to-End Text-to-Speech
저자: Wei Ping, Kainan Peng, Jitong Chen
소속: Baidu Research
발표: ICLR 2019
논문: https://arxiv.org/abs/1807.07281
오디오샘플: https://clarinet-demo.github.io/

 

- ClariNet
- [Oord18] 보다 좀 더 단순한 방식으로도 WaveNet[Oord16]의 생성 속도를 높일 수 있다 것을 보임. 
- WaveNet의 아웃풋과 IAF의 아웃풋을 단순 가우시안으로 모델링해도 상관없었음. 이렇게 하면 distill할 때 샘플링하지 않고 closed-form으로도 가능함. 
- 사실 좀 별도의 내용이긴 한데 End-to-end 방식의 TTS 아키텍쳐도 제안함. 이 저자들 사실 Deep Voice 시리즈 만든 사람들(바이두 리서치)인데 자기들의 보코더도 완성이 되었으니 이를 전부 합쳐서 전체 시스템을 만듬. 그렇게 하니 따로따로 하는 것보다 더 성능이 좋았음.

 

Story

WaveNet[Oord16]이 좋은 음성합성 결과를 보여주지만 autoregressive 방식이기 때문에 훈련은 빠르지만 오디오 생성이 너무 느림. 이를 해결하기 위하여 [Oord18]에서는 teacher-student framework을 이용하여 WaveNet으로부터 parallel feed-forward network을 distill하는 방식을 소개함. 여기에서 teacher WaveNet은 mixture of logistics (MoL) distribution을 output으로 사용하고, student에서는 IAF[Kingma16]를 기반으로한 logistic distribution을 사용함. 이 둘 사이의 KLD를 최소화하는 방식으로 두 모델이 비슷하게 훈련되는데 이를 위해서 Monte Carlo 샘플링을 하게 됨. 근데 선생도 학생도 모두 Gaussian 분포를 사용하면 일이 간단해 지는 것이 아님? 근데 이게 될까?

 

Gaussian Autoregressive WaveNet

Parallel WaveNet[Oord18]에서는 autoregressive teacher-net의 결과를 MoL 분포로 나타내는데, 이는 그냥 categorical 분포로 나타내기에는 수가 너무 많기 때문(16비트라면 65,536개의 소프트맥스 결과)임. 그리고 사실 이 결과값들은 미분가능해야지 backprogration되기 때문에 continuous형태로 나타내야지 깔끔하기도 함.

 

그런데 여기서는 말이지.. WaveNet의 결과가 단 한개의 Gaussian 분포로 나타내도 된다고 주장하고 싶음. mixture of Gaussian도 아니고 어떻게 이게 가능하다고 묻고 싶겠지만 나중에 실험에서 보여주겠음. 즉 WaveNet에서 $\mu$과 $\sigma$만 잘 predict하면 샘플을 만들 수 있음.

파라미터 세타는 MLE로 구함. 여기에 계산을 좀 더 stable하게 하기 위해서 $log \sigma$를 -9에서 클립함. 그리고 16비트 샘플에 약간의 uniform noise를 추가함. 

 

Gaussian Inverse Autoregressive Flow(IAF)

Normalizing flows[Rezende15]는 간단한 분포($q(z)$; 보통 가우시안)을 invertible transformation $f$을 가해서 복잡한 모델($q(x)$)로 변경하고 또 왔다갈 수 있는 방법을 말함. $q(x)$와 $q(z)$와의 관계는 다음과 같음

 

저기서 Jacobian의 determinant을 계산하는데 시간이 많이 걸린다는 문제가 있는데 IAF[Kingma16]에서는 autoregressive network을 사용해서 이 계산을 간단하게 하는 방법을 제안함. autogressive 특성상 저 행렬이 triangular형태를 띄게 되고 그러면 계산은 엄청 간단해짐. 그냥 diagonal 값들만 곱하면 됨.

Parallel WaveNet에서는 선생님의 MoL 분포와 맞추기 위하여 학생은 하나의 logistic 분포를 사용함. 그런데 이 논문에서는 학생의 분포를 가우시안이라고 가정함. 그래서 transformation은 $\mu$(shifting function)와 $\sigma$(scaling function)으로 구성됨.

$x$의 likelihood를 구하기 위해서는 위의 공식들을 잘 정리하면 됨.

그런데, inverse transformation을 생각해보면,

이게 autoregressive방식이어서 그냥 이 방식대로 훈련한다면 매우 느릴 수 밖에 없음. 

 

일반적으로 normalizing flow에서 transformation은 여러 단계로 이루어짐. 따라서 처음에는 gaussian에서 샘플링한 white noise를 샘플로 넣고 계속 transformation을 적용해 더 복잡한 모양의 분포를 만듬. 보통 4-6 번 정도.

 

Regularized KL Divergence

[Oord18]에서는 IAF를 빨리 훈련시키기 위하여 일반적인 maximum likelihood 방식이 아니라 distillation 방식을 제안함. 이미 훈련된 WaveNet과 비슷한 IAF 학생 네트워크를 KLD를 써서 비슷하게 만드는데, 여기서 logicstic 분포(학생)와 MoL 분포(선생) 간의 KL거리를 직접 계산할 수 있는 방법이 없기 때문에 샘플링 방식을 이용하게 됨. 

 

하지만 이 둘 모두 가우시간 분포이라면 세상 편해짐. 두 가우시안 사이의 KLD는 이미 널리 알려져 있기 때문.

하지만 실제로 훈련할 때는 (특히 초기에) numerical problem이 일어날 수 있음. 왜냐하면 잘 훈련된 WaveNet의 분포를 보면 높은 픽이 있기 때문. 따라서 아래와 같이 regularzed버전의 KL을 사용하는 것이 더 좋음.

STFT Loss

knowledge distillation에서는 추가적인 로스도 고려해야 하는 것이 예의. [Oord18]에서는 STFT값의 평균 파워값에 대한 차이를 사용했지만, 여기서는 값들간의 차이를 이용함.

B는 frequency bin의 숫자(1025). 최종 로스는 단순히 이 두 로스의 합으로 구성됨.

 

Text-to-Wave Architecture

이제 end-to-end TTS를 위해서 완전한 text-to-wave 아키텍쳐를 제안하겠음. 기본적으로 Deep Voice 3(DV3)[Ping18]를 기반으로 함. 어차피 자기들이 만들었으니. 하지만 DV3에서는 textual feature들을 spectral feature로 바꾸고 이들이 다시 WaveNet같은 모델을 이용하여 웨이브폼으로 바뀌는 형식이었지만 여기서는 전체를 다 한번 훈련할 수 있는 end-to-end 방식을 제안하겠음.

 

사실 처음에는 DV3에서 얻어진 멜스펙트로그램을 바로 WaveNet에 넣는 방식으로 훈련시켜 봤는데 성능이 떨어졌음. 아마도 DV3가 훈련 초기에 멜을 제대로 생성을 못하는데 이것이 WaveNet 훈련까지 영향을 미치는 것 같았음. 그래서 아예 깔끔하게 통째로 훈련을 시켜서 WaveNet 안에도 멜이 아닌 hidden representation이 들어가도록 만들어 보는 것.

 

아키텍쳐는 총 4개의 컴포넌트로 구성됨

 

 

1) Encoder: convolutional encoder. textural feature(characters/phonemes)를 hidden representation으로 바꿈. DV3와 동일.

2) Decoder: causal convolutional decoder. encoder representation을 mel spectrogram으로 바꿈. 역시 DV3과 동일.

3) Bridge-net: convolutional block. decoder로부터 나온 hidden representation을 처리하고 linear spectrogram을 만듬.  frame-level에서 sample-level로 업샘플링도 함. 이건 새로 제안하는 것. 여기서 future temporal information도 사용할 수 있게 해서 non-causal 방식임.

4) Vocoder: Gaussian autoregressive WaveNet. bridge-net에서 나온 업샘플된 hidden representation으로 웨이브폼을 만듬. student IAF로 대체될 수도 있음.

 

전체 로스는 decoder, bridge-net, vocoder의 로스들의 합임. 

 

Experiment

데이터는 바이두 내부 데이터를 쓰는데 여성 스피커로 부터 얻어진 20시간 영어 스피치 데이터. WaveNet의 구조는 DV1[Arık17]과 유사하게 구성됨. AMT을 이용해서 MOS를 구함.

 

먼저 WaveNet에서 raw audio가 싱글 가우시안만으로도 잘 표현이 되는지 실험을 해봄. 이런저런 다른(더 복잡한) 분포로도 실험해봤는데 (신기하게도) 싱글 가우시안이 가장 좋았음. CLL은 conditional log-likelihoods을 의미.

 

다음으로 student 네트워크 구조의 차이에 대해서 살펴봄. 20레이어의 Gaussian autoregressive WaveNet이 선생이 되어 60레이어 student-nets를 훈련시키는데 student-1은 6개의 stacked Gaussian IAF 버전(6 x 10레이어 WaveNet), student-2는 4개의 stacked Gaussian IAF 버전(10+10+10+30). 오디오를 만들때 시간의 역방향으로 만들게 했더니(reverse) 성능이 더 올라갔음. student-2가 좀 깨끗한 소리를 만들었음.

student model은 1000K 스텝만큼 훈련시켰는데 재미있게도 50K정도만 되도 좋은 결과가 나왔음. 아마도 closed-form KLD 덕분인듯.

 

마지막으로 새롭게 만든 text-to-wave 모델의 성능을 살펴봄. 한번에 다 훈련시킨 모델이 각각 따로 훈련시킨 모델보다 더 좋은 성능을 보였음. 보코더 부분을 distilled한 버전으로 바꾸었더니 약간 성능의 저하는 있지만 거의 비슷했음.

 

알고보면 Deep Voice 시리즈의 개선판.
그나저나 네이밍 센스(클라리넷)은 참 마음에 듬.

 

 

  • [Rezende15] D. J. Rezende and S. Mohamed. Variational inference with normalizing flows. In ICML, 2015.
  • [Kingma16] D. P. Kingma, T. Salimans, R. Jozefowicz, X. Chen, I. Sutskever, and M. Welling. Improving variational inference with inverse autoregressive flow. In NIPS, 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. [논문리뷰]
  • [Arık17] S.Ö.Arık, M.Chrzanowski, A.Coates, G.Diamos, A.Gibiansky, Y.Kang, X.Li, J.Miller, J.Raiman, S.Sengupta, M.Shoeybi. Deep Voice: Real-time neural text-to-speech. ICML 2017. [논문리뷰]
  • [Oord18] A. van den Oord, Y. Li, I. Babuschkin, K. Simonyan, O. Vinyals, K. Kavukcuoglu, G. v. d. Driessche, E. Lockhart, L. C. Cobo, F. Stimberg, et al. Parallel WaveNet: Fast high-fidelity speech synthesis. In ICML, 2018. [논문리뷰]
  • [Ping18] W.Ping, K.Peng, A.Gibiansky, S.O.Arık, A.Kannan, S.Narang, J.Raiman, J.Miller. Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning. ICLR 2018. [논문리뷰]