Yayın: 6 Temmuz 2025
Optimizerlar, kaybı minimize etmek için parametrelerin nasıl güncelleneceğini belirleyerek sinir ağlarının nasıl öğrendiğini kontrol eder. Optimizer seçimi, eğitim hızını ve nihai performansı önemli ölçüde etkiler.
Basit bir kuadratik fonksiyonun minimumuna doğru farklı optimizerlerin nasıl ilerlediğini izleyin:
Adım 0 / 100 | SGD Kayıp: 9.0000 | Momentum Kayıp: 9.0000 | Adam Kayıp: 9.0000
En basit optimizer. Parametreleri gradyan büyüklüğüyle doğru orantılı olarak doğrudan günceller.
Ana Formül:
θ = θ - α * ∇f(θ)
α öğrenme oranı, ∇f(θ) gradyandır
class SGD:
def __init__(self, learning_rate=0.01):
self.lr = learning_rate
def update(self, params, gradients):
for i in range(len(params)):
params[i] -= self.lr * gradients[i]
return params
Geçmiş gradyanların ağırlıklı ortalamasını biriktirerek SGD'ye momentum ekler. Bu yakınsamayı hızlandırır ve salınımları azaltır.
Ana Formüller:
v = β * v + ∇f(θ)
θ = θ - α * v
β momentum katsayısıdır (genellikle 0.9)
class SGDMomentum:
def __init__(self, learning_rate=0.01, momentum=0.9):
self.lr = learning_rate
self.momentum = momentum
self.velocity = None
def update(self, params, gradients):
if self.velocity is None:
self.velocity = [0] * len(params)
for i in range(len(params)):
self.velocity[i] = (self.momentum * self.velocity[i] +
gradients[i])
params[i] -= self.lr * self.velocity[i]
return params
Momentum'u adaptif öğrenme oranlarıyla birleştirir. Birinci ve ikinci moment tahminlerine dayalı olarak her parametre için ayrı öğrenme oranları tutar.
Ana Formüller:
m = β₁ * m + (1-β₁) * ∇f(θ)
v = β₂ * v + (1-β₂) * ∇f(θ)²
m̂ = m / (1-β₁ᵗ), v̂ = v / (1-β₂ᵗ)
θ = θ - α * m̂ / (√v̂ + ε)
Varsayılan: β₁=0.9, β₂=0.999, ε=1e-8
class Adam:
def __init__(self, learning_rate=0.001, beta1=0.9, beta2=0.999):
self.lr = learning_rate
self.beta1 = beta1
self.beta2 = beta2
self.epsilon = 1e-8
self.m = None # First moment
self.v = None # Second moment
self.t = 0 # Time step
def update(self, params, gradients):
if self.m is None:
self.m = [0] * len(params)
self.v = [0] * len(params)
self.t += 1
for i in range(len(params)):
# Update moments
self.m[i] = self.beta1 * self.m[i] + (1 - self.beta1) * gradients[i]
self.v[i] = self.beta2 * self.v[i] + (1 - self.beta2) * gradients[i]**2
# Bias correction
m_hat = self.m[i] / (1 - self.beta1**self.t)
v_hat = self.v[i] / (1 - self.beta2**self.t)
# Update parameters
params[i] -= self.lr * m_hat / (math.sqrt(v_hat) + self.epsilon)
return params
Optimizer | Bellek | Yakınsama | Hiperparametreler | En İyi Kullanım |
---|---|---|---|---|
SGD | Minimal | Yavaş ama kararlı | Sadece öğrenme oranı | Büyük veri setleri, sınırlı bellek |
Momentum | Düşük | SGD'den hızlı | Öğrenme oranı + momentum | Konveks olmayan problemler |
Adam | Yüksek | Hızlı, adaptif | Öğrenme oranı + 2 beta | Derin öğrenme, genel amaçlı |
import torch.optim as optim
# SGD
optimizer = optim.SGD(model.parameters(), lr=0.01)
# SGD with momentum
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# Adam
optimizer = optim.Adam(model.parameters(), lr=0.001)
from tensorflow.keras.optimizers import SGD, Adam
# SGD
optimizer = SGD(learning_rate=0.01)
# SGD with momentum
optimizer = SGD(learning_rate=0.01, momentum=0.9)
# Adam
optimizer = Adam(learning_rate=0.001)
Bu blog İngilizce'den LLM ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.
Yorum bırak
Yorumlar
Şuan yorum yok.
Diğer bloglara bak
2025/07/07
Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli
2025/07/05
Karakterlerden Kelimelere: Japonca BPE Tokenizer
2024/06/19
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi
2024/06/17
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun
2024/06/14
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi
2024/06/13
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell
2024/06/07
Japonca'da En Sık Kullanılan 3.000 Kanji
2024/06/07
VSCode'da Regex Kullanarak Replace Yapma Yöntemi
2024/06/06
Svelte'de Readable Store Kullanmayın
2024/06/05
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın
2024/05/31
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun
2024/05/29
Svelte ve SVG ile Interaktif Harita Oluşturun
2024/05/28
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg
2024/05/27
Javascript Kullanarak Sudoku Nasıl Çözülür?
2024/05/26
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?
2024/05/24
Hayat Bisiklet Sürmek Gibidir
2024/05/19
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun
2024/05/16
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?
2024/05/15
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma
2024/05/14
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein
2024/05/13
Svelte ve SvelteKit nedir?
2024/05/12
SvelteKit ile Internationalization (Çoklu Dil Desteği)
2024/05/11
Svelte'de Caching ile Deploy Süresini Azaltın
2024/05/10
Svelte ve Intersection Oberver ile Lazy-Load
2024/05/10
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu
2024/05/09
ShapeFile Formatini SVG Formatina Degistirme Yontemi
2024/05/08
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu
2024/05/07
Kitap İncelemesi | Savaş Sanatı - Sun Tzu
2024/05/06
Specialistlik Bitti. Yaşasın Generalistlik!
2024/05/03
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi
2024/05/01
Python Selenium Ile Secmen Veritabani Olusturma
2024/04/30
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi
2024/04/29
1 Yıl İçerisinde Japonca Konuşabilmek
2024/04/25
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu
2024/01/29
Tembel Muhendisler Kotu Urunler Yapar
2024/01/28
Mukemmellik Uzerine
2024/01/28
MacBook'ta PDF'i PNG'ye Cevirme Yontemi
2023/12/31
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap
2023/12/30
Python PIL Kullarak Foto Kolaji Yapma Yontemi
2024/01/09
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi
2024/01/19
ChatGPT Cevap Anatomisi