| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- Ros
- 전국국밥
- 강화학습
- selenium
- 카트폴
- Instagrame clone
- 데이터분석
- 음성합성
- python
- coding
- TTS
- ReactNative
- pandas
- clone coding
- DeepMind
- 사이드프로젝트
- 클론코딩
- 앱개발
- 머신러닝
- 논문리뷰
- 강화학습 기초
- TeachagleMachine
- React
- FirebaseV9
- 딥러닝
- expo
- Ai
- App
- Reinforcement Learning
- JavaScript
- Today
- Total
qcoding
[AI논문리뷰] WaveNet - Causal /Dilated Convolution 으로 사람에 가까운 음성을 샘플 단위로 생성 본문
[AI논문리뷰] WaveNet - Causal /Dilated Convolution 으로 사람에 가까운 음성을 샘플 단위로 생성
Qcoding 2026. 4. 30. 16:19📄 한 문단 요약
WaveNet은 DeepMind가 2016년에 발표한 오디오 생성 모델이다. 핵심 아이디어는 단순하다. 음성 파형(waveform)을 16kHz로 샘플링하면 1초에 16,000개의 정수 값이 나오는데, 이것을 과거 값들을 조건으로 한 자기회귀 확률 모델로 한 샘플씩 예측한다. 핵심 구조는 희석 인과 합성곱(dilated causal convolution)으로, dilation을 1→2→4→…→512까지 늘리면서 10개 층을 쌓고 이 블록을 3번 반복해 총 30개 층으로 240ms 수용 범위를 확보한다. 각 층에는 tanh·sigmoid 게이트가 달려 있고 잔차 연결·스킵 연결이 함께 작동한다. TTS 실험에서 MOS 4.21을 기록해 기존 최고 수준 concatenative TTS(3.86)를 큰 폭으로 앞섰으며, 사람 음성(4.46)과의 간격을 영어 기준 51%까지 줄였다.
이 논문은 무엇을 해결하려고 했나?
음성 합성(TTS)과 음악 생성 분야에서 오랫동안 고민해 온 문제는 **"신경망이 사람 수준의 자연스러운 오디오를 직접 만들 수 있을까?"**였다. 기존 parametric TTS는 언어 특징을 먼저 예측하고 이를 신호 처리 규칙으로 음성으로 변환하는 두 단계 과정이라 자연스러움에 한계가 있었다. concatenative TTS는 녹음 데이터베이스에서 발화 조각을 이어 붙이는 방식으로 품질은 높지만 확장성이 떨어진다.
WaveNet은 이 문제를 정면으로 공략한다. 음성 파형을 직접 모델링하는 완전한 생성 모델을 만들고, 거기에 언어 조건(linguistic features) 또는 화자 임베딩(speaker embedding)을 조건으로 붙여 여러 태스크를 하나의 아키텍처로 처리한다. 목표는 중간 표현을 최소화하고 raw waveform 자체의 분포를 학습하는 것이다.
배경지식과 핵심 키워드
기존 방법의 한계
TTS 분야에서 2016년 당시 주류 방법은 두 가지였다.
Parametric TTS: HMM 또는 RNN이 언어 특징(음소, 운율, 지속 시간)을 예측하고, 이를 보코더(vocoder, 예: WORLD, STRAIGHT)가 음성 파라미터로 변환해 신호를 합성한다. 파이프라인이 복잡하고 각 단계의 오차가 누적된다. 합성음의 품질이 낮고 기계적인 느낌이 남는다.
Concatenative TTS: 대용량 녹음 데이터베이스에서 음소 단위 조각을 검색해 이어 붙인다. 자연스러운 음질을 낼 수 있지만 데이터베이스에 없는 발음·억양은 처리하기 어렵고, 새 화자나 언어 추가 비용이 크다.
공통 문제는 둘 다 raw waveform을 직접 학습하지 않는다는 점이다. 오디오 신호 자체에 담긴 복잡한 통계적 구조(음소 전환, 운율, 화자 특성)를 수동 설계된 특징으로 간접적으로 다뤄야 했다.
제안 방법의 핵심 아이디어
WaveNet의 핵심은 세 가지로 요약된다.
1. 분류 문제로 변환: 연속 파형 값 예측을 회귀가 아닌 분류로 바꾼다. μ-law로 256개 구간으로 양자화한 뒤 256-way softmax를 출력한다. 연속 분포 직접 모델링(GMM 등)보다 단순하고 더 좋은 결과를 낸다.
2. 희석 인과 합성곱으로 넓은 수용 범위: 단순한 causal convolution은 층을 깊게 쌓아야 먼 과거 정보를 볼 수 있어 비효율적이다. Dilation을 1→2→4→…→512로 키우면서 10층을 쌓으면 1024 샘플(64ms)을 커버한다. 이 블록 3개를 쌓으면 30층, 약 3,000 샘플(187ms ≈ 240ms with filters)을 수용한다.
3. 조건부 생성(Conditional Generation): TTS에서는 언어 특징(음소 시퀀스, F0 등)을 global/local 조건으로 주입한다. Local conditioning은 Transposed Conv로 업샘플링한 언어 특징을 각 층의 합성곱 항에 더한다. 화자 임베딩을 global condition으로 추가하면 단일 모델이 여러 화자를 처리한다.
핵심 인사이트
WaveNet이 mel spectrogram 같은 중간 표현 없이 raw waveform을 바로 모델링할 수 있는 이유는 μ-law 양자화 덕분이다. 16kHz 16-bit 파형을 그대로 분류하면 65,536-way softmax가 필요하지만, μ-law 8bit로 줄이면 256-way로 충분하다. 음질 손실보다 모델 학습 가능성이 훨씬 더 중요한 트레이드오프였다.
모델 구조/알고리즘 흐름

입력: 16kHz 음성 파형을 μ-law로 양자화한 정수 시퀀스 x_1, ..., x_T. 각 정수는 one-hot으로 임베딩된다.
Causal Conv Layer: 처음 1×1 causal convolution으로 채널 수를 맞춘다. 커널이 미래를 보지 못하도록 패딩 방향을 left-only로 설정.
Residual Block (×30): 각 블록에서 아래 과정이 실행된다.
x → Dilated Causal Conv (dilation = 2^k)
→ [+ local conditioning h]
→ tanh branch: Wf ✱ x + Vf ✱ h
→ sigmoid branch: Wg ✱ x + Vg ✱ h
→ element-wise multiply → gated_out
→ 1×1 Conv → residual_out (= input + residual_out)
→ skip_out 수집
Skip Connection 집계: 모든 30개 층의 skip_out을 합산(sum) → ReLU → 1×1 Conv → ReLU → 1×1 Conv → 256-way softmax.
출력: 각 시점 t에서 256개 클래스의 확률 분포. 훈련 시 cross-entropy 최소화, 생성 시 샘플링(temperature 조절 가능).
Conditioning 주입:
- Global: 화자 임베딩 v → 1×1 Conv → 각 블록의 gate/filter에 bias로 더함.
- Local: 언어 특징 h(t) → Transposed Conv로 파형 해상도에 맞게 업샘플 → 각 블록에 더함.
파라미터: 논문의 TTS 모델 기준 약 14M 파라미터. 생성 속도는 실시간의 약 1/50 (2016년 당시 CPU 기준).
논문 그림/표로 이해하기
논문 Table 1은 영어·중국어 TTS에서 각 모델의 MOS를 비교한다.
| 모델 | 영어 MOS | 영어 95% CI | 중국어 MOS | 중국어 95% CI |
|---|---|---|---|---|
| LSTM-RNN Parametric | 3.67 | ±0.098 | 3.79 | ±0.084 |
| HMM Concatenative | 3.86 | ±0.137 | 3.47 | ±0.108 |
| ✦ WaveNet (L+F) | 4.21 | ±0.081 | 4.08 | ±0.085 |
| Natural (8-bit μ-law) | 4.46 | ±0.067 | 4.25 | ±0.082 |
| Natural (16-bit PCM) | 4.55 | ±0.075 | 4.21 | ±0.071 |
영어 기준 사람 음성(8-bit μ-law)과의 차이: 기존 최고(concatenative 3.86) → WaveNet 4.21, 사람 4.46. 간격 0.69에서 0.25로 좁혀짐(약 64%). 중국어에서는 0.42→0.17(약 60%).
실험 설정과 결과 해석
데이터: 영어 24.6시간, 중국어 34.8시간의 단일 화자 전문 성우 녹음. 전처리 없이 원시 μ-law 파형을 사용.
언어 특징 구성: 음소 시퀀스, 음소 지속 시간, F0(기본 주파수), 운율 레이블 등 언어학적 특징 80여 개. 각 특징은 파형 해상도로 업샘플링(Transposed Conv)한 뒤 각 레이어에 주입.
비교 모델: LSTM-RNN parametric(내부 구축), HMM-based concatenative(상용 수준 내부 시스템).
평가: Mechanical Turk에서 각 샘플당 최소 8명이 1–5점 MOS 평가. 영어 500문장, 중국어 500문장.
Ablation 결과:
- 언어 특징 제거 → 음질 급락. 모델이 텍스트가 없으면 무의미한 발화를 생성.
- F0 제거 → MOS 소폭 하락. 운율 안정성 감소.
- 희석 없는 단순 causal conv → 수용 범위 좁아 품질 저하.
- Gated activation 대신 ReLU → 약간 품질 저하.
음악 생성: 피아노 독주 데이터셋(MagnaTagATune)에서 비조건 생성. 청각적으로 일관된 음악 구조를 생성하지만, 수 초 단위 장기 의존성은 아직 부족.
다화자(Multi-speaker): 109명 화자의 음성 데이터로 단일 모델을 훈련. 화자 임베딩을 global condition으로 주입했을 때, 보지 못한 화자에 대해서도 어느 정도 일반화.
핵심 인사이트
WaveNet의 TTS 조건 모델과 unconditioned 음악 생성 모델은 같은 아키텍처다. 차이는 오직 어떤 조건 신호를 집어넣느냐뿐이다. 이 통일된 프레임워크가 WaveNet의 가장 큰 장점이자, 이후 VQ-VAE, WaveGlow 같은 파생 연구가 쏟아진 이유다.
한계와 비판적 관점
생성 속도: 논문 당시 CPU에서 실시간 대비 약 1/50 속도. 1초 음성 생성에 50초가 필요했다. 자기회귀 구조상 샘플 하나를 만들 때마다 전체 네트워크를 통과해야 하므로 병렬화가 원천적으로 불가능하다. WaveNet은 훈련은 매우 빠르지만 추론이 극단적으로 느리다.
언어 특징 의존: TTS에서 좋은 성능을 내려면 음소 레이블, 지속 시간, F0 등의 정교한 언어 특징이 미리 준비되어 있어야 한다. 이는 새 언어 지원 시 큰 비용을 요구한다. Tacotron 2가 이 문제를 해결하기 위해 mel spectrogram을 중간 표현으로 도입한 배경이기도 하다.
장기 일관성: 수용 범위 240ms로는 문장 레벨 운율이나 음악의 화성 구조 같은 수 초~수 분 단위의 장기 의존성을 다루기 어렵다. 음악 생성에서 수 초 지나면 구조적 일관성이 무너지는 현상이 관찰된다.
데이터 요구량: 단일 화자 기준으로도 수십 시간의 녹음이 필요하다. 저자원 언어나 비전문 녹음 데이터에서의 성능은 검증되지 않았다.
평가의 언어 편향: MOS 실험이 영어와 중국어 두 언어에만 국한되어 있어 일반화에 한계가 있다.
구현하거나 응용한다면 무엇을 봐야 하나?
재현을 위한 핵심 모듈:
dilated_causal_conv1d(x, dilation, kernel_size=2): 핵심은 left-padding = (kernel_size - 1) * dilation. PyTorch의nn.Conv1d(padding=dilation*(kernel_size-1))후 오른쪽 자르기(또는 CausalConv 래퍼).gated_activation(x_filter, x_gate):torch.tanh(xf) * torch.sigmoid(xg).WaveNetBlock: dilated conv → gated act → 1×1 conv(residual) + 1×1 conv(skip).WaveNet: causal embed → 30 blocks(dilation 1,2,4,...,512 × 3) → sum skip → 1×1 → ReLU → 1×1 → softmax.
공개 구현체:
- r9y9/wavenet_vocoder: 가장 많이 참조되는 PyTorch 구현. Tacotron 2 vocoder로도 활용됨.
- ibab/tensorflow-wavenet: 초기 TF 구현, 개념 학습용.
추론 속도 개선을 위한 후속 연구:
- Parallel WaveNet (van den Oord 등, 2018): flow-based 학생 모델을 WaveNet 교사로 지식 증류. CPU에서 실시간 생성 달성.
- WaveGlow (NVIDIA, 2019): Normalizing Flow 기반, 단일 네트워크로 실시간 생성.
- WaveRNN (DeepMind, 2018): 단일 RNN + subscale trick으로 모바일 수준 속도.
실용 노트: 논문 그대로 재현보다 r9y9/wavenet_vocoder를 Tacotron 2와 연결하는 파이프라인이 실용적이다. 자체 데이터로 fine-tuning할 때는 LJ Speech(22050Hz) 기준 pre-trained 체크포인트에서 출발하는 것이 가장 빠르다.
컴퓨팅: 논문 기준 V100 1장으로 24.6시간 영어 데이터 학습에 약 4일. 빠른 실험을 원하면 800k steps 이후 품질을 체크하는 것이 효율적.
한 줄 결론과 다음에 읽을 논문
WaveNet은 raw audio를 자기회귀 확률 모델로 학습할 수 있음을 처음으로 증명하고, 희석 인과 합성곱이라는 효율적 수용 범위 확장 구조를 TTS와 오디오 생성에 정착시켰다. 느린 추론이 유일한 실용 장벽이었고 이후 연구들이 이를 해결하는 방향으로 집중되었다.
다음에 읽을 논문:
- Tacotron 2 (Shen et al., 2018) - mel spectrogram 예측기와 WaveNet vocoder를 결합해 end-to-end TTS 완성
- Parallel WaveNet (van den Oord et al., 2018) - WaveNet을 실시간으로 실행하기 위한 IAF 지식 증류
- WaveGlow (Prenger et al., 2019) - Normalizing Flow로 WaveNet 대체, GPU에서 실시간 합성
출처
- 논문 원문: arXiv 1609.03499
- DeepMind 공식 블로그: WaveNet: A generative model for raw audio
- PyTorch 구현 참고: r9y9/wavenet_vocoder