devmoon

WaveNet: A Generative Model For Raw Audio 본문

AI/논문 리뷰

WaveNet: A Generative Model For Raw Audio

Orca0917 2023. 7. 3. 23:52

https://arxiv.org/abs/1609.03499

 

WaveNet: A Generative Model for Raw Audio

This paper introduces WaveNet, a deep neural network for generating raw audio waveforms. The model is fully probabilistic and autoregressive, with the predictive distribution for each audio sample conditioned on all previous ones; nonetheless we show that

arxiv.org

 

 

 

 

1. Introduction

WaveNet 논문은 텍스트를 음성으로 바꾸어주는 TTS에서 적용가능한 모델을 말한다. 정확히는 Acoustic feature로 부터 음성 형식인 waveform 형태로 바꾸어주는 역할을 해준다. 고전 TTS 방식은 각 음절 또는 음소에 해당하는 음성 파일을 하나씩 이어붙여 하나의 단어 또는 문장을 읽는 음성파일을 생성하였다.

 

 

 

 

음절 또는 음소마다의 음성파일을 이어붙이는 방법인 Concatenative Approach

 

 

 

하지만 위 방식으로 음성을 생성하고자 한다면, 가능한 모든 글자의 소리파일을 가지고 있어야 한다. 이때 단순히 특정 글자의 소리 뿐만 아니라 동일한 글자이더라도 음을 높이거나 낮추는 등의 모든 경우를 고려해야한다. 그러나 이러한 단점을 가려준 것은 생성된 음성의 자연스러움이다.

 

 

 

 

이번에 소개할 WaveNet은 autoregressive 모델을 통해 음성신호 또는 그 분포를 잘 예측하였고 비교적 깔끔한 수준의 목소리 생성이 가능하게 해주었다. 사실 음성파일도 주파수와 같은 이미지의 모습으로 펼쳐볼 수 있는데, 논문의 저자는 음성 1초에 16,000개의 샘플을 추출하였다. 이는 흔한 표현으로 16,000Hz의 sampling rate와 동일한 말이다.

 

 

 

 

출처: Google DeepMind (https://www.deepmind.com/blog/wavenet-a-generative-model-for-raw-audio)

 

 

 

 

 

 

→ WaveNet은 자귀회귀모형(autoregressive)이므로, 마지막 샘플을 예측하기 위해서는 앞의 15,999개의 샘플을 참고해야 한다. 하지만, 너무 많은 양의 샘플을 참고하기에는 많은 연산량을 필요로 하기 때문에 Dilated causal convolution으로 해결함을 아래에서 보인다.

 

 

 

 

2. WaveNet 모델 설명

*모델 소개를 위한 사전 준비사항

Waveform 파일의 $t$ 번째 샘플들을 $x_t$ 라고 한다면, waveform $\mathbf{x}$ 는 아래와 같이 표현한다.

$$\mathbf{x} = \{x_1, \dots, x_T\}$$

 

Waveform의 결합확률 분포는 각 샘플들이 등장할 조건부확률의 곱으로 표현된다.

$$\tag{1} p(\mathbf{x})=\prod_{t=1}^T p(x_t \vert x_1, \dots, x_{t-1})$$

 

 

 

 

위 PixelCNN과 유사하게, WaveNet은 조건부 확률 분포를 convolution 레이어를 쌓아 모델링한다. WaveNet에는 다른 Convolution 모델과는 달리 별도의 pooling 레이어가 존재하지 않으며 입력의 차원과 출력의 차원이 동일하다는 특징이 있다. 모델의 출력은 다음 샘플 $x_t$ 의 카테고리 분포이며, 학습은 로그 가능도를 최대화하도록 진행한다.

 

 

 

 

2.1. Dilated Causal Convolutions

WaveNet의 핵심은 causal convolution이다. Causal convolution은 모델이 현재 시점보다 앞선 미래의 샘플을 참고하지 못하도록 강제한다. 아래의 Figure 2를 보면 현재 시점 $t$를 예측할 때, 이전의 샘플들만 사용하는 것을 확인할 수 있다.

 

 

 

 

출처: WaveNet 논문 (https://arxiv.org/abs/1609.03499)

 

 

 

 

위 그림에서 마지막 부분을 다시 보면 이전에 말했던 autoregressive한 형태를 보임을 알 수 있다. (아래 그림 참고)

 

 

 

 

WaveNet 모델의 autoregressive 구조

 

 

 

 

하지만 우리는 단순히 5개의 값들만 참고하는 것이 아니라, 훨씬 많은 양의 입력들을 사용해 $t$ 시점의 샘플을 예측해야한다. 그래서 저자들이 고안한 것은 필터의 길이보다 훨씬 넓은 영역을 커버할 수 있는 convolution인 dilated convolution이다. Dilated convolution은 특정 step마다 입력값들을 dilation값 만큼 생략하면서 convolution을 수행한다. 만약 `dilation=1` 이라면, 일반 convolution과 똑같이 연산된다.

 

 

 

 

Dilation=2 인 경우의 Convolution 예시 (2D)

 

 

 

 

출처: Google DeepMind (https://www.deepmind.com/blog/wavenet-a-generative-model-for-raw-audio)

 

 

 

 

위의 그림은 Dilated convolution이 적용된 WaveNet의 작동 과정을 시각화한 영상으로, 적은 레이어로도 매우 큰 receptive field를 갖게 된다는 장점이 존재한다. 논문에서는 레이어가 쌓일 수록, dilation값은 2배가 되도록 설정했고 한계값에 도달했다면 다시 처음으로 돌아가서 반복하도록 설계하였다. 전체 Dilation값을 예로 들자면 다음과 같다.

 

 

 

$$1, 2, 4, \dots, 512, 1, 2, 4, \dots, 512, 1, 2, 4, \dots, 512. $$

 

 

 

1부터 시작해 512에서 마무리되는 구간을 하나의 "블록"이라고 하고, 모델은 이 블록들을 여러개 쌓아 receptive field를 더욱 크게 늘리도록 하였다. 만약 최대 dilation 값을 512로 설정하였다면, 한 블록의 receptive field는 1024가 된다.

 

 

 

 

2.2. Softmax Distributions

다시 앞선 내용을 가져온다면, 우리가 예측하고자 하는 것은 waveform형태의 이전 sample들이 주어졌을 때, 다음 sample의 값을 예측하는 것이다. 이를 시각화한다면 다음과 같다.

 

 

 

Waveform의 sample을 예측하는 WaveNet 모델

 

 

 

 

각 오디오 샘플에 대해 조건부 분포 $p(x_t \vert x_1, \dots, x_{t-1})$를 모델링하는 접근법들 중 논문에서는 `softmax`가 가장 적합할 것이라고 생각하였다. 그 이유중 하나는 카테고리 분포가 flexible하고 형태에 대한 가정이 없어 임의의 분포를 더 잘 학습하기 때문이다.

 

 

 

 

Raw audio의 경우 각 샘플은 16비트 정수값으로 표현할 수 있어 총 65,536개의 클래스로 구분된다. 이를 다루기 쉽게하기위해 $\mu$-law companding transformation (뮤-법칙 알고리즘)을 데이터에 적용시켜 256개의 값으로 축소시킨다. 저자에 의하면 이러한 비선형 quantization을 사용하더라도 원본의 음성과 거의 유사한 수준의 음성을 생성할 수 있다고 한다..

 

 

 

$$ f(x_t) = \text{sign}(x_t)\frac{\ln (1 + \mu \vert x_t \vert)}{\ln (1+ \mu)}, \quad \text{where } -1 < x_t < 1 \text{ and } \mu = 255$$

 

 

 

 

2.3. Gated Activation Units

활성함수 부분은 PixelCNN에서 사용하였던 것처럼 `gated activation unit` 을 사용하였으며 성능은 ReLU를 사용하는 것보다 더 좋게 나온다고 하였다. WaveNet에서 사용한 gated activation unit의 계산은 아래와 같다. 이 구조를 사용하면 convolution 필터 레이어를 거쳐 만들어낸 값을 다음 레이어에 전달할 때, 값을 조절해서 전달할 수 있게 된다.

 

 

 

 

$$\tag{2} \mathbf{z} = \text{tanh}(W_{f, k} * \mathbf{x}) \odot \sigma(W_{g, k} * \mathbf{x}) $$

 

  • $*$ : Convolution 연산 기호
  • $\odot$ : 성분곱(Element-wise multiplication)
  • $\sigma(\cdot)$ : Sigmoid 함수
  • $k$: 레이어 index
  • $f, g$: 필터, 게이트
  • $W$: 학습 가능한 컨볼루션 필터

 

 

 

 

2.4. Residual and Skip Connections

WaveNet모델에는 residual connnection과 skip connection을 모두 사용하여, 학습의 수렴속도를 가속화하고, 더 많은 레이어를 쌓아도 잘 학습할 수 있게 만들었다. 아래의 그림 Figure 4는 여러겹으로 쌓아 모델에 적용한 Residual block을 보여준다.

 

 

 

 

출처: WaveNet 논문 (https://arxiv.org/abs/1609.03499)

 

 

 

 

2.5. Conditional WaveNets

 

모델에 발화자의 특징 정보나 변환하려고 하는 텍스트 문장과 같은 추가정보 $\mathbf{h}$ 가 주어지면, 주어진 입력에 대한 조건부 분포의 식 (1)은 다음과 같이 변화한다.

 

 

 

 

$$ \tag{3} p(\mathbf{x} \vert \mathbf{h} = \prod_{t=1}^T p(x_t \vert x_1, \dots, x_{t-1}, \mathbf{h}). $$

 

 

 

 

또한, 새로운 입력에 대해 global conditioning과 local conditioning 2가지 방법으로 모델에 변화를 주기도 하였다. 먼저 Global conditioning은 TTS 모델에서 화자의 특징 $\mathbf{h}$가 모든 timestep의 예측에 영향을 줄 수있도록 변화를 주어 gated activation unit 수식 (2)에 수정을 가하였다. 수식에서 $V$는 학습가능한 선형함수를 말하며, 벡터 $V_{*, k}^\top \mathbf{h}$ 는 모든 timestep에서 동일하게 사용되었다.

 

 

 

 

$$ \mathbf{z} = \text{tanh}(W_{f, k} * \mathbf{x} + V_{f, k}^T\mathbf{h}) \odot \sigma(W_{g, k} * \mathbf{x} + V_{g, k}^T\mathbf{h}) $$

 

 

 

 

 

 

 

Local conditioning은 원본 오디오 파일보다 sampling rate가 낮을 수 있는 두번 째 시계열 데이터 $h_t$가 존재한다. 해당 시계열 데이터를 원본 오디오 파일의 sampling rate에 맞추기 위해 transposed convolutional network를 사용해 upsampling을 하고, gated activation unit을 거친다.

 

 

 

 

$$ \mathbf{z} = \text{tanh}(W_{f, k} * \mathbf{x} + V_{f, k}^\top *\mathbf{y}) \odot \sigma(W_{g, k} * \mathbf{x} + V_{g, k}^\top *\mathbf{y})$$

 

  • $\mathbf{y} = f(\mathbf{h})$: $\mathbf{h}$를 upsampling하여 원본 오디오의 sampling rate와 맞춘 것
  • $V_{f, k}*y$: $1\times1$ convolution 

 

 

 

 

Linguistic feature (additional information)를 사용한 WaveNet의 Residual block과 전체 architecture

Comments