728x90
최적의 가중치를 찾아가는 여정
오늘은 기울기에 대해 알아보자.
오늘의 배움 |
|
1. 기울기와 경사 하강법
- 정의: 손실 함수의 기울기를 이용해 최적의 가중치를 찾아가는 최적화 방법
- 핵심 개념 한 줄 설명: 산을 내려갈 때처럼 가장 가파른 방향으로 내려가면서 최저점을 찾는 방법
- 특징:
- 직관적이고 구현이 비교적 간단하다
- 학습률 설정이 중요하다
- 지역 최저점에 빠질 수 있다
[핵심 공식]
- 경사하강법: w = w - lr * ∇f(w)
- 기울기 클리핑: clip(gradient, -threshold, threshold)
- 배치 정규화: y = γ * ((x - μ)/σ) + β
📚 실제 예시로 이해하기
|
def gradient_descent(f, init_x, lr=0.1, step_num=100):
x = init_x
for _ in range(step_num):
grad = numerical_diff(f, x)
x -= lr * grad
return x
def function(x):
return x**2
print(gradient_descent(function, 10.0))
2. 핵심 개념 정리
- [경사하강법의 기본 원리]
- 정의: 기울기의 반대 방향으로 이동하며 최적점을 찾는 방법
- 작동 원리: 현재 위치의 기울기 계산 → 기울기 반대 방향으로 이동
- 특징: 학습률이 중요한 하이퍼파라미터
- 예시: 이차함수의 최소값 찾기
- [기울기 문제와 해결방법]
- 정의: 기울기 소실(Vanishing Gradient)과 폭발 문제(Exploding Gradient)
- 작동 원리: 활성화 함수와 네트워크 구조에 따른 기울기 변화
- 특징: 깊은 신경망에서 자주 발생
- 해결방법: ReLU 사용, 배치 정규화, 그래디언트 클리핑
- [신경망에서의 기울기]
- 작동 원리: 가중치에 대한 손실 함수의 기울기를 구해야함
- 특징: 자동 미분(AutoGrad)과 역전파(Backpropagation) 알고리즘을 통해 효율적으로 계산
2-1. 기울기 소실(Vanishing Gradient) 문제
- 심층 신경망에서는 역전파 시 기울기가 점차 작아져 초기 층까지 전달되지 않는 문제가 발생할 수 있다.
- 특히 시그모이드(Sigmoid)나 하이퍼볼릭 탄젠트(Tanh) 함수 같은 활성화 함수를 사용할 경우, 기울기가 0에 수렴하는 현상이 발생할 가능성이 크다.
- 해결 방법
- 활성화 함수 변경: 렐루(ReLU)나 리키 렐루(Leaky ReLU) 등의 함수를 사용하면 기울기 소실 문제를 완화할 수 있다.
- 잔차 연결(Residual Connection): ResNet 등의 네트워크에서 층을 건너뛰는 연결을 추가하여 기울기의 흐름을 원활하게 만든다.
출처: https://ducj.tistory.com/228
# ReLU 활성화 함수
def relu(x):
return max(0, x)
# 배치 정규화
def batch_norm(x, gamma, beta):
mu = np.mean(x)
sigma = np.std(x)
return gamma * (x - mu)/sigma + beta
2-2. 기울기 폭발(Exploding Gradient) 문제
- 기울기가 너무 커져서 가중치가 비정상적으로 갱신되는 현상이다.
- RNN(Recurrent Neural Network)과 같이 깊은 네트워크에서 발생하기 쉽다.
- 해결 방법
- 그래디언트 클리핑(Gradient Clipping): 기울기의 크기를 일정 수준 이상 증가하지 않도록 제한한다.
- 가중치 초기화 기법 활용: Xavier 초기화나 He 초기화를 사용하여 안정적인 학습을 유도한다.
2-3. 기울기 계산의 수치적 안정성
- 기울기 계산 중 발생하는 수치적 불안정성을 방지하기 위해 정규화 기법을 사용할 수 있다.
- 배치 정규화(Batch Normalization): 각 층의 입력을 정규화하여 학습을 안정화한다.
- L2 정규화: 가중치 값이 과도하게 커지는 것을 방지하여 오버피팅을 줄인다.
비교 분석표
최적화 기법 | 장점 | 단점 | 적용 상황 |
SGD | 구현 간단 | 수렴 느림 | 기본 학습 |
Momentum | 수렴 빠름 | 하이퍼파라미터 추가 | 일반적 상황 |
Adam | 안정적 | 메모리 사용량 큼 | 복잡한 모델 |
728x90
'Develop > ML·DL' 카테고리의 다른 글
인공신경망(딥러닝) 중간 점검 - 한 눈에 알아보기 (3) | 2025.02.06 |
---|---|
오차역전파법을 알아보자. (0) | 2025.02.06 |
인공신경망 - 수치미분을 알아보자. (2) | 2025.02.06 |
추천 시스템에 대해 알아보자. (3) | 2025.02.04 |
인공신경망-손실함수를 알아보자. (4) | 2025.02.04 |