티스토리 뷰
딥러닝 기초학습 8: Attention의 등장 — “기억하지 말고, 필요할 때 찾아보자”
LSTM까지 왔을 때, 나는 이런 생각이 들었다.
“이 정도면 충분히 똑똑한 거 아닌가?”
그런데 번역 모델을 실제로 써보면 꼭 이런 문제가 터진다.
- 문장이 길어질수록 성능이 급격히 떨어지고
- 앞부분 정보는 거의 잊어버리고
- 중요한 단어가 있어도 제대로 반영이 안 된다
이때 나온 발상의 전환이 딥러닝 역사를 바꿨다.
👉 “기억을 억지로 들고 있지 말고,
필요할 때마다 다시 꺼내보자.”이 아이디어가 바로 Attention 이다.
이번 글에서는
- Attention이 왜 나왔는지
- 기존 RNN/LSTM과 뭐가 근본적으로 달라졌는지
- Query / Key / Value가 왜 필요한지
를 수식 최소 + 직관 중심으로 설명한다.
1. LSTM의 한계를 다시 정확히 짚어보자
LSTM은 “기억 관리”를 정말 잘했다.
하지만 구조적 한계는 분명했다.
❌ 문제 1: 모든 정보를 하나의 벡터에 압축
- 문장이 길어질수록 정보 손실
- 중요한 단어와 덜 중요한 단어의 구분이 흐려짐
❌ 문제 2: 순차 처리
- 앞 단어 → 뒤 단어 순서로만 계산
- 병렬화 불가능 → 느림
❌ 문제 3: 장거리 의존성
- 문장 앞과 뒤가 멀면 멀수록 연결이 약해짐
그래서 이런 질문이 자연스럽게 나왔다.
“굳이 과거 정보를 계속 들고 있어야 할까?”
“필요할 때 그 시점의 정보를 바로 참조하면 안 될까?”
2. Attention의 핵심 아이디어 (진짜 중요)
Attention의 본질은 딱 한 문장이다.
“현재 내가 보고 있는 것과
과거의 모든 정보 중에서
가장 관련 있는 것에 집중하자.”
즉,
- 모든 과거 정보를 저장해 두고
- 현재 시점에서 중요한 것만 골라서 사용
👉 이게 검색(search) 에 가깝다는 느낌이 든다.
3. 번역 예제로 보는 Attention의 직관
영어 → 한국어 번역을 생각해보자.
“I ate an apple because I was hungry.”
한국어로 번역할 때
- “because”를 번역하는 순간
- “hungry”와 강하게 연결되어야 한다
LSTM은:
- 마지막 hidden state 하나로 전체 문장을 요약
Attention은:
- “because”를 번역할 때
문장 전체를 다시 보면서
hungry 쪽에 높은 가중치를 준다
👉 이게 “집중(attention)”이다.
4. Attention을 구성하는 3요소: Query, Key, Value
여기서 사람들이 가장 헷갈린다.
근데 비유 하나면 끝난다.
📌 도서관 검색 비유
- Query (Q) : 내가 지금 찾고 싶은 질문
- Key (K) : 책들의 색인(목차, 키워드)
- Value (V) : 책의 실제 내용
과정은 이렇다:
- Query로 모든 Key와의 유사도 계산
- 유사도가 높은 Key에 가중치 부여
- 그 가중치로 Value를 가중합
👉 결과 = 지금 상황에 가장 필요한 정보
5. Attention 계산 흐름 (개념적)
수식 말고 흐름으로 보자.
입력 시퀀스
→ (Key, Value로 변환)
현재 상태
→ Query 생성
Query × Key → 중요도 점수
중요도 점수 → Softmax
Softmax × Value → Attention Output
핵심은 이것이다:
모든 입력을 동일하게 보지 않는다.
상황에 따라 중요도를 다르게 본다.
6. Self-Attention — 진짜 혁명
Attention은 원래 Encoder–Decoder 구조에서 쓰였다.
그런데 한 단계 더 나간 아이디어가 나왔다.
“Query, Key, Value를
전부 **같은 입력에서 만들면 어떨까?”
이게 바로 Self-Attention이다.
Self-Attention의 의미
- 문장 안에서
단어들이 서로를 바라본다 - 각 단어가
“이 문장에서 나랑 제일 관련 있는 단어가 뭐지?”
를 스스로 계산
그래서:
- 장거리 의존성 문제 해결
- 순서 상관없이 모든 단어 간 관계 학습 가능
7. 왜 Attention이 RNN을 이겼을까?
항목RNN/LSTMAttention
| 정보 접근 | 순차적 | 전체 동시 접근 |
| 장거리 의존성 | 약함 | 매우 강함 |
| 병렬 처리 | 불가 | 가능 |
| 속도 | 느림 | 빠름 |
| 구조 | 깊고 복잡 | 단순한 연산 조합 |
이 차이 때문에
Attention은 “구조 자체가 다른 모델” 이다.
8. PyTorch로 Attention 개념 맛보기
실제 코드로 보면 훨씬 감이 온다.
import torch
import torch.nn.functional as F
# 임의의 Query, Key, Value
Q = torch.randn(1, 4, 8) # (batch, seq_len, dim)
K = torch.randn(1, 4, 8)
V = torch.randn(1, 4, 8)
# Attention score
scores = torch.matmul(Q, K.transpose(-2, -1)) / (8 ** 0.5)
# 가중치
weights = F.softmax(scores, dim=-1)
# 결과
output = torch.matmul(weights, V)
print(output.shape) # (1, 4, 8)
✔ 실제 Transformer 내부에서 하는 계산의 축소판
✔ 그대로 실행 가능
9. Attention의 철학 (이게 중요하다)
Attention은 단순한 기술이 아니다.
사고방식의 전환이다.
- ❌ “기억하려고 애쓰지 말자”
- ✅ “필요할 때 꺼내 쓰자”
- ❌ “순서대로만 보자”
- ✅ “전체를 한 번에 보자”
이 철학이:
- Transformer
- BERT
- GPT
- LLM 전부의 출발점이다
10. 요약 정리
개념한 줄 요약
| Attention | 필요한 정보에 집중하는 메커니즘 |
| Query | 지금 내가 찾는 기준 |
| Key | 비교 기준 |
| Value | 실제 정보 |
| Self-Attention | 입력끼리 서로를 바라봄 |
| 핵심 장점 | 장거리 의존성 + 병렬 처리 |
📘 다음 글 예고
👉 딥러닝 기초학습 9: Transformer 구조 완전 해부 — Encoder, Decoder, Multi-Head Attention의 정체
다음 글에서는 드디어
- Transformer 전체 구조
- 왜 Encoder/Decoder로 나뉘는지
- Multi-Head Attention이 왜 필요한지
- Positional Encoding은 왜 등장했는지
를 그림 없이도 머릿속에 구조가 그려지게 설명한다.
딥러닝,Attention,SelfAttention,Transformer,NLP,QueryKeyValue,시계열,언어모델,딥러닝기초,PyTorch
'study > ML' 카테고리의 다른 글
| 딥러닝 기초학습 10 (완결): GPT·BERT·LLM의 진화 — Transformer는 어떻게 ‘언어를 생성하는 지능’이 되었는가 (0) | 2025.12.26 |
|---|---|
| 딥러닝 기초학습 9: Transformer 구조 완전 해부 — Encoder·Decoder·Multi-Head Attention이 왜 이렇게 생겼는가 (0) | 2025.12.22 |
| 딥러닝 기초학습 7: LSTM과 GRU — RNN의 기억력 문제를 해결한 ‘게이트 설계’의 정수 (0) | 2025.12.15 |
| 딥러닝 기초학습 6: RNN의 탄생 — 순차 데이터를 이해하기 위해 만들어진 첫 번째 딥러닝 모델 (0) | 2025.12.01 |
| 딥러닝 기초학습 5: CNN의 탄생 — 이미지가 가진 ‘공간 구조’를 이해하면 CNN이 보인다 (0) | 2025.11.28 |
- Total
- Today
- Yesterday
- node.js
- Express
- 백엔드개발
- kotlin
- JAX
- REACT
- Redis
- Docker
- 쿠버네티스
- DevOps
- 개발블로그
- NestJS
- JWT
- 압박면접
- Python
- nextJS
- flax
- 딥러닝
- seo 최적화 10개
- Next.js
- rag
- SEO최적화
- 웹개발
- PostgreSQL
- ai철학
- llm
- fastapi
- LangChain
- Prisma
- CI/CD
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

