Gradyan inişi
Önkoşul:Kısmi türev ve gradyan
Kanca
Gözlerin kapalıyken bir vadinin EN DİBİNİ bulmaya çalışsan, ne yaparsın? Muhtemelen: “ayaklarımın altındaki eğimi HİSSET, aşağı doğru bir ADIM at, TEKRARLA.”
Sezgi
Gradyan inişi, TAM OLARAK budur: 11. dersteki gradyanın TERSİ yönünde küçük ADIMLAR atarak, bir fonksiyonun (genelde bir “kayıp” fonksiyonunun) EN KÜÇÜK olduğu noktayı ARAMAKTIR. Adım büyüklüğüne (öğrenme oranına) göre, bu arayış HIZLI, YAVAŞ ya da BAŞARISIZ olabilir.
Mekanizma
fonksiyonunun en küçük olduğu değerini, ADIM ADIM arayalım:
Gradyan inişi: gradyanın tersi yönünde adım at
# GRADYAN İNİŞİ: 11. dersteki gradyanın TAM TERSİ yönünde küçük ADIMLAR atarak,
# bir fonksiyonun EN KÜÇÜK olduğu noktayı ARAMAKTIR.
HEDEF = 3.0 # kaybı sıfırlayan "doğru" parametre değeri
BASLANGIC = -4.0
def kayip(w):
return (w - HEDEF) ** 2
def gradyan(w):
return 2 * (w - HEDEF) # 9. dersteki türev kuralı: (w-HEDEF)^2'nin türevi
ogrenme_orani = 0.1
w = BASLANGIC
print(f"Başlangıç: w = {w}, kayıp = {kayip(w):.4f}")
print(f"Güncelleme kuralı: w_yeni = w - {ogrenme_orani} * gradyan(w)\n")
for adim in range(1, 6):
g = gradyan(w)
w = w - ogrenme_orani * g
print(f"Adım {adim}: gradyan={g:.4f}, w={w:.4f}, kayıp={kayip(w):.4f}")
print(f"\nHER adımda w, HEDEF'e ({HEDEF}) biraz daha YAKLAŞIYOR -- çünkü gradyanın")
print("TERSİ yönünde (kaybı AZALTAN yönde) hareket ediyoruz.")Başlangıç: w = -4.0, kayıp = 49.0000
Güncelleme kuralı: w_yeni = w - 0.1 * gradyan(w)
Adım 1: gradyan=-14.0000, w=-2.6000, kayıp=31.3600
Adım 2: gradyan=-11.2000, w=-1.4800, kayıp=20.0704
Adım 3: gradyan=-8.9600, w=-0.5840, kayıp=12.8451
Adım 4: gradyan=-7.1680, w=0.1328, kayıp=8.2208
Adım 5: gradyan=-5.7344, w=0.7062, kayıp=5.2613
HER adımda w, HEDEF'e (3.0) biraz daha YAKLAŞIYOR -- çünkü gradyanın
TERSİ yönünde (kaybı AZALTAN yönde) hareket ediyoruz.Matematik
Gradyan inişi güncelleme kuralı
Burada (alfa) ÖĞRENME ORANIDIR — her adımda NE KADAR büyük bir hareket yapılacağını belirler. ise, o noktadaki gradyandır (11. ders).
Kod
Daha FAZLA adımla, gerçekten HEDEFE ulaşıyor muyuz? Ve öğrenme oranı SONUCU nasıl DEĞİŞTİRİYOR?
40 adım sonra: hedefe neredeyse tam ulaşma
# Daha FAZLA adım atınca, w HEDEF'e NE KADAR yaklaşıyor?
def gradyan_inisi_calistir(baslangic, oran, adim_sayisi):
w = baslangic
patika = [w]
for _ in range(adim_sayisi):
w = w - oran * gradyan(w)
patika.append(w)
return patika
patika_40 = gradyan_inisi_calistir(BASLANGIC, 0.1, 40)
print(f"\n40 adım sonra: w = {patika_40[-1]:.6f} (hedef: {HEDEF})")
print(f"Hedefe uzaklık: {abs(patika_40[-1] - HEDEF):.6f}")
print(f"Kayıp: {kayip(patika_40[-1]):.8f} (neredeyse SIFIR)")
40 adım sonra: w = 2.999070 (hedef: 3.0)
Hedefe uzaklık: 0.000930
Kayıp: 0.00000087 (neredeyse SIFIR)Öğrenme oranı: çok küçük yavaş, çok büyük ıraksar
# ÖĞRENME ORANI (adım büyüklüğü), gradyan inişinin YAKINSAYIP YAKINSAMAYACAĞINI
# BELİRLER -- her adımda hata, |1 - 2*oran| KATSAYISIYLA çarpılır (bu fonksiyon
# için). Bu katsayı 1'DEN KÜÇÜKSE yakınsar, BÜYÜKSE ıraksar.
for oran in [0.05, 0.5, 1.1]:
patika = gradyan_inisi_calistir(BASLANGIC, oran, 10)
son_w = patika[-1]
katsayi = abs(1 - 2 * oran)
durum = "YAKINSIYOR (yavaş olsa da hata küçülüyor)" if katsayi < 1 else "IRAKSIYOR (hata büyüyor)"
print(f"\nÖğrenme oranı={oran}: |1-2*oran|={katsayi:.2f} -- {durum}")
print(f" 10 adım sonra w={son_w:.4f} (hedef: {HEDEF})")
print(f" İlk 4 adım: {[f'{x:.2f}' for x in patika[:5]]}")
print("\nÇOK KÜÇÜK öğrenme oranı (0.05): katsayı 0.90 (<1) -- YAVAŞ ama GÜVENLİ yakınsama.")
print("MAKUL öğrenme oranı (0.5): katsayı 0.00 (<1) -- TEK adımda hedefe ULAŞIYOR.")
print("ÇOK BÜYÜK öğrenme oranı (1.1): katsayı 1.20 (>1) -- adımlar HEDEFİN etrafında BÜYÜYEREK sekiyor, IRAKSIYOR.")
Öğrenme oranı=0.05: |1-2*oran|=0.90 -- YAKINSIYOR (yavaş olsa da hata küçülüyor)
10 adım sonra w=0.5593 (hedef: 3.0)
İlk 4 adım: ['-4.00', '-3.30', '-2.67', '-2.10', '-1.59']
Öğrenme oranı=0.5: |1-2*oran|=0.00 -- YAKINSIYOR (yavaş olsa da hata küçülüyor)
10 adım sonra w=3.0000 (hedef: 3.0)
İlk 4 adım: ['-4.00', '3.00', '3.00', '3.00', '3.00']
Öğrenme oranı=1.1: |1-2*oran|=1.20 -- IRAKSIYOR (hata büyüyor)
10 adım sonra w=-40.3422 (hedef: 3.0)
İlk 4 adım: ['-4.00', '11.40', '-7.08', '15.10', '-11.52']
ÇOK KÜÇÜK öğrenme oranı (0.05): katsayı 0.90 (<1) -- YAVAŞ ama GÜVENLİ yakınsama.
MAKUL öğrenme oranı (0.5): katsayı 0.00 (<1) -- TEK adımda hedefe ULAŞIYOR.
ÇOK BÜYÜK öğrenme oranı (1.1): katsayı 1.20 (>1) -- adımlar HEDEFİN etrafında BÜYÜYEREK sekiyor, IRAKSIYOR.Nerede işe yarar
Gradyan inişi, PRATİKTE TÜM model eğitiminin TEMEL ALGORİTMASIDIR:
- Makine Öğrenmesi kategorisindeki GradyanİnişiDemo bileşeni, TAM OLARAK bu dersteki hesabı, GÖRSEL bir kayıp yüzeyinde CANLI gösterir.
- DL Görüntü ve DL NLP kategorilerinde, milyonlarca parametreli bir ağın “eğitilmesi”, bu dersteki TEK-parametreli örneğin, HER parametre için AYNI ANDA tekrarlanmasıdır.
- Öğrenme oranı seçimi, PRATİKTE, bir modelin eğitiminde en KRİTİK “ayar düğmelerinden” biridir — bu ders NEDENİNİ gösterdi.
Bu 2 hatayı yaparsın:
- “Daha BÜYÜK öğrenme oranı, her zaman daha HIZLI sonuç verir” sanmak — HAYIR, notebook’ta öğrenme oranı=1.1 IRAKSADI; çok büyük adımlar, hedefi AŞIP GEÇER ve uzaklaşabilir.
- Gradyan inişini “her zaman GLOBAL en küçüğü BULUR” sanmak — bu ders BASİT bir tek-çukurlu (konveks) fonksiyon kullandı; daha karmaşık fonksiyonlarda gradyan inişi YEREL bir çukura SIKIŞABİLİR.
Kendini test et
1. guncelleme-kurali bloğunda w, her adımda HEDEF'e (3.0) biraz daha YAKLAŞIYOR. Bu YAKLAŞMA NASIL sağlanıyor?
- Rastgele bir sayı eklenerek
- Her adımda, GRADYANIN TERSİ yönünde (w = w - öğrenme_oranı * gradyan) küçük bir hareket yapılarak -- gradyan pozitifse w AZALTILIYOR, negatifse w ARTIRILIYOR (doğru cevap)
- w her zaman sıfırlanarak
- Hedef değeri her adımda değiştirilerek
Neden: guncelleme-kurali bloğunda güncelleme kuralı AÇIKÇA gösteriliyor: w_yeni = w - öğrenme_oranı * gradyan(w).
2. ogrenme-orani-karsilastirma bloğunda öğrenme oranı=1.1 için w, 10 adım sonra -40.34'e ULAŞIYOR (BAŞLANGIÇ -4'ten bile UZAK). Bu NEYİ gösteriyor?
- Bir hesaplama hatası
- Çok BÜYÜK bir öğrenme oranının, adımların HEDEFİN etrafında GİDEREK BÜYÜYEREK sekmesine (ıraksamasına) yol AÇABİLECEĞİNİ -- |1-2*1.1|=1.20>1 olduğu için hata her adımda BÜYÜYOR (doğru cevap)
- Hedefin yanlış seçildiğini
- Gradyanın hesaplanamadığını
Neden: ogrenme-orani-karsilastirma bloğunda bu AÇIKÇA belirtiliyor: katsayı=1.20 (>1) olduğu için 'IRAKSIYOR (hata büyüyor)'.
3. Makine Öğrenmesi kategorisindeki GradyanİnişiDemo bileşeninde gördüğün 'adımlar', bu dersteki hangi hesapla İLİŞKİLİDİR?
- Hiçbir ilişkisi yoktur
- TAM OLARAK AYNI hesaptır -- w_yeni = w - öğrenme_oranı * gradyan(w) güncelleme kuralı, o bileşende GÖRSEL bir kayıp yüzeyinde CANLI gösterilir (doğru cevap)
- O bileşen sadece rastgele adımlar atar
- O bileşen türev kullanmaz
Neden: kullanım bölümünde bu AÇIKÇA bağlanıyor: GradyanİnişiDemo, bu dersteki hesabı görsel bir kayıp yüzeyinde canlı gösterir.
Özet
Özet
- Gradyan inişi, gradyanın TERSİ yönünde küçük adımlar atarak bir fonksiyonun en küçük olduğu noktayı arar.
- Güncelleme kuralı: w_yeni = w - öğrenme_oranı * gradyan(w).
- Bu dersteki örnekte 40 adım sonra w, hedefe (3.0) neredeyse TAM ulaştı (kayıp neredeyse sıfır).
- Öğrenme oranı ÇOK KÜÇÜKSE yavaş ama güvenli, ÇOK BÜYÜKSE (bu fonksiyon için >1) IRAKSAR.
- Bu, Makine Öğrenmesi kategorisindeki GradyanİnişiDemo bileşeninin ve TÜM derin öğrenme eğitiminin TEMEL algoritmasıdır.