Leaky ReLU
Leaky ReLU는 음수 입력에 보통 0.01의 작은 기울기를 적용해 그래디언트가 계속 흐르도록 하며, 뉴런이 ReLU 비활성화 문제를 겪지 않게 합니다.
Leaky ReLU(Leaky Rectified Linear Unit)는 입력이 양수일 때 입력을 그대로 반환하고, 음수일 때는 0.01과 같은 작은 고정 기울기를 곱하는 활성화 함수입니다. 음수 입력마다 0을 출력하는 표준 ReLU를 수정해 음수 값에서도 작은 출력을 내도록 하며, 더 중요한 점은 역전파 중 그래디언트가 0이 되지 않도록 합니다. Andrew Maas, Awni Hannun, Andrew Ng는 2013년 음성 인식 음향 모델의 정류 활성화를 연구한 논문에서 기울기 0.01을 사용해 이 함수를 설명했습니다. 이 함수는 그래디언트 흐름이 중요한 딥러닝 모델에 사용되며, 생성적 적대 신경망 판별기, 구형 YOLO 객체 검출기, 구간별 선형 활성화를 사용해 양자화 모델을 실행하는 신경 처리 장치 등에 적용됩니다.
Leaky ReLU 작동 방식#
Leaky ReLU는 x > 0일 때 f(x) = x을, x ≤ 0일 때 f(x) = αx를 계산합니다. 음수 기울기 α는 0과 1 사이의 고정 하이퍼파라미터입니다. 도함수는 양수 입력에서 1이고 음수 입력에서 α이므로, 모든 입력은 해당 입력을 만든 가중치에 그래디언트를 일부 전달합니다. 일반적인 기울기는 구현과 프레임워크에 따라 다릅니다. PyTorch의 nn.LeakyReLU은 기본값이 0.01이고, TensorFlow의 tf.nn.leaky_relu은 0.2, Keras의 LeakyReLU 계층은 0.3입니다. 다음 코드는 음수 입력을 ReLU와 Leaky ReLU에 통과시킨 뒤 각각의 그래디언트를 계산합니다.
import torch
from torch import nn
# Negative pre-activations, the inputs a ReLU unit turns into zeros
x = torch.tensor([-3.0, -1.0, -0.5], requires_grad=True)
for activation in (nn.ReLU(), nn.LeakyReLU(negative_slope=0.01)):
y = activation(x)
y.sum().backward() # gradient that flows back toward the weights
print(f"{activation}: output {y.detach().numpy()}, gradient {x.grad.numpy()}")
x.grad = NoneReLU(): output [0. 0. 0.], gradient [0. 0. 0.]과 LeakyReLU(negative_slope=0.01): output [-0.03 -0.01 -0.005], gradient [0.01 0.01 0.01]이 출력됩니다. ReLU는 이러한 입력에서 그래디언트를 전달하지 않으므로 경사 하강법으로 해당 입력을 만든 가중치를 변경할 수 없습니다. 반면 Leaky ReLU는 업스트림 그래디언트의 1%를 전달합니다.
Dying ReLU 문제#
학습 데이터의 모든 입력에서 사전 활성화 값이 음수가 되도록 가중치와 바이어스가 크게 바뀌면 ReLU 뉴런이 죽습니다. 그러면 출력과 그래디언트가 항상 0이 되고 입력 가중치가 다시는 업데이트되지 않아 신경망에서 뉴런이 영구적으로 사라집니다. 높은 학습률이나 큰 음수 방향의 바이어스 업데이트는 이러한 현상이 일어날 가능성을 높입니다. Leaky ReLU는 음수 영역에서도 작은 그래디언트를 유지하므로, 음수 영역으로 이동한 뉴런을 다시 끌어올릴 수 있습니다.
Dying ReLU 문제는 기울기 소실 문제와 다릅니다. 기울기 소실은 시그모이드나 tanh와 같은 포화 함수의 여러 계층을 통과하면서 그래디언트가 점차 작아지는 현상입니다.
Leaky ReLU와 관련 활성화 함수 비교#
- ReLU: 음수 입력에 정확히 0을 출력하므로 활성화가 희소해지고 연산 비용이 낮아지지만, 뉴런이 죽을 수 있습니다. Leaky ReLU는 모든 입력에서 그래디언트를 유지하는 대신 정확한 희소성을 포기합니다.
- 파라메트릭 ReLU (PReLU): 음수 기울기를 고정하지 않고 학습 중에, 일반적으로 채널별로 하나씩 학습합니다. Kaiming He와 동료들은 기울기를 0.25로 초기화했으며, 이는 PyTorch
nn.PReLU의 기본값이기도 합니다. - SiLU 및 GELU: 음수 입력에서 0보다 조금 낮아지고 0에서 뾰족한 모서리가 없는 부드러운 곡선입니다. SiLU는 최신 YOLO 모델의 기본 활성화 함수이며, GELU는 Transformer에서 널리 사용됩니다. 두 함수는 값마다 지수 연산이 필요하지만 Leaky ReLU에는 비교와 곱셈만 필요합니다.
Leaky ReLU 사용 사례#
- DCGAN 판별기: DCGAN 아키텍처는 모든 판별기 계층에서 기울기 0.2의 Leaky ReLU를 사용했습니다. 따라서 판별기가 이미지 생성을 거부하더라도 생성기가 유용한 그래디언트를 받으며, 이후 많은 GAN도 이 방식을 채택했습니다.
- 초기 YOLO 검출기: 최초 YOLO는 마지막 계층을 제외한 모든 계층에서 기울기 0.1의 Leaky ReLU를 사용했습니다. YOLOv2와 YOLOv3도 같은 방식을 사용했으며, YOLOv5는 2021년 1월 v4.0 릴리스에서 SiLU로 교체하기 전까지 Leaky ReLU를 사용했습니다.
- 그래프 어텐션 네트워크: 이러한 그래프 신경망은 각 노드가 이웃 노드에 얼마나 주의를 기울여야 하는지 점수를 계산할 때 기울기 0.2의 Leaky ReLU를 적용합니다.
- 엣지 AI 가속기: 양자화 모델을 실행하는 정수 연산 신경 처리 장치는 구간별 선형 활성화를 이전 합성곱 연산에 통합할 수 있습니다. AMD의 Xilinx DPU는 ReLU와 Leaky ReLU에 이 방식을 적용하지만, 시그모이드와 그에 따른 SiLU는 호스트 CPU에서 실행합니다.
Ultralytics YOLO 모델 YAML 파일은 모든 표준 합성곱 블록의 기본 SiLU를 대체하는 activation 키를 지원하므로, YOLO26은 activation: nn.LeakyReLU(0.1015625)을 사용해 DPU의 고정 기울기 26/256에 맞춰 학습할 수 있습니다.










