Attention이 실제로 작동하는 방식 — Next-Token Prediction에서 QKV 직관까지
요약
언어 모델의 핵심 메커니즘인 Attention이 Next-Token Prediction 과정에서 어떻게 작동하는지 설명합니다. QKV(Query, Key, Value) 구조를 통해 모델이 문맥 내에서 중요한 정보를 동적으로 선택하고 가중치를 부여하는 원리를 다룹니다.
핵심 포인트
- 언어 모델은 다음 토큰의 확률을 추정하는 방식으로 작동함
- Attention은 문맥 내에서 중요한 토큰을 동적으로 재가중치함
- QKV 구조는 검색 메커니즘과 유사하게 정보를 선택함
- Attention은 기존 Seq2Seq 모델의 정보 손실 병목 현상을 해결함
언어 모델은 "문장을 쓰는" 것이 아닙니다.
그것은 다음 토큰 (next token)을 예측합니다. 한 번에 한 단계씩 말이죠.
따라서 진짜 질문은 이것입니다:
지금 이 순간 무엇이 중요한지 어떻게 결정할까요?
그것이 바로 Attention이 존재하는 이유입니다.
핵심 아이디어 (Core Idea)
언어 모델 (Language Model) = 다음 토큰 확률 추정기 (next-token probability estimator).
이전 토큰들이 주어졌을 때, 모델은 다음 토큰을 예측합니다.
Attention = 어떤 과거 토큰이 더 중요한지 결정하는 메커니즘.
이것은 매우 중요합니다.
모든 문맥 (context)이 똑같이 유용한 것은 아니기 때문입니다.
핵심 구조 (The Key Structure)
언어 모델링 (Language Modeling)은 다음과 같이 축약될 수 있습니다:
P(x₁, x₂, ..., xₜ) = Π P(xₜ | x₁...xₜ₋₁)
그리고 Attention은 다음을 추가합니다:
가중치가 적용된 문맥 선택 (weighted context selection)
더 구체적으로 말하면:
언어 모델 (Language Model) = 문맥 (context) + 가중치 부여 (weighting) + 예측 (prediction)
Attention이 없다면:
모든 문맥이 압축됩니다.
Attention이 있다면:
매 단계마다 문맥이 동적으로 재가중치 (re-weighted) 됩니다.
의사 코드 관점 (Pseudo-code View)
자기회귀 생성 (Autoregressive generation):
context = ["I", "love"]
while not finished:
...
모델 내부의 Attention:
for each token t:
score = compare(query_t, keys)
...
이것이 핵심 루프입니다.
예측 (Predict) → 추가 (append) → 반복 (repeat).
구체적인 예시 (Concrete Example)
입력:
"I love"
가능한 다음 토큰들:
you, it, this, pizza
모델은 다음과 같이 확률을 할당합니다:
you → 0.6
it → 0.2
this → 0.1
pizza → 0.1
왜 "you"가 선택될까요?
Attention이 문맥 내의 관계에 집중하기 때문입니다.
"I" + "love" → 강력한 패턴 → "you"
이제 확장해 봅시다:
"I love you because"
이제 모델은 결정해야 합니다:
"because"는 무엇과 연관되어 있는가?
Attention은 모델이 마지막 토큰뿐만 아니라 전체 문맥을 재평가할 수 있게 해줍니다.
Attention이 필요한 이유 (Why Attention Is Needed)
기존의 Seq2Seq 모델들:
- 전체 입력을 하나의 벡터로 압축함
- 시퀀스가 길어질수록 정보를 손실함
Attention은 이를 해결합니다:
- 모든 토큰의 표현 (representations)을 유지함
- 관련 있는 토큰을 동적으로 선택함
이것이 중요한 이유는 다음과 같습니다:
긴 문장은 고정된 표현 (fixed representations)을 깨뜨립니다.
Attention은 그 병목 현상 (bottleneck)을 제거합니다.
QKV 직관 (QKV Intuition)
Attention은 세 가지 벡터를 사용합니다:
Query, Key, Value
검색(search)과 같이 생각해보세요:
Query = 내가 원하는 것
Key = 각 토큰이 제공하는 것
Value = 실제 정보
흐름(Flow):
- Query와 Key들을 비교
- 유사도 점수(similarity scores) 계산
- Softmax로 정규화
- 가중치를 사용하여 Value들을 결합
이것이 문맥(context)이 선택되는 방식입니다.
핵심 공식 (The Core Formula)
Attention은 다음과 같습니다:
Attention(Q, K, V) = softmax(QKᵀ / √d) V
의미:
- Query와 Key를 매칭
- 매칭 결과를 확률(probabilities)로 변환
- 해당 확률을 사용하여 Value들을 혼합
결과:
각 토큰은 문맥을 인식(context-aware)하게 됩니다.
교차 주의 집중(Cross Attention)과 문맥 벡터(Context Vector)
인코더-디코더(encoder-decoder) 모델에서:
디코더(Decoder)는 자신의 토큰에만 의존하지 않습니다.
인코더(Encoder)의 출력값을 살펴봅니다.
문맥 벡터(Context vector):
c = Σ (attention_weight × encoder_hidden_state)
이것은 동적(dynamic)입니다.
매 단계마다 모델은 무엇이 중요한지를 다시 계산합니다.
고정된 요약이 아닙니다.
움직이는 초점(moving focus)입니다.
단순한 관점 vs 실제 관점 (Naive vs Real View)
단순한 관점:
언어 모델 = 다음 단어 생성기
실제 관점:
언어 모델 = 동적 문맥 가중치 시스템 (dynamic context weighting system)
단순한 관점:
다음 토큰 예측
실제 관점:
Attention 계산
문맥 가중치 재설정
그 다음 토큰 예측
그 차이가 전부입니다.
이것이 Transformer가 이전 모델들보다 뛰어난 성능을 보이는 이유를 설명해 줍니다.
중요한 제약 사항 (Important Constraints)
Attention은 강력하지만, 공짜는 아닙니다.
- 비용이 시퀀스 길이(sequence length)에 따라 증가함
- 모든 토큰을 위한 메모리가 필요함
- 좋은 토큰화(tokenization)에 의존함
- 추론(inference) 시에는 여전히 순차적으로 생성됨
또한:
Attention은 그 자체로 의미를 이해하지 못합니다.
단지 데이터로부터 패턴을 학습할 뿐입니다.
따라서 품질은 학습(training)에 달려 있습니다.
이것이 왜 중요한가 (다시 한 번)
초기:
Attention이 없을 때 → 정보 병목 현상 (information bottleneck)
현재:
Attention이 있을 때 → 전체 문맥 + 선택적 초점
이것이 현대의 LLM이 작동하는 이유입니다.
그들이 "언어를 알아서"가 아닙니다.
문맥을 효율적으로 관리하기 때문입니다.
핵심 요약 (Takeaway)
언어 모델(Language Model) = 다음 토큰 예측 (next-token prediction).
Attention = 문맥 선택 (context selection).
QKV = 정보를 선택하기 위한 메커니즘.
한 가지만 기억해야 한다면:
Attention은 모델이 무엇을 말할지 예측하기 전에, 무엇을 볼지 결정할 수 있게 해줍니다.
그것이 현대 LLM의 핵심입니다.
Discussion
LLM의 동작을 생각할 때, 여러분은 이를 어떻게 보시나요:
확률 엔진 (probability engine)인가요, 아니면 문맥 선택 시스템 (context selection system)인가요?
zeromathai.com에서 최초 게시됨
원문 기사: https://zeromathai.com/en/attention-language-modeling-basics-en/
GitHub 리소스
AI 다이어그램, 학습 노트 및 시각적 가이드:
https://github.com/zeromathai/zeromathai-ai
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기