Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 손실 함수
- 정규화
- 머신러닝
- rnn
- CNN
- 과적합
- 자연어 처리
- 딥러닝
- 교차 검증
- 인공 신경망
- 강화학습
- 분류
- Q-Learning
- 인공지능
- 회귀
- GRU
- 지도 학습
- 신경망
- 활성화 함수
- python
- Machine Learning
- Deep learning
- 머신 러닝
- AI
- 데이터 전처리
- 강화 학습
- q-러닝
- 최적화
- reinforcement learning
- LSTM
Archives
- Today
- Total
move84
머신러닝: 기울기 소실 문제 본문
반응형
기울기 소실(Vanishing Gradient) 문제는 심층 신경망 학습 시 발생하는 대표적인 어려움 중 하나이다. 이 문제는 신경망의 깊이가 깊어질수록, 초기 레이어에서 학습이 제대로 이루어지지 않아 전체 모델의 성능 저하를 야기한다. 본 포스트에서는 기울기 소실 문제의 원인과 해결 방안에 대해 자세히 알아본다.
🤔 기울기 소실 문제란?
기울기 소실 문제는 신경망의 역전파 과정에서 발생한다. 역전파는 손실 함수의 기울기를 계산하여 각 레이어의 가중치를 업데이트하는 과정인데, 기울기가 뒤쪽 레이어에서 앞쪽 레이어로 전달될 때 점차 작아지는 현상을 말한다. 특히 활성화 함수로 시그모이드(Sigmoid)나 하이퍼볼릭 탄젠트(Tanh) 함수를 사용하는 경우, 입력값이 특정 범위에서 벗어나면 기울기가 0에 가까워져 기울기 소실이 더욱 심화된다.
😫 기울기 소실의 원인
기울기 소실의 주요 원인은 다음과 같다.
- 활성화 함수: 시그모이드(Sigmoid) 함수는 입력값이 매우 크거나 작을 때 기울기가 0에 가까워진다. 예를 들어, 시그모이드 함수의 미분 값은 최대 0.25이므로, 여러 레이어를 거치면서 기울기가 계속 곱해지면 급격히 작아진다.
- 깊은 신경망 구조: 신경망의 레이어가 깊어질수록 기울기가 여러 번 곱해지면서 소실될 가능성이 커진다. 각 레이어에서 기울기가 조금씩 감소하더라도, 레이어가 많아지면 전체적인 기울기 감소는 매우 커진다.
- 잘못된 초기 가중치: 초기 가중치가 너무 크거나 작은 경우, 활성화 함수의 출력값이 포화되어 기울기 소실을 유발할 수 있다.
💡 기울기 소실 해결 방안
- ReLU (Rectified Linear Unit) 활성화 함수 사용: ReLU 함수는 입력값이 0보다 작으면 0을 출력하고, 0보다 크면 입력값을 그대로 출력한다. ReLU 함수의 미분 값은 0 또는 1이므로, 기울기 소실 문제를 완화할 수 있다. 하지만 ReLU 함수도 입력값이 음수일 때 기울기가 0이 되는 Dying ReLU 문제가 발생할 수 있다.
- Leaky ReLU, Parametric ReLU (PReLU) 사용: Leaky ReLU와 PReLU는 ReLU 함수의 Dying ReLU 문제를 해결하기 위해 제안되었다. Leaky ReLU는 입력값이 음수일 때 아주 작은 기울기를 가지도록 설계되었고, PReLU는 음수 영역에서의 기울기를 학습 가능한 파라미터로 설정한다.
- 배치 정규화 (Batch Normalization): 배치 정규화는 각 레이어의 입력값을 평균이 0, 분산이 1이 되도록 정규화하는 기법이다. 이를 통해 기울기가 너무 커지거나 작아지는 것을 방지하고, 학습 속도를 향상시킬 수 있다. 배치 정규화는 각 미니 배치(mini-batch) 단위로 평균과 분산을 계산하여 정규화를 수행한다.
- Skip Connection (Residual Connection): Skip Connection은 ResNet에서 제안된 기법으로, 특정 레이어의 입력을 몇 개의 레이어를 건너뛰어 더 깊은 레이어에 직접 전달하는 방식이다. 이를 통해 기울기가 소실되지 않고 효과적으로 전달될 수 있도록 돕는다.
- 올바른 가중치 초기화: Xavier 초기화나 He 초기화와 같은 방법을 사용하여 초기 가중치를 적절하게 설정하면, 기울기 소실 문제를 완화할 수 있다. Xavier 초기화는 입력과 출력의 크기를 고려하여 가중치를 초기화하고, He 초기화는 ReLU 함수를 사용하는 경우에 적합하도록 설계되었다.
import numpy as np
# Sigmoid 함수
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Sigmoid 함수 미분
def sigmoid_derivative(x):
return sigmoid(x) * (1 - sigmoid(x))
# ReLU 함수
def relu(x):
return np.maximum(0, x)
# ReLU 함수 미분
def relu_derivative(x):
return np.where(x > 0, 1, 0)
# 예시: 시그모이드 함수를 사용한 신경망 레이어의 기울기 소실 확인
input_value = np.array([5.0]) # 큰 입력값
output_value = sigmoid(input_value)
derivative_value = sigmoid_derivative(input_value)
print(f"입력값: {input_value}")
print(f"시그모이드 출력값: {output_value}")
print(f"시그모이드 미분값: {derivative_value}")
# 예시: ReLU 함수를 사용한 경우
input_value = np.array([-1.0, 0.0, 1.0])
output_value = relu(input_value)
derivative_value = relu_derivative(input_value)
print(f"입력값: {input_value}")
print(f"ReLU 출력값: {output_value}")
print(f"ReLU 미분값: {derivative_value}")
코드 설명:
sigmoid(x)
: 시그모이드 함수를 구현한다.sigmoid_derivative(x)
: 시그모이드 함수의 미분을 구현한다. 시그모이드 함수의 미분은 입력값이 클 때 0에 가까워지는 것을 확인할 수 있다.relu(x)
: ReLU 함수를 구현한다.relu_derivative(x)
: ReLU 함수의 미분을 구현한다. ReLU 함수의 미분은 입력값이 0보다 클 때 1, 0보다 작거나 같을 때 0이 된다.
본 포스트에서는 기울기 소실 문제의 원인과 해결 방안에 대해 살펴보았다. ReLU 활성화 함수, 배치 정규화, Skip Connection 등의 기법을 사용하여 기울기 소실 문제를 효과적으로 해결하고, 심층 신경망의 학습 성능을 향상시킬 수 있다.
주요 용어 정리
- 기울기 소실 (Vanishing Gradient): 역전파 과정에서 기울기가 점차 작아지는 현상
- ReLU (Rectified Linear Unit): 0보다 작은 값을 0으로 만들고, 0보다 큰 값은 그대로 출력하는 활성화 함수
- 배치 정규화 (Batch Normalization): 각 레이어의 입력값을 정규화하는 기법
- Skip Connection (Residual Connection): 레이어를 건너뛰어 입력을 전달하는 방식
- Xavier 초기화 (Xavier Initialization): 입력과 출력 크기를 고려한 가중치 초기화 방법
- He 초기화 (He Initialization): ReLU 함수에 적합한 가중치 초기화 방법
반응형
'머신러닝' 카테고리의 다른 글
합성곱 신경망(CNN) 기본 개념 (0) | 2025.04.14 |
---|---|
머신러닝 Exploding Gradient 문제 (0) | 2025.04.14 |
신경망의 깊이와 너비: 딥러닝 모델의 구조 이해 (0) | 2025.04.14 |
머신러닝 모델의 파라미터 초기화 전략 (0) | 2025.04.14 |
배치 정규화 (Batch Normalization) (0) | 2025.04.14 |