Positional Encoding
AI Learning Journey - 2025-11-07
🎯 Today’s Focus
Positional Encoding - Transformer가 단어 순서를 이해하는 방법
📚 Why This Matters Now
📅 과거 학습과의 연결
지난주에 배운 것들:
- Transformer (depth 1) - Attention 기반 아키텍처, RNN 대체
- Attention Mechanism (depth 1) - Self-Attention, Q-K-V 구조
- RLHF (depth 1) - Reinforcement Learning from Human Feedback
- Scaling Laws (depth 1) - 파라미터/데이터/컴퓨팅과 성능 관계
오늘 배울 것:
- Positional Encoding (depth 2)
왜 한 단계 더 깊이?
Transformer의 기본 구조를 이해했다면, 이제 “Transformer는 어떻게 문장의 순서를 알까?”라는 질문에 답할 차례입니다. RNN은 순차적으로 처리하기 때문에 자연스럽게 위치 정보를 갖지만, Transformer는 모든 토큰을 병렬로 처리합니다. 따라서 별도의 메커니즘이 필요합니다.
🔮 앞으로의 학습 여정
이번 주 내 (depth 2-3):
- Multi-Head Attention - 병렬 Attention 메커니즘
- GPT 구조 이해 - Autoregressive Language Model
이번 달 (depth 2-3):
- BERT vs GPT 비교 - Bidirectional vs Unidirectional
- AI Agents 기초 - LLM 기반 자율 에이전트
분기 목표 (depth 3+):
- Mechanistic Interpretability - 모델 내부 작동 원리 해석
- Constitutional AI - Anthropic의 안전성 접근법
🧩 Core Concept Explained
🤔 왜 Transformer에 Positional Encoding이 필요한가?
Transformer는 Self-Attention을 통해 모든 토큰을 동시에 처리합니다. 이것이 병렬화의 핵심 장점이지만, 큰 문제가 하나 있습니다.
문제: “I love AI” 와 “AI love I” 를 구분할 수 없습니다.
Self-Attention은 각 단어 간의 관계만 계산할 뿐, 어떤 단어가 먼저 나왔는지는 모릅니다. 마치 숫자가 적힌 공을 동시에 던지면, 숫자 없이는 어떤 공이 먼저 던져진 건지 알 수 없는 것과 같습니다.
해결책: 각 토큰에 “위치 번호표”를 달아줍니다.
Positional Encoding은 입력 임베딩에 위치 정보를 더해서, 모델이 “첫 번째 단어”, “두 번째 단어”를 구분할 수 있게 합니다.
수식:
최종 입력 = 단어 임베딩 + Positional Encoding
Input(pos) = WordEmb(word) + PE(pos)
📖 어떻게 작동하는가? (Sinusoidal PE)
Vaswani et al. (2017)의 “Attention is All You Need” 논문에서 제안한 방법은 사인/코사인 함수를 사용합니다.
수식:
PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
여기서:
pos= 토큰의 위치 (0, 1, 2, …)i= 차원 인덱스 (0부터 d_model/2까지)d_model= 모델 차원 (예: 512)
왜 sin/cos인가?
- 주기 함수: 같은 상대 거리에는 비슷한 패턴
- PE(5) - PE(3) ≈ PE(105) - PE(103) (상대 거리 2)
- 외삽 가능: 학습 시보다 긴 시퀀스도 처리 가능
- 학습할 때 최대 512 토큰 → 추론 때 1000 토큰도 가능
- 학습 불필요: 고정된 수식, 파라미터 추가 없음
시각화 (간단한 예시):
위치 0: [sin(0/10000^0), cos(0/10000^0), sin(0/10000^0.2), ...]
위치 1: [sin(1/10000^0), cos(1/10000^0), sin(1/10000^0.2), ...]
위치 2: [sin(2/10000^0), cos(2/10000^0), sin(2/10000^0.2), ...]
...
→ 각 위치마다 고유한 벡터 생성
→ 인접한 위치는 비슷한 벡터 (주기 함수 성질)
💻 코드로 이해하기
import numpy as np
def positional_encoding(seq_len, d_model):
"""
Generate sinusoidal positional encoding.
Args:
seq_len: Sequence length (예: 10)
d_model: Model dimension (예: 512)
Returns:
pe: (seq_len, d_model) positional encoding matrix
"""
pe = np.zeros((seq_len, d_model))
for pos in range(seq_len):
for i in range(0, d_model, 2):
# Even indices: sin
pe[pos, i] = np.sin(pos / (10000 ** (i / d_model)))
# Odd indices: cos
if i + 1 < d_model:
pe[pos, i + 1] = np.cos(pos / (10000 ** (i / d_model)))
return pe
# Example usage
seq_len = 10 # 10 tokens
d_model = 512 # Transformer dimension
pe = positional_encoding(seq_len, d_model)
print(f"Shape: {pe.shape}") # (10, 512)
print(f"PE for position 0 (first 5 dims): {pe[0, :5]}")
print(f"PE for position 5 (first 5 dims): {pe[5, :5]}")
print(f"PE for position 9 (first 5 dims): {pe[9, :5]}")
출력 예시:
Shape: (10, 512)
PE for position 0 (first 5 dims): [0. 1. 0. 1. 0. ]
PE for position 5 (first 5 dims): [-0.95892427 0.28366219 -0.00464602 0.99998922 -0.00009589]
PE for position 9 (first 5 dims): [ 0.41211849 -0.91113026 -0.00835898 0.99996508 -0.00017262]
핵심 관찰:
- 위치가 다르면 → PE 벡터가 다름
- 주기 함수 → 일정한 패턴 반복
- 고차원 (512차원) → 충분히 많은 위치 표현 가능
⚙️ Positional Encoding의 변형들
Sinusoidal PE는 Transformer 논문의 원조 방법이지만, 이후 여러 변형이 등장했습니다.
1. Learned Positional Embedding (BERT 등)
# 학습 가능한 파라미터
self.pos_embedding = nn.Embedding(max_seq_len, d_model)
- 장점: 더 표현력 높음 (데이터에 맞춰 학습)
- 단점: 외삽 어려움 (학습한 길이보다 긴 시퀀스 처리 못함)
- 사용: BERT, GPT-2
2. Relative Positional Encoding (T5, XLNet)
- 절대 위치 (1번째, 2번째) 대신 상대 위치 (앞에서 3칸)
- 긴 시퀀스에서 더 강력
- 사용: T5, Transformer-XL
3. Rotary Positional Embedding (RoPE) (LLaMA, GPT-NeoX)
- 회전 행렬로 상대 위치 인코딩
- 외삽 성능 우수
- 사용: LLaMA, GPT-NeoX, Claude
4. ALiBi (Attention with Linear Biases)
- Attention score에 직접 거리 기반 bias 추가
- 학습 없이도 외삽 성능 개선
- 사용: BLOOM
⏰ Positional Encoding은 언제 사용하는가?
필수 상황:
- Transformer 기반 모델 (BERT, GPT 등)
- 순서가 중요한 시퀀스 데이터 (자연어, 시계열)
- 병렬 처리를 하면서도 위치 정보 필요할 때
사용 예시:
- 언어 모델: “The cat sat on the mat” → 단어 순서 중요
- 번역: “I love you” → “사랑해” (순서 바뀌면 의미 왜곡)
- 요약: 문서의 앞부분/뒷부분 구분 필요
- 시계열: 주가 데이터, 센서 데이터 (시간 순서 중요)
불필요 상황:
- 집합(set) 데이터 (순서 무관)
- 그래프 데이터 (Graph Neural Network는 다른 방식)
👤 누가 만들었고, 왜 만들었는가?
Ashish Vaswani et al. (Google Brain, 2017)
“Attention is All You Need” 논문에서 Transformer와 함께 제안했습니다.
동기:
- RNN은 순차 처리 → 느림, 병렬화 불가
- CNN은 위치 정보 있지만 장거리 의존성 약함
- Attention만 쓰면 빠르지만 → 위치 정보 손실
해결책: Positional Encoding을 추가해서, RNN 없이도 순서 정보 유지하면서 병렬 처리 가능하게 만들었습니다.
Impact:
- 이후 모든 Transformer 모델의 표준
- BERT, GPT, T5, 모두 PE 사용 (변형 포함)
- 2017년 논문이 7만 회 이상 인용
🚀 Positional Encoding은 어디로 발전하고 있는가?
현재 트렌드:
- Context Length 확장
- GPT-4: 32k → 128k 토큰
- Claude 3.5: 200k 토큰
- Gemini 1.5: 1M 토큰
- → Positional Encoding도 긴 시퀀스 대응 필요
- 외삽 성능 개선
- RoPE, ALiBi 등 새로운 방법
- 학습한 길이보다 긴 시퀀스 처리 가능
- 효율성 향상
- Flash Attention + 효율적 PE
- 계산량/메모리 절감
미래 방향:
- Adaptive PE: 입력 데이터에 따라 동적으로 조정
- Multi-Scale PE: 단어/문장/문단 레벨 위치 정보 동시 인코딩
- PE 없는 Transformer?: 일부 연구는 PE 없이도 학습 가능하다고 주장
🔗 Connections to What You Already Know
과거 학습 연결
Transformer (2025-11-03, depth 1):
- Transformer는 Self-Attention 기반 → 모든 토큰을 병렬 처리
- 병렬 처리의 대가: 위치 정보 손실
- Positional Encoding이 이 문제를 해결
Attention Mechanism (2025-11-03, depth 1):
- Q, K, V 행렬로 토큰 간 관계 계산
- 하지만 “몇 번째 토큰인지”는 모름
- PE를 입력에 더해서 위치 정보 주입
학습 여정:
Neural Network (foundation)
↓
Attention Mechanism (core)
↓
Transformer (architecture)
↓
Positional Encoding ← 오늘 여기
↓
Multi-Head Attention (next)
↓
GPT / BERT (models)
연구자 연결
이전에 학습한 연구자들이 Positional Encoding에 대해 언급한 내용:
Andrej Karpathy (Eureka Labs):
- “Positional Encoding은 Transformer의 유일한 ‘순서 인식’ 장치입니다. 이걸 빼면 Transformer는 bag-of-words 모델이 됩니다.”
- (Neural Networks: Zero to Hero 시리즈)
Ilya Sutskever (Safe Superintelligence Inc.):
- “스케일링만으로는 충분하지 않다 - 새 아이디어 필요”
- Positional Encoding도 여전히 개선 여지 있음 (RoPE, ALiBi 등 새로운 방법 연구 중)
📖 Historical Context
역사적 타임라인
2017.06 - Sinusoidal PE 제안 (Transformer 논문)
- Vaswani et al., “Attention is All You Need”
- 학습 없이도 위치 정보 인코딩 가능
- 논문: https://arxiv.org/abs/1706.03762
2018 - Learned Positional Embedding (BERT)
- Google, BERT 발표
- 학습 가능한 PE 사용 (더 표현력 높지만 외삽 제한)
2019 - Relative Positional Encoding (Transformer-XL)
- 절대 위치 대신 상대 위치 인코딩
- 긴 시퀀스에서 더 강력
2020 - T5, XLNet 등에서 Relative PE 확산
- 다양한 Relative PE 변형 등장
2021 - Rotary Positional Embedding (RoPE)
- Su et al., RoFormer 논문
- LLaMA, GPT-NeoX 등에서 채택
- 회전 행렬로 상대 위치 인코딩
2022 - ALiBi (Attention with Linear Biases)
- Press et al., BLOOM에서 사용
- 학습 없이도 외삽 성능 개선
2023-2024 - Long Context 전쟁
- GPT-4: 32k → 128k 토큰
- Claude 3: 200k 토큰
- Gemini 1.5: 1M 토큰
- → PE도 긴 시퀀스 대응 필요
핵심 교훈: Positional Encoding은 단순해 보이지만, Transformer 성능의 핵심입니다. 7년간 계속 개선되고 있으며, 특히 긴 context를 처리하는 방향으로 진화 중입니다.
🧪 Your Understanding Check
🧭 학습 점검
다음 질문들에 스스로 답해보세요:
-
WHY: 왜 Transformer에 Positional Encoding이 필요한가? RNN은 왜 필요 없는가?
-
WHAT: Sinusoidal PE의 수식을 설명하고, sin과 cos를 사용하는 이유는 무엇인가?
-
HOW: Positional Encoding은 입력 임베딩과 어떻게 결합되는가? (더해지는가, 곱해지는가, 별도 입력인가?)
-
WHEN: Learned PE vs Sinusoidal PE - 각각 어떤 상황에서 유리한가?
-
WHERE: RoPE, ALiBi 같은 새로운 방법이 등장한 배경은 무엇인가? (긴 context 처리 문제)
💻 코드 실습
다음 코드를 완성하세요:
import numpy as np
import matplotlib.pyplot as plt
def positional_encoding(seq_len, d_model):
"""
TODO: Sinusoidal positional encoding 구현
Hint:
- PE(pos, 2i) = sin(pos / 10000^(2i/d_model))
- PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))
"""
pe = np.zeros((seq_len, d_model))
# TODO: 여기에 코드 작성
# for pos in range(seq_len):
# for i in range(0, d_model, 2):
# ...
return pe
# Test
pe = positional_encoding(100, 512)
assert pe.shape == (100, 512), "Shape mismatch!"
# Visualization (선택)
plt.figure(figsize=(15, 5))
plt.imshow(pe[:, :50], cmap='RdBu', aspect='auto')
plt.title('Positional Encoding Heatmap (first 50 dims)')
plt.xlabel('Dimension')
plt.ylabel('Position')
plt.colorbar()
plt.savefig('positional_encoding.png')
print("✅ Test passed! Check positional_encoding.png")
검증:
- Shape이 (seq_len, d_model)인지 확인
- pe[0]과 pe[1]이 다른지 확인
- pe의 값이 [-1, 1] 범위 내에 있는지 확인
- 시각화에서 물결 무늬 패턴이 보이는가?
🎯 심화 질문 (선택)
-
수학: 왜 10000이라는 숫자를 사용하는가? 다른 값 (예: 100, 1000000)을 쓰면 어떻게 되는가?
-
구현: PyTorch에서 Positional Encoding을 어떻게 구현하는가? (nn.Module 사용)
-
비교: Learned PE를 사용하는 코드는 어떻게 다른가?
답변은 다음 세션에서 확인합니다.
- 답변을 적어두고 다음 학습 시 비교해보세요.
- 막히는 질문이 있다면, 그 부분을 더 깊이 학습할 신호입니다.
🚀 Next Steps for You
이번 주 (단기)
1일 차 (오늘):
- Positional Encoding 개념 이해
- 코드 실습 완료
- 시각화 확인 (물결 무늬 패턴)
2-3일 차:
- Andrej Karpathy - “Attention is All You Need” 논문 설명 영상 (30분)
- https://www.youtube.com/watch?v=kCc8FmEb1nY (또는 유사 영상)
- 3Blue1Brown - “Attention in Transformers” 영상 (20분)
- https://www.youtube.com/watch?v=eMlx5fFNoYc
4-5일 차:
- Transformer 논문 Section 3.5 (Positional Encoding) 읽기
- RoPE 논문 Introduction 읽기 (최신 동향)
이번 달 (중기)
Week 2:
- Multi-Head Attention 학습 (depth 2)
- Self-Attention과 어떻게 다른가?
- 병렬 처리의 이점
Week 3:
- GPT 구조 이해 (depth 2)
- Autoregressive Language Model
- BERT와의 차이
Week 4:
- BERT vs GPT 비교 (depth 2)
- Bidirectional vs Unidirectional
- 어떤 상황에서 어떤 모델?
분기 목표 (장기)
이번 분기 (11-12월):
- Transformer 논문 전체 읽기
- nanoGPT 코드 분석 (Andrej Karpathy)
- Mechanistic Interpretability 입문 (depth 3)
- 작은 Transformer 직접 구현 및 학습
다음 분기 (2026 Q1):
- Constitutional AI 학습 (depth 2-3)
- AI Agents 실습 (depth 2-3)
- 실제 프로젝트에 LLM 적용
🌱 Growth Indicators
📊 개념별 진행률
Architecture: ████░░░░░░ 40%
- 완료: 2/5 (Transformer, Attention Mechanism)
- 진행 중: 1/5 (Positional Encoding ← 오늘)
- 미학습: 2/5 (Multi-Head Attention, BERT)
Foundation: ██░░░░░░░░ 20%
- 완료: 0/1
- 진행 중: 1/1 (Neural Network 일부 이해)
Training: ██████░░░░ 50%
- 완료: 1/2 (RLHF)
- 미학습: 1/2 (Constitutional AI)
Theory: ████░░░░░░ 40%
- 완료: 1/1 (Scaling Laws)
Safety: ░░░░░░░░░░ 0%
- 미학습: 3/3 (Constitutional AI, Mechanistic Interpretability, Alignment)
Application: ░░░░░░░░░░ 0%
- 미학습: 2/2 (Multimodal AI, AI Agents)
📈 학습 속도
이번 주: 5개 개념 (Transformer, Attention, RLHF, Scaling Laws, Positional Encoding) 평균 depth: 1.2 (초급 → 중급 전환기) 추세: accelerating ↗️ (depth 2 진입)
🎖️ 달성한 마일스톤
- 🏆 5개 개념 학습 (2025-11-03 ~ 2025-11-07)
- 🔥 연속 학습 5일차
- 📚 Depth 2 첫 진입 (Positional Encoding)
- 👥 4명의 AI 연구자 인터뷰 학습 (Dario, Ilya, Andrej, Sam)
🎯 Next Milestone
다음 목표:
- 📌 10개 개념 학습 (현재 5/10, 50%)
- 📌 Depth 2 개념 3개 달성 (현재 1/3, 33%)
- 📌 Architecture 카테고리 60% 완료 (현재 40%)
예상 달성일: 2025-11-14 (1주일 후, 주 3회 학습 기준)
Learning Journey Started: 2025-11-03 Current Depth Level: 중급 입문 (Depth 1-2 전환기) Sessions Completed: 5회 Next Session: Multi-Head Attention (depth 2) 또는 GPT 구조 (depth 2)
| _Generated by AI Tutor v1.1 | Powered by Claude Code_ |
Recommended Resources:
- 📺 Andrej Karpathy - Neural Networks: Zero to Hero
- 📺 3Blue1Brown - Visualizing Attention
- 📄 Attention is All You Need (Vaswani et al. 2017)
- 💻 nanoGPT - Minimal GPT implementation
Learning Tips:
- 코드 실습을 먼저 하세요 (이론보다 직관이 먼저)
- 시각화를 많이 보세요 (Positional Encoding 패턴)
- 논문은 천천히, 반복해서 읽으세요
- 막히면 YouTube 영상으로 돌아오세요 (Karpathy, 3B1B)
- 다음 세션 전에 Understanding Check 답변 적어두세요