본 논문은 speech enhancemeht와 speech separation task를 e2e 방식으로 수행하며, downstream인 separation에 유효한 정보의 손실을 막기 위해 gradient modulation을 사용하는 방법론에 관한 것으로, speech enhancemet를 다른 task와 함께 학습하고자 할 때 어떤 방식으로 수행될 수 있는지 알아보기 위해 읽게 되었습니다. 그럼 리뷰 시작하겠습니다.
Introduction
본 논문은 speech separation (SS)이라는 task를 다루고 있습니다. 다소 생소한 task이지만 이름에서 알 수 있듯 여러 화자의 음성이 혼합된 음성 신호에서 화자 별 개별 음원을 분리하는 것을 의미한다고 합니다.
초기 SS은 음성 신호를 frequency domain으로 변형하여 특정 주파수 대역만을 추출하는 방식으로 이루어졌으나, 최근에는 neural network기반의 방법을 사용하여 음성 신호의 time domain에서 separation을 수행한다고 합니다. 특히 long sequence에 대한 모델링 능력이 뛰어난 transformer 기반의 방법론들이 좋은 성과를 보여주었다고 합니다.
SS 방법론들은 noise 환경에서 성능이 크게 낮아진다는 단점이 있습니다. 이는 배경 noise가 특정 speaker의 발화로 오인되어 separation이 어려워지기 때문으로, 때문에 저자들은 noisy한 신호에서 noise를 제거하는 speech enhancement (SE)task를 SS에 접목하고자 하였습니다.
그러나 SS의 사전 작업으로 SE를 수행하게 되면 noise가 제거됨과 더불어 separation에 중요한 음성 정보 또한 억제되는 over-suppression 문제가 발생하게 됩니다. 이를 최적화 관점으로 보자면 SE와 downstream task인 SS의 gradient 충돌이 발생한 것인데요, 저자들은 이러한 현상이 multi-task learning의 학습을 방해하고 결과적으로는 downstream의 성능 하락으로 이어진다고 주장하였습니다.
이러한 문제를 해결하고자, 저자들은 gradient modulationi을 접목하여 noise에 강인한 end-to-end 방식의 speech enhancement + separation 통합 모델을 제안하였습니다. 논문에서 언급된 바에 의하면 해당 방법론은 SE와 SS를 multi-task learning으로 통합한 최초의 연구라고 합니다.
Proposed Method
System Overview
논문에서 저자들이 제안하는 통합 네트워크는 아래의 [그림 1]과 같습니다.
Unified Network
Architecture
저자들은 보편적인 multi-tasking framework에서 영감을 받아 [그림 1]과 같이 encoder, speech enhancement (SE) Net, speech separation (SS) Net, decoder로 구성된 통합 네트워크를 설계하였습니다. 간단히 설명하자면, Encoder는 input mixture의 deep representation을 학습하고, SE Net는 배경 noise를 filtering하기 위한 mask를 학습한 후, SS 네트워크는 enhanced mixture에서 서로 다른 source들을 분리하기 위한 mask를 예측합니다. 마지막으로 decoder는 분리된 음성을 time domain에서 reconstruction하여 audio signal의 형태로 변환해주게 됩니다. 각 모델의 구체적인 구조는 아래와 같습니다.
Encoder
Encoder는 time-domain의 noisy mixture x_n \in \mathbb{R}^T 을 입력으로 받아 convolutional layer를 사용하여 STFT와 유사한 표현 h_n \in \mathbb{R}^{F \times T'} 을 학습합니다. 동일한 과정이 clean mixture x_c \in \mathbb{R}^T 에 대해서도 수행되어, clean representation h_c \in \mathbb{R}^{F \times T'} 을 생성하고, 이는 speech enhancement task의 gt로써 사용됩니다. 수식으로는 아래의 [수식 1]과 같이 나타낼 수 있습니다.
Speech Enhancement (SE) Network
SE network는 noisy mixture representation h_n 을 입력으로 받아 배경 noise를 필터링하기 위한 mask m_e 을 학습하며, 이를 통해 아래의 [수식 2]와 같이 enhanced mixture representation h_e 을 생성합니다.
enhanced mixture representation h_e 와 clean mixture representation h_c 는 speech enhancement loss를 계산하는 데 사용되며, SE의 output인 h_e 는 이후 source separation을 위해 SS network에 입력으로 들어가게 됩니다.
Speech Separation (SS) Network
SS 네트워크의 구조는 위의 [그림 3]과 같으며, 이는 선행 연구인 Dual-Path RNN [2]과 SepFormer [3]의 구조를 사용하였다고 합니다. 결과적으로 SS network는 SE network에서 생성되는 enhanced mixture representation h_e 을 입력으로 받아 사전에 정의된 source의 개수 C 만큼의 mask를 예측하게 됩니다. 해당 모델의 output은 입력으로 들어온 h_e 과 source mask m_k 의 element-wise한 결과가 됩니다.
논문에서는 SE와 SS network에 동일한 구조를 사용하였는데요, 이는 SE에서 생성되는 clean output은 결국 noise를 masking한, 즉, separate source가 1인 경우로 취급할 수 있기 때문이라고 합니다.
Decoder
마지막 decoder는 SS network의 output을 audio signal로 reconstruction하는 것으로 encoder와 동일한 kernel 및 stride를 가진 transposed conv로 구성하였다고 합니다.
Multi-task Learning
저자들은 통합 네트워크를 최적화하기 위해 SE loss,SS loss라는 두 가지 loss를 설정하였습니다. 먼저 SE loss는 enhanced와 clean mixture representation 사이의 mean square error (MSE)를 통해 계산되며, 수식으로는 아래와 같이 나타낼 수 있습니다.
위의 [수식 5]에서 | \cdot |_2 는 L_2 norm을 나타내며, h_e, h_c \in \mathbb{R}^{F \times T'} 에서 F 는 emgeding size, T' 는 sequence length를 의미합니다.
다음으로 SS loss \mathcal{L}{SS} 는 Speech Separation task에서 사용되는 utterence-lecvel permutation invariant loss [21]를 통해 계산된다고 합니다. 이는 각 source 음원의 gt와 분리된 음원 사이의 scale-invariant signal-to-noise ratio (SI-SNR) [20]을 계산하여 원본과 얼마나 유사하게 추출되었는지 비교하는 방법이라고 합니다.
아무튼 전체 시스템은 이러한 multi-task learning을 통해 end-to-end 방식으로 최적화되며, 최종적인 loss는 두 loss의 가중합인 \mathcal{L} = \lambda{SE} \cdot \mathcal{L}{SE} + \mathcal{L}{SS} ,을 사용하였습니다.
Gradient Modulation
논문에서 가장 핵심이라고 할 수 있는 gradient modulation을 설명하기 위해 [그림 1]을 다시 살펴보겠습니다. 위 그림에서 gradient의 흐름을 볼 수 있는데요, Back-propagation 관점에서, SE task gradient는 \mathbf{G}{SE} = \nabla{\mathbf{v}} (\lambda_{SE} \cdot \mathcal{L}{SE}) 로, SS task gradient는 \mathbf{G}{SS} = \nabla_{\mathbf{v}} \mathcal{L}{SS} 로 나타낼 수 있습니다. [그림 1]에서 볼 수 있듯, \mathbf{G}{SE} 는 SE network와 encoder를 거쳐 되돌아가고, \mathbf{G}_{SS} 는 전체 시스템을 통과하고 있습니다. 따라서, SE network와 encoder는 두 gradient에 의해 최적화되며, 이는 gradient는 다음과 같이 표현될 수 있습니다:
그러나, 저자들은 [그림 2]와 같이 \mathbf{G}{SE} 와 \mathbf{G}{SS} 사이에 gradient 충돌이 발생함을 관찰하였다고 합니다. 이는 두 gradient 사이의 각도가 90도 이상이기 때문에 SE gradient가 SS task의 optimization을 방해하고 있음을 나타내며, intro에서 언급하였듯 over-suppression 문제로 볼 수 있다는 것입니다.
이를 해결하기 위해, 저자들은 두 task gradient를 조화시키기 위한 gradient modulation (GM) 전략을 제안하였습니다. [그림 2]와 같이: (1) \mathbf{G}{SE} 와 \mathbf{G}{SS} 사이의 각도가 90도 이상인 경우 (그림 2(a)), 이는 두 gradient가 충돌하고 있어 SE gradient가 SS task의 최적화를 방해함을 의미합니다. 이 경우, \mathbf{G}{SE} 를 \mathbf{G}{SS} 의 법선 평면에 투영하여 충돌을 제거함으로써 SS loss가 증가하는 것을 방지합니다. (2) 두 gradient 사이의 각도가 90도 이하인 경우 (그림 2(b)), 이는 두 gradient 사이에 충돌이 없음을 의미하므로, 업데이트된 SE gradient \mathbf{G}{SE}^{gm} 를 안전하게 \mathbf{G}{SE} 로 설정합니다. 따라서, 저자들의 gradient modulation는 아래의 [수식 7]과 깉이 나타낼 수 있습니다.
여기서 \theta(\mathbf{G}{SE}, \mathbf{G}{SS}) 는 두 gradient 사이의 각도를 의미합니다. 위와 같은 gradient modulation은 SE network와 encoder의 각 층의 gradient에 대해 수행됩니다. 이를 위해 각 gradient는 사전에 1차원 긴 벡터로 평탄화되고, modulation 후 다시 원래 형태로 재구성됩니다.
그 결과, 두 task gradient는 modulation 후 서로 조화를 이루어 multi-task learning을 촉진하게 됩니다. 이를 통해 보조적인 SE task는 유효한 speaker 정보를 억제하지 않으면서 목표 SS task에 유익하도록 효과적으로 노이즈를 줄일 수 있습니다. 최종적으로, 전체 gradient는 아래의 [수식 8]과 같이 나타됩니다:
Experiments
Reference
[2] Yi Luo, Zhuo Chen, and Takuya Yoshioka, “Dual-path rnn: efficient long sequence modeling for time-domain single- channel speech separation,” in ICASSP 2020-2020 IEEE Inter- national Conference on Acoustics, Speech and Signal Process- ing (ICASSP). IEEE, 2020, pp. 46–50.
[3] Cem Subakan, Mirco Ravanelli, Samuele Cornell, Mirko Bronzi, and Jianyuan Zhong, “Attention is all you need in speech separation,” in ICASSP 2021-2021 IEEE Interna- tional Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2021, pp. 21–25.
안녕하세요. 좋은 리뷰 감사합니다.
이전에 교수님께서도 말씀해주신 거지만, 모델이 학습하기에 좋은 데이터가 사람이 보기에 혹은 듣기에 좋은 데이터는 아닐 수도 있다라는 말씀이 생각나게 하는 논문인 것 같습니다. Fig 1을 보면 SE net과 SS net이 동시에 학습이 되는 것을 볼 수 있는데 그렇다면 과연 SE net에서 나온 결과물은 사람이 듣기 좋은 소리 or 모델이 듣기 좋은 소리(학습하기에 좋은 소리) 둘 중에 뭘로 볼 수 있을까요? 개인적인 생각으로는 모델이 듣기 좋은 소리 같은데 그렇다면 Speech Enhancement 성능을 측정할 때 좋은 성능이 나올지 아닐지가 궁금한데 이와 관련한 성능에 대해서 논문에서 따로 리포팅한 것이 없을까요?
감사합니다.
댓글 감사합니다.
우선 논문에서는 Speech Enhancement 성능을 별도로 리포팅한 실험은 없습니다.
해당 방법론은 말씀하신 것 처럼 enhancement를 speech separation 모델 관점에서 수행한다고도 할 수 있을 것 같습니다. 그러나 제 생각에는 결국 학습 자체가 사람이 듣기 편한 clean speech를 gt로 이루어졌기 때문에 SE의 결과물 자체는 사람이 듣기 좋은 소리를 기반으로 하되 SS를 e2e로 학습하면서 separation에 유용한 정보를 SE 네트워크가 추출하도록 학습되는 것이 아닌가 싶습니다.
안녕하세요 ! 좋은 리뷰 감사합니다.
실험 리포팅에 대한 설명이 없어서 드리는 질문인데, 사용하는 데이터셋은 어떻게 될까요 ?? SE와 SS를 동시에 수행하는 첫번째 task라고 말씀해주셨는데 그럼 기존에 사용하던 데이터셋으로 그대로 실험이 가능한지 궁금합니다. 그리고 사용하는 평가 메트릭인 SI-SNRi, SDRi에 대해 제가 이 task에 대해 잘 몰라서 간략하게 설명 부탁드립니다.
감사합니다.