SiLU (Sigmoid Linear Unit)
Swish olarak da adlandırılan SiLU, düzgün ve kendi kendini kapılayan bir aktivasyon elde etmek için girdiyi sigmoid değeriyle çarpar. Matematiğini, kökenini ve ReLU ile karşılaştırmasını ele alır.
Sigmoid Doğrusal Birimi (SiLU), SiLU(x) = x · σ(x) olarak tanımlanan bir aktivasyon fonksiyonudur; burada σ, sigmoid fonksiyonudur. Büyük pozitif girdileri neredeyse değiştirmeden geçirir, büyük negatif girdileri neredeyse sıfıra eşler ve ikisinin arasında yumuşak bir geçiş yapar; x ≈ −1,278 noktasında yaklaşık −0,278 olan minimum değerine iner. SiLU, β = 1 olduğundaki Swish ile aynı fonksiyondur ve iki ad birbirinin yerine kullanılır. Evrişimli görüntü modellerinde yaygın bir varsayılandır; SwiGLU bloğunda ise birçok büyük dil modelinin (LLM) ileri beslemeli katmanlarını da çalıştırır.
Tanım ve Özellikler#
SiLU, her girdiyi girdinin kendisinden hesaplanan ve 0 ile 1 arasında değer alan σ(x) kapısıyla çarpar; bu nedenle kendinden kapılı olarak adlandırılır. Türevi σ(x) · (1 + x · (1 − σ(x))) biçimindedir. Bu ikisi, SiLU'ya eğitim davranışını ReLU'dan ayıran dört özellik kazandırır:
- Her yerde düzgün: Eğri ve türevi süreklidir; sıfırda köşe yoktur. Böylece ağırlıklardaki küçük değişiklikler çıktılarda küçük değişikliklere neden olur ve bu durum gradyan inişine uygundur.
- Negatif girdilerde gradyan: Girdisi negatif olan birim yine de küçük bir gradyan alır ve öğrenmeye devam eder. Girdileri sürekli negatif kalan ReLU birimleri hiç gradyan almaz ve öğrenmeyi kalıcı olarak durdurabilir; bu sorun ölü ReLU olarak bilinir.
- Monoton değil: x büyük negatif değerlerden yaklaşık −1,28'e yükselirken çıktı biraz düşer, sonra yükselir; bu nedenle fonksiyon monoton değildir.
- Alttan sınırlı, üstten sınırsız: Çıktılar yaklaşık −0,278'in altına düşmez; pozitif girdiler de ReLU'da olduğu gibi doyuma ulaşmadan geçer. Böylece derin ağlarda sigmoid ve tanh'ın kaybolan gradyan davranışından kaçınılır.
Aşağıdaki PyTorch kodu, SiLU'yu ve SiLU ile ReLU'nun beş noktadaki gradyanlarını hesaplar.
import torch
import torch.nn.functional as F
x = torch.tensor([-4.0, -1.28, 0.0, 1.0, 4.0], requires_grad=True)
# Aynı girdilerde ReLU ile karşılaştırılan SiLU(x) = x * sigmoid(x)
silu = F.silu(x)
relu = F.relu(x)
# Her aktivasyonun girdisine göre gradyanı
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())Kod, [-0.0719, -0.2785, 0.0, 0.7311, 3.9281] SiLU çıktılarını, [-0.0527, -0.0003, 0.5, 0.9277, 1.0527] SiLU gradyanlarını ve [0.0, 0.0, 0.0, 1.0, 1.0] ReLU gradyanlarını yazdırır. −4'te ReLU 0 çıktısı verir ve hiç gradyan iletmezken SiLU −0,0527 iletir. −1,28'de SiLU, −0,2785 minimum değerindedir ve gradyanı neredeyse tam olarak 0'dır; 4'te ise gradyanı 1'i biraz aşar.
Adın Kökeni#
Hendrycks ve Gimpel, GELU'yu tanıttıkları 2016 tarihli makalelerinde x · σ(x) ifadesine Sigmoid Doğrusal Birimi adını verdi. Bu ifade, GELU'dan daha kötü ancak genellikle ReLU ve ELU'dan daha iyi performans gösteren, sigmoid tabanlı GELU benzeri bir fonksiyon olarak sunuldu. Elfwing, Uchibe ve Doya ise 2017'de pekiştirmeli öğrenmede sinir ağı fonksiyon yaklaşımı için SiLU'yu kullandı. Aynı yılın ilerleyen dönemlerinde Google araştırmacıları, bir aktivasyon fonksiyonu için otomatik arama yoluyla x · σ(βx) ifadesini yeniden keşfetti, Swish adını verdi ve ReLU yerine kullanılmasının ImageNet ilk 1 doğruluğunu Mobile NASNet-A için %0,9, Inception-ResNet-v2 içinse %0,6 artırdığını bildirdi. PyTorch, 1.7 sürümünde nn.SiLU işlevini önceki adını kullanarak ekledi.
SiLU ve Diğer Aktivasyon Fonksiyonları#
- ReLU: max(0, x) hesaplaması daha ucuzdur, tam sıfırlar üretir ve pozitif girdiler için sabit 1 gradyana sahiptir. SiLU, düzgünlük ve negatif taraftaki gradyanlar karşılığında her öğe için bir sigmoid işlemi ekler.
- GELU: x · Φ(x); burada Φ, standart normal kümülatif dağılım fonksiyonudur. İki eğri aynı şekle sahiptir ve ölçeklenmiş SiLU x · σ(1.702x), GELU'ya her yerde yaklaşık 0,02 içinde yaklaşır. BERT ve ViT gibi Transformer'larda genellikle GELU, CNN tabanlı dedektörlerde ise daha çok SiLU tercih edilir.
- Sigmoid: Tek başına σ(x), girdileri 0 ile 1 aralığına sıkıştırır ve her iki uçta doyuma ulaşır; bu nedenle olasılıklar için çıktı katmanı olarak kullanılır. SiLU, sigmoid'i yalnızca kapı olarak kullanır.
- Hard-Swish: SiLU'nun bir yaklaşımı olan x · ReLU6(x + 3) / 6, MobileNetV3 ile birlikte tanıtıldı. Sigmoid kapısını parçalı doğrusal bir kapıyla değiştirerek mobil donanımda üstel işlemden kaçınır.
- SwiGLU: SiLU(xW) ifadesini ikinci bir izdüşüm olan xV ile öğe öğe çarpan kapılı doğrusal birimdir. LLaMA'nın ve diğer birçok LLM'nin ileri beslemeli bloğunu oluşturur.
SiLU Nerelerde Kullanılır#
Swish adıyla SiLU, EfficientNet boyunca kullanılan aktivasyondur ve modern gerçek zamanlı nesne dedektörlerinde yaygındır. Ultralytics YOLO modelleri, YOLOv5 v4.0'ın Ocak 2021'de LeakyReLU ve Hardswish'in yerine SiLU'yu kullanmaya başlamasından beri SiLU kullanıyor. YOLO26 modelinde her Conv bloğu bir evrişim, yığın normalizasyonu ve SiLU'dan oluşur.










