프로그래밍 기초편 · 탐색과 의사결정

Beam Search: 몇 수 더 보고 고르기

지난 레슨이 함정을 남겨 두었어요. 탐욕은 매 스텝 눈앞의 최댓값을 집으니, 한 수 틀리면 줄줄이 틀릴 수 있어요. 메우는 법은 귀엽도록 단순해요—서두르지 말고, 후보 경로를 여러 개 남긴 채 함께 앞으로 가고, 끝난 뒤 총점을 비교하세요. 그게 바로 Beam Search예요. 아래 단어 격자에서 세 가지 길을 같은 무대에 올려 볼게요.

단어 격자 위의 세 갈래

시작은 “이 가게는”으로 고정, 오른쪽으로 4걸음, 매 스텝 후보 단어 3개. 버튼을 순서대로 세 번 누르며 세 가지를 보세요: 탐욕(빨간 선)은 1스텝에서 확률 0.5인 “음식이”를 집지만 뒤로 갈수록 길이 좁아지고, Beam=2(파란 선)는 두 길을 동시에 키우며 탈락은 회색이 되며, Beam=3는 1스텝 0.2짜리 “인테리어가”까지 남겨 둬요—마지막 누적 점수는 누가 높을까요? 오른쪽 아래 연산량은 또 얼마나 차이 날까요?

먼저 “탐욕으로 가기”를 눌러, 빨간 선이 한 걸음씩 잠기는 걸 보세요
경로 점수판
😤 탐욕 · 누적 점수
계산한 후보: –
🔦 Beam=2 · 누적 점수
계산한 후보: –
🔦🔦 Beam=3 · 누적 점수
계산한 후보: –
누적 점수 세 개 줄 세우면: 0.072 < 0.098 < 0.101. 탐욕은 1스텝 “음식이”(0.5)에 끌려 후반이 약한 길로 들어갔고, Beam=2는 길을 하나 더 키워 1스텝 0.3짜리 “가성비가”가 마지막에 웃었으며, Beam=3는 더 세게 0.2짜리 “인테리어가”까지 살려 전장 최적을 파냈어요. 그런데 연산량을 보면: 후보 12 → 21 → 30개, 거의 3배—beam 폭은 “연산으로 품질을 사는” 노브예요. 얼마나 돌릴지는 전기 요금을 감당할 수 있느냐에 달렸죠.
개념 카드 · 계란을 한 바구니에 담지 마세요
🧺

Beam Search의 전부

매 스텝마다 하나를 고르는 게 아니라, 점수가 가장 높은 k개 경로를 남깁니다(k = beam 폭). 그것들을 데리고 다음 스텝으로 가고, 끝에 누적 총점을 비교해 높은 쪽을 제출해요. k=1이면 탐욕으로 퇴화하고, k가 무한대면 모든 길을 전수 탐색하는 셈—Beam Search는 탐욕과 전수 탐색 사이의 슬라이더예요.

🎛

폭 = 연산으로 품질을 사는 노브

k가 1 늘 때마다 매 스텝 후보 한 줄을 더 계산해야 해요. 번역 시스템은 흔히 k=4~10: 그 위로 가면 품질 향상은 점점 줄고 청구서는 선형으로 오릅니다. 공학의 질문은 원래 “더 최적일 수 있나?”가 아니라 “이만큼의 최적이 이 연산값인가?”예요—미로 레슨의 BFS/DFS 논쟁도 본질은 같은 선택지예요.

AI 연결 카드 · 어디서 보셨나요

🌍 기계번역과 음성 인식의 고전 디코더. 한 문장을 번역할 때 첫 단어를 “The”로 할지 “A”로 할지가 전체 유창함에 영향을 줄 수 있어요—탐욕은 종종 단어마다 “맞는데” 이어 붙이면 어색한 문장을 만들어요. Beam Search는 여러 시작을 동시에 살린 뒤 문장 전체 확률이 가장 높은 쪽을 고르며, 신경망 번역 시대의 기본이었어요. 음성 인식도 같아요: 발음이 비슷한 후보를 먼저 남겨 두고, 뒤 문맥으로 “사실”과 “팩스”를 가려내요.

🧠 “추론 모델이 먼저 생각하고 답하기”와 같은 직관. 완전 입문편에서 깊은 사고 모델을 다뤘어요: 답하기 전에 긴 사고 과정을 만들고, 몇 갈래 생각을 시도하고, 스스로 부정한 뒤 가장 좋은 답을 고릅니다. 그 철학은 Beam Search와 한 줄기예요—“펜을 들기” 전에 길을 몇 갈래 더 탐색하고, 추가 연산으로 더 나은 최종 답을 삽니다. 차이는 추론 모델이 자연어로 길을 찾고 훨씬 유연하다는 점—하지만 “연산으로 품질을 산다”는 장부는 격자 위 세 카운터와 같은 장부예요.

이 강의가 전하고 싶은 것