ChatGPT에 질문을 입력하면 문맥을 정확하게 이해하고 답변합니다. "배가 항구에 들어왔다"와 "배가 고프다"에서 "배"가 다른 의미라는 것도 구분합니다. 이게 어떻게 가능할까요. 핵심은 어텐션 메커니즘(Attention Mechanism)입니다. 문장에서 각 단어가 다른 단어들과 얼마나 관련 있는지를 수치로 계산해서 문맥을 파악합니다.
트랜스포머(Transformer)는 2017년 구글이 발표한 "Attention Is All You Need" 논문에서 나온 구조입니다. 이 구조 위에서 BERT, GPT, ChatGPT, Claude가 모두 만들어졌습니다. 오늘은 트랜스포머의 핵심인 어텐션 메커니즘이 수학적으로 어떻게 작동하는지 실제 숫자와 함께 따라가 보겠습니다.

RNN의 한계 — 트랜스포머가 등장한 이유
트랜스포머 이전에는 RNN(순환 신경망)이 텍스트 처리의 표준이었습니다. RNN은 단어를 순서대로 하나씩 처리합니다. "나는 어제 서울에서 맛있는 음식을 먹었다"를 처리할 때 "나는"을 처리하고, "어제"를 처리하고, 순서대로 진행합니다. 이전 단계의 정보를 hidden state에 담아서 다음 단계로 전달합니다.
문장: "나는 오래전 프랑스에서 자랐기 때문에 그 언어를 잘 한다"
"그 언어" = 프랑스어
RNN은 "프랑스"와 "언어" 사이에 많은 단어가 있어서
앞의 정보가 뒤로 전달되면서 희석됨
문제 1. 장기 의존성 문제:
멀리 떨어진 단어 간 관계 파악 어려움
역전파 시 기울기 소실 발생
문제 2. 순차 처리:
단어를 하나씩 순서대로 처리
→ 병렬화 불가능 → GPU 활용 비효율
→ 긴 문장일수록 학습 속도 폭증
트랜스포머 해결책:
모든 단어를 동시에 처리
어떤 단어든 직접 연결 가능 (거리 무관)
트랜스포머는 순서대로 처리하는 방식을 버리고 문장의 모든 단어를 동시에 처리합니다. 대신 어텐션으로 단어 간 관계를 직접 계산합니다. 이 덕분에 GPU 병렬 처리가 가능해져서 훨씬 큰 모델을 훨씬 빠르게 학습할 수 있게 됐습니다.
어텐션 메커니즘 — 단어 간 관련도 계산하기
어텐션의 핵심 아이디어는 단순합니다. "이 단어를 이해하려면 문장의 어떤 다른 단어를 봐야 하는가?"를 수치로 계산합니다. 각 단어가 다른 단어들에 얼마나 주목(Attend) 해야 하는지 가중치를 계산해서 정보를 모읍니다.
문장: "그 동물은 너무 지쳐서 길을 건너지 못했다"
"그것(it)"이 무엇을 가리키는가?
→ "동물"을 높은 어텐션으로 봄
→ "길"을 낮은 어텐션으로 봄
어텐션 가중치 예시:
it → 동물: 0.60 (높은 관련도)
it → 지쳐서: 0.25
it → 길: 0.10
it → 건너지: 0.05
→ 가중치 합 = 1.0 (소프트맥스로 정규화)
→ 각 단어의 정보를 가중치로 합산
→ "it"의 새로운 표현 = Σ 가중치 × 각 단어 벡터
이 가중치 계산이 내적으로 이루어집니다. 두 단어 벡터의 내적이 크면 관련도가 높다는 뜻입니다. 이 연재에서 다룬 내적과 소프트맥스가 어텐션의 핵심 연산입니다.
셀프 어텐션 — Q, K, V 행렬의 역할
트랜스포머의 셀프 어텐션(Self-Attention)은 Query(Q), Key(K), Value(V) 세 가지 행렬로 구현됩니다. 도서관 검색 시스템에 비유하면 이해하기 쉽습니다.
Query (Q): 내가 찾는 것 (검색어)
Key (K): 각 책의 제목/키워드 (색인)
Value (V): 책의 실제 내용
작동 방식:
1. Q와 K의 유사도 계산 (내적)
→ "내 검색어가 이 책 제목과 얼마나 맞는가"
2. 소프트맥스로 어텐션 가중치 계산
→ "각 책에 얼마나 주목할지"
3. 가중치 × V 합산
→ "관련 있는 책의 내용을 가중 평균"
수식:
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
Q: (n × d_k) 행렬
K: (n × d_k) 행렬
V: (n × d_v) 행렬
n: 단어 수, d_k: 키 차원
√d_k: 스케일링 (내적값이 너무 커지는 것 방지)
Q, K, V는 원래 단어 임베딩에 각각 다른 가중치 행렬(W_Q, W_K, W_V)을 곱해서 만듭니다. 같은 단어 벡터에서 세 가지 다른 표현을 만드는 겁니다. 이 가중치 행렬들이 학습 과정에서 업데이트됩니다.
실제 숫자로 어텐션 계산해보기
"나는 고양이를 좋아한다" 3 단어 문장으로 어텐션을 직접 계산해 보겠습니다. 각 단어를 2차원 벡터로 단순화합니다.
나는 = [1.0, 0.0]
고양이를 = [0.5, 0.8]
좋아한다 = [0.3, 0.9]
W_Q = W_K = W_V = 단위행렬 (단순화)
→ Q = K = V = 임베딩 그대로
"고양이를"이 다른 단어에 주목하는 정도:
Q_고양이 = [0.5, 0.8]
내적 계산 (Q·K^T):
Q_고양이 · K_나는 = 0.5×1.0 + 0.8×0.0 = 0.50
Q_고양이 · K_고양이 = 0.5×0.5 + 0.8×0.8 = 0.89
Q_고양이 · K_좋아한다 = 0.5×0.3 + 0.8×0.9 = 0.87
스케일링 (√d_k = √2 ≈ 1.41):
[0.50, 0.89, 0.87] / 1.41 = [0.35, 0.63, 0.62]
소프트맥스 적용:
e^0.35 = 1.419, e^0.63 = 1.878, e^0.62 = 1.859
합계 = 5.156
어텐션 가중치 = [0.275, 0.364, 0.361]
최종 출력 (가중치 × V 합산):
0.275×[1.0,0.0] + 0.364×[0.5,0.8] + 0.361×[0.3,0.9]
= [0.275,0] + [0.182,0.291] + [0.108,0.325]
= [0.565, 0.616]
→ "고양이를"의 새로운 표현: [0.565, 0.616]
→ 문맥 정보가 반영된 벡터로 업데이트됨
"고양이를"이 자기 자신(0.364)과 "좋아한다"(0.361)에 가장 주목했습니다. "나는"에는 덜 주목했습니다. 이 가중치가 학습을 통해 최적화되면서 모델이 문맥을 이해하는 능력을 갖춥니다.
멀티 헤드 어텐션 — 여러 관점에서 동시에 보기
셀프 어텐션을 한 번만 하면 하나의 관점에서만 단어 관계를 봅니다. 멀티 헤드 어텐션(Multi-Head Attention)은 서로 다른 W_Q, W_K, W_V로 어텐션을 여러 번 병렬로 수행합니다.
헤드 1: 문법적 관계 학습 (주어-동사 관계)
헤드 2: 의미적 관계 학습 (동의어, 연관어)
헤드 3: 지시 관계 학습 (대명사-명사 관계)
헤드 4: 위치 관계 학습 (근접한 단어 관계)
...
수식:
MultiHead(Q,K,V) = Concat(head_1,...,head_h) × W_O
head_i = Attention(QW_Qi, KW_Ki, VW_Vi)
GPT-3 설정:
헤드 수: 96개
각 헤드 차원: 128
전체 임베딩 차원: 96 × 128 = 12,288
→ 96가지 서로 다른 관점에서 동시에 어텐션 계산
→ 결과를 연결(Concat)해서 최종 표현 생성
멀티 헤드가 강력한 이유는 하나의 단어 관계를 여러 다른 의미로 동시에 파악하기 때문입니다. 같은 문장에서 문법 구조, 의미 관계, 지시 관계를 각각 다른 헤드가 전담해서 학습합니다. PCA에서 여러 주성분이 서로 다른 방향의 정보를 담는 것과 비슷한 원리입니다.
포지셔널 인코딩 — 순서 정보 주입하기
트랜스포머는 모든 단어를 동시에 처리하기 때문에 단어의 순서 정보가 없습니다. "나는 고양이를 좋아한다"와 "고양이를 나는 좋아한다"를 구분하지 못합니다. 포지셔널 인코딩(Positional Encoding)으로 위치 정보를 임베딩에 더해줍니다.
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
pos: 단어의 위치 (0, 1, 2, ...)
i: 임베딩 차원 인덱스
d_model: 임베딩 차원 수
왜 sin/cos를 쓰는가:
1. 값이 -1~1 사이로 정규화됨
2. 학습 때 없던 긴 문장도 처리 가능
3. 상대적 위치를 내적으로 계산 가능
최종 입력 = 단어 임베딩 + 포지셔널 인코딩
→ 의미 정보 + 위치 정보가 합쳐진 벡터
트랜스포머 전체 구조와 GPT·BERT의 차이
트랜스포머는 인코더(Encoder)와 디코더(Decoder)로 구성됩니다. GPT와 BERT는 이 구조의 어떤 부분을 쓰느냐가 다릅니다.
입력 → 멀티헤드 셀프어텐션 → 잔차 연결 → 층 정규화
→ 피드포워드 신경망 → 잔차 연결 → 층 정규화 → 출력
잔차 연결(Residual Connection):
출력 = LayerNorm(x + Sublayer(x))
→ 역전파 기울기 소실 방지
→ ResNet과 동일한 원리
GPT (디코더만 사용):
왼쪽 단어만 봄 (미래 단어 마스킹)
다음 단어 예측 학습
→ 텍스트 생성에 최적화
→ ChatGPT, Claude의 기반
BERT (인코더만 사용):
양방향으로 모든 단어 동시에 봄
마스킹된 단어 예측 학습
→ 문장 이해, 분류에 최적화
→ 검색 엔진, 감성 분석에 활용
| 모델 | 구조 | 학습 방식 | 주요 활용 |
|---|---|---|---|
| BERT | 인코더만 | 마스크 단어 예측 | 검색, 분류, QA |
| GPT | 디코더만 | 다음 단어 예측 | 텍스트 생성 |
| T5 | 인코더+디코더 | 텍스트→텍스트 | 번역, 요약 |
| ChatGPT | GPT + RLHF | 인간 피드백 강화학습 | 대화, 지시 따르기 |
이 연재에서 다룬 모든 개념이 트랜스포머 안에 들어있습니다. 행렬 곱셈으로 Q, K, V를 만들고, 내적으로 어텐션 점수를 계산하고, 소프트맥스로 확률 분포를 만들고, 역전파로 학습하고, 잔차 연결로 기울기 소실을 방지합니다. ChatGPT가 문맥을 이해하는 방식이 이 수학 위에 있습니다.
'데이터 과학 수학' 카테고리의 다른 글
| 데이터 사이의 간격을 최대로 벌리는 AI, 서포트 벡터 머신(SVM)과 커널 트릭의 수학 (0) | 2026.04.27 |
|---|---|
| 단순한 스무고개가 AI가 되는 방법, 결정 트리(Decision Tree)와 랜덤 포레스트의 수학 (0) | 2026.04.26 |
| 표본이 전체를 말한다. 정규분포와 중심극한정리의 수학적 원리 (0) | 2026.04.26 |
| 표본이 전체를 말한다. 정규분포와 중심극한정리의 수학적 원리 (0) | 2026.04.25 |
| 주성분 분석(PCA): 복잡한 데이터에서 핵심만 남기는 기술 (0) | 2026.04.24 |