## Attention Sink: 개념 완전 정복 🚰
LLM의 Self-Attention은 모든 토큰이 다른 모든 토큰을 참조하며 연관성을 계산합니다. 이 과정에서 모델은 효율성을 위해 독특한 전략을 스스로 학습하게 됩니다.
- 발생 원인: 모델은 문장 전체에 걸쳐 필요하지만 특정 단어에 속하지 않는 일반적인 정보(예: 전반적인 글의 톤, 스타일, 주제 등)를 어딘가에 저장해야 합니다. 이때, 항상 고정된 위치에 존재하는 **문장의 첫 번째 토큰들(특히 <s> 같은 시작 토큰)**을 그 정보를 모아두는 '저장소' 또는 '닻(anchor)'으로 활용하기 시작합니다.
- 주요 역할: 이 '싱크' 토큰들은 다른 모든 토큰들이 어텐션 계산을 할 때 참조하는 '정보 허브' 역할을 합니다. 즉, 다른 토큰들은 "아, 전체적인 문맥은 시작 토큰에 저장되어 있으니 거길 참고해야겠다"라고 학습하게 됩니다.
- 핵심 발견 (StreamingLLM 논문): 이 현상 자체보다 더 중요한 발견은, 이 싱크 토큰들이 모델의 안정성에 치명적으로 중요하다는 것입니다. 긴 글을 처리할 때 메모리 문제로 오래된 토큰을 순서대로 지워버리면, 이 싱크 토큰들이 사라지는 순간 모델의 성능이 급격히 무너집니다.
## 함께 알면 좋은 핵심 개념들
Attention Sink를 제대로 이해하려면 반드시 아래 개념들과 연결해야 합니다. 이들은 서로 뗄 수 없는 관계입니다.
1. KV 캐시 (KV Cache)
- 개념: LLM이 다음 단어를 예측(추론)할 때, 계산 속도를 비약적으로 향상시키는 메모리 최적화 기법입니다.
- 작동 원리: 어텐션 연산에 필요한 Key와 Value 벡터는 한 번 계산되면 변하지 않습니다. 따라서 이전에 계산된 모든 토큰의 Key, Value 값을 '캐시(Cache)'에 저장해두고, 새로운 토큰이 생성될 때마다 이 캐시를 재활용합니다. 이렇게 하면 전체 문장을 매번 다시 계산할 필요가 없어져 추론이 빨라집니다.
- Attention Sink와의 관계: Attention Sink는 바로 이 KV 캐시 안에 저장된 초기 토큰들에서 발생하는 현상입니다. 싱크를 해결하는 방법은 KV 캐시를 어떻게 관리할 것인가의 문제입니다.
2. 슬라이딩 윈도우 어텐션 (Sliding Window Attention)
- 개념: 무한히 긴 글을 처리하기 위해, 전체 문맥을 보는 대신 최근의 일부 토큰(예: 최근 4,096개)만 보도록 어텐션의 범위를 제한하는 기법입니다. 메모리 사용량을 줄이고 계산을 효율적으로 만듭니다.
- 문제점: 단순한 슬라이딩 윈도우는 가장 오래된 토큰부터 KV 캐시에서 순차적으로 제거합니다. 이럴 경우, 문장의 맨 처음에 있던 Attention Sink 토큰이 제거되는 순간, 모델은 전역 정보를 잃고 길을 잃게 되어 성능이 급격히 저하됩니다(Perplexity 폭증).
- Attention Sink의 해결책 (StreamingLLM): 이 문제를 해결하기 위해 **'Attention Sink 토큰들(예: 처음 4개)은 영구적으로 KV 캐시에 고정'**하고, 나머지 토큰들만 슬라이딩 윈도우 방식으로 관리합니다. 이렇게 하면 전역 정보는 보존하면서도 긴 글을 효율적으로 처리할 수 있습니다.
3. 시작 토큰 (SoS / CLS Token)
- 개념: 문장의 시작을 알리는 특별한 토큰입니다. (예: <s>, [BOS], [CLS])
- 전통적 역할 (BERT): [CLS] 토큰은 문장 전체의 의미를 압축하여 분류(Classification) 문제에 사용되도록 명시적으로 학습되었습니다.
- 새로운 역할 (Llama 등): 요즘 LLM의 <s> 토큰은 그런 명시적 역할이 없었음에도, 모델이 스스로 학습 과정에서 전역 정보를 저장하는 'Attention Sink'로 활용하는 현상이 발견된 것입니다. 이는 모델의 '창발적 능력(Emergent Ability)' 중 하나로 볼 수 있습니다.
## 그래서, 왜 중요한가요? (시험 대비 핵심)
- Attention Sink란?: LLM이 문장의 초기 토큰들에 전역 정보를 저장하는 창발적 현상.
- 발생 이유: 모델이 문맥 정보를 효율적으로 관리하기 위해 스스로 학습한 전략.
- 중요성: 이 싱크 토큰들은 모델의 안정성에 핵심적이며, 제거될 경우 성능이 붕괴됨.
- 해결책: 긴 글 추론 시, 단순한 슬라이딩 윈도우 대신 Attention Sink 토큰들을 KV 캐시에 고정하고 나머지만 슬라이딩하는 방식(StreamingLLM)으로 무한 길이의 컨텍스트를 효과적으로 처리할 수 있게 됨.
## ✍️ 주관식 예상 문제
문제: LLM의 효율적인 추론을 위해 슬라이딩 윈도우 어텐션을 사용할 때, 단순히 오래된 토큰을 순서대로 KV 캐시에서 제거하면 모델의 성능이 급격히 저하되는 현상이 발생합니다.
- 이 현상의 핵심 원인이 되는 'Attention Sink' 개념을 설명하시오.
- 이 문제를 해결하기 위한 접근법(e.g., StreamingLLM)이 KV 캐시를 어떻게 관리하는지 서술하시오.
모범 답안 예시:
- Attention Sink 개념: 'Attention Sink'는 LLM이 학습 과정에서 문장의 시작 부분에 위치한 초기 토큰들(예: SoS 토큰)에 특정 단어에 속하지 않는 전역 정보(글의 주제, 톤 등)를 모아서 저장하는 현상입니다. 이 토큰들은 다른 토큰들이 어텐션 계산 시 참조하는 정보 허브 역할을 하여 문맥의 일관성을 유지하는 데 핵심적입니다.
- KV 캐시 관리 방안: 이 문제를 해결하기 위해 StreamingLLM과 같은 접근법은 KV 캐시를 두 부분으로 나누어 관리합니다. (1) 문장 초기의 Attention Sink 토큰들(예: 처음 4개)은 영구적으로 캐시에 고정하여 전역 정보가 소실되지 않도록 합니다. (2) 나머지 토큰들은 최근 N개만 유지하는 슬라이딩 윈도우 방식으로 관리합니다. 이 방식을 통해 전역 정보는 보존하면서 메모리 효율성을 확보하여 긴 시퀀스에서도 안정적인 추론이 가능해집니다.
Q: 입력이 길어져도 attention sink 가 발생하나?
네, 정확히 맞습니다. 입력이 1만 자, 10만 자가 되어도 Attention Sink 현상은 문장 맨 앞의 시작 토큰(과 그 주변 몇몇 토큰)을 중심으로 동일하게 발생합니다.
사용자님의 질문은 "그렇게 멀리 떨어져 있는데도 맨 앞의 토큰을 제대로 참조할 수 있는가?"라는 아주 중요한 포인트를 담고 있습니다. 이것이 바로 트랜스포머가 RNN과 같은 이전 모델들을 뛰어넘는 핵심적인 이유입니다.
## 거리와 상관없이 작동하는 Self-Attention의 힘
이것이 가능한 이유는 Self-Attention 메커니즘이 **'위치에 상관없이 모든 토큰 쌍의 관계를 직접 계산'**하기 때문입니다.
- RNN의 한계: RNN(순환 신경망)은 정보를 순차적으로 전달합니다. 마치 '귓속말 전달 게임'처럼, 1번 토큰의 정보가 10,000번 토큰까지 전달되려면 9,999개의 중간 단계를 거쳐야 합니다. 이 과정에서 정보는 당연히 소실되거나 왜곡됩니다. 이를 **'장기 의존성 문제(Long-term Dependency Problem)'**라고 합니다.
- 트랜스포머의 혁신: 트랜스포머의 Self-Attention은 이와 다릅니다. 마치 **모든 사람이 동시에 참여하는 '화상 회의'**와 같습니다. 10,000번째 참가자(토큰)가 궁금한 점이 있으면, 중간 사람을 거칠 필요 없이 회의 주재자(시작 토큰)에게 직접 질문하고 답변을 받을 수 있습니다.
수학적으로 Attention Score = Q · K를 계산할 때, 9,999번 토큰의 Query 벡터와 1번 토큰의 Key 벡터를 **직접 내적(Dot-Product)**합니다. 두 토큰 사이에 다른 토큰이 얼마나 많은지는 계산 과정에 전혀 영향을 주지 않습니다.
## 싱크가 효율적인 이유
오히려 입력이 길어질수록 Attention Sink는 더 효율적인 전략이 됩니다.
- 정보 관리의 효율성: 1만 개의 모든 토큰이 각자 "이 글의 전체 주제는 무엇인가?"를 기억하려고 애쓰는 것보다, 전문적인 '서기' 역할을 하는 시작 토큰에게 그 임무를 맡기고, 나머지 토큰들은 필요할 때마다 그 '서기'를 참조하는 것이 훨씬 효율적입니다.
- 학습의 용이성: 모델은 학습 과정에서 "아, 전체적인 맥락 정보는 그냥 맨 앞에 있는 <s> 토큰에 몰아넣고, 필요할 때마다 꺼내 쓰는 게 가장 편하구나!"라는 사실을 스스로 깨닫게 됩니다.
## 위치 정보는 어떻게 알까요? - Positional Encoding
"거리에 상관없이 직접 소통한다면, 모델은 단어의 순서를 어떻게 아나요?"라는 궁금증이 생길 수 있습니다.
바로 **'Positional Encoding(위치 인코딩)'**이 그 역할을 합니다. 각 단어의 임베딩 벡터에 해당 단어의 위치(1번, 2번, ..., 10,000번)에 대한 고유한 수학적 '꼬리표'를 달아주는 것입니다.
따라서 모델은 Attention 계산 시 다음과 같이 두 가지 정보를 모두 활용합니다.
- 내용 정보 (단어의 의미): 단어 임베딩 벡터
- 위치 정보 (단어의 순서): 위치 인코딩 벡터
즉, "10,000번 위치에 있는 '사과'라는 단어"가 "1번 위치에 있는 시작 토큰"을 직접 참조할 수 있는 것입니다.
## 결론
네, 1만 자 길이의 입력에서도 맨 앞의 시작 토큰은 여전히 효과적인 Attention Sink 역할을 합니다. 이는 거리에 제약받지 않고 모든 토큰 간의 직접적인 상호작용을 허용하는 Self-Attention 메커니즘의 근본적인 힘 덕분이며, 이것이 바로 트랜스포머가 장기 의존성 문제를 해결하고 긴 문맥을 이해하는 핵심 비결입니다.
'시험 > 기본개념' 카테고리의 다른 글
| 데이터 드리프트, 개념 드리프트 (0) | 2025.09.03 |
|---|---|
| ai 시스템 모니터링 및 자동화 (0) | 2025.09.03 |
| transormer add norm, attention (0) | 2025.09.02 |
| XAI , cam, grad cam, lime, shap (0) | 2025.09.01 |
| AI 시스템 설계 (1) | 2025.09.01 |