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

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

자연어 문장은 먼저 토큰화를 거쳐 정수 ID로 변환된 뒤에야 모델이 처리할 수 있습니다.
💡 직접 문장을 넣어 토큰 분할과 ID를 보고 싶다면 → tiktokenizer-plus.vercel.app
토큰이 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점

그래서 같은 "중요한 단어 하나"라도 주변 토큰이 많아질수록 다른 토큰들 사이에 묻혀 모델 눈에 잘 들어오지 않습니다. 즉 컨텍스트에 토큰이 들어가 있다고 해서, 모델이 그 토큰을 또렷하게 보고 있다는 뜻은 아닙니다.
1M 윈도우의 진실
최근에는 1M 컨텍스트를 지원하는 모델도 등장했지만, 이게 모델의 기억 용량이 그만큼 늘어났다는 뜻은 아닙니다. 모델이 또렷하게 보는 영역인 Smart Zone은 여전히 약 100k 토큰 정도에 머물러 있고, 늘어난 건 사실상 그 뒤의 Dumb Zone(주의력이 흐려져 정보가 묻히는 영역)뿐입니다. 즉 컨텍스트 윈도우를 1M으로 늘려 얻은 효과는 "집어넣을 수 있는 슬롯 수"가 늘어난 것이지, "잘 볼 수 있는 범위"가 늘어난 게 아닙니다.

↓ 슬라이더를 움직여 N이 늘어날 때 관계 수와 시각적 복잡도가 어떻게 변하는지 직접 체감해 보세요.

현재 토큰 수
10
tokens
관계 수 (N²)
100
10 × 10 = 100
상태
집중 구간
주의력이 또렷함
3306090120
10
tokens
관계 100개
또렷함 · 방에 3명
100
tokens
관계 10,000개
버거움 · 강당에 100명
1,000
tokens
관계 1,000,000개
분산 · 콘서트홀 1,000명
⚽ 축구 리그 비유: 토큰 추가 = 팀 추가
리그에 팀이 4개면 풀 리그 경기가 6경기 (4×3/2), 8개면 28경기 (8×7/2), 100개면 약 5,000경기 (100×99/2 = 4,950)가 필요합니다. 리그에 팀을 하나 추가하는 것은 "선수 명단에 팀원 한 명 더하기"가 아니라 새 팀이 기존 모든 팀과 새로 경기를 치러야 함을 뜻하여 파급 효과가 큽니다. 토큰 하나를 추가하는 것도 어텐션에서 비슷한 파급 효과를 일으킵니다.

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

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

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

다음 편 · 현상 (Consequence)
그래서 실제로 어떤 일이 벌어지나요?
앞에서 본 "주의력 100점을 N개 토큰에 나눠준다"는 건 평균 이야기입니다. 하지만 실제로 LLM은 주의력 점수를 토큰별로 균등하게 나눠주지 않습니다. 입력의 시작과 끝에 있는 토큰에는 주의력을 평균보다 후하게 주고, 중간에 있는 토큰에는 평균보다 야박하게 줍니다. 그래서 같은 컨텍스트 안에서도 토큰이 어디 있느냐에 따라 모델이 보는 또렷함이 달라집니다. 이 현상을 위치별 정확도 곡선·Smart Zone·밀도 가이드로 풀어둔 다음 자료에서 상세히 설명합니다.
Lost in the Middle 보기 →