주제: 3-3 Positional Encoding / Transformer 병렬화
문제 설정
Transformer의 Self-Attention은 입력 토큰을 동시에 처리합니다. 하지만 이 방식에는 한 가지 문제가 있습니다.
토큰의 순서 정보가 사라집니다.
예:
I love you
you love I
Self-Attention만 사용하면 두 문장은 동일한 토큰 집합으로 처리됩니다.
이를 해결하기 위해 사용하는 방법이 Positional Encoding입니다.
직관 비유
- 단어 embedding -> 단어 의미
- positional encoding -> 단어 위치
- 두 정보를 합쳐 모델 입력 생성
1. Transformer 입력
Transformer 입력은 다음 두 정보를 결합합니다.
기호 의미
- E : token embedding
- P : positional encoding
- X : 최종 입력 벡터
왜 필요한가
토큰의 순서를 모델이 이해할 수 있도록 합니다.
주의점
positional encoding은 embedding 차원과 동일해야 합니다.
2. Sinusoidal Positional Encoding
Transformer 논문에서는 사인/코사인 함수를 사용했습니다.
기호 의미
- pos : 토큰 위치
- i : embedding 차원 index
- d : embedding dimension
왜 필요한가
각 위치가 고유한 벡터를 갖도록 합니다.
주의점
positional encoding은 학습 파라미터가 아닙니다.
3. 위치 정보 직관
예:
token1 -> pos 1
token2 -> pos 2
token3 -> pos 3
각 위치에 고유한 encoding 벡터가 추가됩니다.
embedding + position
결과적으로 모델은 단어 순서를 학습할 수 있습니다.
4. Relative Position 정보
sin/cos encoding의 중요한 특징:
두 위치 간 관계를 계산할 수 있습니다.
-> 상대 위치 정보 표현 가능
왜 중요한가
문장에서 단어 간 거리 정보를 모델이 학습할 수 있습니다.
5. Transformer 병렬화
Transformer의 큰 장점은 완전 병렬 계산입니다.
Self-attention 연산:
이 연산은 모든 토큰에 대해 동시에 계산됩니다.
기호 의미
- Q,K,V : query, key, value 행렬
- n : 토큰 길이
왜 가능한가
RNN처럼 이전 토큰 계산을 기다릴 필요가 없습니다.
6. RNN vs Transformer
| 모델 | 연산 방식 |
|---|---|
| RNN | 순차 계산 |
| Transformer | 병렬 계산 |
예:
RNN
x1 -> x2 -> x3 -> x4
Transformer
x1 x2 x3 x4 (동시 계산)
7. 병렬화 장점
- GPU 활용 극대화
- 학습 속도 증가
- 긴 문장 처리 가능
주의점
Self-Attention 계산량은 O(n²)입니다.
8. 전체 Transformer 입력 흐름
텍스트
↓
Tokenization
↓
Token Embedding
↓
Positional Encoding
↓
Self-Attention
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| X = E + P | x = embedding + position |
위치 정보 결합 |
| sin(pos/...) | torch.sin() |
sin positional encoding |
| cos(pos/...) | torch.cos() |
cos positional encoding |
자주 하는 오해 5개
- Transformer는 위치 정보를 자동으로 이해한다고 생각한다
- positional encoding은 optional이라고 생각한다
- positional encoding은 학습되는 파라미터라고 생각한다
- Transformer는 항상 RNN보다 계산량이 적다고 생각한다
- token 순서는 attention에서 자동 반영된다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- Self-Attention만 사용하면 위치 정보가 왜 사라지는가?
- Positional Encoding의 목적은 무엇인가?
- sin/cos positional encoding 식의 의미는 무엇인가?
- Transformer가 병렬 계산이 가능한 이유는 무엇인가?
- RNN과 Transformer의 계산 방식 차이는 무엇인가?