Skip to content

CTC Loss

pingu605 edited this page Dec 21, 2023 · 1 revision

참고

CTC Loss

CTC

1. 제작 계기

  • MFCC의 짧은 음성 프레임으로 인한 단점을 극복하기 위해 고안됨
    • 다량의 레이블링으로 인한 비용 증가
    • 레이블링 정확도 떨어짐

2. 설명

2.1. 정의

  • target seq와 output seq의 길이가 다를 때(output의 길이가 target보다 길 때), loss gunction 정의하는 방법
  • 레이블링 없이도 정보 없이도 학습 가능
  • 모델 마지막에 loss 및 그래디언트 계산 레이어 추가됨 (CTC 레이어)
    • ‘레이블수 + 1’의 차원수를 가짐 (한국어 : 전체음소(42) + 1 = 43층)

2.2. 작동 기법

2.2.1. character 합치기

  • hhelllllo → hello
    • 합쳐도 되는 hhh는 상관 없지만 lll의 경우 문제가 생김

    • 합쳐도 되는 character와 합치지 말아야 하는 character 구분 필요

      image

2.2.2. blank

  • blank(’-’)를 도입해 같은 character가 연속되는 경우 다룰 수 있게 함

    • apple → ap-ple
    • hello → hel-lo
    • ap—ple 처럼 blank가 1개이상 들어갈 수 있음
  • 예시

    image

    • target이 ‘a’ 라면 Prediction이 ‘a’되는 확률 합이 최대가 되도록 optimization
    • 이를 위해 dynamic programming 기법 사용

3. 작동 방식

  • dynamic programming을 통해 character에 맞는 경로가 생성될 확률 출력

  • 다음과 같이 다양한 경로 모두가 이동규칙이 준수된 경로

    image

  • 예시 (egg)

    • 표의 (1,1) or (2,1) → (5,6) or (5,7) 로 가는 이동규칙을 준수하면 egg 출력

      image

    • 다음과 맞는 경로의 확률을 구하고 합산 → log 씌우기

      image

      • CTC Loss = log(0.001054) = 6.854927

    💡 CTC Loss

    • log('맞는 경로의 합산확률')