SiLU (Sigmoid Linear Unit)
Swish라고도 하는 SiLU는 입력값에 해당 값의 시그모이드를 곱해 부드러운 자기 게이팅 활성화 함수를 만듭니다. 수학적 원리, 기원, ReLU와의 비교를 다룹니다.
시그모이드 선형 유닛(SiLU)은 SiLU(x) = x · σ(x)로 정의되는 활성화 함수이며, 여기서 σ는 시그모이드 함수입니다. 큰 양수 입력은 거의 그대로 전달하고 큰 음수 입력은 거의 0으로 변환하며, 두 영역 사이에서는 부드럽게 곡선을 그리며 x ≈ −1.278에서 약 −0.278의 최솟값에 도달합니다. SiLU는 β = 1인 Swish와 동일한 함수이며 두 이름은 서로 바꿔 사용됩니다. SiLU는 합성곱 기반 비전 모델의 일반적인 기본 함수이며, SwiGLU 블록에서는 여러 대규모 언어 모델(LLM)의 피드포워드 계층에도 사용됩니다.
정의 및 특성#
SiLU는 각 입력에 입력 자체로 계산되는 0과 1 사이의 게이트 σ(x)를 곱합니다. 이 때문에 셀프 게이트 함수라고 부릅니다. 미분값은 σ(x) · (1 + x · (1 − σ(x)))이며, 이 둘은 SiLU의 학습 동작을 ReLU와 구별하는 네 가지 특성을 만듭니다:
- 모든 지점에서 매끄러움: 곡선과 미분값이 연속적이고 0에서 꺾이지 않으므로, 가중치를 조금 바꾸면 출력도 조금만 변합니다. 이는 경사 하강법에 적합합니다.
- 음수 입력에도 기울기 전달: 입력이 음수인 유닛도 작은 기울기를 받아 계속 학습할 수 있습니다. 입력이 계속 음수인 ReLU 유닛은 기울기를 전혀 받지 못해 영구적으로 학습을 멈출 수 있으며, 이를 죽은 ReLU 문제라고 합니다.
- 비단조 함수: x가 큰 음수에서 약 −1.28까지 증가하는 동안 출력은 약간 감소하고, 그 이후에는 증가하므로 이 함수는 단조 함수가 아닙니다.
- 아래쪽은 유계, 위쪽은 무계: 출력은 약 −0.278보다 작아지지 않으며 양수 입력은 ReLU처럼 포화되지 않고 통과합니다. 따라서 심층 네트워크에서 시그모이드와 tanh의 기울기 소실 동작을 피할 수 있습니다.
아래 PyTorch 코드는 다섯 지점에서 SiLU와 SiLU 및 ReLU의 기울기를 계산합니다.
import torch
import torch.nn.functional as F
x = torch.tensor([-4.0, -1.28, 0.0, 1.0, 4.0], requires_grad=True)
# 동일한 입력에 대한 SiLU(x) = x * sigmoid(x)와 ReLU 비교
silu = F.silu(x)
relu = F.relu(x)
# 각 활성화 함수의 입력에 대한 기울기
silu_grad = torch.autograd.grad(silu.sum(), x)[0]
relu_grad = torch.autograd.grad(relu.sum(), x)[0]
print("SiLU output: ", [round(v, 4) for v in silu.tolist()])
print("SiLU gradient:", [round(v, 4) for v in silu_grad.tolist()])
print("ReLU gradient:", relu_grad.tolist())SiLU 출력 [-0.0719, -0.2785, 0.0, 0.7311, 3.9281], SiLU 기울기 [-0.0527, -0.0003, 0.5, 0.9277, 1.0527], ReLU 기울기 [0.0, 0.0, 0.0, 1.0, 1.0]가 출력됩니다. −4에서 ReLU의 출력은 0이고 기울기가 전달되지 않지만, SiLU는 여전히 −0.0527을 전달합니다. −1.28에서 SiLU는 최솟값 −0.2785에 도달하며 기울기는 거의 정확히 0이고, 4에서는 기울기가 1을 약간 넘습니다.
이름의 유래#
Hendrycks와 Gimpel은 GELU를 소개한 2016년 논문에서 x · σ(x)를 시그모이드 선형 유닛이라고 명명했습니다. 해당 논문에서는 GELU보다 성능이 낮지만 대체로 ReLU와 ELU보다 나은 시그모이드 기반 GELU 유사 함수로 소개되었습니다. 이후 Elfwing, Uchibe, Doya는 2017년 강화 학습에서 신경망 함수 근사에 SiLU를 사용했습니다. 같은 해 말 Google 연구진은 활성화 함수 자동 탐색을 통해 x · σ(βx)를 다시 발견해 Swish라고 명명했으며, ReLU를 이 함수로 대체하면 ImageNet에서 Mobile NASNet-A의 톱-1 정확도가 0.9%, Inception-ResNet-v2의 정확도가 0.6% 향상된다고 보고했습니다. PyTorch는 이전 명칭을 사용해 버전 1.7에서 nn.SiLU을 추가했습니다.
SiLU와 다른 활성화 함수 비교#
- ReLU: max(0, x)는 계산 비용이 낮고 정확한 0을 출력하며 양수 입력에 대해 기울기가 항상 1입니다. SiLU는 매끄러운 곡선과 음수 영역의 기울기를 제공하는 대신 원소마다 시그모이드를 하나씩 추가합니다.
- GELU: x · Φ(x)이며, 여기서 Φ는 표준 정규 누적 분포 함수입니다. 두 곡선의 형태는 같으며 스케일을 적용한 SiLU x · σ(1.702x)는 모든 지점에서 GELU를 약 0.02 이내의 오차로 근사합니다. BERT 및 ViT와 같은 Transformer에서는 GELU가 일반적으로 사용되고, CNN 기반 탐지기에서는 SiLU가 더 많이 사용됩니다.
- 시그모이드: σ(x)만 사용하면 입력을 0에서 1 사이로 압축하고 양 끝에서 포화되므로 확률 출력 계층으로 사용됩니다. SiLU에서는 게이트로만 사용됩니다.
- Hard-Swish: x · ReLU6(x + 3) / 6으로, MobileNetV3와 함께 소개된 SiLU 근사 함수입니다. 시그모이드 게이트를 구간별 선형 게이트로 대체해 모바일 하드웨어에서 지수 연산을 피합니다.
- SwiGLU: SiLU(xW)에 두 번째 투영 xV를 원소별로 곱하는 게이트 선형 유닛입니다. LLaMA 및 여러 LLM의 피드포워드 블록을 구성합니다.
SiLU의 사용 분야#
Swish라는 이름으로 불리는 SiLU는 EfficientNet 전체에서 활성화 함수로 사용되며, 최신 실시간 객체 탐지기에서도 흔히 사용됩니다. Ultralytics YOLO 모델은 YOLOv5 v4.0에서 2021년 1월 LeakyReLU와 Hardswish를 SiLU로 대체한 이후 SiLU를 사용해 왔으며, YOLO26에서는 모든 Conv 블록이 합성곱, 배치 정규화, SiLU로 구성됩니다.










