DL 기초 (Deep Learning Fundamentals)¶
신경망의 기본 구성 요소와 학습 메커니즘. LLM/VLM을 이해하기 위한 핵심 개념.
왜 DL 기초가 필요한가¶
| 개념 | LLM/VLM 연결 |
|---|---|
| 신경망 | Transformer는 특수한 형태의 신경망 |
| 역전파 | 모든 딥러닝 학습의 기반 |
| 활성화 함수 | GELU, SiLU 등 현대적 활성화 |
| 최적화 | AdamW, 학습률 스케줄링 |
| 배치 정규화 | Layer Norm, RMSNorm의 기원 |
| 가중치 초기화 | 안정적인 학습의 출발점 |
| 정규화 기법 | Dropout, Weight Decay |
토픽 목록¶
신경망 기초 (Neural Network Basics)¶
- 신경망 기초: 퍼셉트론, MLP, CNN, RNN, 순전파
학습 메커니즘 (Learning Mechanism)¶
활성화 함수 (Activation Functions)¶
- 활성화 함수: ReLU, GELU, Swish, GLU, 선택 가이드
최적화 (Optimization)¶
- 최적화 알고리즘: Adam, AdamW, 학습률 스케줄링, 웜업
정규화 (Normalization & Regularization)¶
- 배치/레이어 정규화: BatchNorm, LayerNorm, RMSNorm
- 정규화 기법: Dropout, Weight Decay, Data Augmentation
신경망 발전 역사¶
1958: Perceptron (단층)
|
1986: MLP + Backpropagation
|
1998: CNN (LeNet)
|
2012: AlexNet (GPU 학습)
|
2014: GAN, VGG, GoogLeNet, Dropout
|
2015: ResNet (잔차 연결), Batch Normalization
|
2017: Transformer (Attention is All You Need)
|
2018: BERT, GPT
|
2020+: GPT-3, LLaMA, Gemini, Claude
핵심 수식 요약¶
| 개념 | 수식 |
|---|---|
| 선형 변환 | \(z = Wx + b\) |
| ReLU | \(f(x) = \max(0, x)\) |
| GELU | \(f(x) = x \cdot \Phi(x)\) |
| Softmax | \(\sigma(z)_i = \frac{e^{z_i}}{\sum_j e^{z_j}}\) |
| Cross-entropy | \(L = -\sum y \log(\hat{y})\) |
| Chain rule | \(\frac{\partial L}{\partial w} = \frac{\partial L}{\partial z} \cdot \frac{\partial z}{\partial w}\) |
| He Init | \(W \sim \mathcal{N}(0, \sqrt{2/n_{in}})\) |
| Weight Decay | \(w \leftarrow (1 - \lambda\eta)w - \eta\nabla L\) |
학습 흐름¶
PyTorch 기본 구조¶
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super().__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
x = self.fc1(x)
x = self.relu(x)
x = self.fc2(x)
return x
# 학습 루프
model = SimpleNet(784, 256, 10)
optimizer = torch.optim.AdamW(model.parameters(), lr=0.001, weight_decay=0.01)
criterion = nn.CrossEntropyLoss()
for epoch in range(epochs):
for batch_x, batch_y in dataloader:
optimizer.zero_grad() # 기울기 초기화
output = model(batch_x) # 순전파
loss = criterion(output, batch_y)
loss.backward() # 역전파
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) # Gradient Clipping
optimizer.step() # 파라미터 업데이트
디버깅 빠른 참조¶
| 문제 | 확인 사항 | 해결책 |
|---|---|---|
| Loss가 안 줄어듦 | 학습률, 데이터, 초기화 | LR 조정, 데이터 확인 |
| NaN 발생 | 기울기 폭발, 나눗셈 오류 | Gradient Clipping, eps 추가 |
| 과적합 | Train↓ Val↑ | Dropout, Weight Decay, 데이터 증강 |
| 기울기 소실 | 깊은 층 기울기≈0 | ReLU, 잔차 연결, 정규화 |
| 죽은 뉴런 | ReLU 출력이 항상 0 | Leaky ReLU, 적절한 초기화 |
참고 자료¶
교재 및 강의 - Deep Learning (Goodfellow, Bengio, Courville) - CS231n: CNNs for Visual Recognition - CS224n: NLP with Deep Learning - 3Blue1Brown - Neural Networks
실습 - PyTorch Tutorials - d2l.ai - Dive into Deep Learning
논문 - Attention Is All You Need (Transformer) - Deep Residual Learning (ResNet) - Batch Normalization - Adam Optimizer