| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 캐글
- BLaST
- RNN
- 바이오파이썬
- 시그모이드
- 파이썬
- 인공지능
- 인공지능 수학
- 자바
- 서열정렬
- 생물정보학
- 오류역전파
- 인공신경망
- AP
- 이항분포
- CNN
- Kaggle
- 생명정보학
- 딥러닝
- AP Computer Science A
- SVM
- 바이오인포매틱스
- bioinformatics
- Java
- MERS
- 결정트리
- COVID
- HMM
- 블록체인
- ncbi
- Today
- Total
데이터 과학
ReLU (Rectified Linear Unit) 함수 본문
ReLU 함수는 딥러닝에서 가장 널리 사용되는 활성화 함수 중 하나이며, 입력 값이 0보다 크면 그 값을 그대로 출력하고, 0 이하일 경우 0을 출력하는 형태로 구성됩니다. 즉, ReLU는 입력값을 선형적으로 유지하면서도 0에서 한 번 꺾이는 비선형성을 지닌 간단한 함수입니다. 수식은 매우 단순하게

로 표현되며, 그래프를 그려보면 x축의 음수 영역에서는 값이 모두 0으로 깔려 있고, 양수 영역에서는 기울기가 1인 직선 형태로 나타납니다.
ReLU가 특히 중요하게 평가되는 이유는, 딥러닝 모델의 학습 효율성과 기울기 전달 능력을 크게 향상했기 때문입니다. 과거 딥러닝 초기에는 시그모이드 함수나 하이퍼볼릭 탄젠트 함수가 주로 사용되었지만, 이러한 함수들은 입력이 일정 범위를 넘어서면 변화량이 미세해지는 “포화 영역”에 도달하는 특성이 있었습니다. 이로 인해 역전파 과정에서 기울기가 거의 0에 가까워져, 앞쪽 레이어로 갈수록 학습이 제대로 이루어지지 않는 기울기 소실(vanishing gradient) 문제가 생겼습니다. 반면 ReLU는 양수 영역에서 기울기가 항상 1이기 때문에, 깊은 신경망에서도 기울기가 빠르게 소멸하지 않고 전파되어 학습을 훨씬 안정적으로 진행할 수 있게 해주었습니다. 이러한 특성 덕분에 ReLU는 딥러닝의 발전을 실질적으로 견인한 활성화 함수라고 평가받습니다.
ReLU의 또 다른 중요한 특징은 희소성(sparsity)입니다. ReLU는 음수 영역의 입력을 모두 0으로 만들어버리므로, 신경망의 뉴런 중 일부가 특정 입력에 대해 “꺼진 상태”를 유지하게 됩니다.
다시 말해, 한 번의 순전파에서 전체 뉴런이 모두 활성화되는 것이 아니라, 필요한 뉴런들만 선택적으로 활성화되고 나머지는 비활성화되는 구조를 형성합니다. 이러한 희소 활성화는 모델이 불필요한 표현을 학습하지 않고, 더욱 간결하고 중요한 특징을 포착하도록 도와주는 간접적인 정규화 효과를 가지고 있습니다. 또한 계산량이 줄어들기 때문에, 대규모 모델에서도 상대적으로 계산 효율성을 보장합니다.
그러나 ReLU는 완벽한 함수는 아닙니다. 가장 잘 알려진 문제는 “죽은 ReLU(dying ReLU)” 현상입니다.
학습 과정에서 특정 뉴런이 계속 음수 영역의 입력만 받게 되면, 그 뉴런의 출력은 항상 0이 되며, 기울기 또한 0이 되어 더 이상 업데이트되지 못하고 영구적으로 비활성화되는 문제가 발생합니다. 이러한 뉴런은 학습 과정에서 기능을 상실한 셈이며, 네트워크의 표현력이 저하될 수 있습니다. 이러한 문제는 특히 학습률이 너무 높게 설정되었거나, 가중치 초기화가 적절하지 않았을 때 더 자주 발생합니다. 이 문제를 완화하기 위한 다양한 변형 함수들이 등장했는데, 대표적으로 Leaky ReLU나 Parametric ReLU(PReLU)가 있습니다. 이 함수들은 음수 영역에도 작은 기울기를 부여하여 뉴런이 완전히 죽는 것을 방지하는 방식입니다. 그러나 원본 ReLU는 그 단순성 덕분에 여전히 매우 널리 사용됩니다.
ReLU 사용 시 고려해야 할 실무적인 요소도 존재합니다. 먼저 가중치 초기화는 ReLU 특성에 맞도록 설계된 He 초기화(또는 Kaiming 초기화)를 사용하는 것이 일반적입니다. 이는 ReLU를 사용하는 신경망 내부에서 신호의 분산이 적절히 유지되도록 설계된 초기화 방법으로, 너무 큰 분산으로 인해 값이 폭주하거나 너무 작은 분산으로 인해 표현력이 떨어지는 문제를 예방합니다. 또한 학습률이 과도하게 높으면 죽은 ReLU 문제가 더 많이 발생하므로, 적절한 학습률 스케줄링이 필요합니다. 최근에는 배치 정규화나 레이어 정규화와 ReLU가 함께 사용되면서, 학습 안정성과 수렴 속도가 더욱 향상되는 경향을 보입니다.
ReLU는 특히 컴퓨터 비전 분야에서 압도적으로 많이 사용됩니다. CNN 기반 모델인 AlexNet, VGG, ResNet 등의 성공 역시 ReLU가 없었다면 어려웠다고 평가됩니다. 자연어 처리 분야의 트랜스포머 모델에서는 GELU나 SiLU(Swish)와 같은 매끄러운 함수가 주로 사용되지만, 이는 언어 모델 특성에 따른 선택이며, 기본 MLP 구조나 다양한 회귀, 분류 신경망에서는 여전히 ReLU가 매우 강력하고 실용적인 선택입니다. 즉, ReLU는 “딥러닝의 기본값”이라 할 수 있을 정도로 보편적이며, 속도, 성능, 안정성의 균형이 훌륭한 함수입니다.
종합적으로, ReLU 함수는 단순한 수식 속에 강력한 표현력과 효율성을 동시에 갖춘 활성화 함수입니다. 기울기 소실 문제를 개선하고, 희소성을 통해 모델의 정규화 효과와 계산 효율을 높이며, 깊은 신경망의 학습을 가능하게 했다는 점에서 현대 딥러닝의 핵심적인 전환점이 되었습니다. 다만 죽은 ReLU 문제와 같은 단점도 존재하므로, 문제의 특성과 데이터 분포, 초기화 전략, 학습률 세팅 등을 종합적으로 고려하여 사용하는 것이 바람직합니다. 그럼에도 불구하고 ReLU는 지금도 다양한 모델에서 신뢰할 수 있는 기본 활성화 함수로 널리 선택되고 있습니다.
활성화 함수 수식/형태 (쉽게 설명) 장점 단점
| ReLU | 0보다 크면 그대로, 0 이하면 0 출력 | 계산 빠름, 깊은 신경망 학습 잘 됨, 기울기 소실 적음 | 음수 구간이 모두 0 → “죽은 ReLU” 문제 가능 | 대부분의 딥러닝 모델 기본 선택 |
| Leaky ReLU | ReLU와 같지만 음수 부분에 0이 아닌 작은 값 곱해줌 | 죽은 ReLU 문제 완화 | α(기울기) 값 선택 필요 | ReLU가 잘 학습되지 않을 때 |
| Sigmoid | S자 모양, 0~1 사이 값 출력 | 확률처럼 해석 가능(이진 분류에 적합) | 기울기 소실 심함, 학습 느림 | 출력이 “확률”이어야 할 때 |
| Tanh | -1~1 사이 S자 형태 | Sigmoid보다 중심이 0이라 학습 조금 더 안정적 | 여전히 기울기 소실 존재 | 순환 신경망(RNN) 등 일부 모델 |
| GELU | 부드러운 비선형 함수(확률적 ReLU 느낌) | Transformer 모델에서 성능 좋음, 미분 부드러움 | 계산량 큼 (ReLU보다 느림) | BERT, GPT 등 고성능 모델 |
import torch
import torch.nn as nn
import torch.optim as optim
# 간단한 데이터: y = 2x + 1 패턴 학습
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = 2 * x + 1
# 활성화 함수별 모델 생성 함수
def build_model(act_fn):
return nn.Sequential(
nn.Linear(1, 16),
act_fn,
nn.Linear(16, 1)
)
activations = {
"ReLU": nn.ReLU(),
"Sigmoid": nn.Sigmoid(),
"Tanh": nn.Tanh()
}
for name, act in activations.items():
model = build_model(act)
optimizer = optim.Adam(model.parameters(), lr=0.01)
loss_fn = nn.MSELoss()
# 학습
for epoch in range(300):
pred = model(x)
loss = loss_fn(pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name} 학습 후 손실값:", loss.item())
함수 학습 후 Loss(손실) 해석
| ReLU | 가장 낮음 | 빠르고 정확하게 학습됨 |
| Tanh | 중간 | 학습은 되지만 느리고 완전하지 않음 |
| Sigmoid | 가장 높음 | 기울기 소실 때문에 제대로 못 배움 |
간단하게 설명하면
ReLU는 딥러닝에서 가장 많이 사용되는 활성화 함수입니다. 입력이 0보다 크면 값을 그대로 통과시키고, 0 이하이면 0으로 만드는 간단한 방식이지만, 이 단순함 속에 큰 장점이 있습니다. ReLU는 양수 구간에서 기울기가 유지되기 때문에 역전파 과정에서 정보가 잘 전달되고, 깊은 신경망도 학습이 빠르고 효율적으로 됩니다. 또한 음수 부분이 0이 되면서 불필요한 뉴런이 꺼져 모델이 더 간결해지는 효과도 있습니다.
다만 음수 영역에서 완전히 0이 되어 어떤 뉴런은 학습이 멈춰버리는 “죽은 ReLU” 문제가 생길 수 있습니다. 이러한 문제를 해결하기 위해 Leaky ReLU 같은 변형 함수가 등장했습니다.
즉, ReLU는 속도, 성능, 효율성 면에서 균형이 뛰어나 대부분의 모델에서 기본으로 선택되는 함수이고, Sigmoid나 Tanh보다 훨씬 현대 딥러닝에 적합한 활성화 함수입니다.
'인공지능 > 딥러닝 -파이썬 인공지능' 카테고리의 다른 글
| 하이퍼볼릭 탄젠트 함수 (0) | 2025.10.22 |
|---|---|
| RNN (0) | 2025.10.22 |
| 마르코프 모델과 벨만 방정식 (0) | 2025.10.22 |
| CNN, MNIST 코드 분석 (0) | 2025.09.10 |
| 패션 MNIST 소스 분석 (1) | 2025.09.10 |