Okullar için Robotik ve Mühendislik · anaokulundan liseye

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.

40 görev denemesi40 deneme · 23 bitti, 17 yolda kaldı
1 / 88
lojistik_noron.pypython
  1. import numpy as np
  2. rng = np.random.default_rng(4)
  3. V = rng.uniform(6.6, 8.4, 40) # başlangıç gerilimi (V)
  4. p_true = 1 / (1 + np.exp(-8 * (V - 7.4))) # gerçek eşik 7,4 V
  5. y = 1.0 * (rng.random(40) < p_true) # 1 = görev bitti
  6. x = (V - V.mean()) / V.std() # ölçekle
  7. w, b, lr = 0.0, 0.0, 0.5
  8. val = np.arange(40) % 4 == 3 # her 4. deneme doğrulamaya ayrılır
  9. history = {'epoch': [], 'loss': [], 'val_loss': [], 'acc': [], 'val_acc': []} # eğitim geçmişi
  10. for epoch in range(300):
  11. p = 1 / (1 + np.exp(-(w * x + b))) # doğru + sigmoid: güven
  12. ce = -(y * np.log(p) + (1 - y) * np.log(1 - p)) # çapraz entropi (deneme başına)
  13. loss, ok = ce[~val].mean(), (p > 0.5) == y # eğitim kaybı, doğru tahminler
  14. for k, v in zip(history, (epoch, loss, ce[val].mean(), ok[~val].mean(), ok[val].mean())): history[k].append(float(v))
  15. w -= lr * ((p - y) * x)[~val].mean() # hataya karşı adım (yalnız eğitim)
  16. b -= lr * (p - y)[~val].mean()
  17. thr = V.mean() - b / w * V.std() # güven %50: karar çizgisi
  18. print(thr, ((p > 0.5) == y).mean(), loss) # eşik, doğruluk, kayıp
  19. for k in history: # son ölçümler tablosu
  20. if k != 'epoch': print(f'{k:<10}{history[k][-1]:>10.4f}')
  21. import csv
  22. with open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yaz
  23. csv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir dönem
  24. try:
  25. import matplotlib.pyplot as plt # varsa grafik çiz
  26. fig, (a1, a2) = plt.subplots(1, 2, figsize=(9, 3.5))
  27. for k in ('loss', 'val_loss'): a1.plot(history['epoch'], history[k], label=k)
  28. for k in ('acc', 'val_acc'): a2.plot(history['epoch'], history[k], label=k)
  29. a1.legend(); a2.legend(); a1.set_xlabel('epoch'); a2.set_xlabel('epoch'); plt.show()
  30. except ImportError:
  31. 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.

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.

lojistik_noron.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Ağırlıklı toplam regresyondaki doğrunun aynısıdır: z = w·x + b (x ölçekli gerilim).
  2. 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.
  3. 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.
  4. 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.
  5. Ş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 →
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç