이 논문은 옛날에 나온 논문입니다. 하지만 현재 사용되는 loss함수의 근원이 되는 논문이므로 리뷰를 해보도록 하겠습니다. 먼저 이 논문은 2017년에 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)에 출판된 논문입니다. 멋지군요. 이전에 제가 리뷰했던 speech separation의 SOTA논문의 저자가 참여한 논문입니다. 그러니까 꼭 읽어야겠죵?
이제 찬찬히 논문의 서론을 바라봅시다. 오! 첫 줄부터 이렇게 시작합니다. “우리는 새로운 딥러닝 훈련 기준을 제안하며, 이를 permutation invariant training(PIT)라고 명명합니다.” 멋집니다. 계속 봅시다. PIT는 칵테일 파티 문제라고 알려진 speaker(화자)에 독립적인 multi-talker speech separation을 위한 훈련 방법입니다(제가 알기로는 이 논문에서 제안한 방법이 최초로 딥러닝 그 자체를 학습해서 separation error를 minimize하도록 학습하는 방법론으로 알고 있습니다). 이런 학습 방법론은 speech separation의 기술 발전을 방해했던 long-lasting label permutation 문제를 효과적으로 해결합니다. 또한 기존의 여러 방법론들과 비교했을 때 training data set에 없었던 unseen speaker들과 language들에 대해서 일반화 성능이 좋았다고 합니다. 결정적으로 이 방법론의 장점은 다음과 같습니다. PIT는 구현이 간단하고 쉽게 통합되고 다른 고급 기술들과 결합될 수 있다는 장점이 있습니다. 이러한 장점 덕분에 PIT를 기반으로 한 개선 사항이 미래에 칵테일 파티 문제를 해결할 수 있다는 믿음을 가질 수 있다고 합니다.
!!잠깐!! 여기서 화자에 독립적인 이란 의미는 무엇일까? 정확히는 speaker independent의 의미가 무엇인지 궁금하지 않나요? 궁금하지 않으신 분은 보지 않으셔도 됩니다.. ㅠㅠ 화자 독립적이란 단어가 있다면 화자 종속적이란 단어도 있겠죠? 그럼 먼저 speaker dependent에 대해서 알아보고 넘어 가볼까요? Speaker dependent는 화자의 특정한 voice 특징들(characteristics)의 지식(knowledge)에 의존하는 음성 인식 소프트웨어를 말해요. 즉, 프로그램이 사용자가 말한 내용을 인식하기 전에 특정한 사용자에 대한 특징들이 trained 되어있어야 합니다. 이런 타입의 프로그램은 사용자가 한 명일 경우에 잘 작동해요(미리 사용할 사용자에 대한 특징들을 학습 시켜뒀으니 당연하겠죠?). 이렇게만 보면 화자 한 명에 대해서 만 인식한다는 것에 대해서 단점이 큰 것 같은데 당연히 장점도 있으니까 사용하겠죠? Speaker dependent 프로그램의 장점은 다양한 컨텍스트(단어, 구)에서 음성을 인식할 수 있는 것이라고 해요(오 그러면 특정 사람에 한해서는 사투리 같은 것도 잘 인식하겠군요). 반면 speaker independent 프로그램은 다양한 사용자에 대해서 음성을 인식할 수 있어요. 당연히 다양한 컨텍스트에 대해서는 인식할 수 없다는 단점이 존재하고요.
이제 Speaker independent에 대해서 알아봐요. 여기서는 당연하게도 사용자에 대해서 따로 train이 필요하지 않아요. 즉, speech 특성을 인식하기 위해 각 사용자 별로 학습을 진행하지 않아도 사용할 수 있어요. 아주 멋지죠? ㅎㅎ
이제부터 논문을 조금 더 자세히 살펴보겠습니다. 먼저 이 논문이 나오기 전에는 single-speaker speech에 대한 연구는 상당한 진전이 있었지만 multi-talker mixed speech separation and recognition연구에 대해서는 별다른 진전이 없었습니다. 특히나 하나의 마이크에 의해서 mix된 speech에 대해서는 더욱 발전이 없었다고 합니다. 반면에 사람은 이를 구분을 잘했죠(근데 실제로 데이터를 들어보면 사람도 구분하기 힘들어요…). 10년넘게 이 문제를 해결하기 위해서 연구자들이 밤낮을 세웠지만 문제를 잘 해결할 수는 없었다고 합니다. 일단 딥러닝 시대 전 가장 인기 있었던 방법들은 computation auditory scene analysis(CASA), non-negative matrix factorization(NMF) 그리고 GMM-HMM의 모델 베이스 방법들이 있었습니다. 하지만 이러한 방법들은 closed-set에서만 사용 가능했습니다. 이후에 multi-talker speech separation을 위한 딥러닝 모델들이 나왔지만 이 모델들은 computational cost가 높았고 다른 모델들과 혼합되기 어려웠습니다.
이러한 문제점을 해결한 것이 이 논문의 저자가 소개하는 새로운 학습 방법인 permutation invariant training(PIT) for speaker independent multi-talker speech separation 입니다(이 논문에서는 speaker에 independent하기 때문에 unseen data에 대해서도 잘 분리하게 됩니다). 이전 연구들에서는 speech separation문제를 multi-class regression 또는 segmentation(or clustering) 문제로 취급 했었습니다. 하지만 PIT는 separation error를 직접 minimize해서 문제를 해결하는 separation problem으로 취급합니다(이제 딥러닝 다운 end-to-end 모델이 된 것 같습니다). 이러한 방식의 학습 방법으로 인해 PIT는 사람과 같이 speaker와 language에 독립적으로 음성 신호를 분리하는 방법을 학습하는 것이라 생각할 수 있습니다(사람은 뭐 누가 어떤 언어로 말을 하던지 사람들의 목소리를 구분할 수 있죠. 이제 이런 방법을 학습하는 최초의 모델이라고 생각하면 될 거 같습니다). 또한 이 방법은 쉽게 구현 가능하고 다른 기술들과 쉽게 혼합될 수 있는 방법이라서 저자도 나중에는 결국 PIT 방법을 사용해서 칵테일 파티 문제를 해결할 수 있었으면 좋겠다 라는 바람을 담고 있습니다.
이제 어떤 문제를 해결해야 하는지에 대해서 알아봅시다. 먼저 monaural speech separation의 목표는 time-frequency영역에서 mixed되어져 있는 하나의 마이크에 대한 source signal들을 추정하는 것입니다. 먼저 time-frequency domain에 있는 S개의 source signal sequence을 X_s(t), s = 1, ..., S 라고 나타내고(두 명의 speaker가 섞여 있으면 S가 2겠죠?), mixed signal sequences는 y(t) = Σ_(s=1 to S) X_s(t) 라고 나타내겠습니다. 여기서 t는 time을 의미합니다. 이와 비슷하게 frequency를 추가한 short-time Fourier transformation(STFT)는 각각 X_s(t, f), s = 1, ..., S 와 Y(t, f) = Σ_(s=1 to S) X_s(t, f) 로 나타냅니다. 이렇게 주어진 Y(t, f) 에 대해서 monaural speech separation의 목표는 각 source X_s(t, f) 를 찾는 것입니다.
일반적으로 STFT magnitude spectra만 사용할 수 있다고 가정합니다. Phase 정보는 separation process동안은 무시되고 source의 time domain waveforms을 복구할 때만 사용됩니다.
여기서 문제가 발생합니다. Mixed spectrum의 magnitude인 |Y(t, f)| 만 주어졌을 때 |X_s(t, f)|를 복구하는 것은 잘못된 문제입니다. 왜냐하면 |X_s(t, f)| 는 무한의 조합으로 동일한 |Y(t, f)| 를 만들 수 있기 때문입니다. 이러한 핵심적인 문제를 해결하기 위해서 |Y(t, f)| 와 |X_s(t, f)| 를 쌍으로 가지고 있는 데이터 셋으로부터 규칙성을 학습하는 시스템을 구축해야 합니다. 여기서 말하는 시스템을 좀 더 정확하게 설명하면, 이 논문에서는 딥러닝 모델 g(f(|Y|);Θ) = |X̂_s|, s = 1, ..., S 을 사용해서 학습한다가 됩니다. 여기서 Θ는 모델의 파라미터 벡터이고 f(|Y|) 는 |Y| 의 어떤 feature representation 입니다(여기서 보면 time-frequency index가 없는데, 간편하게 쓰기 위해서 생략한 것입니다).
이 논문에서는 곧바로 |X_s| 를 추정하지 않고 M_s(t, f) 라고 표현되는 mask set 을 추정합니다. 왜냐하면 이렇게 문제를 해결해야 더 좋은 성능을 달성할 수 있다고 알려져 있기 때문입니다. 무튼 딥러닝 모델 h(f(|Y|);Θ) = M̂_s(t, f) 를 사용해서 mask set을 추정합니다. 다만 본 딥러닝 모델은 만족해야 하는 제약조건이 있는데, 첫 번째 제약조건인 M̂_s(t, f) >= 0 와 두 번째 제약조건인 모든 time-frequency bins(t, f)에 대해서 Σ_(s=1 to S) M̂_s(t, f) = 1 를 만족해야 합니다. 이 제약조건들은 softmax를 사용하면 쉽게 만족될 수 있다고 합니다(당연하겠죠?). 그러고나서 |X_s| 를 |X̂_s| = M̂_s ∘ |Y| 를 통해 추정합니다. 여기서 ∘ 의 의미는 element-wise product 입니다. 여기까지가 이 논문에서 사용하는 학습 전략이었습니다.
먼저 딥러닝 모델은 mask를 추정하기 때문에 모델에 의해서 추정된 mask M̂_s 와 ideal ratio mask(IRM) M_s = |X_s|/|Y| (아 M_s 가 이런 의미여서 Σ_(s=1 to S) M̂_s(t, f) = 1 를 제약조건으로 뒀구나!) 의 MSE 수식인 J_m 을 최소화하는 방식으로 학습이 진행됩니다.
여기서 T는 time frame들의 개수이고, F는 frequency bin들의 개수입니다(S는 source의 개수 였던거 기억하죵?). 그런데 이 접근법은 두 가지 문제점이 존재합니다. 첫 번째로 무음 segment들의 경우 |X_s| = 0, |Y| = 0 이므로 M_s 가 잘 정의되지 못합니다. 두 번째로 지금 우리는 mask를 추정하고 있는데, 우리가 진짜 알고 싶은 것은 각 source의 실제 magnitude와 추정된 magnitude 사이의 error 입니다. 그런데 mask의 error를 줄인다고 해서 magnitude의 error가 줄어든다는 보장은 없습니다.
이러한 문제들을 해결하기 위해서 최근 연구에서는 아래 식과 같이 추정된 magnitude와 실제 magnitude사이를 직접 MSE 연산을 합니다.
이 논문에서 J_x 를 최소화하는 마스크 M̂_s 를 추정하는 방식을 따릅니다.
PERMUTATION INVARIANT TRAINING
이 논문이 나온 시대에는 대부분의 speech separation문제를 multi-class regression 문제로 생각해서 풀었다고 합니다. 그 연구들에서는 모델이 각 화자 별 mask들의(화자가 두 명이면 mask가 두 개겠죠?) frame을 한 개씩 생성하기위해 딥러닝 모델의 입력으로 mixed signal |Y| 의 feature vector들의 N개의 frame들을 사용했다고 합니다(입력에 N개의 연속된 frame이 들어가는데요. 이렇게 frame의 개수가 다른 이유는 음성 데이터의 context정보를 이용하기 위함 이고 이를 meta-frame이라고 해요). 이렇게 생성된 mask는 source1과 2에 대해 single source speech인 |X̂_1| 과 |X̂_2| 의 한 frame을 구성하는데 사용됩니다.
이 방법은 훈련 동안 모델에 magnitude의 레퍼런스 값인 |X_1| 과 |X_2| 를 계속 제공해야합니다(지도학습 방식 이를 간단하게 reference assigning이라 하겠습니다). 따라서 모델에는 각 mixing source에 대해서 하나 씩 여러 개의 출력 레이어가 있습니다. 그런데 이 모델은 같은 크기의 input mixture에 의존하기 때문에 speaker가 많이 존재하면 reference assigning이 까다로울 수 있습니다. 왜냐하면 어떤 출력 레이어로 어떤 speaker의 출력이 나올지 알 수 없기 때문입니다. 이러한 문제가 바로 permutation이라 불리는 label 모호성 문제입니다(아래에 label permutation problem을 추가로 설명해 놓았습니다). 이러한 문제 때문에 이전 연구들에서는 speaker-independent multi-talker speech separation의 성능이 좋지 않았다고 하고, 이러한 문제 때문에 speaker-independent multi-talker speech separation은 실현이 어렵다라고 생각했다고 합니다.
하지만 이 논문에서는 솔루션을 제안합니다. 위의 그림이 바로 그것입니다. 이 새로운 모델에는 두 가지의 핵심 아이디어가 있는데, permutation invariant training(PIT)와 segment-based decision making 입니다. 먼저 PIT를 어떻게 만들었는지 알아봅시다. 위 그림의 점선으로 쳐진 사각형 부분을 통해 PIT를 만들었는데요. 이 부분 중 Pairwise scores부분부터 먼저 보겠습니다. 이 부분은 위에서 언급한 label permutation problem을 해결하기 위한 것입니다. 그럼 어떻게 해결할 것인가? 좀 무식한 방법으로 해결하긴 합니다. 먼저 각 speaker별 정답 label(이 후 이것을 reference라고 할게요)들을 적절한 출력과 비교 후 딥러닝 모델을 학습시키기 위해 (모델의 출력, reference)들의 쌍을 모든 가능한 경우의 수만큼 만듭니다. 즉 이것을 순열(permutation)이라고 할 수 있겠죠? 그 후 모든 쌍에 대해 loss를 구한 다음 최소 loss를 갖는 쌍을 선택해 네트워크를 학습시키는 방법입니다.
이 모델은 추론동안 mixed speech밖에 알 수 없습니다. 그러므로 speech separation은 각 입력 meta-frame에 대해서 직접적으로 수행되고 M개의 frame을 가진 출력 meta-frame이 각 정답을 추론합니다. 그런 다음 입력 meta-frame은 하나 혹은 그 이상의 frame만큼 이동합니다. 그런데 PIT는 학습하는 방법에 의해서 각 frame별로 output-to-speaker 에 대한 할당 순서가 다를 수 있습니다. 이는 speaker tracing problem이 발생할 수 있고, 이를 해결하기 위해 PIT의 출력 레이어에 speaker tracing 알고리즘을 적용해야 할 수 있습니다.
EXPERIMENTAL RESULTS
이 논문에서는 결과비교를 wsj0-2mix 데이터셋과 Danish-2mix 데이터셋을 사용해서 진행했습니다. 먼저 wsj0-2mix 데이터셋은 WSJ0 데이터셋으로부터 파생된 데이터셋인데, 30시간의 training set, 10시간의 validation set으로 구성되어져 있고, 두 명의 speaker들에 대해서 랜덤하게 선택된 뒤 섞여져 있습니다. 그런데 mixing되기 전 각 utterance들은 0db ~ 5db 사이의 SNR 값으로 uniformly하게 선택된 다음 그 후에 섞입니다. 이렇게 train set과 validation set이 만들어지고, test set도 유사한 방법으로 만들어집니다.
이 논문은 마이크로소프트에서 연구한 논문이기 때문에 CNTK라는 마이크로소프트 코그니티브 툴킷을 활용해 모델을 만들었습니다. Feed-forward는 3개의 hidden layers를 가지고 있고, 각각은 1024개의 ReLU activation function을 가지고 있는 unit으로 이루어져 있습니다. 전체 모델의 구조를 보면 다음과 같이 이루어져 있습니다. (inChannel, outChannle, stride) 형식으로 확인하면, 한 개의 (1, 64, 2), 네 개의 (64, 64, 1), 한 개의 (64, 128, 2), 두 개의 (128, 128, 1), 한 개의 (128, 256, 2) 그리고 두 개의 (256, 256, 1)로 이루어져 있고, 각각은 3 x 3 커널로 convolution 연산을 수행하는 레이어들입니다. 이 모델에 들어오는 input data는 speech mixture의 257-dim STFT 스펙트로그램 입니다. 이 모델의 output으로는 S-talker가 있을 때, S output이 나오게 됩니다. 각 output stream은 257 x M 크기를 가지는데, 여기서 M이란 output meta-frame의 크기입니다.
위 그림을 보면 training과 validation 에 대한 MSE loss를 epoch당 찍은 그래프 입니다. 전통적인 기법들은 Permutation problem때문에 loss가 적절히 감소되지 않지만 PIT는 아주 빠르게 loss가 감소되는 것을 확인할 수 있습니다.
다음으로는 이후 이 논문을 개선한 방법에 대하여 리뷰해보겠습니다.
!!잠깐!! 여기서 label permutation problem과 speaker tracing problem에 대해서 짧게 설명할게요! 혹시나 모르시는 분들은 여기서 알아가시면 돼요.
Lable permutation problem
딥러닝 모델은 supervised learning에 기반한 방법으로 원본 음성과 그에 대응되는 분리된 음성 사이에 error를 계산할 필요가 있어요. 하지만 network 출력에 대한 순열을 알 수 없기 때문에 올바른 대응 관계에 대한 error를 계산하지 못하는 문제가 있어요. 이를 label permutation problem 이라해요. 만약 잘못된 대응 관계로부터 계산된 error로 network가 학습되면 train loss가 최저점으로 수렴하지 못하고 발산하는 문제가 있어요.
Speaker tracing problem
딥러닝 모델은 분리 정확도를 높이고 복잡한 계산량을 줄이기 위해 혼합 음성을 연속된 speech segment로 나누어서 분리를 수행해요.(과거에는 그랬어요. 요즘은 안그래요) 하지만 label permutation problem과 마찬가지로 network 출력의 순열을 알지 못하기 때문에 하나의 output layer에서 동일한 화자에 대한 음성이 출력될 것이라고 보장할 수 없어요. 이를 speaker tracing problem 이라고 하고 분리 된 speech segment를 하나의 완전한 speech로 연결할 때 여러 화자의 분리된 speech segment가 시간차를 두고 섞이는 문제를 야기해요.
Reference