복잡한 기술을 눈으로 이해하는 실험실

1편 · 원인 (Mechanism)

토큰이 많아질수록 주의력이 흩어지는 이유

트랜스포머 어텐션은 토큰끼리 관계를 N²으로 계산합니다. 토큰이 많아질수록 주의력이 어떻게 희석되는지 시각적으로 체험합니다.

해설 전문 텍스트로 보기

LLM은 다음 출력 토큰을 정할 때마다 컨텍스트 안의 모든 토큰을 짝지어 비교합니다. 여기서 컨텍스트란 사용자가 입력한 토큰 + LLM이 지금까지 출력한 토큰을 모두 합친 것이고, 컨텍스트 안의 토큰을 짝지어 비교하는 이 과정을 어텐션(Attention)이라 부릅니다. 컨텍스트 안의 토큰 수가 N개면 비교해야 할 짝의 수가 약 N²개로 늘어납니다. 그래서 컨텍스트에 토큰을 하나 더 넣는 비용은 “단어 하나 추가”가 아니라 “모델이 새로 따라가야 할 비교가 N개 늘어남”에 가깝습니다.

토큰화: 문장이 정수 ID가 되기까지

자연어 문장은 먼저 토큰화를 거쳐 정수 ID로 변환된 뒤에야 모델이 처리할 수 있습니다. 예를 들어 “컨텍스트가 길어지면 모델이 흐려진다”라는 문장은 ‘컨텍스트 / 가 / 길 / 어지면 / 모델 / 이 / 흐려진 / 다’처럼 토큰 조각으로 나뉘고, 각 조각은 어휘 사전(vocabulary)의 정수 ID로 매핑됩니다. 모델은 이제부터 단어가 아니라 이 정수 ID, 즉 숫자들 사이의 관계만 계산합니다. 토큰이 8개일 때는 모든 토큰이 다른 모든 토큰과 비교되어야 하므로 28개의 관계가 그어지고(8×7/2), 어텐션은 방향까지 따로 세기 때문에 실제 비교 횟수는 64회(8×8)입니다.

왜 N²인가

모든 토큰이 모든 토큰에게 “내가 너에게 얼마나 주의를 기울여야 해?”를 묻습니다. 이 비교는 두 가지 성질을 갖습니다.

  • 방향이 있음: A→B와 B→A는 다른 값(어텐션 행렬은 비대칭)
  • 자기 자신도 포함: 자기 자신(A→A)과도 비교함

그래서 토큰이 N개면 N × N = N²번의 질문이 됩니다. 10 토큰이면 100회, 100 토큰이면 10,000회, 1,000 토큰이면 100만 회입니다.

왜 주의력이 ‘흩어지나’

모델은 다음 출력 토큰을 정할 때 “주의력 100점”을 가진 셈인데, 이걸 컨텍스트의 모든 토큰에 나눠줍니다. 10 토큰이면 평균 10점씩, 1,000 토큰이면 평균 0.1점씩, 100,000 토큰이면 평균 0.001점씩 돌아갑니다. 그래서 같은 ‘중요한 단어 하나’라도 주변 토큰이 많아질수록 다른 토큰들 사이에 묻혀 모델 눈에 잘 들어오지 않습니다. 컨텍스트에 토큰이 들어가 있다고 해서 모델이 그 토큰을 또렷하게 보고 있다는 뜻은 아닙니다.

토큰 수관계 수(N²)체감 비유
10100또렷함 · 방에 3명
10010,000버거움 · 강당에 100명
1,0001,000,000분산 · 콘서트홀 1,000명

1M 윈도우의 진실

최근에는 1M 컨텍스트를 지원하는 모델도 등장했지만, 이게 모델의 기억 용량이 그만큼 늘어났다는 뜻은 아닙니다. 모델이 또렷하게 보는 영역인 Smart Zone은 여전히 약 100k 토큰 정도에 머물러 있고, 늘어난 건 사실상 그 뒤의 Dumb Zone(주의력이 흐려져 정보가 묻히는 영역)뿐입니다. 컨텍스트 윈도우를 1M으로 늘려 얻은 효과는 “집어넣을 수 있는 슬롯 수”가 늘어난 것이지, “잘 볼 수 있는 범위”가 늘어난 게 아닙니다.

축구 리그 비유: 토큰 추가 = 팀 추가

리그에 팀이 4개면 풀 리그 경기가 6경기(4×3/2), 8개면 28경기(8×7/2), 100개면 약 5,000경기(100×99/2 = 4,950)가 필요합니다. 리그에 팀을 하나 추가하는 것은 “선수 명단에 팀원 한 명 더하기”가 아니라 새 팀이 기존 모든 팀과 새로 경기를 치러야 함을 뜻하여 파급 효과가 큽니다. 토큰 하나를 추가하는 것도 어텐션에서 비슷한 파급 효과를 일으킵니다.

📐

숫자 차이 주의: 축구 리그는 같은 두 팀이 한 번만 만나므로 경기 수가 N(N-1)/2(10팀 = 45경기)입니다. 어텐션은 A→B와 B→A를 따로 세고 자기 자신도 포함하므로 N²(10토큰 = 100회)입니다. 둘 다 N이 커지면 제곱으로 폭증한다는 점은 같습니다.

결론: 컨텍스트에 토큰 하나를 더하는 비용은 “기억할 단어 하나가 늘어나는 것”이 아니라 “모델이 새로 따라가야 할 관계가 N개 늘어나는 것”입니다. 그래서 컨텍스트에 쌓인 토큰 수가 많아질수록 모델은 어디에 집중해야 할지 못 찾고 주의력이 흩어집니다.

핵심 교훈

“컨텍스트를 가득 채움 = 자랑이 아니라 경고 신호”. 작업 단위가 바뀌면 /clear로 컨텍스트를 비우세요.