🤖
AI/ML
ReLU
Rectified Linear Unit
가장 널리 쓰이는 활성화 함수. 음수를 0으로 변환.
Rectified Linear Unit
가장 널리 쓰이는 활성화 함수. 음수를 0으로 변환.
ReLU(Rectified Linear Unit, 정류 선형 유닛)는 딥러닝에서 가장 널리 사용되는 활성화 함수입니다. 수식은 f(x) = max(0, x)로, 입력이 양수면 그대로 출력하고, 음수면 0을 출력합니다. 단순하지만 효과적이어서 현대 신경망의 기본 구성 요소가 되었습니다.
ReLU는 2010년 Nair와 Hinton이 제안했으며, 2012년 AlexNet의 성공으로 널리 채택되었습니다. 이전에 사용되던 Sigmoid, Tanh 함수는 기울기 소실(Vanishing Gradient) 문제가 있었지만, ReLU는 양수 영역에서 기울기가 1로 일정하여 이 문제를 크게 완화했습니다.
ReLU의 핵심 장점은 계산 효율성과 기울기 전파입니다. max(0, x) 연산은 매우 빠르고, 양수 영역에서 기울기가 1이므로 깊은 네트워크에서도 학습이 잘 됩니다. 또한 희소성(Sparsity)을 유도하여 네트워크의 표현력을 높입니다.
실무에서는 기본 ReLU 외에도 Leaky ReLU, PReLU, ELU, GELU 등 변형이 많이 사용됩니다. 특히 Transformer 기반 모델에서는 GELU가 표준이 되었고, CNN에서는 여전히 ReLU가 기본입니다. Dying ReLU 문제를 인지하고 적절한 초기화와 정규화를 함께 사용하는 것이 중요합니다.
다양한 활성화 함수의 PyTorch 구현 및 비교입니다.
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
# 입력 범위
x = torch.linspace(-3, 3, 100)
# 활성화 함수들
activations = {
"ReLU": nn.ReLU(),
"LeakyReLU": nn.LeakyReLU(0.1), # 음수 기울기 0.1
"ELU": nn.ELU(alpha=1.0),
"GELU": nn.GELU(), # Transformer에서 사용
"SiLU/Swish": nn.SiLU(), # x * sigmoid(x)
}
# 각 활성화 함수 적용
results = {name: fn(x) for name, fn in activations.items()}
# 신경망에서의 사용 예시
class ConvBlock(nn.Module):
def __init__(self, in_ch, out_ch, activation="relu"):
super().__init__()
self.conv = nn.Conv2d(in_ch, out_ch, 3, padding=1)
self.bn = nn.BatchNorm2d(out_ch)
# 활성화 함수 선택
if activation == "relu":
self.act = nn.ReLU(inplace=True)
elif activation == "gelu":
self.act = nn.GELU()
elif activation == "leaky":
self.act = nn.LeakyReLU(0.1, inplace=True)
def forward(self, x):
return self.act(self.bn(self.conv(x)))
# 모델에서 활성화 함수 확인
model = nn.Sequential(
ConvBlock(3, 64, "relu"),
ConvBlock(64, 128, "relu"),
)
print(f"ReLU 활성화 함수 사용 블록: {model}")