트랜스포머와 어텐션 - LLM은 어떻게 다음 단어를 예측할까
ChatGPT에게 질문하면 그럴듯한 문장이 술술 나옵니다. 그런데 그 내부를 들여다보면, LLM이 실제로 하는 일은 놀랍도록 단순합니다. "지금까지의 문장 다음에 올 단어를 확률적으로 고르는 것", 그게 전부입니다. 이 단순한 예측을 무섭게 잘하게 만든 구조가 트랜스포머(Transformer) 이고, 그 심장이 어텐션(Attention) 입니다.
이 글에서는 수식을 최대한 걷어내고, LLM이 다음 단어를 예측하는 원리를 직관 중심으로 정리합니다.
1. LLM의 본질은 "다음 토큰 예측"
거창해 보이지만 LLM이 학습하는 목표는 하나입니다.
"앞의 단어들이 주어졌을 때, 다음에 올 단어의 확률을 맞혀라."
예를 들어 "나는 아침에 커피를 ___" 라는 입력이 들어오면, 모델은 어휘 전체에 대해 확률 분포를 계산합니다.
마셨다 0.62
내렸다 0.11
샀다 0.09
먹었다 0.07
...
그중 하나를 골라 이어 붙이고, 그 결과를 다시 입력에 넣어 또 다음 단어를 예측합니다. 이 과정을 반복하면 문장이, 문단이, 글이 됩니다. 이것을 자기회귀(auto-regressive) 생성 이라고 합니다.
핵심은 이겁니다. 모델은 "정답"을 아는 게 아니라, 방대한 텍스트에서 학습한 통계적 패턴으로 가장 그럴듯한 다음 단어를 고를 뿐입니다. 할루시네이션이 왜 생기는지도 여기서 짐작할 수 있습니다. 모델은 "사실"이 아니라 "그럴듯함"을 최적화하기 때문입니다.
2. 다음 단어를 잘 고르려면 문맥을 이해해야 한다
다음 단어를 잘 예측하려면, 앞에 나온 단어들 중 무엇이 중요한지 알아야 합니다.
"은행에서 돈을 찾은 뒤, 강 ___ 에 앉아 쉬었다."
여기서 빈칸을 채우려면 "강"이라는 단어에 집중해야 "둔치/변" 같은 답이 나옵니다. 만약 "은행"에 꽂히면 엉뚱한 답이 나오겠죠. 즉 어떤 단어를 예측할 때, 앞의 어떤 단어들을 얼마나 참고할지 정하는 능력이 필요합니다.
바로 이 "어디에 주목할지"를 계산하는 메커니즘이 셀프 어텐션(Self-Attention) 입니다.
3. 셀프 어텐션 직관 - Query / Key / Value
어텐션을 이해하는 가장 좋은 비유는 검색입니다. 각 단어(토큰)는 세 개의 역할을 동시에 만듭니다.
| 이름 | 비유 | 역할 |
|---|---|---|
| Query (질의) | 내가 찾고 싶은 것 | "나는 지금 어떤 정보가 필요한가?" |
| Key (열쇠) | 각 단어의 색인 태그 | "나는 이런 정보를 갖고 있어" |
| Value (값) | 실제 내용 | "가져갈 실제 정보" |
동작을 사람 말로 풀면 이렇습니다.
- 지금 처리 중인 단어가 Query를 던진다. ("나는 이런 게 궁금해")
- 문장 안 모든 단어의 Key와 비교해 얼마나 관련 있는지 점수를 매긴다.
- 관련 높은 단어의 Value를 많이, 낮은 단어의 Value는 적게 섞어서 가져온다.
즉 "관련도로 가중 평균한 정보 요약" 이 어텐션의 결과물입니다. 앞의 "강" 예시라면, 빈칸 단어의 Query가 "강"의 Key와 높은 점수를 내고, "강"의 Value를 많이 반영하게 됩니다.
아주 단순화하면 이런 흐름입니다.
scores = q @ k.T
weights = softmax(scores)
output = weights @ v