본문 바로가기

Translation/Article_translation

[Sequence Modeling With CTC]번역글

반응형

본문 내용은 아래 링크 distill에서 작성 된 글을 번역 한 글입니다

 

 

Sequence Modeling With CTC

https://distill.pub/2017/ctc/

 

Sequence Modeling with CTC

A visual guide to Connectionist Temporal Classification, an algorithm used to train deep neural networks in speech recognition, handwriting recognition and other sequence problems.

distill.pub

 

CTC는 음성인식과 손글시 인식 그리고 다른 시퀀스 문제들에서 딥 뉴럴 네트워크를 훈련시키는데 사용되는 알고리즘이다. 그리고 아래 내용은 이에 대한 시각적인 가이드이다.

 

<How CTC collapsing works>

 

Introduction

음성 인식에 대해서, 우리는 오디오 클립의 데이터셋과 그에 일치하는 텍스트가 있다. 불행하게도 우리는 텍스트의 안의 문자들이 어떻게 오디오에 할당되는지 알 수가 없다. 이것은 음성 인식기를 처음에 훈련시키는 것을 어렵게 한다.

 

이러한 할당 혹은 조정 없이는, 우리는 단순한 접근법을 사용 할 수 없습니다. 우리는 '한문자는 열개의 입력에 상응합니다'와 같은 규칙을 고안 할 수 있습니다. 그러나 사람들의 연설의 비율은 다양하기 때문에, 이러한 규칙은 항상 깨질 수 있습니다. 또다른 대안은 각 문자를 오디오의 위치에 직접 정력하는 것이다. 모델링하는 관점에서 보면 이러한 방식은 잘 작동 합니다. 우리는 각각의 입력 타입스텝에 대한  GT를 알고있기 때문이다. 그러나 합리적인 크기의 데이터셋의 경우에는 엄청나게 많은 시간을 소비하게 된다.

 

이러한 문제는 단지 음성인식에서만 나타나는 것이 아니다. 우리는 많은 다른 곳에서도 이러한 문제를 볼 수 있다. 이미지로 부터 손글씨를 인식하거나 펜 스트로크의 시퀀스도 한 예가 된다. 동영상에서의 액션 라벨링은 다른 문제이다.

 

 

 

CTC는 입력이미지와 출력이미지 사이에서 정렬을 모르고 얻는 방법 중의 하나이다. 우리가 앞으로 볼 수 있듯이, 그것은 음성과 손글씨 인식같은 적용에 특히 잘 작용된다. 

 


 

좀 더 공식적으로 들여다보고, 입력 시퀀스( X = [ x1, x2, x3,,,, xt ]를 그에 상응하는 출력 시퀀스 Y = [ y1, y2, y3,,,, yt ] 를 맵핑하는 것을 고려해보자. 우리가 X에서 Y로 정확한 맵핑을 찾기를 원 한다.

 

우리가 간단한 강화학습 알고리즘을 사용하는 것에는 몇몇의 도전적인 과제들이 있다.

 

 - X와 Y는 길이가 다를 수 있다.

 - X와 Y의 길이의 비율이 다를 수 있다.

 - 우리는 X와 Y의 정확한 정렬을 가지고 있지 않다.

 

그 CTC 알고리즘은 이러한 문제들을 극복했다. 주어진 X에 대해, 그것은 우리에게 모든 가능한 Y를 넘어선 출력 분포를 준다. 우리는 이 분포들을 사용하여 가능성있는 출력을 추론하거낭 주어진 출력의 가능성을 평가 할 수 있다.

 

손실 함수를 계산하고 추론을 수행하는 모든 방법이 다루기가 쉽지가 않다. 우리는 CTC가 이 두가지를 효율적으로 수행하기를 바란다.

 

Loss function : 주어진 입력에 대해, 우리는 올바른 답으로 할당하도록 하는 가능성을 최대한 높이는 모델을 학습 시키기를 원한다. 이것을 수행하기 위해서는 우리는 효율적으로 조건부 확률인 p( Y | X )를 계산할 필요가 있다.  p( Y | X )는 미분이 가능해야하며, 또한 기울기 하강법을 수행 할 수 있어야한다.

 

Inference : 당연히 모델을 학습시키고 난 뒤에는, 우리는 주어진 X가 Y로 추론하기위해 모델이 사용되기를 원한다.

 

이상적인 Y*는 효율적으로 찾을 수 있다. 우리는 CTC를 사용해서 결과를 찾는데 너무 많은 비용을 사용하지 않는 해결책으로 정착 할 것이다

 

The Algorithm

 

CTC알고리즘은 주어진 X에 대해 어떤 Y에 대한 가능성을 할당할 수 있다. 이 가능성을 계산하기 위한 핵심은 입력과 출력사이의 할당에 대해 CTC가 어떻게 생각하는지이다.  먼저 이러한 정렬을 보고 손실함수를 계산하고, 추론을 수행하는 방법을 보여줄 것이다. 우리는 손실함수가 어떻게 계산되는지 이해하기 위해 이러한 정렬이 무엇인지 이해 해야한다.

 

CTC 할당의 특정한 형태를 동기를 부여하려면, 먼저 단순한 접근을 고려해야한다. 우리는 예제를 사용할 것이다. 입력은 길이가 6이고, Y는 [ c, a, t ]이라고 가정한다.  X와 Y를 정렬하는 하나의 방법은 각각의 입력 단계에 출력 문자를 할당하고 반복 축소하는 것이다.

 

Alignment

우선 CTC 알고리즘은 정렬이 필요없으므로 입력과 출력간의 정렬이 필요하지 않다.  그러나 주어진 입력에 대한 출력의 가능성을 구하기 위해, CTC는 둘사이의 모든 가능한 정렬의 확률을 합산하여 작동한다. 

 

이러한 접근은 2가지의 문제를 가진다.

 

- 종종, 모든 입력 스텝을 몇개의 출력에 할당하는 단계를 강제로 하는것은 의미가 없다. 예를 들어, 음성인식에서 입력은 그에 해당하는 출력이 없는 묵음을 가질 수 있기 때문이다.

 

- 우리는 한줄에 여러개의 문자를 가지는 출력을 생성 할 방법이 없다.  [h, h, e, l, l, l, o]인 정렬을 고려해라. 반복을 축소하는 것을 'hello' 대신에 'helo'를 생성 할 것이다.

 

이러한 문제를 해결하기 위해 ctc는 허용되는 출력 집합에 새로운 토큰을 도입한다. 이 새로운 토큰은 blank 토큰이라고도 불린다. 우리는 이것을 ϵ라고 합니다. 이러한 ϵ토큰은 어떠한 것과도 일치하지 않고 출력으로부터 단순하게 지워진다. 

 

CTC에 의해 할당된 정렬른 인풋과 같은 길이를 가진다. 우리는 반복을 합치고, ϵ토큰을 제거한 뒤에 Y에 맵핑되는 정렬을 허용한다.

 

 

만약에 Y가 한줄에 2개의 같은 단어를 가지면, 유효한 정렬은 그 사이에 ϵ를 가져야 한다. 이 규칙을 적용하면, 우리는 'ㅗhello'로 축소되는 정렬과 'helo'로 축소되는 정렬을 구분 할 수 있다. 

 

다시 입력 길이가 6을 가지는 출력 [c, a, t]으로 돌아가자. 여기에는 유효한 그리고 유효하지 않는 할당에 대한 더 많은 예제들이 있다.

 

CTC 할당은 몇가지의 주목 할 만한 속성이 있다. 첫째로 X와 Y사이에 허락된 정렬은 단조롭다. 만약 우리가 다음 입력으로 전진한다면, 우리는 해당 출력을 동일하게 유지하거나 다음 출력으로 진행 할 수 있다. 두번째는 X와 Y의 정렬이 many-to-one 방식이다. 하나 혹은 더 많은 입력 요소는 하나의 출력 요소로 정렬될 수 있으나 반대는 불가능하다. 그것은 세번째 장점을 의미한다. Y의 길이는 X의 길이보다 더 클 수 없다.

반응형