Audio-004, EnCodec: High Fidelity Neural Audio Compression, TMLR 2023
◼ Comment
- 개인적으로는 SoundStream하고 거의 유사한거 같은데, 엔트로피 인코딩이 추가된 점이 있는거 같음
- 나머지는 거의 똑같은데?
- 비스트리밍 압축까지 고려한정도라고 할까?
두 논문 (SoundStream [2021] vs. EnCodec [2022])은 둘 다 **Residual Vector Quantization(RVQ)**와 end-to-end 학습을 기반으로 한 뉴럴 오디오 코덱이지만, 몇 가지 중요한 차이가 있습니다.
🔑 주요 차이점
1. 모델 아키텍처
-
SoundStream:
-
완전 합성곱(convolutional) 기반 인코더/디코더.
-
causal convolution만 사용 → 실시간 스트리밍에 초점.
-
RVQ 적용 + quantizer dropout 기법으로 단일 모델이 다양한 비트레이트(3–18 kbps) 지원.
-
선택적으로 FiLM conditioning을 넣어 노이즈 억제(denoising) 기능도 지원.
-
-
EnCodec:
-
Conv 기반 인코더/디코더 + LSTM (시퀀스 모델링 강화).
-
스트리밍 / 비스트리밍 모드 모두 제공.
-
RVQ 기반 다중 코드북(최대 32개, 각 1024개 벡터).
-
선택적으로 Transformer 기반 언어 모델을 붙여 엔트로피 코딩 → 대역폭 추가 절감 (25–40%).
-
2. 손실 함수 설계
-
SoundStream:
-
복원 손실(다중 스케일 스펙트럼 L1/L2) + 적대적 손실(waveform/STFT discriminator).
-
adversarial + feature matching loss 사용.
-
목표: rate–distortion–perceptual tradeoff.
-
-
EnCodec:
-
시간 + 주파수 도메인 복원 손실 (멀티스케일 멜 스펙트로그램 기반).
-
MS-STFT 단일 판별기만 사용 (간단하지만 효과적).
-
Loss balancer 도입 → 각 손실의 그래디언트 크기를 정규화하여 학습 안정화.
-
3. 비트레이트 지원
-
SoundStream:
-
quantizer dropout 덕분에 단일 모델이 다양한 비트레이트 지원 가능.
-
3 kbps에서도 Opus 12 kbps, EVS 9.6 kbps와 비슷하거나 더 나은 성능.
-
-
EnCodec:
-
다중 대역폭 학습(multi-bandwidth training) 전략 사용.
-
24 kHz: 1.5, 3, 6, 12, 24 kbps / 48 kHz: 3, 6, 12, 24 kbps 지원.
-
추가적으로 LM+엔트로피 코딩으로 25–40% 추가 절감.
-
4. 기능 확장성
-
SoundStream:
-
Joint compression + enhancement 가능.
-
같은 모델에서 동시에 노이즈 억제와 압축 수행.
-
-
EnCodec:
-
엔트로피 코딩 + Transformer LM 결합 가능.
-
노이즈 억제 같은 enhancement는 별도 다루지 않음.
-
대신, 고품질 음악/스테레오 압축에 집중 (예: 6 kbps EnCodec ≈ MP3 64 kbps).
-
5. 성능 및 평가
-
SoundStream:
-
24 kHz 오디오, 3–18 kbps 범위에서 실시간 동작 가능.
-
주로 음성 + 음악 평가, EVS/Opus 대비 우월.
-
ViSQOL 기준 3 kbps에서도 3.7 이상 확보.
-
-
EnCodec:
-
24 kHz (모노), 48 kHz (스테레오) 모두 지원.
-
MUSHRA 실험에서 EnCodec 3 kbps가 Lyra-v2(6 kbps), Opus(12 kbps)보다 우수.
-
실시간 속도: 24 kHz 모델은 CPU 단일 코어에서 10배 실시간, 48 kHz 모델은 실시간보다 약간 느림.
-
📌 요약
-
SoundStream (2021):
-
간결한 구조 + quantizer dropout으로 다양한 비트레이트 지원.
-
실시간 스트리밍과 노이즈 억제 기능까지 포함된 범용 신경망 오디오 코덱.
-
-
EnCodec (2022):
-
손실 밸런서 + 단일 MS-STFT 판별기로 학습 안정화 및 단순화.
-
엔트로피 코딩 + Transformer LM으로 비트레이트를 추가 절감.
-
음악/스테레오 압축에서 MP3·Opus를 크게 초월.
-
Abstract
우리는 신경망을 활용한 최첨단(real-time) 고충실도 오디오 코덱을 소개한다. 이 코덱은 양자화된 잠재 공간을 갖는 스트리밍 인코더–디코더 아키텍처로 구성되며, 엔드투엔드 방식으로 학습된다. 단일 다중-스케일 스펙트로그램 판별기를 사용해 학습을 단순화·가속하고, 아티팩트를 효율적으로 줄여 고품질 샘플을 산출한다. 또한 학습을 안정화하기 위한 새로운 손실 밸런서 메커니즘을 도입하는데, 각 손실의 가중치가 이제 전체 그래디언트에서 해당 손실이 차지해야 하는 비율을 정의하도록 하여, 이 하이퍼파라미터의 선택을 손실의 전형적 스케일과 분리한다. 마지막으로, 경량 트랜스포머 모델을 이용해 얻어진 표현을 실시간보다 빠른 속도를 유지하면서 최대 40%까지 추가 압축할 수 있음을 연구한다. 제안 모델의 핵심 설계 선택들—학습 목표, 아키텍처 변경, 다양한 지각적 손실 함수에 대한 연구—을 상세히 기술한다. 또한 음성, 잡음·잔향 음성, 음악을 포함한 다양한 오디오 도메인과 대역폭 전반에 걸친 광범위한 주관적 평가(MUSHRA 테스트)와 어블레이션 연구를 제시한다. 우리의 접근법은 24 kHz 모노포닉과 48 kHz 스테레오포닉 오디오를 모두 고려한 모든 평가 설정에서 베이스라인 방법들을 능가한다. 코드와 모델은 github.com/facebookresearch/encodec 에서 이용할 수 있다.
1. 서론 (Introduction)
최근 연구에 따르면, 2021년 기준으로 스트리밍 오디오와 비디오가 인터넷 트래픽의 대다수를 차지했으며(82%, Cisco, 2021), 인터넷 트래픽이 앞으로도 증가할 것으로 예상됨에 따라 오디오 압축은 점점 더 중요한 문제가 되고 있다.
손실 압축(lossy compression)의 목표는 주어진 샘플의 비트레이트를 최소화하면서, 동시에 인간의 지각(perception)과 상관성이 높은 척도를 기준으로 왜곡(distortion)을 최소화하는 것이다. 전통적인 오디오 코덱은 일반적으로 인코더와 디코더를 결합한 정교한 신호 처리 파이프라인을 사용하여 오디오의 중복성을 제거하고 압축된 비트스트림을 생성한다. 전통적으로는 입력 신호를 변환(transform)으로 분해하고, 인간의 지각에 덜 영향을 미칠 구성 요소들의 품질을 희생하는 방식으로 이루어진다.
신경망을 이용해 인코더–디코더 메커니즘으로 학습된 변환(transform)을 사용하는 방법은 Morishima et al. (1990), Rippel et al. (2019), Zeghidour et al. (2021) 등에 의해 탐구되었으며, 본 연구는 이와 같은 흐름을 잇되 오디오 신호에 초점을 맞추었다.
손실 기반 신경 압축 모델에서 발생하는 문제는 두 가지다:
-
일반화 문제: 모델이 훈련 세트에 과적합되거나 특정 영역을 벗어나면 아티팩트(잡음)가 많은 오디오를 생성할 수 있다. → 이를 해결하기 위해 저자들은 크고 다양한 학습 데이터셋(섹션 4.1에서 설명)과, 지각적 손실(perceptual loss)로 작동하는 판별기(discriminator) 네트워크(섹션 3.4)를 도입했다. 다양한 지각적 손실에 대한 연구 결과는 섹션 4.5.1, 표 2에서 자세히 다룬다.
-
효율적 압축 문제: 연산량과 압축 크기 모두에서 효율적이어야 한다.
이를 위해 저자들은 두 가지 전략을 택했다:
-
첫째, 실시간으로 단일 CPU 코어에서 동작할 수 있는 모델에 제한했다.
-
둘째, 신경망 인코더의 부동소수점 출력을 Residual Vector Quantization (RVQ) 기법으로 양자화했다(관련 연구는 Van Den Oord et al., 2017; Zeghidour et al., 2021).
저자들은 또한 엔드투엔드 신경 압축 모델 설계가 여러 얽힌 선택들—즉 인코더–디코더 아키텍처, 양자화 방법, 지각적 손실—로 구성된다고 주장한다.
비록 객관적 평가 지표들도 존재하지만, 손실 기반 오디오 코덱의 평가는 결국 인간의 지각에 의존한다. 따라서 저자들은 음성과 음악 모두에 대해 다양한 설계 선택지를 평가하기 위해 **광범위한 인간 주관 평가(MUSHRA 테스트)**를 수행했다. MUSHRA 테스트는 사람들이 다양한 코덱(경쟁 코덱, 제안 방법, 원본 오디오)을 듣고 비교하여 점수를 매기는 방식이다. 이를 통해 개별 요소들의 효과뿐만 아니라 파이프라인 전체의 결합 효과도 평가할 수 있다(섹션 4.5.1, 그림 3, 표 1).
결과적으로, 제안 모델 EnCodec은 다음과 같은 성능을 달성했다:
-
24 kHz 단일 채널 음성/음악: 1.5, 3, 6, 12 kbps에서 최첨단 성능
-
48 kHz 스테레오 음악: 6, 12, 24 kbps에서 최첨단 성능
2. 관련 연구 (Related Work)
최근 신경망 기반 오디오 생성 기술의 발전으로 컴퓨터가 자연스러운 오디오를 효율적으로 생성할 수 있게 되었다. 가장 설득력 있는 초기 결과는 WaveNet (Oord et al., 2016)과 같은 자가회귀 모델(autoregressive models) 에서 나왔지만, 이는 추론 속도가 느리다는 단점이 있었다. 이후 다양한 접근법(Yamamoto et al., 2020a; Kalchbrenner et al., 2018; Goel et al., 2022)이 제안되었는데, 그중 본 연구와 가장 관련성이 높은 것은 GAN(Generative Adversarial Networks) 기반 접근법이다 (Kumar et al., 2019; Yamamoto et al., 2020a; Kong et al., 2020; Andreev et al., 2022). 이들 방법은 여러 스케일 및 주기를 다루는 다양한 판별기(adversarial networks)를 결합하여 자가회귀 모델과 유사한 품질을 달성할 수 있었다. 본 연구 또한 이와 유사한 적대적 손실을 확장하여 오디오 생성 과정에서 아티팩트를 줄이는 데 활용한다.
오디오 코덱 (Audio Codec)
저비트율(parametric) 음성 및 오디오 코덱은 오래전부터 연구되어 왔으나(Atal & Hanauer, 1971; Juang & Gray, 1982), 품질에는 큰 한계가 있었다. 일부 개선(Griffin & Lim, 1985; McCree et al., 1996)이 이루어졌음에도 불구하고, 여전히 여기 신호(excitation signal) 모델링은 도전 과제로 남아 있었다.
현재 전통적인 오디오 코덱의 최첨단 방법으로는 Opus (Valin et al., 2012)와 EVS (Enhanced Voice Service) (Dietz et al., 2015)가 있다. 이 코덱들은 다양한 비트레이트, 샘플링율을 지원하면서도 일반 오디오에 대해 높은 압축 효율을 제공하고, 실시간 압축도 가능하다.
신경망 기반 오디오 코덱 (Neural based audio codecs)
최근 신경망 기반 오디오 코덱들이 제안되어 유망한 결과를 보여주고 있다 (Kleijn et al., 2018; Valin & Skoglund, 2019b; Lim et al., 2020; Kleijn et al., 2021; Zeghidour et al., 2021; Omran et al., 2022; Lin et al., 2022; Jayashankar et al., 2022; Li et al.; Jiang et al., 2022). 대부분의 방법은 잠재 공간(latent space)을 양자화한 후 디코더에 입력하는 방식에 기반한다.
-
Valin & Skoglund (2019b): LPCNet vocoder(Valin & Skoglund, 2019a)를 사용하여 수작업 특징(hand-crafted features) 과 균등 양자화기(uniform quantizer) 를 조건으로 적용.
-
Gârbacea et al. (2019): VQ-VAE (Van Den Oord et al., 2017; Razavi et al., 2019)로 얻은 이산 단위(discrete units)를 WaveNet 기반 모델에 조건부 입력.
-
Skoglund & Valin (2019): Opus 코덱(Valin et al., 2012)의 출력을 WaveNet에 입력하여 지각적 품질 개선 시도.
-
Jayashankar et al. (2022), Jiang et al. (2022): 벡터 양자화 층(Vector Quantization Layer) 을 잠재 표현에 적용한 오토인코더(auto-encoder) 구조 제안.
-
Li et al.: Gumbel-Softmax (GS) (Jang et al., 2017)을 활용하여 표현을 양자화하는 방법 제안.
이와 관련하여 본 연구와 가장 밀접한 연구는 SoundStream 모델(Zeghidour et al., 2021)이다. 이 모델은 완전 합성곱 기반 인코더–디코더 아키텍처에 Residual Vector Quantization (RVQ) (Gray, 1984; Vasuki & Vanathi, 2006) 층을 추가하였다. 또한 재구성 손실(reconstruction loss) 과 지각적 적대 손실(adversarial perceptual loss) 을 동시에 최적화하였다.
오디오 이산화 (Audio Discretization)
최근에는 오디오와 음성을 이산 값(discrete values) 으로 표현하려는 다양한 시도가 이루어졌다.
-
Dieleman et al. (2018); Dhariwal et al. (2020): 계층적 VQ-VAE(hierarchical VQ-VAE) 기반 모델을 제안하여 원시 오디오의 이산 표현을 학습한 후, 자가회귀 모델과 결합하여 고품질 음악 생성 가능성을 보여줌.
-
Lakhotia et al. (2021); Kharitonov et al. (2021): 자기지도 학습 기반 음성 표현(HuBERT (Hsu et al., 2021)) 을 양자화하여 조건부 및 비조건부 음성 생성을 달성함을 보여줌.
-
유사한 방법이 음성 재합성(speech resynthesis) (Polyak et al., 2021), 음성 감정 변환(speech emotion conversion) (Kreuk et al., 2021), 음성 대화 시스템(spoken dialog system) (Nguyen et al., 2022), 음성-음성 번역(speech-to-speech translation) (Lee et al., 2021a; 2021b; Popuri et al., 2022) 등에 적용됨.
3. 모델 (Model)
길이 의 오디오 신호는 다음과 같이 표현될 수 있다:
여기서 는 오디오 채널 수이고, 은 샘플레이트 에서의 오디오 샘플 개수이다.
EnCodec 모델은 세 가지 주요 구성 요소로 이루어진다:
-
인코더 네트워크 : 오디오 조각을 입력으로 받아 잠재 표현 를 출력한다.
-
양자화 층 : 벡터 양자화를 사용하여 압축된 표현 를 생성한다.
-
디코더 네트워크 : 압축된 잠재 표현 로부터 시간 영역의 신호 를 복원한다.
전체 시스템은 시간 영역 및 주파수 영역 재구성 손실(reconstruction loss) 과, 다양한 해상도에서 작동하는 판별기(discriminator) 를 통한 지각적 손실(perceptual loss) 을 함께 최소화하도록 엔드투엔드(end-to-end) 방식으로 학습된다.
제안된 방법의 시각적 구조는 그림1에 나타나 있다.
3.1 인코더 & 디코더 아키텍처 (Encoder & Decoder Architecture)
EnCodec 모델은 스트리밍 가능한 단순 합성곱 기반(convolutional-based) 인코더–디코더 구조이며, 잠재 표현에 대해 인코더와 디코더 양쪽에 순차적 모델링(sequential modeling) 을 적용한다. 이러한 프레임워크는 음원 분리·향상, 신경 보코더, 오디오 코덱, 인공 대역폭 확장 등 다양한 오디오 작업에서 뛰어난 성능을 보여왔다. 본 논문에서는 24 kHz와 48 kHz 오디오 모두에 동일한 아키텍처를 사용한다.
Encoder–Decoder
-
인코더 는 채널 수 , 커널 크기 7의 1차원 합성곱(1D conv) 으로 시작하며, 이어서 개의 합성곱 블록이 뒤따른다.
-
각 합성곱 블록은 (i) 하나의 residual unit과 (ii) 다운샘플링 레이어(스트라이드 합성곱; 커널 크기 는 스트라이드 의 두 배)로 구성된다.
-
Residual unit은 커널 크기 3의 합성곱 2개와 skip-connection으로 이루어진다.
-
다운샘플링이 발생할 때마다 채널 수를 두 배로 늘린다.
-
합성곱 블록 다음에는 2층 LSTM(순차적 모델링)이 붙고, 마지막으로 커널 크기 7의 1D 합성곱으로 출력 채널 를 만든다.
-
하이퍼파라미터는 Zeghidour et al. (2021), Li et al. (2021)을 따라 , , 스트라이드 를 사용한다. ELU(Clevert et al., 2015)를 비선형 함수로, 정규화는 Layer Normalization(Ba et al., 2016) 또는 Weight Normalization(Salimans & Kingma, 2016)을 쓴다.
-
용도에 따라 저지연 스트리밍(streamable) 또는 고충실도 비스트리밍(non-streamable) 변형을 둔다. 이 구성으로 인코더는 24 kHz에서 초당 75 latent step, 48 kHz에서 초당 150 latent step을 출력한다.
-
디코더 는 인코더 구조를 미러링하며, 스트라이드 합성곱 대신 전치 합성곱(transposed conv) 을 쓰고, 인코더의 스트라이드 순서를 역순으로 적용하여 최종 모노 또는 스테레오 오디오를 생성한다.
-
각 합성곱에 대해 총 패딩을 로 두고, 이를 시작 시점 이전과 종료 시점 이후에 동일하게 분할한다(만약 가 홀수이면 시작 쪽에 1을 더한다).
-
입력은 1초 길이의 청크로 나누고, 클릭 노이즈 방지를 위해 10 ms 오버랩을 둔다. 각 청크를 정규화한 뒤 모델에 넣고, 디코더 출력에는 역연산을 적용한다(스케일 정보를 전송하기 위한 대역폭 오버헤드는 무시 가능).
-
시간 차원까지 포함해 통계를 계산하는 Layer Normalization을 사용하여 상대적 스케일 정보를 보존한다.
-
모든 패딩을 프레임의 첫 시점 전에만 둔다.
-
전치 합성곱의 스트라이드가 일 때, 처음 개의 타임스텝 출력은 즉시 내보내고, 나머지 개는 메모리에 보관했다가 다음 프레임이 들어오면 보완(또는 스트림 종료 시 폐기)한다.
-
이 패딩 방식 덕분에, 모델은 처음 320개 샘플(13 ms)을 입력받는 즉시 320개 샘플(13 ms)을 출력할 수 있다.
-
스트리밍 환경에 부적합한 (시간 차원 통계를 쓰는) Layer Normalization 대신 Weight Normalization을 사용한다.
-
한 형태의 정규화를 유지하면 객관적 지표상 소폭 이득이 있음을 관찰했으며, 이는 표 A.3에서 보인다.
3.2 잔차 벡터 양자화(Residual Vector Quantization)
우리는 인코더 출력의 양자화에 Zeghidour 등(2021)에서 소개된 잔차 벡터 양자화(RVQ)를 사용한다. 벡터 양자화는 주어진 크기의 코드북(codebook)에서 입력 벡터와 가장 가까운 항목으로 입력을 사상(프로젝션)하는 절차이다. RVQ는 이 과정을 한 단계에서 끝내지 않고, 양자화 후에 남는 잔차(residual)를 계산한 뒤 이를 두 번째 코드북으로 다시 양자화하고, 같은 과정을 계속 반복함으로써 점진적으로 정밀도를 높인다.
우리는 Dhariwal 등(2020)과 Zeghidour 등(2021)에서 설명된 것과 동일한 학습 절차를 따른다. 각 입력에 대해 선택된 코드북 항목은 감쇠 계수 0.99를 가진 지수이동평균(EMA)으로 갱신하며, 사용되지 않은 항목은 현재 배치에서 샘플링한 후보로 교체한다. 인코더의 그레이디언트를 계산하기 위해 스트레이트스루 추정기(Straight-Through Estimator, STE)를 사용하여, 역전파 시에는 양자화 단계를 항등함수처럼 취급한다. 마지막으로, 커밋먼트 손실(commitment loss)을 전체 학습 손실에 더하는데, 이는 양자화기 입력과 출력 사이의 평균제곱오차(MSE)로 정의되며, 그레이디언트는 입력에 대해서만 계산된다.
좋아요! 요청하신 세 문장을 한 문장씩 “무슨 뜻인지 → 왜 그렇게 하는지 → 작은 예시” 순서로 풀어볼게요.
1) “코드북 항목은 EMA(감쇠 0.99)로 갱신, 안 쓰인 항목은 배치에서 교체”
-
무슨 뜻?
인코더가 낸 벡터 z를 각 코드북에서 가장 가까운 코드 e_k로 스냅합니다. 그다음 그 e_k를 지수이동평균(EMA)으로 부드럽게 업데이트해요:
e_k ← 0.99·e_k + 0.01·z.
반대로, 어떤 코드는 오래도록 선택이 안 되면 “죽은 코드”가 되므로, 현재 배치에서 샘플 하나를 뽑아 그 코드로 **교체(리셋)**합니다. -
왜 이렇게?
-
EMA는 코드가 갑자기 튀지 않게(학습 안정) 하면서도 데이터 분포를 따라가게 해줍니다.
-
죽은 코드를 배치 표본으로 교체하면 코드북 전체가 고르게 쓰이게 되어 압축 효율이 좋아집니다(일종의 k-means 재시작과 비슷한 효과).
-
-
작은 예시
현재 코드 e_k = (1.0, 2.0), 인코더 출력 z = (1.1, 1.9) 라면
업데이트 후 e_k = 0.99·(1.0, 2.0) + 0.01·(1.1, 1.9) = (1.001, 1.999).
반면 코드 e_j가 수백 스텝 동안 한 번도 선택되지 않았다면, 배치의 임의 샘플 z*로 e_j ← z* 로 갈아끼웁니다.
2) “STE로 인코더 그레이디언트 계산(역전파 때 양자화=항등으로 취급)”
-
무슨 뜻?
양자화(가장 가까운 코드로 ‘반올림’)는 비미분입니다. 그래서 역전파 때는 스트레이트스루 추정기(STE) 를 써서,
“앞으로는 이산값을 쓰되, 뒤로는 미분을 그냥 통과시키자”고 가정해요. 즉, ∂q(z)/∂z ≈ I 로 두고 그래디언트를 그대로 흘립니다. -
왜 이렇게?
-
양자화 단계에서 그래디언트가 끊기지 않도록 해서 인코더가 배울 수 있게 합니다.
-
디코더/손실에서 나온 신호가 양자화 앞의 연속 공간까지 자연스럽게 전파돼, 인코더 출력이 점점 코드에 잘 ‘붙게’ 됩니다.
-
-
작은 예시(감각적인)
스칼라 양자화가 “가까운 정수로 반올림”이라고 해봅시다.
입력 x=2.3 → q(x)=2 로 전방향은 이산이죠. 원래라면 dq/dx=0 이어서 인코더가 안 배워요.
STE는 “역전파만큼은 dq/dx=1처럼 치자”라서, 예를 들어 손실이 0.2 의 그래디언트를 내면 그 0.2 가 인코더까지 그대로 전달됩니다.
3) “커밋먼트 손실을 추가(MSE, 그래디언트는 입력에만)”
-
무슨 뜻?
커밋먼트 손실은 양자화 전 벡터 z와 양자화 결과 z_q 사이의 MSE:
L_commit = ‖z − z_q‖² (단, z_q 쪽에는 그래디언트를 주지 않음). -
왜 이렇게?
-
인코더 출력 z가 선택된 코드 e_k(=z_q) 에 가까이 ‘붙도록(커밋)’ 강제합니다.
-
코드 자체는 EMA로 천천히 움직이고, 커밋먼트 손실은 인코더 쪽만 당겨 줘서 “코드가 z를 쫓아다니는 불안정성”을 줄입니다(역할 분담).
-
-
작은 예시
z=(0.5, −0.2), z_q=(0.4, −0.1) 이면 차이는 (0.1, −0.1),
L_commit = 0.1² + (−0.1)² = 0.02.
역전파에서 z는 z_q 쪽으로 이동하는 신호를 받고, z_q(=코드) 는 고정(또는 EMA로만)됩니다. 결과적으로 인코더는 코드 근처로 출력을 내게 되고, RVQ가 안정·효율적으로 작동합니다.
위 세 가지가 합쳐져서, RVQ의 코드북이 안정적으로 갱신되고, 양자화가 학습 가능해지며, 인코더 출력이 이산 코드에 잘 정착(커밋) 하도록 만듭니다.
STE 복습
학습 시 잔차 단계(residual step)의 수를 가변적으로 선택함으로써, 단일 모델로도 여러 목표 대역폭을 지원할 수 있다(Zeghidour 등, 2021). 우리 모든 모델에서 코드북은 최대 32개(48 kHz 모델의 경우 16개)까지 사용하며, 각 코드북은 1024개의 항목을 가진다. 즉, 코드북당 약 10비트에 해당한다. 가변 대역폭 학습을 수행할 때에는 코드북의 개수를 4의 배수로 무작위 선택하며, 이는 24 kHz에서 1.5, 3, 6, 12, 24 kbps의 대역폭에 대응한다. 인코더에서 [B, D, T] 형태의 연속(latent) 표현이 주어지면, 이 절차는 이를 선택된 코드북 수 Nq에 해당하는 [B, Nq, T] 형태의 이산 인덱스 집합으로 변환한다. 이 이산 표현은 해당 코드북 항목을 합산함으로써 다시 벡터로 되돌릴 수 있으며, 이 연산은 디코더에 입력되기 직전에 수행된다.
3.3 언어 모델링과 엔트로피 부호화
우리는 단일 CPU 코어에서 엔드투엔드 압축/복원이 실시간보다 빠르도록 유지한다는 목표로, 추가로 소형 트랜스포머 기반 언어 모델(Vaswani et al., 2017)을 학습한다.
- 이 모델은 5개 층, 8개 헤드, 채널 수 200(모델 차원 200), 피드포워드 블록 차원 800, 드롭아웃 없음으로 구성된다.
학습 시에는 특정 대역폭을 고르고, 그에 대응하는 코드북 개수 를 선택한다.
시간 단계 에서, 에서 얻은 이산 표현을 코드북마다 하나씩 갖는 학습된 임베딩 테이블로 연속 표현으로 바꾼 뒤, 이를 합산한다. 에는 특수 토큰을 사용한다. 트랜스포머의 출력은 개의 선형 계층으로 들어가며, 각 계층의 출력 채널 수는 해당 코드북의 원소 수(예: 1024)와 같다.
이렇게 하여 시간 에서 각 코드북에 대한 분포의 로짓을 얻는다. 우리는 한 시점 내 코드북들 사이의 잠재적 상호정보량은 무시한다. 이는(각 코드북마다 별도의 시간 단계를 두거나 다단계 예측을 하는 것과 달리) 추론을 가속하는 대신, 최종 크로스 엔트로피에는 제한적인 영향만 준다. 각 어텐션 층의 인과적 수용영역(receptive field) 은 3.5초이며, 더 긴 시퀀스에서 학습되는 상황을 모사하기 위해 사인 위치 임베딩의 시작 위치를 무작위 오프셋한다. 모델은 5초 길이 시퀀스로 학습한다.
Entropy Encoding.
언어 모델이 제공하는 추정 확률을 활용하기 위해 범위 기반(range-based) 산술 부호화기(Pasco, 1976; Rissanen & Langdon, 1981)를 사용한다.
- Ballé et al. (2018)이 지적했듯이, 부동소수점 근사로 인해 아키텍처나 평가 절차가 달라지면 동일 모델이라도 결과가 달라질 수 있다.
- 이는 인코더와 디코더가 정확히 같은 코드를 사용하지 못하게 만들어 디코딩 오류로 이어질 수 있다.
- 특히 우리는 배치 평가(예: 모든 시간 단계를 한 번에)와 디코더에서 실제로 일어나는 스트리밍 평가 사이에 보다 큰 차이가 생길 수 있음을 관찰했다.
- 이에 따라, 실사용을 위한 추가 검증이 더 필요하다는 단서를 달고, 먼저 추정 확률을 정밀도로 반올림한다.
- 또한 전체 범위 폭을 로 사용하고, 최소 범위 폭을 2로 할당한다. 처리 시간에 미치는 영향은 4.6절에서 논의한다.
- 요즘에도 사용되는 정통 기법이라는 듯
- 먼저 학습할때 보면,
- 데이터에 따른 코드북 인덱스가 나올것이다
- Nq=8을 쓰고, 1024개의 코드북 클러스터링을 쓴다면
- [1, 5, 32, 106, 5, 2, ...] 와 같은 것이 8개가 매핑이 될 것
- 학습할때, [1, 5, 32]가 입력이고, 이 인덱스에 해당하는 코드북 벡터가 실제로 작은 Transformer입력으로 들어가고 [106]이 나오도록 LM 학습하듯이 되는 것인듯
- t=0은 스페셜 토큰을 쓴다. BOS 토큰같은거 말하는듯
- 다시 정리하면
- 첫번째 layer의 학습 데이터의 코드북 인덱스가 [k1,1 ..., k1,8]라고 하면
- 두번째 layer의 학습 데이터의 코드북 인덱스가 [1,6,4,3,...]라고하면
- 입력은 E1(k1,1)+...+E8(k1,8)이 되는 것이고
- 출력은 8개의 layer가 있고 각 layer의 출력 dimension 1024이고
- 두번째 layer 코드북의 인덱스인 [1,6,4,3,...] 을 예측하도록 학습되는 건가?
- 코드북 인덱스는 따로 관리하는 듯
- 즉 0~1023이 8개 세트있고, 그것에 해당하는 Embedding matrix가 따로 존재하는식
- 테스트할때는 아래의 예시처럼
- 모델이 예측하는 확률값을 통해 인코딩하는 로직이 있는듯
초간단 장난감 예시
세 가지 코드(토큰) A/B/C가 있고, 언어모델이 “다음”에 대해
A=0.7, B=0.2, C=0.1 로 예측한다고 해봅시다.
우리는 처음에 범위 [0, 1) 로 시작해서, 매 토큰마다 그 확률 비율대로 하위 구간을 고르는 방식으로 범위를 점점 좁혀요.
시퀀스: A, B, A, C 를 코딩
-
시작: [0, 1)
-
A(0.7) → A의 구간은 [0, 0.7)
새 범위 = [0, 0.7) (폭 0.7) -
B(0.2) → 누적구간이 [0.7, 0.9) 이므로
새 범위 = [0 + 0.7×0.7, 0 + 0.7×0.9) = [0.49, 0.63) (폭 0.14) -
A(0.7) → A 구간 [0, 0.7) 적용
새 범위 = [0.49, 0.49 + 0.14×0.7) = [0.49, 0.588) (폭 0.098) -
C(0.1) → C 구간 [0.9, 1.0) 적용
새 범위 = [0.49 + 0.098×0.9, 0.49 + 0.098×1.0)
= [0.5782, 0.588)
-
마지막에 이 구간 안의 임의의 수 하나(예: 0.582)를 이진수로 적으면, 그 수가 바로 “A,B,A,C”를 대표하는 압축된 비트열이 됩니다. 디코더는 같은 확률표로 역으로 좁혀가며 정확히 “A,B,A,C”를 복원해요.
얼마나 절약됐을까?
이 시퀀스의 “이상적 비트수”는
≈ ≈ 6.67비트.
-
고정 길이 부호라면(토큰 3개 ⇒ 최소 2비트/토큰) 4토큰 × 2비트 = 8비트 필요.
-
산술부호화는 ≈6.67비트면 충분 → 약 17% 절감!
분포가 더 치우칠수록(예: A=0.9, 나머지 0.1) 절감률은 더 커집니다. 자주 나오는 것(A)을 아주 짧게 적을 수 있으니까요.
3.4 학습 목표 (Training Objective)
우리는 복원 손실 항(reconstruction loss term), 판별기를 통한 지각 손실 항(perceptual loss term), 그리고 RVQ(commitment loss)를 결합한 학습 목표를 상세히 설명한다.
복원 손실 (Reconstruction Loss)
복원 손실 항은 시간 도메인 손실과 주파수 도메인 손실로 구성된다.
-
시간 도메인에서는, 목표 신호와 압축된 오디오 간의 L1 거리를 최소화한다:
-
주파수 도메인에서는, 여러 시간 스케일에서 멜-스펙트로그램을 이용하여 L1 손실과 L2 손실의 선형 결합을 최소화한다:
여기서 는 정규화된 STFT를 사용한 64-빈 멜 스펙트로그램이고, 창 크기는 , 홉 길이는 이다. 은 스케일 집합을 나타내며, 는 L1과 L2 항의 가중치 집합이다. 우리는 로 설정한다.
판별 손실 (Discriminative Loss)
생성된 샘플의 품질을 개선하기 위해, 멀티 스케일 STFT 기반(MS-STFT) 판별기를 활용한 지각 손실 항을 도입한다.
-
MS-STFT 판별기는 서로 다른 스케일의 복소수 STFT(실수부와 허수부를 연결한 형태)에 대해 동일한 구조의 네트워크를 적용한다.
-
각 서브 네트워크는 2D 합성곱 층(커널 크기 , 채널 수 32)으로 시작하고, 시간 축에 대해 팽창율(dilation) 1, 2, 4를 적용한 2D 합성곱이 뒤따르며, 주파수 축에서는 stride 2를 사용한다. 마지막으로 커널의 합성곱 층이 최종 출력을 낸다.
-
다섯 가지 STFT 창 길이([2048, 1024, 512, 256, 128])를 사용하며, 48 kHz 오디오의 경우 두 배 크기의 창을 사용한다.
생성자(generator)의 적대적 손실은 다음과 같이 정의된다:
여기서 는 판별기의 수이다 .
또한, 생성자에 대해 상대적 특징 매칭 손실을 포함한다:
판별기는 다음의 hinge loss를 최소화한다:
판별기가 쉽게 생성기를 압도하기 때문에, 24 kHz에서는 2/3 확률로, 48 kHz에서는 1/2 확률로만 판별기의 가중치를 업데이트한다 .
다중 대역폭 학습 (Multi-bandwidth Training)
-
24 kHz에서는 RVQ 단계에서 선택된 코드북 수를 달리하여 1.5, 3, 6, 12, 24 kbps 대역폭을 지원하도록 학습한다.
-
48 kHz에서는 3, 6, 12, 24 kbps 대역폭을 지원한다.
-
대역폭별 전용 판별기를 두는 것이 오디오 품질에 도움이 되었으며, 따라서 배치마다 특정 대역폭을 선택하고 해당 판별기만 업데이트한다 .
VQ 커밋먼트 손실 (VQ Commitment Loss)
섹션 3.2에서 언급한 대로, 인코더 출력과 그 양자화된 값 간의 차이에 대해 커밋먼트 손실을 추가한다. 양자화된 값에 대해서는 그래디언트를 계산하지 않는다.
각 잔차 단계 에 대해, 를 현재 잔차, 를 코드북의 최근접 항목이라 하면:
전체 생성자 손실 (Overall Generator Loss)
최종적으로 생성자는 다음 손실을 최적화한다:
여기서 는 각 손실 항의 가중치이다 .
손실 밸런서 (Loss Balancer)
훈련을 안정화하기 위해 손실 밸런서를 도입한다. 이는 특히 판별기에서 오는 그래디언트의 스케일 차이를 완화한다.
-
각 손실 에 대해 라 하자.
-
최근 배치들에 걸쳐 의 지수 이동 평균을 계산한다.
-
기준 값 과 가중치 가 주어졌을 때, 다음과 같이 보정된 그래디언트를 정의한다:
-
역전파 시, 원래의 대신 를 사용한다 .
이 접근법은 최적화 문제 자체를 바꾸지만, 각 를 손실의 스케일과 무관하게 해석할 수 있게 해준다. 즉, 일 때, 각 가중치는 해당 손실이 전체 그래디언트에 기여하는 비율을 의미한다. 논문에서는 를 사용했다. 단, 커밋먼트 손실은 모델 출력과 직접적으로 연결되지 않으므로 제외된다 .
4 Experiments and Results 정리
그림 3 (p.7)
-
MUSHRA 평가 결과 (주관적 청취 평가, 95% 신뢰구간)
-
비교 대상: EnCodec (엔트로피 코딩 전/후), Lyra-v2, EVS, Opus.
-
결과:
-
EnCodec이 같은 대역폭에서 항상 더 높은 점수를 획득.
-
특히 3 kbps EnCodec > 6 kbps Lyra-v2, 12 kbps Opus.
-
엔트로피 코딩 적용 시, 대역폭이 25~40% 감소 (예: 3kbps → 1.9kbps).
-
표 1 (p.8)
-
MUSHRA 점수, 24 kHz 스트리밍 환경
-
카테고리: 깨끗한 음성, 잡음 음성, 음악 (2종).
-
결과:
-
Opus 6 kbps → 매우 낮은 점수 (20~30대).
-
EVS 9.6 kbps → 음성 품질은 높지만, 음악에서 부족.
-
Lyra-v2 → Opus보다는 낫지만, 여전히 EnCodec보다 낮음.
-
EnCodec → 3 kbps에서 이미 Lyra-v2 (6 kbps)보다 우수.
-
12 kbps EnCodec은 90점대 중반, 원본에 거의 근접.
-
표 2 (p.9)
-
판별기(Discriminator) 설정 비교
-
지표: SI-SNR, ViSQOL, MUSHRA.
-
결과:
-
MS-STFT 단독 사용(MS-STFTD) → 가장 간단하면서도 높은 점수 확보 (77.5).
-
MS-STFTD + MPD 조합 → 약간 더 높은 MUSHRA (79.0).
-
복잡한 구성이 꼭 필요하지 않음.
-
표 3 (p.9)
-
스트리밍 vs 비-스트리밍 비교 (6 kbps, 음성+음악)
-
결과:
-
스트리밍(EnCodec) → SI-SNR = 6.67, ViSQOL = 4.35.
-
비-스트리밍(EnCodec) → SI-SNR = 7.46, ViSQOL = 4.39.
-
성능이 약간 낮아지지만, 여전히 경쟁력 있음.
-
표 4 (p.10)
-
48 kHz 음악, 스테레오 압축 비교
-
대상: MP3 (64 kbps), Opus (6, 24 kbps), EnCodec (6, 12, 24 kbps).
-
결과:
-
Opus 6 kbps → MUSHRA 17.7 (매우 저품질).
-
EnCodec 6 kbps → MUSHRA 82.9 (MP3 64 kbps와 비슷).
-
EnCodec 12 kbps/24 kbps → 88~87점 (거의 원본에 근접).
-
EnCodec은 MP3 대비 약 10배 더 효율적.
-
표 5 (p.10)
-
지연(latency) 및 실시간 처리 속도(RTF)
-
결과:
-
EnCodec 24 kHz 스트리밍: 초기 지연 13 ms, 인코딩/디코딩 모두 실시간보다 10배 빠름.
-
EnCodec 48 kHz: 초기 지연 1초, 처리 속도는 실시간보다 약간 느림 (0.66~0.68).
-
Lyra-v2보다 느리지만 여전히 실시간 가능.
-
주요 포인트 요약
-
EnCodec은 기존 코덱(Opus, EVS)과 최신 뉴럴 코덱(Lyra-v2)보다 낮은 비트레이트에서 우수.
-
특히 3 kbps에서도 Lyra-v2(6 kbps), Opus(12 kbps)를 초월.
-
-
엔트로피 코딩 + Transformer LM → 대역폭 25~40% 추가 절감.
-
멀티-스케일 STFT 판별기 하나로도 충분 → 학습 단순화, 성능 유지.
-
스트리밍 모드: 성능은 약간 떨어지지만 여전히 경쟁력 있고, 실시간 처리 가능.
-
스테레오 압축(48 kHz): EnCodec 6 kbps가 MP3 64 kbps 수준 달성 → 압축 효율 약 10배.
-
실시간성: 24 kHz는 CPU 단일 코어에서 10배 실시간, 48 kHz는 약간 느리지만 개선 여지 있음.
5 결론 (Conclusion)
우리는 EnCodec을 소개했다: 이는 최첨단의 실시간 신경망 기반 오디오 압축 모델로, 다양한 샘플링 레이트와 대역폭에서 고충실도의 오디오 샘플을 생성한다. 우리는 **24 kHz 모노 1.5 kbps (그림 3)**부터 **48 kHz 스테레오 (표 4)**까지의 주관적·객관적 결과를 제시했다.
우리는 **스펙트로그램만을 활용한 단순하지만 강력한 적대적 손실(adversarial loss)**을 개발하여, 인공적인 왜곡(artifact)을 효율적으로 줄이고 고품질 샘플을 생성할 수 있었다.
또한, **새로운 그래디언트 밸런서(gradient balancer)**를 도입하여 학습을 안정화하고, 손실 함수들의 가중치를 해석 가능하게 만들었다.
마지막으로, 소형 Transformer 모델이 대역폭을 추가적인 품질 저하 없이 최대 40%까지 더 줄일 수 있음을 보였다. 이는 특히 **낮은 지연(latency)이 필수적이지 않은 응용(예: 음악 스트리밍)**에서 유용하다.
Reference








댓글
댓글 쓰기