본문 바로가기
딥러닝공부

Unsupervised speech representation learningusing WaveNet autoencoders _ 논문 리뷰

by 부자독개 2021. 4. 7.
반응형

Creating good data representations is important.

The goal is to learn a representation able to capture high level semantic content from the signal, e.g. phoneme identities.

이 논문의 목표는 좋은 latent를 찾는것이다.

좋은 latent란 해석가능하며 신호의 high level의 의미있는 정보를 포착가능하게 해주는것을 의미한다.

 

이 논문에서는 왜 supervised 가 아닌 unsupevised 러닝을 사용했을까?

2가지 단점이 supervised에는 존재하기 때문이다.

첫번째, 많은 양의 라벨데이타를 요구한다는 것이다. 많은 양의 양질의 라벨 데이타는 구하기도 힘들며 만들기는 더더욱 힘들다. 이는 딥러닝 모델을 비싸게 만든다. 

두번째, 주어진 라벨 데이타에 대한 과제에 있어서는 좋은 성능을 발휘 하겠지만, 모델이 가지는 insights에는 한계가 생기게 된다. 즉, 모델이 다른 도메인의 문제에 있어서는 바보가 되는것이다.

이러한 이유로 논문에서는 unsupervised 러닝을 통해 좋은 latent를 뽑고자 노력했다.

 

latent를 얻기위해서 3가지 구조를 사용했다.

1. basic Auto Encoder (AE)

2. Variational Auto Encoder (VAE)

3. Vector Quantized VAE (VQ-VAE)

 

각각의 구조를 간단하게 살펴보자.

 

1. AE

모델의 출력이 인풋을 그대로 복원해 내도록 설계됐다.

히든레이어가 점점 축소되는 것이 특징이며, 이렇게 설계한 이유는 인풋을 그대로 복사해 내는것을 방지하고자 제약(패널티?)을 주기위함이다. 가운데의 가장 축소된 히든레이어를 우리는 앞으로 latent representation이라고 부를것이다.

coding이라고도 많이 불린다.

 

2. VAE

이름은 AE가 들어가 있지만 설계한 목적은 AE와 많이 다르다. 오히려 generative 모델인 GAN과 유사성이 많다.

고정된 latent를 만들어내는 AE와 차별성이 있다. VAE는 latent의 값들이 가우시안 분포를 가지게끔 유도를 하고 그 가우시안 분포의 평균과 분산을 예측함으로써 latent의 확률 분포를 예측하게된다. 이렇게 되면 더이상 고정된 latent가 존재하는것 아니라 예측된 latent분포로 부터 샘플링된 변화가능한 latent가 만들어지게 되는것이다. 이렇게 되면 디코더에게 기존에는 존재하지 않았던 새로운 데이타를 생성하게 할 수 있다. 따라서 generative 모델이라고 하는 것이다.

 

3. VQ-VAE

기존의 latent의 백터들은 continous한 값을 가진다. 따라서 latent 벡터의 경우의 수는 무한하다. 무한한 경우의수에 대한 모델을 설계하는것 보다 제한된 경우의 수에서 모델을 설계하는것이 더 쉽지 않을까? VQ-VAE는 말그대로 백터의 양자화를 통해 latent 벡터가 가질 수 있는 경우의 수를 제한하는것이 특징이다. 임베딩 스페이스라는 코드북이 죽어지고 코드북안에는 latent 벡터를 치환할수 있는 백터들이 제한된 수만큼 존재한다. 학습을 통해 코드북의 벡터들이 latent의 벡터들을 가장 잘 표현할 수 있게끔 한다. 프로토타입과 같이 대표값을 찾는다고 생각해도 좋을것 같다. 이렇게 기존의 latent가 코드북의 벡터들로 치환되면 그 치환된 latent를 디코더의 입력으로 넣어주게 된다. VQ-VAE에 대해서는 좀더 학습이 필요하고 코스트에 대한 이해도 아직 부족하기 때문에 여기까지 설명한다.

 

이제부터 논문에서 제안하는 모델의 구조에 대해서 살펴보자.

 

인코더를 우선 살펴보면 입력은 그림과 같이 파형 (320ms)이 들어가게된다. 파형으로부터 10ms(100hz)마다 13 차원의 mfcc를 추출하고 이로부터 13차원의 델타(d), 델타-델타(a) 를 추출하여 39D이 된다. 이후에는 컨볼루션과 스트라이드 컨볼루션, ReLU를 거치는 단순한 구조이다. 

 

이후에는 앞에서 설명한 3가지 구조로 차원을 768 -> 64로 축소시킨다.

 

디코더에서는 인코더의 출력에 정규화와 업샘플링을 적용하는데 이 부분이 좀 특이하다. time-jitter regularization 이라는 드랍아웃으로 부터 영감을 받은 특이한 정규화 작업이 이루어 진다. 간단히 설명하면 특정 latent 벡터를 일정 확률에 따라서 이웃한 벡터와 교체하는 것이다. 이러한 정규화를 진행하는 이유는 음성신호는 특정 구간을 제외하고는 stationary한 특징을 가지는데 모델이 latent벡터의 작은 변화에 너무 오버피팅되는것을 방지하고자 이러한 정규화를 사용한 것으로 보인다. 업샘플링의 경우 waveform과 차원을 맞춰주기 위해 진행하는데 여기서 zero-padding을 사용하는지 transposed conv를 사용하는지는 설명이 안되어 있다. 주로 trasposed conv를 사용하기는 한다. 아무튼 여기서 320배의 업샘플링이 이루어지고 speaker의 one-hot 벡터와 concat이 된 후에 conditional input으로 wavenet에 들어가게 된다.

 

이후로는 논문의 실험 성능 평가에 대한 이야기므로 생략하도록한다.

간단히 리뷰하자면 VQ-VAE의 latent가 화자의 정보를 잘 제거하며 phoneme정보만을 잘 보존하여 가장 바람직한 구조라고 주장하고 있다. 하지만 여러 성능에서는 AE의 성능이 좋았는데 약간 찝찝한 부분이다. 그래도 VQ-VAE의 latent가 화자의 정보가 제거되고 phoneme정보만을 가지고 있다고 볼수 있기때문에 latent의 해석가능성 측면에서는 더 좋다고 볼 수 있을것 같다.

 

이번 논문은 다양한 구조의 latent가지고 다양한 실험을 했다는 것이 흥미로웠다.

아쉬운 점은 waveform -> waveform이 얼마나 잘 이루어 졌는지, latent를 학습하는데 사용된 loss function이 무엇인지에 대해서는 설명이 되어있지 않은 것이다.

반응형

댓글