Optimization: Stochastic Gradient Descent
1. 개요
머신러닝에서 최적화는 모델의 성능을 향상시키는 핵심 과정입니다. 이 글에서는 이미지 분류 문제를 예시로 들어 최적화 과정을 설명하겠습니다.
핵심 구성요소
- 점수 함수(Score Function): 입력 이미지를 클래스 점수로 매핑 (예: 선형 함수)
- f(xi,W) = Wxi
- 손실 함수(Loss Function): 예측값과 실제값의 차이를 측정
L = (1/N) * ∑i∑j≠yi[max(0,f(xi;W)j−f(xi;W)yi+1)] + αR(W)
- 최적화(Optimization): 손실 함수를 최소화하는 매개변수 W를 찾는 과정
2. 손실 함수 시각화
- 고차원 공간에서 정의되는 손실 함수
- CIFAR-10의 경우: 가중치 행렬 W는 [10 x 3073] 크기 (30,730개 매개변수)
- 1차원 또는 2차원 단면으로 시각화 가능
3. 최적화 전략
3.1 무작위 탐색(Random Search)
bestloss = float("inf")
for num in range(1000):
W = np.random.randn(10, 3073) * 0.0001
loss = L(X_train, Y_train, W)
if loss < bestloss:
bestloss = loss
bestW = W
- 장점: 구현이 간단함
- 단점: 비효율적이고 성능이 좋지 않음
3.2 지역 무작위 탐색(Random Local Search)
- 현재 위치에서 무작위 방향으로 작은 스텝
- 더 나은 결과를 얻을 경우에만 이동
3.3 경사하강법(Gradient Descent)
- 그래디언트(기울기) 방향으로 이동
- 수치적 방법과 해석적 방법으로 계산 가능
수치적 그래디언트 계산
df(x)/dx = lim(h→0) [f(x+h) - f(x)] / h
미니배치 경사하강법
while True:
data_batch = sample_training_data(data, 256)
weights_grad = evaluate_gradient(loss_fun, data_batch, weights)
weights += - step_size * weights_grad
4. 주요 고려사항
4.1 학습률(Step Size) 선택
- 너무 작으면: 안정적이지만 느린 학습
- 너무 크면: 빠른 학습이 가능하지만 발산 위험
4.2 배치 크기 선정
- 일반적으로 32, 64, 128 등 2의 제곱수 사용
- 메모리 제약과 계산 효율성 고려
5. 결론
- 최적화는 반복적인 개선 과정
- 그래디언트는 가장 가파른 하강 방향을 제시
- 실제 구현에서는 해석적 그래디언트 사용 + 수치적 검증
- 미니배치 처리로 계산 효율성 향상
Backpropagation, Intuitions
1. 역전파란?
역전파는 체인룰(연쇄법칙)을 재귀적으로 적용하여 그래디언트를 계산하는 방법입니다. 신경망을 이해하고 개발하는데 필수적인 개념입니다.
핵심 문제
- 입력 벡터 x가 주어졌을 때 함수 f(x)의 그래디언트 ∇f(x)를 계산하는 것
- 신경망에서 f는 손실 함수(L)이고, x는 훈련 데이터와 가중치로 구성
2. 단순 표현식과 그래디언트 해석
기본 연산의 편미분
1. 곱셈: f(x,y) = xy
∂f/∂x = y
∂f/∂y = x
2. 덧셈: f(x,y) = x + y
∂f/∂x = 1 ∂f/∂y = 1
3. max 연산: f(x,y) = max(x,y)
∂f/∂x = 1 (x >= y인 경우) ∂f/∂y = 1 (y >= x인 경우)
3. 복합 표현식과 연쇄법칙
예제: f(x,y,z) = (x+y)z
# 순전파
q = x + y
f = q * z
# 역전파
dfdz = q # df/dz
dfdq = z # df/dq
dqdx = 1.0 # dq/dx
dqdy = 1.0 # dq/dy
dfdx = dfdq * dqdx # 연쇄법칙
dfdy = dfdq * dqdy # 연쇄법칙
4. 시그모이드 함수 예제
시그모이드 뉴런의 수식
f(w,x) = 1 / (1 + e^-(w0x0 + w1x1 + w2))
시그모이드 함수의 미분
σ(x) = 1 / (1 + e^-x)
dσ(x)/dx = σ(x)(1 - σ(x))
5. 실전 역전파: 단계별 계산
주요 원칙
- 순전파 값 캐싱
- 분기점에서 그래디언트 더하기
- 모듈화된 계산
기본 연산자의 역전파 패턴
- 덧셈 게이트
- 입력으로 그래디언트를 동일하게 분배
- max 게이트
- 더 큰 값을 가진 입력으로만 그래디언트 전달
- 곱셈 게이트
- 입력값을 서로 바꾸고 그래디언트와 곱함
6. 벡터화된 연산의 그래디언트
행렬 곱셈의 그래디언트
# 순전파
W = np.random.randn(5, 10)
X = np.random.randn(10, 3)
D = W.dot(X)
# 역전파
dD = np.random.randn(*D.shape)
dW = dD.dot(X.T)
dX = W.T.dot(dD)
실용적인 팁
- 차원 분석을 활용한 그래디언트 계산
- 작은 예제로 시작하여 일반화
- 계산을 단계별로 나누어 처리
- 중간 결과 저장하여 재사용
결론
- 역전파는 신경망 학습의 핵심 메커니즘
- 복잡한 함수를 단순한 연산으로 분해하여 처리
- 실제 구현에서는 모듈화와 벡터화가 중요
- 직관적 이해와 실용적 구현 능력이 모두 필요
'머신러닝 & 딥러닝 > 딥러닝' 카테고리의 다른 글
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(4) - Convolutional Neural Networks (6) | 2024.11.08 |
---|---|
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(3) - Neural Networks (1) | 2024.11.07 |
[AI 기초 다지기] 스탠포드 대학 딥러닝 기초(1) - Image Classification & Linear classification (2) | 2024.11.04 |
[딥 러닝] 인공 신경망(Artificial Neural Network)이란 무엇인가? (0) | 2023.06.01 |
[딥 러닝] 퍼셉트론이란 무엇인가? (0) | 2023.06.01 |