어텐션은 AI가 문장을 읽을 때 지금 단어와 관련이 깊은 다른 단어에 더 집중하게 하는 방법이다. "나는 사과를 먹었다. 그것은 달았다"에서 '그것'이 '사과'라는 걸 알아내는 것이 어텐션이 하는 일이다. 거의 모든 LLM이 쓰는 Transformer의 핵심이라, 긴 대화를 기억하고 프롬프트를 이해하는 방식이 모두 여기서 나온다.
| 방식 | 앞 내용을 보는 법 | 한계 |
|---|---|---|
| RNN (이전 방식) | 앞에서부터 차례로 요약해 넘긴다 | 멀리 떨어진 내용을 잊기 쉽다 |
| 어텐션 | 모든 단어를 한 번에 직접 비교한다 | 입력이 길수록 계산이 크게 늘어난다 |
각 단어는 "내가 찾는 것(Query)", "내 꼬리표(Key)", "내가 건넬 내용(Value)" 세 가지를 만든다. Query와 Key가 잘 맞을수록 점수가 높고, 점수가 높은 단어의 내용을 더 많이 가져와 문맥을 만든다. 2017년 Transformer 논문에서 제안된 Self-Attention이 이 방식이다.
멀티헤드 어텐션은 이 계산을 여러 개 동시에 돌려 문법 관계, 의미 유사성처럼 서로 다른 관점을 함께 본다. 코드에서 함수 선언과 호출부를 이어 보는 것도 같은 원리다.
모든 단어 쌍을 서로 비교하므로 계산량은 입력 길이의 제곱으로 늘어난다. 긴 문서를 통째로 넣으면 응답이 느려지고 비용이 커지는 이유다.
기본 어텐션의 계산량을 기본 길이 대비 상대값으로 나타냈다. 실제 서비스는 여러 최적화로 차이를 줄인다.
어텐션은 입력 전체를 볼 수 있지만, 긴 입력의 중간에 있는 정보를 잘 놓친다는 연구가 있다. 그래서 꼭 지켜야 할 조건은 프롬프트 맨 앞이나 끝에 두고, 관련 없는 자료는 빼는 편이 낫다.
대화가 아주 길어지면 중요한 조건을 다시 적어 주거나, 지금까지 내용을 요약해 새 대화로 옮기면 정확도가 올라간다. API의 프롬프트 캐싱은 앞부분의 계산 결과를 재사용하므로, 고정된 지시문을 맨 앞에 두면 비용도 줄일 수 있다.
FlashAttention은 계산식은 그대로 두고 GPU 메모리를 읽고 쓰는 순서만 바꿔 속도를 높이고 메모리를 아낀다. 근사치가 아니라 같은 결과를 내므로, 모델을 직접 학습하거나 서빙할 때 켜 두는 것이 보통이다.
| 방식 | 결과 | 이럴 때 쓴다 |
|---|---|---|
| 기본 어텐션 | 정확 | 짧은 입력, 구현 검증 |
| FlashAttention | 정확 | 직접 학습·서빙하는 대부분의 경우 |
| 윈도우·희소 어텐션 | 근사 | 아주 긴 입력에서 비용을 줄일 때 |
어텐션은 따로 켜고 끄는 기능이 아니라 오늘날 AI 모델 안에 기본으로 들어 있는 부품이다. 사용자는 주로 프롬프트를 짤 때와 모델을 직접 학습·서빙할 때 이 원리를 의식하게 된다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 챗봇·LLM API 프롬프트 | 꼭 지킬 조건은 앞이나 끝에, 고정 지시문은 맨 앞에 두어 캐싱까지 활용 |
| 모델 직접 학습·서빙 | FlashAttention을 켜 속도와 메모리를 아끼고, 아주 긴 입력은 윈도우 어텐션을 검토 |
| 이미지·음성 모델 | 이미지는 조각으로, 소리는 짧은 구간으로 나눠 같은 방식으로 서로 비교 |