Optimizasyon Algoritmaları: SGD, Momentum ve Adam

Yayın: 6 Temmuz 2025

Optimizasyon Algoritmaları: SGD, Momentum ve Adam

Öğrenecekleriniz

  • Gradyan iniş optimizasyon algoritmalarının nasıl çalıştığı ve birbirlerinden farkları
  • SGD, Momentum ve Adam algoritmalarının interaktif görselleştirmeleri
  • Parametre ayarlama ve yakınsama davranışı
  • Uygulama detayları ve pratik kullanım

Optimizasyon Algoritmaları

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.

İnteraktif Optimizer Karşılaştırması

Basit bir kuadratik fonksiyonun minimumuna doğru farklı optimizerlerin nasıl ilerlediğini izleyin:

Kontroller

Görselleştirme

SGD
Momentum
Adam

Zamana Göre Kayıp

Adım 0 / 100 | SGD Kayıp: 9.0000 | Momentum Kayıp: 9.0000 | Adam Kayıp: 9.0000

Stokastik Gradyan İnişi (SGD)

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

Özellikler:

  • Artıları: Basit, bellek verimli, konveks problemlerde iyi çalışır
  • Eksileri: Vadilerde salınım yapabilir, öğrenme oranına duyarlı
  • En iyisi: Büyük veri setleri, bellek sınırlı durumlarda

Momentum'lu SGD

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

Özellikler:

  • Artıları: Daha hızlı yakınsama, azaltılmış salınımlar, yerel minimumlara daha iyi
  • Eksileri: Ekstra hiperparametre, minimumu aşabilir
  • En iyisi: Konveks olmayan optimizasyon, salınımların sorunlu olduğu durumlar

Adam (Adaptif Moment Tahmini)

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

Özellikler:

  • Artıları: Adaptif öğrenme oranları, hiperparametrelere dayanıklı, kutudan çıkar çıkmaz iyi
  • Eksileri: Daha yüksek bellek kullanımı, bazı durumlarda optimal çözüme yakınsamayabilir
  • En iyisi: Derin öğrenme, seyrek gradyanlar, genel amaçlı optimizasyon

Karşılaştırma Özeti

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ı

Pratik Kılavuzlar

SGD Ne Zaman Kullanılır

  • Belleğin sınırlı olduğu büyük veri setleri
  • Önceden eğitilmiş modellerin ince ayarı
  • Tekrarlanabilir sonuçlara ihtiyaç duyduğunuzda
  • Basit konveks optimizasyon problemleri

Adam Ne Zaman Kullanılır

  • Derin sinir ağlarını sıfırdan eğitirken
  • Seyrek gradyanlar veya seyrek veriler
  • İyi varsayılan performans istediğinizde
  • Hızlı prototipleme ve deneyler

Öğrenme Oranı Kılavuzu:

  • SGD: 0.1 ile başlayın, eğitim kararsızsa azaltın
  • SGD + Momentum: 0.01-0.1 ile başlayın, momentum 0.9
  • Adam: 0.001 ile başlayın, genellikle ayarlama olmadan iyi çalışır

Popüler Framework'lerde Uygulama

PyTorch

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)

TensorFlow/Keras

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)

Önemli Çıkarımlar

  • Çoğu derin öğrenme görevi için Adam ile başlayın - dayanıklı ve minimal ayarlama gerektirir
  • İnce ayar veya en iyi nihai performans için momentum'lu SGD kullanın
  • Öğrenme oranı planlaması tüm optimizerlar için yakınsamayı iyileştirebilir
  • Optimizer seçimi uygun mimari ve veri kalitesinden daha az önemlidir
  • Eğitim kararsızsa veya yakınsama kötüyse farklı optimizerlar deneyin

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

Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

2025/07/07

Q-Learning: İnteraktif Pekiştirmeli Öğrenmenin Temeli

Q-LearningPekiştirmeli ÖğrenmeKeşif vs KullanımMakine ÖğrenmesiAIİnteraktifGrid WorldDeğer Fonksiyonu
Karakterlerden Kelimelere: Japonca BPE Tokenizer

2025/07/05

Karakterlerden Kelimelere: Japonca BPE Tokenizer

BPETokenizerJaponcaNLPKelimeMakine ÖğrenmesiMetin İşleme
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

2024/06/19

Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi

JavaScriptSvelteKolayBasitDinamikTooltipFront-end
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

2024/06/17

JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun

SvelteSVGJavaScriptTailwindInteraktif HaritaTokyoJaponya23 WardsTokyo Metropolitan Bölgesi
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

2024/06/14

Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi

MatplotlibGrafikÇizimPythonJaponca KarakterlerSorunBug
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

2024/06/13

Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell

Kitap İncelemesiÖtekiyle KonuşmakTalking to StrangersMalcolm Gladwell
Japonca'da En Sık Kullanılan 3.000 Kanji

2024/06/07

Japonca'da En Sık Kullanılan 3.000 Kanji

3000Kullanma YayginligiKanji KullanimiKanjiJaponcaKanji ListesiKanji YayginligiJLPTJaponca CalismaOgrenmeYaygin Japonca Kelimeler
VSCode'da Regex Kullanarak Replace Yapma Yöntemi

2024/06/07

VSCode'da Regex Kullanarak Replace Yapma Yöntemi

VSCodeRegexAramaDeğiştirmeKoşullu DeğiştirmeFindReplaceConditional Replace
Svelte'de Readable Store Kullanmayın

2024/06/06

Svelte'de Readable Store Kullanmayın

SvelteReadableWritableState ManagementStoreHızBellekDosya Boyutu
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

2024/06/05

Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın

GzipSıkıştırmaPakoWeb SitesiYükleme HızıSvelteKit
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

2024/05/31

Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun

JavascriptFarePointerHoverWeb Geliştirme
Svelte ve SVG ile Interaktif Harita Oluşturun

2024/05/29

Svelte ve SVG ile Interaktif Harita Oluşturun

SvelteSVGInteraktif HaritaFront-end
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

2024/05/28

Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg

Kitap İncelemesiGeleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor?Originals: How Non-Conformists Move the WorldAdam Grant & Sheryl Sandberg
Javascript Kullanarak Sudoku Nasıl Çözülür?

2024/05/27

Javascript Kullanarak Sudoku Nasıl Çözülür?

Sudoku ÇözümAlgoritmaJavaScriptKodlama
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

2024/05/26

Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?

Website Trafik ArtırmaClick (Tıklama)Impression (Gösterim)Google Search Console
Hayat Bisiklet Sürmek Gibidir

2024/05/24

Hayat Bisiklet Sürmek Gibidir

BisikletHayatFilozofiBaşarı
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

2024/05/19

JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun

SudokuBacktracking AlgoritmasıTamamlanmış SudokuJavaScript
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

2024/05/16

Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?

TailwindHarikaFront-endWeb Geliştirme
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

2024/05/15

Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma

Git HooksPythonSite HaritasıSvelteKit
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

2024/05/14

Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein

Kitap İncelemesiRange(Çok Yönlü)David EpsteinBaşarı İçin Neden Çok Şeyle İlgilenmeliyiz?
Svelte ve SvelteKit nedir?

2024/05/13

Svelte ve SvelteKit nedir?

SvelteSvelteKitFront-endVite
SvelteKit ile Internationalization (Çoklu Dil Desteği)

2024/05/12

SvelteKit ile Internationalization (Çoklu Dil Desteği)

InternationalizationÇoklu Dil DestegiSvelteKitI18N
Svelte'de Caching ile Deploy Süresini Azaltın

2024/05/11

Svelte'de Caching ile Deploy Süresini Azaltın

SvelteEnhanced ImageCachingDeploy Suresi
Svelte ve Intersection Oberver ile Lazy-Load

2024/05/10

Svelte ve Intersection Oberver ile Lazy-Load

Lazy LoadingWebsite Hiz OptimizasyonuSvelteIntersection Observer
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

2024/05/10

Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu

Hisse SenediPortföy OptimizasyonuGenetik AlgoritmaPython
ShapeFile Formatini SVG Formatina Degistirme Yontemi

2024/05/09

ShapeFile Formatini SVG Formatina Degistirme Yontemi

ShapeFileSVGPythonGeoJSON
Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

2024/05/08

Svelte'de Reaktivite: Variables, Binding, ve Key Fonksiyonu

SvelteSayfa GuncellemeBindingKey Fonksiyonu
Kitap İncelemesi | Savaş Sanatı - Sun Tzu

2024/05/07

Kitap İncelemesi | Savaş Sanatı - Sun Tzu

Kitap İncelemesiThe Art of War (Savaş Sanatı)Sun TzuThomas Cleary
Specialistlik Bitti. Yaşasın Generalistlik!

2024/05/06

Specialistlik Bitti. Yaşasın Generalistlik!

GenelUzmanParadigma DegisimiYazilim Muhendisligi
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

2024/05/03

2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi

PythonSecmen Profil Analizi2018 Milletvekili SecimleriSecmen Yas Analizi
Python Selenium Ile Secmen Veritabani Olusturma

2024/05/01

Python Selenium Ile Secmen Veritabani Olusturma

PythonSeleniumVeri KazimaMilletvekili Secimleri
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

2024/04/30

Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi

SvelteTailwindInfinite ScrollFront-end
1 Yıl İçerisinde Japonca Konuşabilmek

2024/04/29

1 Yıl İçerisinde Japonca Konuşabilmek

JaponcaDil yeterliligiJLPTKisa zamanda dil ogrenme
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

2024/04/25

Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu

Website SablonuFront-endSvelteTailwind
Tembel Muhendisler Kotu Urunler Yapar

2024/01/29

Tembel Muhendisler Kotu Urunler Yapar

Tembel MuhendisKotu UrunStarbucksSBI
Mukemmellik Uzerine

2024/01/28

Mukemmellik Uzerine

MukemmellikHayatin anlamiTatmin Edici HayatAmac
MacBook'ta PDF'i PNG'ye Cevirme Yontemi

2024/01/28

MacBook'ta PDF'i PNG'ye Cevirme Yontemi

PDFPNGMacBookAutomator
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

2023/12/31

2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap

KitapOkuma2023Geriye Bakma
Python PIL Kullarak Foto Kolaji Yapma Yontemi

2023/12/30

Python PIL Kullarak Foto Kolaji Yapma Yontemi

PythonPILGörüntü işlemeKolaj
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

2024/01/09

Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi

JavascriptAlet TespitiBrowser TespitiWebsite Analizi
ChatGPT Cevap Anatomisi

2024/01/19

ChatGPT Cevap Anatomisi

ChatGPTBuyuk Dil ModeliMakina OgrenimiYapay Zeka