Bölüm 1 · Temeller · Ders 2
Tek nöron: doğru + sigmoid
Pil gerilimine bakıp "görev biter mi?" güvenini öğrenmek
Veri. Bir teslimat robotu 40 kez aynı görev rotasına çıktı. Her denemede yola çıkarkenki pil gerilimini (6,6–8,4 V) ve görevi bitirip bitirmediğini (1 = bitirdi, 0 = yolda kaldı) kaydettik. Cevap artık bir sayı değil, bir grup: evet ya da hayır. Robotun yola çıkmadan önce "bu gerilimle görevi bitirir miyim?" sorusuna bir güvenle cevap vermesini istiyoruz.
import numpy as nprng = np.random.default_rng(4)V = rng.uniform(6.6, 8.4, 40) # başlangıç gerilimi (V)p_true = 1 / (1 + np.exp(-8 * (V - 7.4))) # gerçek eşik 7,4 Vy = 1.0 * (rng.random(40) < p_true) # 1 = görev bittix = (V - V.mean()) / V.std() # ölçeklew, b, lr = 0.0, 0.0, 0.5val = np.arange(40) % 4 == 3 # her 4. deneme doğrulamaya ayrılırhistory = {'epoch': [], 'loss': [], 'val_loss': [], 'acc': [], 'val_acc': []} # eğitim geçmişifor epoch in range(300):p = 1 / (1 + np.exp(-(w * x + b))) # doğru + sigmoid: güvence = -(y * np.log(p) + (1 - y) * np.log(1 - p)) # çapraz entropi (deneme başına)loss, ok = ce[~val].mean(), (p > 0.5) == y # eğitim kaybı, doğru tahminlerfor k, v in zip(history, (epoch, loss, ce[val].mean(), ok[~val].mean(), ok[val].mean())): history[k].append(float(v))w -= lr * ((p - y) * x)[~val].mean() # hataya karşı adım (yalnız eğitim)b -= lr * (p - y)[~val].mean()thr = V.mean() - b / w * V.std() # güven %50: karar çizgisiprint(thr, ((p > 0.5) == y).mean(), loss) # eşik, doğruluk, kayıpfor k in history: # son ölçümler tablosuif k != 'epoch': print(f'{k:<10}{history[k][-1]:>10.4f}')import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yazcsv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir dönemtry:import matplotlib.pyplot as plt # varsa grafik çizfig, (a1, a2) = plt.subplots(1, 2, figsize=(9, 3.5))for k in ('loss', 'val_loss'): a1.plot(history['epoch'], history[k], label=k)for k in ('acc', 'val_acc'): a2.plot(history['epoch'], history[k], label=k)a1.legend(); a2.legend(); a1.set_xlabel('epoch'); a2.set_xlabel('epoch'); 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 →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
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
- Ağırlıklı toplam regresyondaki doğrunun aynısıdır: z = w·x + b (x ölçekli gerilim).
- Yeni olan sigmoid eğrisidir: z ne olursa olsun çıktıyı 0 ile 1 arasına sıkıştırır. Bu çıktı nöronun ne kadar emin olduğudur.
- Hata ve adım öncekiyle aynıdır: (güven − gerçek) ile ağırlıklar biraz düzeltilir. Kayıp olarak çapraz entropi kullanılır: emin ve yanlış tahmin ağır cezalanır.
- Nöron hiçbir zaman evet ya da hayır demez; ne kadar emin olduğunu söyler. Güvenin %50 olduğu yerde karar çizgisini çekeriz.
- Şunu dene: öğrenme oranını 0,05 yap; eğri 300 dönemde zor dikleşir. 5 yap: eşik hızla yerine oturur.
Neden önemli
Bu tek nöron, istatistikte lojistik regresyon adıyla bilinir ve sinir ağlarının yapı taşıdır: büyük dil modelleri de milyarlarca ağırlıkla aynı hesabı yapar. Robotikte "kavrama başarılı olur mu?", "bu engel gerçek mi?", "bu batarya görevi bitirir mi?" gibi evet/hayır kararlarının güvenle verilmesi buna dayanır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →