Gradient descent: top yuvarlama oyunu
2026 · 10 dakika okuma
Karanlık bir vadiye düştüğünü hayal et. En alçak noktayı bulmak istiyorsun ama görüş sıfır. Elinden gelen tek şey şu: ayağının altındaki zeminin ne kadar eğimli olduğunu hissetmek. Eğime karşı yürü, tekrar kontrol et, tekrar yürü.
İşte gradient descenttam olarak bu. Makine öğrenmesindeki tüm büyük modellerin — linear regression'dan GPT'ye kadar — parametrelerini öğrenmek için kullandığı temel yöntem.
Önce dene
Aşağıdaki demoda mor top bir parabolün üzerinde yuvarlanıyor. Öğrenme hızını ayarla, "Bir adım at" veya "Otomatik çalıştır" ile ne olduğunu izle.
Başlangıç noktası x = 3.00. Öğrenme hızını ayarlayıp "Bir adım at" butonuna bas.
Ne oluyor aslında?
Her adımda şu hesap yapılıyor:
x_yeni = x_eski - α × f'(x_eski) # f(x) = x² → f'(x) = 2x (türev = gradient) # α = öğrenme hızı (learning rate) # Örnek: x=3, α=0.1 ise x_yeni = 3 - 0.1 × (2 × 3) x_yeni = 3 - 0.6 x_yeni = 2.4 # minimuma yaklaştı
Türev bize o noktadaki eğimi söyler. Eğim pozitifse sol tarafa git (x azalt), negatifse sağ tarafa (x artır). Her seferinde biraz daha minimuma yaklaşırsın.
Öğrenme hızı neden bu kadar önemli?
Demoda gördüğün üzere:
- Çok küçük α (0.01): Top minimuma ulaşır ama çok yavaş. Yüzlerce adım gerekir.
- İdeal α (0.1-0.2): Düzgün iniş, hızlı yakınsama.
- Çok büyük α (1.05): Top minimum etrafında zıplar, ıraksır. Model öğrenemez.
Makine öğrenmesinde en çok ayarlanan hiperparametre learning rate'tir. Doğru değeri bulmak hâlâ büyük ölçüde deneme yanılma işi.
Gerçek hayatta nasıl kullanılır?
Bizim örneğimizde tek bir parametre (x) ve basit bir kayıp fonksiyonu (x²) vardı. Gerçek bir sinir ağında milyarlarca parametre ve çok daha karmaşık bir kayıp fonksiyonu var. Ama temel fikir aynı: her parametreyi gradienti yönünde biraz güncelle, tekrarla.
# scikit-learn ile linear regression aslında
# gradient descent kullanır (SGD versiyonu)
from sklearn.linear_model import SGDRegressor
model = SGDRegressor(
learning_rate='constant',
eta0=0.01, # α değeri
max_iter=1000 # maksimum adım sayısı
)
model.fit(X_train, y_train)Varyantlar: SGD, Mini-batch, Adam
Klasik gradient descent tüm veriyi her adımda kullanır. Bu büyük veri setlerinde çok yavaş olur. O yüzden pratikte şu varyantlar kullanılır:
- SGD (Stochastic): Her seferinde tek bir örnek kullanır. Gürültülü ama hızlı.
- Mini-batch: 32, 64 veya 128 örneklik gruplarla günceller. En yaygın kullanılan.
- Adam: Adaptif öğrenme hızı, modern derin öğrenmenin vazgeçilmezi.
Sıradaki yazıda k-means kümeleme: gradient descent kullanmadan da öğrenme olur mu? Centroid'ler nasıl yer değiştirir?