[2]Encoder-Decoder TTS_1
딥러닝 논문정리

[2]Encoder-Decoder TTS_1

 

[2]Encoder-Decoder TTS Models1

[Deep Learning Architectures]

음성쪽에서 주로 많이 사용하는 툴:

(시퀀스라 병렬처리x) RNN이 처음에는 많이 사용되었었다.

2017년도에 처음으로 CNN이 사용되었고, 병렬처리가 되어서 훨씬 빠르다.

Attention models - Transformer로 요즘은 자연어 처리 모델이 이루어져 있다.

 

[RNN]:

시간 순서대로 들어오는 정보를 처리하기 위해서 설계된 네트워크. 주로 앞뒤의 상호 관계를 같이 봐야하는 그런 문제들에 이용된다.

RNN에는 recurrent connection이 있고, 이것은 과거에 히든 정보를 다음 스테이트로 전달해준다.

확률값을 만들기 위해서 softmax를 씌워준다.

 

[LSTM]:

RNN은 long term dependency를 잘 할습하지 못한다. 즉, 시간 거리가 길때 잘 학습하지 못한다. 이것을 해결한 것이 바로 LSTM이다.

 

해결방식:

1)vanishing/exploding gradient problem:

Weight vector가 계속 곱해진다. 그래서 너무 커지거나 너무 작아진다.

이 문제에 대한 해결로 constance error carrousel (CEC)가 사용된다.

Forget gate와 input gate를 이용한다.

Forget gate를 이용해서, 증폭하지 않고 이전 값을 그대로 전달을 한다.

forgetgate가 나온 이유는, 갑자기 컨텍스트가 변하는 경우 과거 정보를 리셋 할 수 있기 위해서.

2)input/output weight conflict problem:

입력넷이 시간에 따라 공유가 되는 RNN의 경우, 맨 앞의 정보가 중요해서 weight을 키워야 하나, weight을 같이 사용하기 때문에 불가능하다.

gate를 이용해서 해결했다. 0이나 1을 주어서 닫거나 열어줌.

 

[GRU]: LSTM의 더 심플한 버전이다.

Weighted average를 취해준다. 리셋게이트를 거쳐서 히든 값을 넣게 한다. 전체적인 파라미터의 수가 더 줄어들게 된다.

LSTM이 더 많은 문제를 풀지만, 둘다 풀리는 문제의 경우 GRU가 좀더 경제적으로 문제를 풀 수 있다.

 

[Sequence-to-Sequence Mapping]:

기계 번역, 음성처리(음성인식) 등이 이것을 사용했다고 볼 수 있다.

Encoder-decoder architecture

Encoder: input sequence를 받아서, 하나의 고정된 context vector로 만들어 주는 역할을 한다.

Decoder: context vector를 새로운 아웃풋 시퀀스로 만들어주는 역할을 한다.

RNN의 입력은 주로, context vector이다.

입력시퀀스를 X1,X2로 표현 할 수 있고, 아웃풋 시퀀스를 Y1,Y2로 표현 할 수 있다.

TTS의 가장 어려운 점은, 입력 시퀀스의 길이보다 출력이 훨씬 길다는 점이다. 이 문제는, high resolution을 만들어 내야하는 영상 합성과 방법론이 비슷하게 해결될 수 있다.

 

[Attention]

전반적인 sequence-to-sequence를 하나로 만들면 문제가 생긴다.

그 문제는 encoder에서 만들어낸 많은 정보를 하나의 s vector로 나타내면 정보가 소실 될수 있다. 그리고 가까운것은 잘 반영이 되지만 아닌건 없어지는 경우가 많이 생길 수 있다. 이 문제를 극복하기 위해서 Attention을 이용한다.

역할: decoder가 필요하면 모든 위치의 정보를 조합해서 가져갈수 있게 전부 전달해준다. 그리고 매 타임마다 RNN의 hidden state을 보관한다. 적절한 weight을 계산하게 해서, 시간별 state에 따라서 weighted sum으로 처리해서 가져온다. 이렇게 하면 어느 정보를 더 강하게 봐야하는지 스스로 할습하고 결정 할 수 있다.

attention은 별도의 네트워크에 의해서 만들어진다.

 

[Memory Networks]

4가지 모듈로 이루어짐

1)Input 모듈: like feature extractor

2)질문이 되는 것은 o로 가서 어떤 question에 대해서 가장 답하기 좋은걸 메모리에서 찾아서 가져온다.

3)기억해야하는 fact 정보는 g로가서 메모리에 저장을 한다.

4)response모듈: 메모리를 참조해서 워드의 임베딩을 예를 들어서 받아서 실제 워드를 출력해주는 역할이다.

 

[Hard Addressing vs. Soft Addressing]

memory는 벡터 하나 하나 이다.

하나를 찾아서 그 위치에 위치하는 것을 가져 온다.

[hard]원 핫벡터로 한곳에서 가쟈온다.

[soft]w*m의 sum을 이용 해야 한다. hard는 미분이 안되기 때문에, 학습을 위해서 memory network에서는 softnetwork을 사용한다.

 

[Key-Value Memory]

sentence가 들어오면 두가지 vector로 만든다.

카와 벨류를 임베딩으로 만들어서 각각 저장한다.

question이 들어오면, 임베딩을 만들고 키들과 메칭을 해서 스코어를 매긴다. 주로 inner product로 한다. weight벡터로 에드레스를 만들어 내고, 그걸로 벨류를 가져 온다.

'딥러닝 논문정리' 카테고리의 다른 글

FastSpeech1, 2  (0) 2021.07.08
Transformer TTS  (0) 2021.07.08
[3]Encoder-Decoder TTS_2  (0) 2021.07.08
[1]Introduction to Speech Preprocessing  (0) 2021.07.08
ResNet 논문정리  (0) 2021.05.11