논문 제목: WAVENET: A GENERATIVE MODEL FOR RAW AUDIO
논문 링크: https://arxiv.org/pdf/1609.03499
논문 인용수: 7000회+(26.01.28 기준)
논문 정보: WaveNet은 2016년 Google DeepMind에서 발표한 획기적인 음성 생성 모델임. 기존의 음성 합성이 "음성의 특징을 추출하고 재조합"하는 방식이었다면, WaveNet은 오디오 파형 자체를 샘플 단위로 직접 생성함.
1. 배경 지식: 오디오 신호와 음성 합성의 이해
1.1 디지털 오디오의 기초
소리는 공기의 진동으로, 본래 연속적인 아날로그 신호임. 이를 컴퓨터에서 처리하려면 두 가지 과정이 필요함.
샘플링 (Sampling)
연속 신호를 일정 간격으로 측정하여 이산적인 값들로 변환함.
- 샘플링 레이트 (Sampling Rate): 1초에 몇 번 측정하는가
- CD 품질: 44,100 Hz
- 전화 품질: 8,000 Hz
- 일반 음성 처리: 16,000 Hz (WaveNet에서 사용)
- 나이퀴스트 정리(Nyquist–Shannon Sampling Theorem): 원본 신호의 최대 주파수의 2배 이상으로 샘플링해야 정보 손실 없이 복원 가능. 인간의 가청 주파수가 약 20kHz이므로, CD는 44.1kHz를 사용함.
양자화 (Quantization)
각 샘플 값을 유한한 비트로 표현함.
- 16-bit: $2^{16} = 65,536$개의 가능한 값 (-32,768 ~ 32,767)
- 8-bit: $2^8 = 256$개의 가능한 값
결과적으로, 1초의 16kHz 음성 = 16,000개의 정수 시퀀스가 됨. WaveNet이 모델링하는 것이 바로 이 시퀀스임.
1.2 기존 TTS (Text-to-Speech) 시스템의 구조
음성 합성은 텍스트를 음성 파형으로 변환하는 sequence-to-sequence 문제임. 전통적인 TTS 파이프라인은 크게 두 단계로 구성됨.
1단계: 텍스트 분석 (Text Analysis)
- 문장 분리, 단어 분리
- 텍스트 정규화 ("$100$" → "one hundred dollars")
- 품사 태깅 (POS tagging)
- Grapheme-to-Phoneme 변환 ("hello" → /həˈloʊ/)
- 운율 예측 (강세, 억양, 길이)
2단계: 음성 합성 (Speech Synthesis)
여기서 두 가지 주요 접근법이 있음:
(A) Concatenative 방식 (연결 합성)
미리 녹음된 음성 조각(unit)들을 데이터베이스에서 선택하여 이어붙임.
| 구분 | 내용 |
|---|---|
| 장점 | 원본 녹음을 사용하므로 자연스러운 음질, 특정 구간에서 매우 자연스러움 |
| 단점 | 거대한 음성 데이터베이스 필요, 연결 부분에서 부자연스러운 전이, 새로운 화자/스타일 추가 어려움, 감정 표현 등 유연성 부족 |
(B) Parametric 방식 (파라미터 합성)
음성을 파라미터로 분해하고, 모델이 파라미터를 예측한 후, Vocoder로 재합성함.
[텍스트] → [언어적 특징] → [음향 모델] → [Vocoder 파라미터] → [Vocoder] → [음성]
주요 Vocoder 파라미터들:
- MFCC 또는 LSP: 성도(vocal tract)의 특성
- Fundamental Frequency (F0): 음높이 정보
- Aperiodicity: 음성의 비주기적 성분 (숨소리, 마찰음 등)
| 구분 | 내용 |
|---|---|
| 장점 | 작은 모델 크기, 화자/스타일 변환 용이, 유연한 제어 가능 |
| 단점 | "로봇 같은" 부자연스러운 음질, Vocoder의 품질 한계, 정보 손실 (분석 → 합성 과정에서) |
1.3 Parametric 방식의 근본적 문제
논문의 Appendix A에서 저자들은 기존 음성 모델의 가정들을 비판함:
1) 고정 길이 분석 윈도우
기존 모델들은 20-30ms의 고정 윈도우 내에서 정상(stationary) 신호로 가정함.
하지만 파열음(stop consonants) 같은 음소는 20ms보다 짧아서 이 가정이 맞지 않음.
2) 선형 필터 가정
음성을 선형 시불변(LTI) 필터의 출력으로 모델링함:
$x_t = \sum_{p=1}^{P} a_p x_{t-p} + \epsilon_t$
하지만 실제 음성 샘플 간의 관계는 고도로 비선형적임.
3) 가우시안 분포 가정
오차항 $\epsilon_t \sim \mathcal{N}(0, G^2)$을 가정하지만, 실제 음성 신호의 분포는 가우시안과 크게 다름.
WaveNet은 이러한 가정들을 모두 제거하고, 데이터로부터 직접 학습함.
2. WaveNet의 핵심 아이디어
2.1 Autoregressive 생성 모델
WaveNet의 기본 원리는 놀랍도록 단순함.
파형 $\mathbf{x} = {x_1, x_2, \ldots, x_T}$의 결합 확률을 조건부 확률의 곱으로 분해함:
$p(\mathbf{x}) = \prod_{t=1}^{T} p(x_t | x_1, x_2, \ldots, x_{t-1})$
이는 언어 모델이 "이전 단어들이 주어졌을 때 다음 단어의 확률"을 모델링하는 것과 동일한 원리임.
차이점은 스케일임:
| 도메인 | 단위 | 1초당 예측 횟수 |
|---|---|---|
| 텍스트 (언어 모델) | 단어/토큰 | ~10개 |
| 이미지 (PixelCNN) | 픽셀 | - (64×64 = 4,096개) |
| 오디오 (WaveNet) | 샘플 | 16,000개 |
이 접근법은 PixelCNN에서 영감을 받음.
PixelCNN이 이미지의 픽셀을 하나씩 생성하듯, WaveNet은 오디오 샘플을 하나씩 생성함.
2.2 왜 이 문제가 어려운가?
문제 1: 긴 의존성 (Long-range Dependencies)
자연스러운 음성을 위해서는 상당히 긴 과거 정보를 참조해야 함:
- 음소(phoneme) 하나: ~50-100ms
- 음절(syllable): ~200-300ms
- 운율(prosody): 수 초
16kHz에서 300ms = 4,800 샘플임.
즉, 현재 샘플을 예측하기 위해 수천 개의 과거 샘플을 효과적으로 참조해야 함.
문제 2: 계산 효율성
RNN으로 이렇게 긴 시퀀스를 처리하면:
- Vanishing/exploding gradient 문제
- 순차적 계산으로 인한 느린 학습
- 메모리 사용량 증가
문제 3: 고해상도 출력
16-bit 오디오의 각 샘플은 65,536개의 가능한 값을 가짐.
이를 그대로 분류 문제로 풀기엔 출력 공간이 너무 큼.
3. 핵심 기술 #1: Dilated Causal Convolution
WaveNet의 가장 중요한 기술적 기여는 dilated causal convolution임.
3.1 Causal Convolution이란?

"Causal"은 인과적이라는 의미로, 미래 정보를 사용하지 않는다는 뜻임.
일반적인 1D convolution은 중심 위치의 양쪽을 모두 봄:
일반 Conv (kernel=3): [x_{t-1}, x_t, x_{t+1}] → y_t
Causal convolution은 현재와 과거만 봄:
Causal Conv (kernel=3): [x_{t-2}, x_{t-1}, x_t] → y_t
이를 구현하는 방법은 간단함: 출력을 왼쪽으로 shift하거나, 입력의 왼쪽에 padding을 추가함.
Receptive Field 문제
일반 causal convolution의 receptive field는 다음과 같이 계산됨:
$\text{Receptive Field} = (\text{kernel size} - 1) \times \text{layers} + 1$
kernel size = 2, layers = 4인 경우: $(2-1) \times 4 + 1 = 5$ 샘플
16kHz에서 5샘플 = 0.3ms... 이는 턱없이 부족함.
300ms를 커버하려면 4,800개 레이어가 필요함!
3.2 Dilated Convolution의 원리

Dilated convolution (또는 "atrous convolution", "convolution with holes")은 필터 원소들 사이에 간격(dilation)을 두어 적용함.
Dilation d=1 (일반): ■ ■ (인접한 2개 참조)
Dilation d=2: ■ _ ■ (1칸 건너뛰고 참조)
Dilation d=4: ■ _ _ _ ■ (3칸 건너뛰고 참조)
Dilation d=8: ■ _ _ _ _ _ _ _ ■ (7칸 건너뛰고 참조)
수학적으로, dilation $d$인 convolution은:
$(F *d k)(p) = \sum{s+dt=p} F(s) \cdot k(t)$
이는 필터를 0으로 확장(dilate)한 것과 동일하지만, 실제 계산은 원래 필터 크기만큼만 수행하므로 효율적임.
3.3 Exponentially Increasing Dilation
WaveNet의 핵심 통찰은 dilation을 기하급수적으로 증가시키는 것임:
$\text{dilation} = 1, 2, 4, 8, 16, 32, 64, 128, 256, 512$
이 패턴을 하나의 "블록"이라 하고, 여러 블록을 반복함:
Block 1: 1, 2, 4, 8, ..., 512
Block 2: 1, 2, 4, 8, ..., 512
Block 3: 1, 2, 4, 8, ..., 512
Receptive Field 계산
Dilation이 $1, 2, 4, \ldots, 2^{n-1}$인 $n$개 레이어의 receptive field:
$RF = 2^n = 1024 \text{ (n=10인 경우)}$
이 블록을 $B$번 반복하면:
$RF = B \times (2^n - 1) + 1$
3개 블록, 10개 레이어/블록이면: $3 \times 1023 + 1 = 3070$ 샘플 ≈ 192ms (16kHz 기준)
왜 이게 효과적인가?
- 지수적 receptive field 성장: $O(log_2 RF)$개의 레이어로 $RF$ 크기의 receptive field 확보
- 계산 효율성: 파라미터 수와 계산량은 레이어 수에 비례 (선형)
- 다중 해상도: 낮은 레이어는 세밀한 패턴, 높은 레이어는 거시적 패턴 학습
- 입력 해상도 유지: pooling 없이도 긴 의존성 포착
4. 핵심 기술 #2: Softmax Distribution과 μ-law Encoding
4.1 왜 Softmax인가?
연속적인 오디오 값을 모델링하는 방법은 여러 가지가 있음:
(A) 회귀 (Regression)
- 평균과 분산을 예측하는 가우시안 분포
- 간단하지만, 복잡한 분포(다봉 분포 등)를 표현하기 어려움
(B) Mixture Density Network (MDN)
- 여러 가우시안의 혼합으로 모델링
- 유연하지만 파라미터 수 증가, 학습 불안정
(C) Softmax (Categorical Distribution)
- 연속 값을 이산화하고 분류 문제로 변환
- PixelCNN에서 이미지에 효과적임이 입증됨
WaveNet은 (C) Softmax 방식을 채택함. 저자들은 "softmax가 데이터 분포에 대한 가정 없이 임의의 분포를 모델링할 수 있다"고 설명함.
4.2 μ-law Companding
16-bit 오디오를 그대로 사용하면 65,536개 클래스의 분류 문제가 됨.
이는 다음과 같은 문제가 있음:
- 계산량이 과도함
- 대부분의 클래스에 데이터가 희소함
- 인접한 값들 간의 관계를 무시함
해결책: μ-law companding

통신 분야에서 오랫동안 사용되어 온 비선형 양자화 기법임:
$f(x_t) = \text{sign}(x_t) \cdot \frac{ln(1 + mu |x_t|)}{ln(1 + mu)}, \quad -1 < x_t < 1, \quad \mu = 255$
이 변환의 특징:
- 비선형 압축: 작은 값에서 해상도가 높고, 큰 값에서 해상도가 낮음
- 인간 청각 특성에 부합: Weber-Fechner 법칙 - 인간은 절대적 차이보다 상대적 차이에 민감
- 256개 값으로 양자화: $\mu = 255$이면 자연스럽게 256 레벨로 매핑
저자들은 "특히 음성의 경우, 양자화 후 재구성된 신호가 원본과 매우 유사하게 들렸다"고 보고함.
5. 핵심 기술 #3: Gated Activation Units
5.1 PixelCNN의 Gated Activation
WaveNet은 PixelCNN에서 가져온 gated activation을 사용함:
$\mathbf{z} = \tanh(W_{f,k} \mathbf{x}) \odot \sigma(W_{g,k} \mathbf{x})$
여기서:
- $*:$ convolution 연산
- $\odot$: element-wise 곱셈 (Hadamard product)
- $\sigma(\cdot)$: sigmoid 함수
- $k$: 레이어 인덱스
- $f$: filter, $g$: gate
5.2 왜 Gating이 효과적인가?
이 구조는 LSTM의 forget gate와 유사한 역할을 함:
tanh branch (Filter): "무엇을" 출력할지 결정 (-1 ~ 1 범위)
sigmoid branch (Gate): "얼마나" 출력할지 결정 (0 ~ 1 범위)
Gating의 이점:
- 정보 흐름 제어: 불필요한 정보를 차단하고 중요한 정보만 전달
- Gradient 흐름 개선: multiplicative interaction이 gradient를 더 잘 전파
- 복잡한 패턴 학습: 두 경로의 조합으로 더 풍부한 표현 가능
저자들은 실험에서 gated activation이 ReLU보다 오디오 신호 모델링에 훨씬 효과적임을 발견함.
이는 오디오 신호의 특성(진동, 주기성 등)과 관련이 있을 수 있음.
6. 아키텍처 상세 분석
6.1 전체 구조

논문의 Figure 4는 WaveNet의 전체 아키텍처를 보여줌.
크게 세 부분으로 나눌 수 있음:
입력 처리
Input → Causal Conv (1×1) → Residual Block 입력
Residual Block (×k layers)
입력 → Dilated Conv → [tanh ⊙ σ] → 1×1 Conv → (+) → 다음 블록
↓
Skip Connection → 합산
출력 처리
모든 Skip Connection 합산 → ReLU → 1×1 Conv → ReLU → 1×1 Conv → Softmax
6.2 Residual Connection
각 레이어의 출력을 입력에 더함:
$\mathbf{x}_{l+1} = \mathbf{x}_l + \mathcal{F}(\mathbf{x}_l)$
이점:
- 깊은 네트워크 학습 가능: gradient가 shortcut을 통해 직접 전파
- 학습 안정성: 최소한 identity function은 쉽게 학습
- He et al. (2015)의 ResNet에서 효과 입증
6.3 Skip Connection
각 레이어의 출력을 최종 출력으로 직접 연결함:
$\mathbf{y} = \sum_{l=1}^{L} \mathbf{s}_l$
이점:
- 다중 스케일 정보 통합: 각 레이어가 다른 receptive field를 가지므로, 다양한 시간 스케일의 정보가 최종 예측에 기여
- Gradient 흐름 개선: 깊은 레이어도 직접적인 gradient를 받음
- 앙상블 효과: 여러 레이어의 예측을 결합하는 것과 유사
6.4 1×1 Convolution의 역할
1×1 convolution은 여러 곳에서 사용됨:
- 채널 변환: dilated conv 출력을 skip/residual 채널 수로 변환
- 비선형 변환: 파라미터 효율적인 fully-connected layer 역할
- 차원 축소/확장: 계산량 조절
7. Conditional WaveNet: 조건부 생성
WaveNet의 강력한 기능 중 하나는 조건부 생성임. 추가 입력 $\mathbf{h}$가 주어지면:
$p(\mathbf{x} | \mathbf{h}) = \prod_{t=1}^{T} p(x_t | x_1, \ldots, x_{t-1}, \mathbf{h})$
7.1 Global Conditioning
전체 시퀀스에 동일하게 적용되는 조건 (예: 화자 ID, 장르)
$\mathbf{z} = \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})$
- $\mathbf{h}$: 조건 벡터 (예: one-hot 화자 ID 또는 학습된 embedding)
- $V_{f,k}, V_{g,k}$: 학습 가능한 선형 변환
- $V^T \mathbf{h}$는 시간 축으로 broadcast됨
응용 예시:
- 다중 화자 TTS: 화자 ID로 조건화 → 하나의 모델로 여러 화자 생성
- 음악 생성: 장르 태그로 조건화 → 원하는 스타일의 음악 생성
7.2 Local Conditioning
시간에 따라 변하는 조건 (예: 언어적 특징, F0 contour)
TTS에서 linguistic features는 보통 5ms 단위로 추출됨 (200Hz).
이를 16kHz 오디오에 맞추려면 80배 upsampling이 필요함.
방법 1: Transposed Convolution (Learned Upsampling)
$\mathbf{y} = f(\mathbf{h}) \quad \text{(upsampled to audio resolution)}$
$\mathbf{z} = \tanh(W_{f,k} \mathbf{x} + V_{f,k} \mathbf{y}) \odot \sigma(W_{g,k} \mathbf{x} + V_{g,k} \mathbf{y})$
방법 2: Repeat and 1×1 Conv
조건 벡터를 단순 반복한 후 1×1 convolution 적용.
저자들은 이 방법이 약간 성능이 낮았다고 보고함.
7.3 Context Stacks (추가 기법)
매우 긴 의존성이 필요한 경우, context stack을 사용할 수 있음:
[긴 오디오 히스토리] → [Context Stack (작은 모델)] → Local Conditioning
↓
[최근 오디오] → [Main WaveNet (큰 모델)] → Output
Context stack은:
- 더 넓은 receptive field
- 더 적은 채널 수 (계산량 절약)
- Pooling 사용 가능 (낮은 해상도로 동작)
이는 "먼 과거는 대략적으로, 가까운 과거는 세밀하게" 보는 직관에 부합함.
8. 실험 결과 상세 분석
8.1 Multi-Speaker Speech Generation (텍스트 없이)
데이터셋: VCTK (CSTR Voice Cloning Toolkit)
- 109명의 영어 화자
- 44시간의 음성 데이터
설정:
- 텍스트 조건화 없이 오디오만으로 학습
- 화자 ID를 one-hot 벡터로 global conditioning
관찰 결과:
- 언어 유사 발화 생성: 실제 단어는 아니지만 영어처럼 들리는 음성 생성
- 현실적인 억양과 리듬
- 자연스러운 음소 전이
- 실제 단어가 아닌 이유: receptive field (~300ms)가 2-3개 음소만 커버
- 화자 특성 포착: 하나의 모델이 109명 모두의 목소리 생성 가능
- 음색, 억양, 발화 속도 등 개인 특성 유지
- 화자 추가 시 validation 성능 향상 (internal representation 공유)
- 부수적 특성 학습: 음성 외 특성도 모델링
- 녹음 환경의 음향 특성
- 호흡과 입 움직임 소리
- 녹음 품질 차이
8.2 Text-to-Speech 실험
데이터셋:
- 북미 영어: 24.6시간, 전문 여성 화자
- 만다린 중국어: 34.8시간, 전문 여성 화자
비교 시스템:
- LSTM-RNN Parametric: LSTM 기반 통계적 파라미터 합성
- HMM Concatenative: HMM 기반 단위 선택 연결 합성
- WaveNet (L): 언어적 특징만으로 조건화
- WaveNet (L+F): 언어적 특징 + log F0로 조건화
평가 방법:
- Paired Comparison Test: 두 샘플 중 선호하는 것 선택 (또는 "선호 없음")
- Mean Opinion Score (MOS): 5점 척도 자연스러움 평가 (1: Bad ~ 5: Excellent)
정량적 결과:


핵심 발견:
- 격차 감소:
- 영어: 자연 음성과의 격차 0.69 → 0.34 (51% 감소)
- 중국어: 자연 음성과의 격차 0.42 → 0.13 (69% 감소)
- F0 조건화의 중요성:
- WaveNet (L): 때때로 잘못된 운율 (단어 강세 오류)
- WaveNet (L+F): 운율 문제 해결
- 이유: F0 예측 모델이 200Hz로 동작해 더 긴 의존성 학습 가능
- Paired Comparison 결과 (북미 영어):
- WaveNet (L+F) vs 최고 baseline: 49.3% vs 20.1% (30.6% 선호 없음)
8.3 Music Generation
데이터셋:
- MagnaTagATune: ~200시간, 188개 태그 (장르, 악기, 분위기 등)
- YouTube Piano: ~60시간, 솔로 피아노
관찰 결과:
- Receptive Field의 중요성: 충분히 큰 receptive field가 "음악적" 샘플 생성에 필수
- 한계점:
- 수초 단위의 일관성은 있음
- 장기적 구조 (멜로디 진행, 곡 구조) 부재
- 장르/악기/음량이 시시각각 변함
- 조건부 생성 가능:
- 태그 벡터로 조건화
- 특정 장르/악기 스타일 제어 가능
- 태그 데이터가 노이즈가 많아 정교한 제어는 어려움
8.4 Speech Recognition (음성 인식)
데이터셋: TIMIT (음소 인식 벤치마크)
모델 수정:
- Dilated convolution 후 mean-pooling layer 추가 (10ms 프레임으로 downsampling)
- 비인과적(non-causal) convolution 추가
- 두 가지 loss 동시 사용: 다음 샘플 예측 + 프레임 분류
결과: 18.8% PER (Phoneme Error Rate)
- Raw audio에서 직접 학습한 모델 중 당시 최고 성능
- 다음 샘플 예측 loss가 정규화 역할을 하여 일반화 성능 향상
'Speech' 카테고리의 다른 글
| [2023-2] 현시은 - Music Transformer: Generating Music with Long-Term Structure (ICLR19) (0) | 2023.11.26 |
|---|