728x90
모델의 학습 성능을 결정짓는 핵심 요소
오늘은 딥러닝 최적 모델학습- 최적화 함수에 대해 알아보자.
오늘의 배움 |
|
1. 최적화 함수
- 정의: 딥러닝 모델의 손실을 최소화하기 위해 가중치를 조정하는 방법
- 핵심 개념 한 줄 설명: 마치 등산을 할 때 정상으로 가는 최적의 경로를 찾는 것처럼, 모델이 가장 좋은 성능을 내는 가중치 값을 찾아가는 방법이다.
- 특징:
- 모델의 학습 속도, 일반화 성능, 수렴 안정성에 직접적인 영향을 미친다
- 다양한 방식으로 가중치를 업데이트한다
- 각각의 장단점이 뚜렷하다
- 대표적인 최적화 함수로 확률적 경사 하강법(SGD), 모멘텀, AdaGrad, RMSprop, Adam 등
- 핵심 공식: 기본 가중치 업데이트 공식: w ← w - η(학습률) × ∂L/∂w(기울기)
📚 실제 예시로 이해하기
|
2. 확률적 경사 하강법(SGD)
- 정의: 무작위로 선택한 데이터로 가중치 업데이트
- 작동 원리: 기울기 방향으로 일정 크기만큼 이동
- 특징: 단순하지만 안정적
- 예시: w_new = w - learning_rate * gradient
import numpy as np
def sgd_update(w, grad, lr=0.01):
return w - lr * grad
# 가중치와 기울기
w = np.array([0.5, -0.3])
grad = np.array([0.2, -0.4])
# SGD 업데이트 적용
w_new = sgd_update(w, grad)
print("Updated weights:", w_new)
3. 모멘텀
- 정의: 이전 업데이트 방향을 고려한 가중치 업데이트
- 작동 원리: 물리적 관성 개념 적용
- 특징: 지역 최솟값 회피 가능
- 예시: v = momentum * v - learning_rate * gradient
def momentum_update(w, v, grad, lr=0.01, momentum=0.9):
v = momentum * v - lr * grad
w += v
return w, v
# 초기값 설정
w = np.array([0.5, -0.3])
v = np.array([0.0, 0.0])
grad = np.array([0.2, -0.4])
# 모멘텀 업데이트 적용
w_new, v_new = momentum_update(w, v, grad)
print("Updated weights:", w_new)
4. AdaGrad
- 학습률을 개별 파라미터마다 다르게 적용하는 기법
- 자주 업데이트 되는 파라미터의 학습률은 작아지고, 드물게 업데이트되는 파라미터의 학습률은 커지도록 조정한다.
- AdaGrad는 초반 학습 속도가 빠르지만, 기울기의 제곱합이 계속 누적되면서 학습률이 급격히 감소하여 학습이 멈출 수도 있다.
def adagrad_update(w, grad, h, lr=0.01, epsilon=1e-8):
h += grad ** 2
w -= (lr / (np.sqrt(h) + epsilon)) * grad
return w, h
# 초기값 설정
w = np.array([0.5, -0.3])
h = np.array([0.0, 0.0])
grad = np.array([0.2, -0.4])
# AdaGrad 업데이트 적용
w_new, h_new = adagrad_update(w, grad, h)
print("Updated weights:", w_new)
5. RMSprop
- AdaGrad의 단점을 개선한 방법으로 최근 기울기의 크기를 지수적으로 가중평균하여 스케일링한다. (이전 기울기의 이동 평균을 사용하여 학습률을 조정한다.)
def rmsprop_update(w, h, grad, lr=0.01, beta=0.9, epsilon=1e-8):
h = beta * h + (1 - beta) * (grad ** 2)
w -= (lr / (np.sqrt(h) + epsilon)) * grad
return w, h
6. Adam
- 모멘텀과 RMSProps를 결합한 방법
- 1차 모멘텀(기울기의 이동평균)과 2차 모멘텀(기울기 제곱의 이동평균)을 활용해 안정적인 학습이 가능
def adam_update(w, m, v, grad, t, lr=0.01, beta1=0.9, beta2=0.999, epsilon=1e-8):
m = beta1 * m + (1 - beta1) * grad
v = beta2 * v + (1 - beta2) * (grad ** 2)
m_hat = m / (1 - beta1 ** t)
v_hat = v / (1 - beta2 ** t)
w -= (lr / (np.sqrt(v_hat) + epsilon)) * m_hat
return w, m, v
비교 분석표
최적화 함수 | 학습 속도 | 메모리 사용량 | 하이퍼파라미터 민감도 | 권장 사용 사례 |
SGD | 느림 | 낮음 | 높음 | 간단한 모델 |
Momentum | 중간 | 중간 | 중간 | 일반적인 상황 |
Adam | 빠름 | 높음 | 낮음 | 복잡한 모델 |
📌딥러닝 최적화 함수 쉽게 이해하기!
1. SGD (확률적 경사 하강법)
- 한줄 요약: " 무작위로 선택한 하나의 데이터를 사용하여 손실 함수의 기울기를 계산하고 가중치를 업데이트하는 방법 "
- 실생활 예시: 등산할 때 눈 앞에 보이는 경사만 보고 한 발자국씩 이동하는 것과 같다. 때로는 빠른 길을 찾지 못할 수 있지만, 결국 정상에 도착할 수 있다.
w = w - learning_rate * gradient
2. Momentum (모멘텀)
- 한줄 요약: " 이전 가중치 업데이트의 방향성을 고려하여 현재 업데이트에도 반영하는 방법 "
- 실생활 예시: 자전거를 타고 언덕을 오를 때, 이전에 받은 추진력을 이용하면 더 쉽게 올라갈 수 있는 것과 같다.
velocity = momentum * velocity - learning_rate * gradient
w = w + velocity
3. AdaGrad
- 한줄 요약: " 각 파라미터마다 학습률을 개별적으로 조정하여 파라미터의 중요도에 따라 다르게 업데이트하는 방법 "
- 실생활 예시: 새로운 도시를 탐험할 때, 처음 가보는 곳은 자세히 살펴보고, 자주 가본 곳은 빠르게 지나가는 것과 같다.
h = h + gradient**2
w = w - learning_rate * gradient / (sqrt(h) + epsilon)
4. RMSprop
- 한줄 요약: " 최근의 기울기 변화량을 지수평균하여 학습률을 적응적으로 조정하는 방법 "
- 실생활 예시: 주식 투자 시 최근 며칠간의 가격 변동을 더 중요하게 고려하는 것과 같다.
h = beta * h + (1 - beta) * gradient**2
w = w - learning_rate * gradient / (sqrt(h) + epsilon)
5. Adam
- 한줄 요약: "모멘텀의 방향성 활용과 RMSprop의 적응적 학습률 조정을 결합한 방법 "
- 실생활 예시: 내비게이션이 과거의 주행 데이터와 현재의 도로 상황을 모두 고려하여 최적의 경로를 추천하는 것과 같다.
m = beta1 * m + (1 - beta1) * gradient
v = beta2 * v + (1 - beta2) * gradient**2
w = w - learning_rate * m / (sqrt(v) + epsilon)
최적화 함수 | 속도 | 메모리 사용 | 안정성 | 특징 | 추천 상황 |
SGD | 느림 | 매우 적음 | 보통 | 단순하고 직관적 | 간단한 데이터셋 |
Momentum | 중간 | 적음 | 좋음 | 관성을 이용한 빠른 수렴 | 지역 최솟값이 많은 경우 |
AdaGrad | 중간 | 중간 | 좋음 | 파라미터별 학습률 조정 | 희소한 데이터 |
RMSprop | 빠름 | 중간 | 매우 좋음 | 최근 변화에 민감 | 비정형 데이터 |
Adam | 매우 빠름 | 많음 | 매우 좋음 | 적응적 학습률 + 모멘텀 | 대부분의 상황 |
728x90
'Develop > ML·DL' 카테고리의 다른 글
모델 검증을 알아보자. (0) | 2025.02.11 |
---|---|
인공신경망 - 과적합 해결을 알아보자. (0) | 2025.02.11 |
인공신경망(딥러닝) 중간 점검 - 한 눈에 알아보기 (3) | 2025.02.06 |
오차역전파법을 알아보자. (0) | 2025.02.06 |
인공신경망 - 기울기를 알아보자. (0) | 2025.02.06 |