Gradient Descent Gerçekte Nasıl Çalışır
22 Haz 2026 · 4 dk okuma
Minicik bir lojistik regresyon modelinden yüz milyarlarca parametreli bir dil modeline kadar, bugün kullandığımız hemen her sinir ağı aynı sade fikirle eğitildi: gradient descent. İsmi teknik dursa da arkasındaki sezgi son derece gündelik. Bu yazıda o sezgiyi adım adım inşa edecek, ardından onu birkaç satır kodla somutlaştırıp en kritik ayar düğmesi olan learning rate üzerinde duracağız. Kalkülüs geçmişiniz olması gerekmiyor; ihtiyacımız olan tek kavram "eğim" sezgisi.
Tepeli bir arazide yokuş aşağı
Modelinizi, üzerinde gezdiğiniz tepeli bir arazi olarak hayal edin. Her noktadaki yükseklik, o anki loss değerini — yani modelin ne kadar yanıldığını — temsil etsin. Amacınız en alçak vadiye, yani modelin en az hata yaptığı noktaya ulaşmak. Sıkıntı şu ki haritanın tamamını yukarıdan göremiyorsunuz; sisin içinde, yalnızca ayağınızın altındaki zemini hissedebiliyorsunuz. Yine de bu kadarı bile yeterli: bulunduğunuz yerde yamacın hangi yöne doğru indiğini hissedip o yöne küçük bir adım atabilir, sonra bu işlemi tekrarlayabilirsiniz. Yeterince adımdan sonra, başlangıç noktanız neresi olursa olsun, bir vadinin dibinde kendinizi bulursunuz.
İşte "yamacın hangi yöne indiği" bilgisi matematikte gradient adını taşır: loss fonksiyonunun her parametreye göre türevi. Gradient, fonksiyonun en hızlı arttığı yönü gösterir; biz ise azalmasını istediğimiz için onun tersi yönde ilerleriz. Güncelleme kuralı tek satırda şöyle yazılır:
Buradaki modelin parametrelerini (ağırlıklarını), gradienti, ise learning rate'i, yani her adımda ne kadar yol aldığımızı belirtir. Gradient'in başındaki eksi işaretinin tek görevi, yokuş yukarı gösteren bu vektörü yokuş aşağı çevirmektir.
On iki satırda bir doğruyu öğrenmek
Soyut kuralın gerçekten işe yaradığını görmenin en iyi yolu, onu elle çalıştırmak.
Aşağıdaki örnekte, aralarında y = 2x ilişkisi bulunan birkaç veri noktasına tek
parametreli bir model uyduruyoruz. Model w = 0'dan başlıyor, hatasını ölçüyor,
gradienti hesaplıyor ve her adımda biraz daha doğru cevaba yaklaşıyor:
import numpy as np
x = np.array([1, 2, 3, 4], dtype=float)
y = np.array([2, 4, 6, 8], dtype=float) # gerçek ilişki: y = 2x
w = 0.0
lr = 0.01
for step in range(200):
pred = w * x
loss = ((pred - y) ** 2).mean() # mean squared error
grad = (2 * x * (pred - y)).mean() # d loss / d w
w -= lr * grad # güncelleme adımı
print(round(w, 3)) # ≈ 2.0Döngünün her turunda üç şey oluyor: model bir tahmin üretiyor (pred), bu tahminin
gerçek değerlerden ne kadar saptığını ölçen bir loss hesaplanıyor ve loss'un
'ya göre türevi alınarak hangi yöne gidileceği belirleniyor. w -= lr * grad
satırı ise o yönde küçük bir adım atıyor. İki yüz adımın sonunda model, kimse ona
söylemeden w ≈ 2 değerine kendiliğinden ulaşıyor. Gerçek bir sinir ağı da
özünde tam olarak bunu yapar; tek farkı, milyonlarca parametre için aynı işlemi
aynı anda yürütmesi ve gradientleri elle değil, backpropagation algoritmasıyla
otomatik hesaplamasıdır.
Tek bir sayının belirleyici rolü: learning rate
Gradient descent'in başarısı büyük ölçüde tek bir hiperparametreye, learning rate'e bağlıdır; çünkü o, her adımda ne kadar yol alacağınızı belirler. Değeri fazla küçük seçtiğinizde eğitim umutsuzca yavaşlar — vadiye doğru milimetrelerle ilerlersiniz ve makul bir sürede dibe ulaşamazsınız. Fazla büyük seçtiğinizde ise tam tersi bir sorun ortaya çıkar: attığınız adımlar vadinin karşı yamacına fırlatır sizi, loss bir azalıp bir artarak salınır, hatta tamamen ıraksayabilir. Aradaki o "tam kıvamında" bölgede ise iniş hem istikrarlı hem de hızlı olur.
Pratikte "modelim bir türlü eğitilmiyor" diye tarif edilen sorunların şaşırtıcı derecede büyük bir kısmı, kök neden olarak bu tek sayıya iner. Eğitim eğrisi beklediğiniz gibi düşmüyorsa, ilk denenecek müdahale çoğu zaman learning rate'i kademeli olarak düşürmek ve loss eğrisini dikkatle izlemektir.
Toparlarsak
Gradient descent, karmaşık görünen bir hedefi son derece basit bir döngüye indirger: tahmin et, ne kadar yanıldığını ölç, hatanın azaldığı yöne doğru küçük bir adım at, tekrarla. Bu döngünün tüm derin öğrenmeyi taşıyabilmesini sağlayan şey, gradientleri büyük ağlar için verimli biçimde hesaplayan backpropagation'dır. Bir sonraki yazıda, bu öğrenme mekanizmasının modern dil modellerinin kalbindeki yapıyla — yani attention ile — nasıl birleştiğine bakacağız.