Kurs
Aktivasyon fonksiyonları, bir sinir ağında hangi sinyallerin geçeceğine, hangilerinin geçmeyeceğine karar verir. Yanlış olanı seçtiğinizde modeliniz ya çok yavaş öğrenir ya da genelleme yapamaz. ReLU yıllarca makul varsayılan seçimdi çünkü hızlıydı ve çoğu görev için yeterince iyiydi.
GELU (Gaussian Error Linear Unit) bunu değiştirdi. BERT ve GPT dahil şimdiye kadar oluşturulmuş en yetenekli modellerin bazılarının arkasındaki aktivasyon fonksiyonu artık odur.
Bu yazıda, GELU’nun arkasındaki sezgiyi, formülünü, diğer aktivasyon fonksiyonlarıyla nasıl karşılaştırıldığını ve pratikte nerede kullanıldığını ele alacağım.
Makine öğrenmesinde aktivasyon fonksiyonlarına tamamen yeniyseniz, Düzeltilmiş Doğrusal Birime (ReLU) Başlangıç Rehberi blog yazımızı okuyun.
GELU Aktivasyon Fonksiyonu Nedir?
GELU, yani Gaussian Error Linear Unit, girdileri büyüklüklerine göre yumuşak ve olasılıksal bir yaklaşımla ağırlıklandıran bir aktivasyon fonksiyonudur.
Çoğu aktivasyon fonksiyonu sinyali ya geçirir ya da engeller. Örneğin ReLU, negatif olan her şeyi sıfırlar ve geri kalan her şeyi olduğu gibi geçirir. GELU farklı çalışır. Keskin bir eşik yerine, girdileri büyüklüklerine göre yumuşak biçimde ölçekler; bu da küçük negatif değerlerin bile çıktıya katkıda bulunabileceği anlamına gelir.
ReLU’dan farkı, GELU’nun her yerde düzgün ve süreklilik göstermesidir. Sıfırda keskin bir köşe ve ani geçişler yoktur. Bu düzgünlük eğitim sırasında önemli olabilir çünkü optimize ediciye üzerinde çalışmak için daha temiz gradyan bilgisi sağlar.
GELU’nun Arkasındaki Sezgi
GELU’yü, tüm girdilere aynı şekilde davranmayan bir filtre gibi düşünün.
ReLU kaba bir yaklaşımdır – negatif olan her şeyi her seferinde sıfırlar. Öte yandan GELU, “bu girdi değerinin faydalı olma olasılığı nedir?” diye sorar. Açıkça büyük ve pozitif olan değerler neredeyse olduğu gibi geçer. Küçük veya negatif olanlar tamamen kesilmek yerine ölçeklenir.
Sonuç olarak, daha az ilgili sinyalleri tamamen çöpe atmadan bastıran düzgün bir eğri elde edersiniz.
Bir yığın iş başvurusunu incelediğinizi hayal edin. Katı bir filtre, istisnasız, diploması olmayan herkesi eler. Daha akıllı bir filtre ise, ilgili deneyimiyle telafi edebilecek adayları hâlâ değerlendirir. GELU akıllı filtre gibi çalışır. Keskin kesimler yapmaz; bunun yerine her girdiyi büyüklüğüne göre tartar ve ne kadarının geçeceğine karar verir.
GELU’yu farklı kılan bu kademeli ve olasılıksal ölçeklemedir. Keskin geçişler ve ölü nöronlar yoktur – her girdi değeri için yumuşak bir geçirme-ya da-bastırma kararı vardır.
GELU Formülü
GELU’nun tam formülü, şu şekilde yazılan Gaussian kümülatif dağılım fonksiyonu (CDF) üzerine kuruludur:

Gaussian kümülatif dağılım fonksiyonu
Burada x girdi değeridir ve Φ(x), standart normal dağılımdan çekilen rassal bir değişkenin x’ten küçük veya eşit olma olasılığıdır. Basitçe söylemek gerekirse, Φ(x) size girdi değerinin ne kadar “normal” ya da beklenen olduğunu söyler – ve GELU girdi değerini ölçeklemek için bu olasılığı kullanır.
Girdi büyüdükçe Φ(x) 1’e yaklaşır; bu da girdinin neredeyse olduğu gibi geçtiği anlamına gelir. Girdi küçüldükçe Φ(x) 0’a yaklaşır; bu da girdinin bastırıldığı anlamına gelir.
Pratikte kullanılan yaklaşım
Tam formülle ilgili sorun, Φ(x)’in hesaplamasının pahalı olmasıdır. Hata fonksiyonunu içerir; bu fonksiyonun basit kapalı bir formu yoktur ve ölçekli hesaplamalarda yavaştır.
Derin öğrenme çatıları bunun yerine şu yaklaşımı kullanır:

GELU yaklaşım formülü
Bu yaklaşım, modern donanımda hızlı ve iyi desteklenen tanh’ı kullanır. Sonuç, pratikte önemli olan girdi aralığı boyunca tam formülle neredeyse aynıdır; bu yüzden PyTorch ve TensorFlow gibi çatıların varsayılan olarak bunu kullanmasının nedeni budur.
Elbette, bu formüllerin hiçbirini ezberlemeniz gerekmez. Ancak bu yaklaşımın varlığını – ve nedenini – bilmek, kodunuzda GELU çağırdığınızda gerçekte ne olduğunu anlamanıza yardımcı olur.
GELU ve Diğer Aktivasyon Fonksiyonları
Her aktivasyon fonksiyonu girdileri farklı şekilde işler ve bu farklılıklar modelinizin eğitim performansına yansır.
Metinle açıklamadan önce farkın görsel olarak nasıl göründüğü şöyledir:

GELU ve diğer aktivasyon fonksiyonları grafiği
Sigmoid
Sigmoid tüm girdileri 0 ile 1 arasına sıkıştırır. Düzgündür, ancak iyi bilinen bir sorunu vardır: kaybolan gradyanlar. Çok büyük veya çok küçük girdiler için gradyan sıfıra yaklaşır; bu da daha derin katmanların öğrenmeyi bırakması demektir. GELU’da bu sorun yoktur çünkü gradyanı daha geniş bir girdi aralığında anlamlı kalır.
Tanh
Tanh, Sigmoid’e benzer ama sıfır merkezlidir; çıktılar -1 ile 1 arasındadır. Negatif girdileri Sigmoid’den daha iyi işler, ancak uç değerlerde yine kaybolan gradyanlardan muzdariptir. GELU, derin ağlar boyunca daha iyi gradyan akışıyla daha düzgün bir çıktı eğrisi üretir.
ReLU
ReLU hızlı ve basittir: pozitif girdiler olduğu gibi geçer, negatif girdiler sıfırlanır. Sıfırdaki keskin eşik, zamanla sürekli negatif girdiler alan nöronların tamamen güncellenmeyi bırakmasına yol açan “ölü nöron” sorununa neden olur. GELU, negatif girdileri kesmek yerine ölçekleyerek bunu önler.
Leaky ReLU
Leaky ReLU, negatif girdilerin küçük bir kısmının geçmesine izin vererek ölü nöron sorununu düzeltir. ReLU’ya göre bir adımdır, ancak sıfırdaki geçiş hâlâ keskindir. GELU genel olarak daha düzgün bir eğri üretir; bu da gradyan kalitesinin daha çok önem kazandığı derin mimarilerde genelde daha iyi sonuç verir.
Özetlemek gerekirse, bu beş aktivasyon fonksiyonu arasındaki farklar şöyledir:

GELU ve diğer aktivasyon fonksiyonları tablosu
Transformer’larda Neden GELU Kullanılır
Transformer’lar sadece derin sinir ağlarıdır. Ağınız ne kadar derinse, gradyan kalitesi o kadar önem kazanır.
BERT ve GPT gibi modeller onlarca katmanı üst üste yığar. Bu derinlikte, gradyan akışıyla ilgili küçük sorunlar bile birikir. Aktivasyon fonksiyonunuz belirli bölgelerde dengesiz veya sıfıra yakın gradyanlar üretiyorsa, ağın erken katmanları eğitim sırasında neredeyse hiç güncellenmez; bu da pek bir şey öğrenmedikleri anlamına gelir.
GELU, gradyanları daha geniş bir girdi aralığında düzgün ve sıfırdan farklı tutarak bunu önler. ReLU’nun sıfır sınırı gibi bir kesme noktası yoktur; bu nedenle optimize edici, yalnızca çıktıya yakın katmanlarda değil, her katmanda daha temiz sinyal alır.
GELU’nun transformer mimarilerine iyi uymasının bir başka nedeni daha var.
Transformer’lar, hem pozitif hem de negatif geniş bir aktivasyon değeri aralığı üreten dikkat mekanizmalarıyla girdileri işler. Keskin geçişleri olan bir fonksiyona göre, düzgün bir aktivasyon bu aralığı daha iyi yönetir.
Orijinal BERT makalesi yayımlandığında, yazarlar ReLU yerine GELU’yu seçti ve kıyaslamalarında daha iyi sonuçlar bildirdi. GPT de aynı seçimi izledi. O zamandan beri GELU, yeni olduğu için değil, bu modellerin çalıştığı ölçekte daha iyi sonuç verdiği için, çoğu transformer tabanlı mimaride varsayılan aktivasyon haline geldi.
Pratikte GELU
Modellerinizde GELU kullanmak, diğer aktivasyon fonksiyonlarını kullanmak kadar kolaydır. Hem PyTorch hem de TensorFlow yerleşik destek sunar.
PyTorch
PyTorch’ta GELU’yu bağımsız bir modül olarak ya da model tanımı içinde satır içi uygulayabilirsiniz. İşte GELU kullanan basit bir ileri beslemeli blok:
import torch
import torch.nn as nn
class FeedForwardBlock(nn.Module):
def __init__(self, input_dim, hidden_dim):
super().__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.act = nn.GELU()
self.fc2 = nn.Linear(hidden_dim, input_dim)
def forward(self, x):
return self.fc2(self.act(self.fc1(x)))
block = FeedForwardBlock(input_dim=512, hidden_dim=2048)
x = torch.randn(8, 512)
output = block(x)
nn.GELU(), iki doğrusal katman arasında yer alır; bu da tam olarak bir transformer’ın ileri besleme alt katmanında bulunduğu yerdir. Aktivasyon, ilk izdüşümden sonra ve ikincisinden önce çalışır.
TensorFlow
TensorFlow’da, GELU Keras API’si üzerinden kullanılabilir:
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(2048, input_shape=(512,)),
keras.layers.Activation("gelu"),
keras.layers.Dense(512)
])
x = tf.random.normal((8, 512))
output = model(x)
Bunu doğrudan bir Dense katmanına dize argümanı olarak da geçirebilirsiniz:
keras.layers.Dense(2048, activation="gelu")
Her iki yaklaşım da aynı sonucu üretir.
GELU ağda nereye yerleşir
GELU, diğer aktivasyon fonksiyonlarıyla aynı yere aittir – doğrusal bir dönüşümden hemen sonra ve bir sonraki katmandan önce. Transformer mimarilerinde bu, ileri besleme alt katmanının içinde, iki yoğun izdüşüm arasında olduğu anlamına gelir. Diğer derin ağlarda ise doğrusal ya da evrişim katmanınızdan sonra yerleştirir, çıktıyı ileri iletmeden önce ölçeklemesine izin verirsiniz.
GELU’nun Avantajları
Bu noktaya kadar okuduysanız, GELU’nun diğer aktivasyon fonksiyonlarına kıyasla en büyük artılarını biliyorsunuz demektir. Kısa bir özet:
- Düzgün aktivasyon: GELU, keskin geçişleri olmayan sürekli ve türevlenebilir bir eğri üretir; bu da optimize ediciye her adımda daha temiz bilgi sağlar.
- Daha iyi gradyan akışı: GELU negatif girdileri sıfırlamaz; bu nedenle negatif değerler alan nöronlar üzerinden de gradyanlar yayılabilir. Bu, eğitim sırasında nöronların ölme riskini azaltır.
- Derin modellerde daha iyi performans: Transformer gibi derin mimarilerde, daha düzgün gradyanların kümülatif etkisi, daha basit aktivasyon fonksiyonlarına kıyasla genellikle daha iyi eğitim sonuçlarına dönüşür.
GELU’nun Sınırlamaları
GELU her durum için doğru seçim değildir. Farkında olmanız gereken birkaç sınırlama şunlardır:
-
ReLU’dan daha pahalı hesaplama: GELU ya hata fonksiyonunu ya da
tanhtabanlı bir yaklaşımı içerir; her ikisi de ReLU’nun basit eşik işleminden daha maliyetlidir. Birçok katmanlı büyük modellerde bu maliyet birikebilir. -
Daha az sezgisel: ReLU gibi fonksiyonlar hakkında akıl yürütmek kolaydır – pozitif değerler geçer, negatifler geçmez. GELU’nun olasılıksal ölçeklemesi ise yorumlaması daha zordur.
-
Her zaman gerekli değil: Sığ ağlar veya daha basit görevler için GELU anlamlı avantajlar sunmayabilir. ReLU veya Leaky ReLU, daha düşük hesaplama maliyetiyle çoğu zaman benzer performans gösterecektir.
Sonuç olarak, bir transformer ya da başka bir derin mimari kuruyorsanız, GELU sağlam bir varsayılandır. Diğer her şey için, taahhüt etmeden önce kıyaslama yapın.
Sonuç
GELU evrensel bir yükseltme değildir ve ReLU’nun yerini alan tek beden herkese uyar türünde bir çözüm hiç değildir. Belirli bağlamlarda – derin ağlar ve transformer modellerini düşünün – değen, kasıtlı bir tasarım tercihidir.
BERT, GPT ya da herhangi bir transformer tabanlı modelle çalışıyorsanız, farkında olsanız da olmasanız da zaten GELU kullanıyorsunuz. Artık neden orada olduğunu biliyorsunuz.
Diğer her şey için, aktivasyon fonksiyonu seçimi ödünleşimlere dayanır. Tek bir fonksiyon her seferinde kazanmaz; her birinin ne yaptığını anlamak, alışkanlıktan değil, güvenle karar vermenizi sağlar.
Aktivasyon fonksiyonları arasındaki farkları hâlâ kafa karıştırıcı buluyorsanız, makine öğrenmesi ve MLOps alanında kariyere hazır olmak için Makine Öğrenmesi Mühendisi Eğitimi programımıza katılın.
SSS
GELU aktivasyon fonksiyonu nedir?
GELU, yani Gaussian Error Linear Unit, sinir ağlarında kullanılan bir aktivasyon fonksiyonudur. ReLU’dan farklı olarak, girdileri büyüklüklerine göre olasılıksal bir yaklaşımla yumuşak biçimde ölçekler. Bu da gradyan kalitesinin önemli olduğu derin mimariler için daha uygun olmasını sağlar.
GELU, ReLU’dan nasıl farklıdır?
ReLU, sıfırdaki keskin bir eşikle tüm negatif girdileri sıfırlar; bu durum nöronların öğrenmeyi bırakmasına yol açabilir – “ölü nöronlar” olarak bilinen sorun. GELU, negatif girdileri kesmek yerine kademeli olarak aşağı ölçekleyerek bunu önler. Sonuçta daha düzgün bir gradyan akışı ve derin ağlarda daha iyi performans elde edersiniz.
GELU’yu diğer aktivasyon fonksiyonlarına ne zaman tercih etmeliyim?
GELU en iyi derin mimarilerde, özellikle BERT ve GPT gibi transformer tabanlı modellerde çalışır. Sığ ağlar veya daha basit görevlerde, hesaplama yükü genellikle ReLU’dan geçişi haklı çıkarmaz. Kıyaslama için ReLU ile başlayın; her zaman alternatifleri test edebilirsiniz.
Tam GELU formülü ile yaklaşım arasındaki fark nedir?
GELU’nun tam formülü Gaussian kümülatif dağılım fonksiyonunu kullanır ve hata fonksiyonunun hesaplanmasını gerektirir – bu işlem büyük ölçekte yavaştır. Yaklaşım ise bunu, modern donanımda daha hızlı ve iyi desteklenen tanh tabanlı bir ifadeyle değiştirir. Pratikte ikisi neredeyse aynı sonuçları üretir; bu yüzden çoğu çatı varsayılan olarak yaklaşımı kullanır.
GELU hem PyTorch hem de TensorFlow’da çalışır mı?
Evet, her iki çatı da GELU’yu destekler. PyTorch’ta model tanımınız içinde bir modül olarak nn.GELU() kullanabilirsiniz. TensorFlow’da herhangi bir katmanın activation argümanına doğrudan "gelu" dizesini verebilir veya keras.layers.Activation("gelu") kullanabilirsiniz.

