Leaky ReLU
Leaky ReLU, gradyanların akmaya devam etmesi ve ReLU nöronlarının ölmesi sorununun önlenmesi için negatif girdileri küçük bir eğimle, genellikle 0,01 ile geçirir.
Leaky ReLU (sızdıran doğrultulmuş doğrusal birim), girdi pozitif olduğunda girdiyi değiştirmeden döndüren, negatif olduğunda ise 0.01 gibi küçük ve sabit bir eğimle çarpan bir aktivasyon fonksiyonudur. Her negatif girdi için sıfır çıktı veren standart ReLU fonksiyonunu değiştirerek, negatif değerlerin küçük bir çıktı ve daha da önemlisi geri yayılım sırasında sıfırdan farklı bir gradyan üretmesini sağlar. Andrew Maas, Awni Hannun ve Andrew Ng, konuşma tanıma akustik modellerindeki doğrultucu aktivasyonlar üzerine 2013 tarihli bir çalışmada bu fonksiyonu 0.01 eğimle tanımladı. Üretici çekişmeli ağ ayırt edicilerinden eski YOLO nesne algılayıcılara ve parçalı doğrusal aktivasyonlarla niceleştirilmiş modeller çalıştıran sinir işlem birimlerine kadar, gradyan akışının önemli olduğu derin öğrenme modellerinde kullanılır.
Leaky ReLU Nasıl Çalışır#
Leaky ReLU, x > 0 için f(x) = x, x ≤ 0 içinse f(x) = αx hesaplar; burada negatif eğim olan α, 0 ile 1 arasında sabit bir hiperparametredir. Türevi pozitif girdiler için 1, negatif girdiler için α olur; böylece her girdi, kendisini üreten ağırlıklara bir miktar gradyan iletir. Alışılmış eğim, kaynağa ve çerçeveye göre değişir: PyTorch'un nn.LeakyReLU varsayılan olarak 0.01, TensorFlow'un tf.nn.leaky_relu değeri 0.2 ve Keras LeakyReLU katmanı 0.3 kullanır. Bu kod, negatif girdileri ReLU ve Leaky ReLU'dan geçirir ve her birinin gradyanını hesaplar:
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.] ve LeakyReLU(negative_slope=0.01): output [-0.03 -0.01 -0.005], gradient [0.01 0.01 0.01] değerlerini yazdırır. ReLU bu girdilerden geriye gradyan göndermez; bu nedenle gradyan inişi onları üreten ağırlıkları değiştiremez. Leaky ReLU ise önceki katmandan gelen gradyanın %1'ini geri gönderir.
ReLU Nöronunun Ölmesi Sorunu#
Bir ReLU nöronu, ağırlıkları ve yanlılık değeri eğitim verilerindeki her girdi için ön aktivasyon negatif kalacak kadar değiştiğinde ölür. Bu durumda çıktısı ve gradyanı her zaman sıfır olur, gelen ağırlıkları bir daha güncellenmez ve nöron sinir ağında kalıcı olarak kaybedilir. Yüksek bir öğrenme oranı veya büyük bir negatif yanlılık güncellemesi bu durumu daha olası kılar. Leaky ReLU negatif tarafta küçük bir gradyan korur; böylece negatif bölgeye kayan bir nöron hâlâ geri çekilebilir:
ReLU nöronunun ölmesi sorunu, kaybolan gradyan sorunundan farklıdır. Kaybolan gradyan sorununda gradyanlar, sigmoid veya tanh gibi doygunlaşan fonksiyonların çok sayıda katmandan geçmesiyle giderek küçülür.
Leaky ReLU ve İlgili Aktivasyonlar#
- ReLU: Negatif girdiler için tam sıfır çıktılar verir; bu, aktivasyonları seyrekleştirip hesaplamayı ucuzlatır ancak nöronların ölmesine yol açabilir. Leaky ReLU, her yerde gradyan elde etmek için tam seyrekliğe sahip olmaktan vazgeçer.
- Parametrik ReLU (PReLU): Negatif eğimi sabitlemek yerine eğitim sırasında, genellikle kanal başına bir değer olarak öğrenir. Kaiming He ve çalışma arkadaşları eğimi 0.25 olarak başlattı; bu değer PyTorch'un
nn.PReLUiçin de varsayılandır. - SiLU ve GELU: Negatif girdilerde sıfırın biraz altına inen ve sıfırda keskin bir köşesi olmayan düzgün eğrilerdir. SiLU, modern YOLO modellerinde varsayılandır; GELU ise Transformer'larda yaygındır. Her ikisi de değer başına üstel işlem gerektirirken Leaky ReLU yalnızca karşılaştırma ve çarpma gerektirir.
Leaky ReLU Nerelerde Kullanılır#
- DCGAN ayırt edicileri: DCGAN mimarisi, her ayırt edici katmanında 0.2 eğimli Leaky ReLU kullandı; böylece ayırt edicinin reddettiği görüntülerde bile üretici yararlı gradyanlar alır. Daha sonraki birçok GAN de bu tercihi sürdürdü.
- İlk dönem YOLO algılayıcıları: Özgün YOLO, son katman dışındaki tüm katmanlarında 0.1 eğimli Leaky ReLU kullandı; YOLOv2 ve YOLOv3 de aynı tercihi yaptı. YOLOv5 ise Ocak 2021'de yayımlanan v4.0 sürümü bunu SiLU ile değiştirene kadar Leaky ReLU kullandı.
- Graf dikkat ağları: Bu grafik sinir ağları, her düğümün komşularına ne kadar dikkat etmesi gerektiğini puanlarken 0.2 eğimli Leaky ReLU uygular.
- Uç yapay zekâ hızlandırıcıları: Niceleştirilmiş modeller çalıştıran tamsayı sinir işlem birimleri, parçalı doğrusal bir aktivasyonu önceki evrişim işlemine katlayabilir. AMD'nin Xilinx DPU'su bunu ReLU ve Leaky ReLU için yapar; sigmoid ve dolayısıyla SiLU işlemlerini ise ana makinenin CPU'sunda çalıştırır.
Ultralytics YOLO model YAML dosyaları, her standart evrişim bloğundaki varsayılan SiLU'yu değiştiren bir activation anahtarını kabul eder; böylece YOLO26, DPU'nun sabit 26/256 eğimine uyacak şekilde activation: nn.LeakyReLU(0.1015625) ile eğitilebilir.










