paper: PASE, PASE +
code: https://github.com/santi-pdp/pase
Reference: https://ratsgo.github.io/speechbook/docs/neuralfe/pase
boltzmann machines?
P
roblem-a
gnostic s
peech e
ncoder (PASE):매우 Simple! input (waveform) 받아서 SincNet -> 7개 Conv layer -> Batch Normalization 끝!
(1) SincNet : rectangular band-pass filters 사용하는 sinc function 적용해서 waveform을 convolution함
SincNet 이해 안된 부분 해결!! (ref: https://ratsgo.github.io/speechbook/docs/neuralfe/sincnet)
- 의문점: 주파수값 두개만 설정하면 된다는 게 왜 효과적인가? conv layer에서 filter가 각 element별로 곱해진다는 개념가진 알겠는데, 이게 주파수 개념에서는 filter가 어떻게 곱해진다는지가 이해가 안됐다!!!!
- 1) 사람의 음성이 여러 waveform으로 되어있다는 것을 간과
- 2) 수식에서 1과 0의 의미 파악 제대로 안했음
- 0곱해서 없애버린다는 거군? 맨끝에는 바로 0 안하고 1/2로 살려두는거구나!!! smoothing
- 3) rec(t) => sin(x)/x 역변환관계 간과: 역변환으로 표현되니까 똑같이 없애버린다는 뜻이 되는거군!
추가: 왜 y축을 기준으로 뒤집어서 내적하는 것과 같은지?!?!
이건 convolution (뒤집는거) Vs correlation (안뒤집는거)의 차이라고 한다! 필터가 좌우대칭이면 계산 결과가 같을 순 있으나, 용도, 해석이 다를 수 있다.
ref: 설명 블로그
(2) 7 Convolutional blocks
(3) Linear layer : 사이즈 맞추려고
(4) Batch normalization + PReLu activation
추가: 아 뭔소리지 일단 넘어가..
7가지 self-supervised task 실시
Binary discrimination tasks
signal보단 abstraction을 학습할 수 있어서! (=> 오 이렇게 해석할 수 있구나)
trainig pool에서 negative, positive sampling strategy를 적용.
loss: minimizing L, positive는 가깝게, negative는 멀게
(wave2vec training 기법 느낌이구먼!)
(1) Local info Max (LIM):
goal: local 정보 학습
sample | method |
---|---|
anchor x_a | random sentence 추출 |
positive x_p | x_a와 같은 sentence에서 추출 |
negative x_n | 다른 speaker의 random한 sentence |
(2) Global info max (GIM)
goal: local보단 global에 집중!해서 input 시퀀스에서 high level 정보를 학습하길 희망.
sample | method |
---|---|
anchor x_a | long random chunk of 1s 안에서 random utterance의 모든 PASE-encoded frame의 평균값 (모든 speaker들의 1초를 평균낸다는건가?) |
positive x_p | x_a와 같은 sentence에서 다른 random chunk를 가져온다. |
negative x_n | 다른 sentence에서 random chunk |
(3) Sequence predicting coding (SPC)
goal: sequential order of the frames and the signal causality. longer time context 정보 학습할 수 있길 희망.
sample | method |
---|---|
anchor x_a | single frame |
positive x_p | randomly extracted from its 5 consecutive future frames |
negative x_n | randomly extracted from its 5 consecutive past frames |
current-frame receptive field (150ms) 안에서는 sampling 하진 않음! x_a에서 최소 500ms 떨어져있는 곳에서 구함!
어떻게 prtrained model로서 사용될 수 있느냐!
worker 성능 확인하기 위해서, 전체에서 worker 하나씩 없애면서 학습을 진행함. 뭐가 빠졌을 때 성능이 제일 떨어졌는지 확인 필요!
모든 workers 다 썼을 때 제일 좋은 성능!
MFCC: 전반적으로 다 좋음. low-level, prior knowledge를 잘 담았나봄
prosody: emotion과 관련된 feature라서 영향 큼 (intonation, voice 관련이라)
ASR에선 큰 영향 없는건 왜일까? decoding이 잘못된건가?!
왜 위에랑 같은 성능이 없지..? ????
Goal
PASE에서 부족했던 noise and reverberation (잔향) 문제를 다뤄보겠다! => denoising
reverberation (잔향):
소리가 전파될 때 벽 같은 곳에 부딪쳐서 반사되거나 흡수되서 신호가 오기도 함.
그런데 신호마다 잔향 정도가 달라서 방해될 수 있음. 잔향이 많으면 반복되는 소리가 들리는 것 같음.
PASE에 비해 달라진 점!
추가된 사항
Skip connections
Quasi-RNN
논문을 제대로 안봐서 정확히 파악한 건 아니지만, 수식적으론 LSTM처럼 forget gate, output gate 이런거 계산하지만, 개념적으로는 약간 transfomer 구조 같다는 느낌을 받음. mask conv 통해서 미래 정보 말고 과거 정보까지만 받아서 계산하고, element wise해서 한번에 계산하고. 등등
paper (ICLR 2017): https://arxiv.org/pdf/1611.01576.pdf
- RNN의 Sequence order 처리 + CNN의 병렬작업
- result: sentiment classification task LSTM과 성능 비슷, 속도 3배 fast
ref: https://housekdk.gitbook.io/ml/ml/nlp/qrnn
원래 나온거에 mfcc랑 ivector 더 해서 실험
PASE, PASE+는 self-supervised learning + multi-task down stream task 통해서 효과적인 feature extractor 구축!
study 진행하면서 modality는 다르지만 모델들이 맞닿아 있는게 보임! 역시 근본은 NLP? ㅎ_ㅎㅋㅋㅋㅋ
https://github.com/santi-pdp/pase/blob/master/train.py
distortion 예시
encoder 예시
기본 conv(여러개중 하나)
skip connections
decoder 예시
training
class pase에서 모든 worker들 loss 다 구해다가 마지막에
worker_scheduler.py의 def backprop_scheduler()에서 다 합함!
논문을 보고 이해하지 못했던 부분들을 포스팅으로 이해하네요!! 좋은 정리 글 감사합니다