Joint Training(조인트 트레이닝)
이번에 설명해드릴 음성 인식 시스템에서 자주 사용되는 방식은 Joint Training입니다.
🤔 : Joint Training이란?
두 개 이상의 모델을 함께 학습하여, 서로의 정보를 공유하고 최적화 하는 방법입니다.
보통 잡음 제거와 음성 인식을 동시에 수행할 때 사용됩니다.
<기본 개념>
- 병렬 학습 : 프론트엔드 모델과 백엔드 모델을 병렬로 학습합니다. 프론트엔드는 음성 신호를 정제하거나 잡음을 잡아주는 역할을 하고, 백엔드는 정제된 음성을 바탕으로 텍스트로 변환하는 음성 인식 작업을 수행합니다.
- 상호 정보 공유 : 두 모델이 학습 과정에서 서로 정보를 주고받아 더 좋은 결과를 내는 것입니다. 프론트엔드에서 정제해주면 백엔드가 정제된 걸 쓰고, 백엔드에서 인식된 정보를 다시 프론트엔드가 피드백하고.
- 공동 최적화 : 이 과정에서 둘은 이미 하나가 되어버린겁니다. 따라서 각각 독립적으로 최적화하지 않고, 하나의 공동 손실 함수(Joint loss function)을 기반으로 학습되어 최적화됩니다. 이로 인해 두 모델 간의 상화작용을 최적화 할 수 있습니다.
🤔 : 조인트 트레이닝은 어떻게 생겼어?
조인트 트레이닝은 프론트엔드와 백엔드가 하나의 네트워크처럼 작동하도록 설계됩니다.
하지만,
역할은 다르답니다.
1. 프론트엔드
- 잡음 제거 / 음성 정제 작업을 수행합니다.
- 입력된 음성에서 잡음이나 불필요한 주파수 대역을 제거하고, 더 깨끗한 음성을 백엔드에 전달합니다.
백엔드에게 주기 위해 음성을 깨끗하게 분류하는 작업!
2. 백엔드
- 음성 인식(ASR)을 수행하여, 프론트엔드가 정제한 음성 데이터를 텍스트로 변환합니다.
- 음소 분류 / 텍스트 변환 작업 수행
3. 공동 손실 함수
- 두 모델이 협력하면서, 잡음이 있는 상태에서도 목표 음성을 더 정확히 인식할 수 있도록, 백-프론트 성능을 동시에
최적화하는 손실 함수
예를 들어, 손실 함수는 잡음 제거의 정확도와 음성 인식의 정확도를 결합하여, 두 작업이 동시에 잘 수행될 수 있도록 학습하는 역할을 합니다.
🤔 : 그래서 조인트 트레이닝이 왜 좋은데?
1. 음성 정제와 음성 인식의 연결성 강화!
프론트엔드와 백엔드가 서로 독립적으로 각자 할 일을 하는 것이 아니라, 프론트엔드에서 정제한 음성 정보를 곧바로
백엔드에서 음성 인식에 활용할 수 있어, 음성 인식의 성능이 크게 향상 될 수 있습니다.
2. 모델 최적화 시간 단축!
프론트엔드와 백엔드를 따로 학습 시키는 것보다, 동시에 학습 시키면 전체 학습 시간이 줄어들겠죠?
이 뿐만 아니라, 정제된 데이터셋을 따로 생성해서 옮기는 작업이 생략되고, 실시간으로 데이터를 처리할 수 있게 되어 효율적입니다!
🤔 : 예를 들어서 쉽게 이해시켜줘!
철수가 시끄러운 강남 거리를 걷고 있습니다.
철수가 "COLD!"라고 말했을 때 음성 인식 시스템이 이를 정확하게 캐치하고 인식하게 하려고 합니다.
프로트엔드 역할 : 입력된 소리에서 차량 소음, 빗 소리, 사람들의 수다 소리 등 배경 잡음을 제거하고 사용자의 목소리만 강화하는 작업을 진행합니다!
백엔드 역할 : 프론트엔드로부터 받은 정제된 음성에서 "COLD"라는 단어를 인식합니다.
공동 최적화 : 학습 과정에서 시스템은 프론트가 잡음을 제거하는 과정에서 오류가 발생했다면, 백엔드에서 인식 오류가 발생하는 것을 학습합니다. 그 결과, 프론트엔드는 잡음을 잘 제거하도록 백엔드는 그 결과를 더 잘 활용하도록 동시에 조정 됩니다.
조인트 트레이닝 VS 전통적인 접근법
- 전통적인 접근법 : 프론트엔드에서 잡음을 제거 후, 정제된 음성 백엔드로 전달하는 과정을 거칩니다. 이 경우 프론트엔드와 백엔드는 독립적으로 작동하며, 잡음 제거 과정에서 오류가 발생해도 백엔드는 그 오류를 수정할 수 없습니다.
- 조인트 트레이닝 : 프론트엔드와 백엔드가 동시에 학습하여 서로 작업을 실시간으로 보완해주는 구조입니다. 프론트엔드가 작업을 했을 때 해당 결과를 백엔드가 바로 활용하여, 잘 활용되는지 피드백을 주는 방식으로 진행됩니다.
