Bölüm 2 · Öğrenmenin motoru · Ders 8
Gradyan inişi: kayıp arazisinde yokuş aşağı
Türev yönü söyler, öğrenme oranı adım boyunu
Veri. Bir robotun IMU'sunu 10 ile 50 °C arasında 20 farklı sıcaklıkta beklettik ve jiroskobun sıfır kaymasını ölçtük (derece/dakika). Kayma sıcaklıkla doğrusal artıyor: kayma ≈ w · (T/10) + b. Robot, sıcaklığı okuyup kaymayı çıkarabilsin diye w ve b'yi arıyoruz.
import numpy as nprng = np.random.default_rng(6)T = rng.uniform(10, 50, 20) # 20 sıcaklık (°C)x = T / 10 # ölçekle: 1..5y = 1.5 * x + 1 + rng.normal(0, 0.3, 20) # kayma (°/dk)def loss(w, b):return np.mean((w * x + b - y) ** 2) # arazinin yüksekliğihist = {} # her öğrenme oranının geçmişifor lr in (0.1, 0.05, 0.0002): # üç adım boyuw, b = -1.0, 6.0 # başlangıç noktasıL0 = loss(w, b)hist[lr] = h = {'step': [], 'loss': [], 'grad_norm': [], 'w': [], 'b': []}for step in range(300):err = w * x + b - y # tahmin − ölçümgw = 2 * np.mean(err * x) # w yönündeki eğimgb = 2 * np.mean(err) # b yönündeki eğimfor k, v in zip(h, (step, loss(w, b), np.hypot(gw, gb), w, b)): h[k].append(float(v)) # adımdan önce kaydetw, b = w - lr * gw, b - lr * gb # eğime karşı adımif abs(w) > 1e6: # patladıbreakprint(f"lr {lr}: {step + 1} adım,"f" kayıp {L0:.3g} -> {loss(w, b):.3g}")h = hist[0.05] # tablo ve CSV: lr = 0.05for k in ('loss', 'grad_norm', 'w', 'b'):print(f'{k:<10}{h[k][-1]:>12.5f}')import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yazcsv.writer(f).writerows([list(h), *zip(*h.values())]) # satır başına bir adımtry:import matplotlib.pyplot as plt # varsa grafik çizfor lr, q in hist.items(): plt.plot(q['step'], q['loss'], label=f'lr {lr}')plt.xlabel('step'); plt.ylabel('MSE'); plt.yscale('log'); plt.legend(); plt.show()except ImportError:print('matplotlib yok: grafik atlandı')
Eğitim paneli
Eğitim çalıştırılıyor…
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →- Ev fiyatlarıVeri setini indir
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Kayıp: tahmin eksi ölçüm, karesi, ortalaması. Her (w, b) ikilisi tek bir kayıp verir; w ve b zemin, kayıp yükseklik olunca hata bir arazi olur.
- Model vadiyi göremez, yalnız ayağının altındaki eğimi hisseder. Türev hangi yönün yokuş yukarı olduğunu söyler; tersine bir adım atılır.
- Adım boyu öğrenme oranıdır: yeni ağırlık = ağırlık − öğrenme oranı × eğim. Ölç, eğimi al, in; tekrar tekrar.
- Şunu dene: öğrenme oranını 0,1 yap, vadinin üstünden atlar ve patlar; 0,0002 yap, 300 adımda hâlâ yoldadır; 0,05 dibe oturur. Başlangıç noktasını değiştir: hepsi aynı dibe iner.
Neden önemli
ChatGPT'ye kadar duyduğunuz her model bu tek fikirle öğrendi: yokuş aşağı yürümek. Gerçek ağlar aynı şeyi milyonlarca boyutta yapar. Robotikte sensör kalibrasyonu, kontrolcü kazancı ayarı ve öğrenen her politika bu döngüyle eğitilir.
ESOF 323, 11. hafta: robotlarda derin öğrenme →