본문 바로가기
기술 이야기/논문 리뷰

(2/2) AudioGen: Textually Guided Audio Generation 리뷰

by 넌 꿈이 뭐야? 2023. 8. 6.

 

 

앞선 내용은 AudioGen: Textually Guided Audio Generator 1부에서 읽어주세요

 

(1/2) AudioGen: Textually Guided Audio Generation 리뷰

안녕하세요, 오늘은 AudioGen: Textually Guided Audio Generation 논문을 살펴보도록 하겠습니다. 논문 제목은 AudioGen인데 코드나 블로그에서는 AudioCraft라고 소개하고 있습니다. 프로젝트 이름이 AudioCraft,

thecho7.tistory.com


Audio Representation

먼저 좋은 Audio representation을 얻기 위해 Auto-encoder를 제대로 학습해야 합니다.

아래는 그 과정에서 가장 중요한 Training objectives를 소개합니다.

Audio representation model

Audio Loss Functions

습관적으로 Loss function이라고는 썼지만 논문처럼 Training Objective가 더 적절한 표현 같습니다. 말 그대로 "모델이 무엇을 학습하길 바라는데?"라는 의미이기 때문입니다.

Audio representation을 학습하는 과정에는 총 5개의 Loss가 존재합니다.

먼저 Generator는 아래의 4개의 loss 합으로 이루어집니다.

  • \(\ell_{t}\): Time-domain reconstruction loss
  • \(\ell_{f}\): Frequency-domain reconstruction loss
  • \(\ell_{g}\): Adversarial loss for Generator
  • \(\ell_{feat}\): Feature matching loss

그리고 Discriminator는 

입니다. 하나씩 살펴보겠습니다.

Time-domain reconstruction loss

$$ \ell_{t}(x, \hat{x}) = \| x - \hat{x}\|_{1} $$

입력 오디오 \(\mathbf{x}\)와 Autoencoder를 통해 나오는 결과 \(\hat{\mathbf{x}}\)을 같게 만드는 함수입니다. 기본적으로 이걸 잘해야 Autoencoder라고 할 수 있기 때문입니다.

Frequency-domain reconstruction loss

  • \(S_{i}\): Normalized STFT으로 Fourier Transform을 한 오디오 데이터로 64-bins Mel-spectrogram을 수행한 결과
  • \(e\): STFT의 서로 다른 스케일 \(e \in [5, 6, ..., 11]\)

위에서 Time-domain에 대해 수행했는데 Frequency-domain은 무슨 뜻일까요?

\(x\)가 가로로 시간축, 세로로 오디오 채널을 갖는다면, \(S_{i}(x)\)는 \(x\)의 Mel-spectrogram으로써 가로로 시간, 그리고 세로로 주파수를 축으로 갖습니다. 이게 무슨 의미인지 어떻게 얻게 되는지는 이 블로그에 잘 설명되어 있으니 참고하시면 되겠습니다.

신경써야 할 부분은 \(L_{1}\), \(L_{2}\)의 선형 결합으로 이루어져 있는데, A Spectral Energy Distance for Parallel Speech Synthesis에서 제안하고 좋은 결과를 얻은 방법이라 채택했습니다.
(왜 두가지를 섞어 쓰나요? 그 이유는 \(L_{2}\)는 안정적으로 잘 수렴하지만 \(L_{1}\)에 비해 학습이 미적지근하기 때문에 잘 섞어 쓴다면 좋은 결과를 얻는 경우가 있기 때문입니다)

Adversarial loss for Generator

$$ \ell_{g}(\hat{x}) = \frac{1}{K}\sum_{k}\textup{max}(0, 1 - D_{k}(\hat{x})) $$

  • \(K\): Discriminator networks의 수

앞서 Frequency-domain 수행할 때 \(e\)는 STFT의 서로 다른 스케일을 의미했습니다. 다양한 스케일에 대해 학습할 경우 학습이야 조금 더 어려워지겠지만 좋은 성능을 거둠은 이미 많은 연구에서 보여준 내용입니다.

Generator(Auto-encoder)가 만들어 낸 \(\hat{x}\)을 서로 다른 스케일의 Discriminator \(D_{k}\)에 넣으면 \(x\)가 진짜 데이터일 경우 1, 가짜 데이터라면 0이 되도록 학습합니다.

Feature matching loss

$$ \ell_{feat}(x, \hat{x}) = \frac{1}{KL} \sum_{k=1}^{K} \sum_{l=1}^{L} \| D_{k}^{l} (x) - D_{k}^{l}(\hat{x}) \|_{1} $$

마지막으로 Feature matching loss는 Auto-encoder의 input \(x\), output \(\hat{x}\)을 다양한 스케일과 레이어 숫자의 Discriminator에 대해서 같도록 학습합니다.

개인적으로 지금까지 다룬 4가지 함수는 모두 좋은 Auto-encoder를 만들기 위함인데, 이정도까지 해야하는 지 잘 모르겠습니다...

 

그래서 결국 \(L_{G}\), \(L_{D}\)를 모두 학습하면서 좋은 Audio representation을 얻기 위한 학습을 합니다.


Audio Language Modeling

To Be Continued..

Classifier-free Guidance

Conditional Diffusion Models

CFG 블로그

반응형

댓글