dev.Log

Beam Search 쉽게 이해하기 본문

인공지능

Beam Search 쉽게 이해하기

초코푸딩 2025. 12. 30. 14:09

(STT·번역·LLM 디코딩에서 왜 쓰일까)

Beam Search는 음성 인식(STT), 기계 번역, 대규모 언어 모델(LLM)에서
문장을 한 토큰씩 생성할 때 더 나은 결과를 얻기 위한 탐색 전략이다.

모델은 항상 다음 단어 하나를 바로 결정하지 않는다.
여러 가능성 중에서 어떤 선택이 전체 문장으로 이어졌을 때 가장 자연스러운지를
끝까지 고려해야 하기 때문이다.


1. Greedy Search의 한계

가장 단순한 방식은 Greedy Search다.

  • 매 시점마다 확률이 가장 높은 단어 하나만 선택
  • 계산은 빠르지만, 초반 선택이 틀리면 되돌릴 수 없다

예를 들어 문장이 이렇게 시작했다고 하자.

 
나는 오늘

다음 단어 확률이 아래와 같다면,

단어 확률
학교에 0.40
집에 0.35
밥을 0.15
갑니다 0.10

Greedy Search는 항상 학교에만 선택한다.
하지만 전체 문장으로 보면 집에 갑니다가 더 자연스러울 수도 있다.


2. Beam Search의 핵심 아이디어

Beam Search는 이 문제를 이렇게 해결한다.

확률이 높은 후보 K개를 동시에 유지하면서 문장을 확장한다.

여기서 K를 Beam Width라고 부른다.

  • K = 1 → Greedy Search와 동일
  • K > 1 → 여러 문장 후보를 병렬로 유지

3. 예제로 이해하는 Beam Search

Beam Width = 2

Step 1

 
나는 오늘

확률이 높은 상위 2개 후보를 유지한다.

  • 나는 오늘 학교에 (0.40)
  • 나는 오늘 집에 (0.35)

Step 2

각 후보 문장을 다시 확장한다.

모델 예측 결과가 다음과 같다고 하자.

  • "학교에" 다음
    • 갑니다 (0.6)
    • 갔습니다 (0.4)
  • "집에" 다음
    • 갑니다 (0.9)
    • 있었습니다 (0.1)

문장 점수는 누적 확률(실제 구현에서는 log 확률) 로 계산한다.

문장 점수
나는 오늘 학교에 갑니다 0.40 × 0.60 = 0.24
나는 오늘 학교에 갔습니다 0.16
나는 오늘 집에 갑니다 0.35 × 0.90 = 0.315
나는 오늘 집에 있었습니다 0.035

이 중 상위 2개만 유지한다.

  • 나는 오늘 집에 갑니다 (0.315)
  • 나는 오늘 학교에 갑니다 (0.24)

이 과정을 문장이 끝날 때까지 반복한다.


4. Beam Search와 다른 방식 비교

방식 특징
Greedy Search 빠르지만 품질이 낮을 수 있음
Beam Search 정확도 높음, 계산량 증가
Sampling (Top-k, Top-p) 다양성 높음, 결과가 불안정
Beam + Length Penalty 번역·STT에서 자주 사용

5. Beam Search의 단점

1) 다양성이 낮다

비슷한 문장 후보만 여러 개 남는 경향이 있다.
그래서 LLM 대화에서는 답변이 너무 정형화될 수 있다.

2) 길이 편향 문제

확률 누적 방식 때문에 짧은 문장이 유리하다.
이를 보완하기 위해 Length Penalty를 사용한다.

 
score = log(P) / length^α

6. STT와 Whisper에서의 Beam Search

STT에서는 Beam Search가 특히 중요하다.

  • 여러 음성 해석 후보를 동시에 유지
  • 음향 모델 점수 + 언어 모델 점수를 함께 고려
  • Whisper에서도 beam_size 옵션 제공

실무적으로는 다음처럼 사용한다.

  • 실시간 STT: beam size 1~5
  • 오프라인 고정밀 인식: beam size 5~10

7. 한 문장 요약

Beam Search는
가능성 높은 문장 후보 K개를 끝까지 동시에 유지하며,
가장 점수가 좋은 문장을 선택하는 탐색 전략
이다.

Comments