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

Bölüm 1 · Temeller · Ders 5

Aşırı öğrenme ve doğrulama

Sensör eğrisine uyan en iyi model, en karmaşık olanı değildir

Veri. Sharp IR mesafe sensörünün çıkış gerilimi uzaklık arttıkça eğri biçiminde düşer. 15 ölçümle bir kalibrasyon eğrisi uyduracağız, sonra eğrinin hiç görmediği 30 ölçümle sınayacağız.

eğitim ölçümleri15 eğitim · 30 doğrulama
1 / 58
asiri_ogrenme.pypython
  1. import numpy as np
  2. D = np.genfromtxt('sharp-ir.csv', delimiter=',', names=True) # 15 eğitim, 30 doğrulama ölçümü
  3. d, v, d_val, v_val = [D[c][D['grup'] == g] for g in (0, 1) for c in ('uzaklik', 'gerilim')] # grup 0 eğitim, 1 doğrulama
  4. x, x_val = (d - 45) / 35, (d_val - 45) / 35 # [-1, 1] aralığına ölçekle
  5. history = {'degree': [], 'train_mse': [], 'val_mse': [], 'gap': []} # derece başına geçmiş
  6. for deg in range(1, 13):
  7. c = np.polyfit(x, v, deg) # en küçük kareler
  8. train = ((np.polyval(c, x) - v) ** 2).mean() # eğitim hatası
  9. val = ((np.polyval(c, x_val) - v_val) ** 2).mean() # doğrulama hatası
  10. print(deg, train, val)
  11. for k, q in zip(history, (deg, train, val, val - train)): history[k].append(float(q)) # boşluk: aşırı öğrenme göstergesi
  12. A, A_val = np.vander(x, 13), np.vander(x_val, 13) # erken durdurma: derece 12, adım adım
  13. w, m, s, best = np.zeros(13), np.zeros(13), np.zeros(13), (1e9, 0, None)
  14. for t in range(1, 20001):
  15. g = 2 * A.T @ (A @ w - v) / len(v) # eğim
  16. m = .9 * m + .1 * g; s = .999 * s + .001 * g * g # Adam: eğimin ve büyüklüğünün ortalaması
  17. w -= .02 * (m / (1 - .9 ** t)) / (np.sqrt(s / (1 - .999 ** t)) + 1e-8)
  18. val = ((A_val @ w - v_val) ** 2).mean()
  19. if val < best[0]: best = (val, t, w.copy()) # en iyi geçişi sakla
  20. w = best[2]; print("en iyi geçiş", best[1], best[0]) # erken durdurma: en iyi geçişe dön
  21. k = int(np.argmin(history['val_mse'])) # en iyi derece
  22. for name, v in [('best_degree', k + 1), ('best_val_mse', history['val_mse'][k]), ('gap_deg12', history['gap'][-1]), ('early_stop_pass', best[1])]: # son ölçümler tablosu
  23. print(f'{name:<16}{v:>12.6g}')
  24. import csv
  25. with open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yaz
  26. csv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir derece
  27. try:
  28. import matplotlib.pyplot as plt # varsa grafik çiz
  29. for c in ('train_mse', 'val_mse'): plt.plot(history['degree'], history[c], 'o-', label=c)
  30. plt.xlabel('degree'); plt.ylabel('MSE'); plt.yscale('log'); plt.legend(); plt.show()
  31. except ImportError:
  32. 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.

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.

asiri_ogrenme.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Her derece için polinom en küçük kareler yöntemiyle eğitim noktalarına uydurulur.
  2. Eğitim hatası derece arttıkça hep azalır: eğri her noktaya biraz daha yaklaşır.
  3. Doğrulama hatası önce düşer, sonra yükselir: eğri gürültüyü de ezberlemeye başlar ve noktaların arasında savrulur.
  4. Seçilen model, doğrulama hatası en küçük olandır; eğitim hatasına bakarak seçmek her zaman en karmaşık modeli verir.
  5. Aynı şey zamanda da olur. Derece 12’lik eğriyi bu kez gradyan inişiyle (Adam) adım adım eğitiriz: eğitim hatası her geçişte biraz düşer, doğrulama hatası birkaç yüz geçişte dibe vurur ve sonra tırmanır. Dipteki ağırlıkları saklayıp oraya dönmeye erken durdurma denir; büyük sinir ağları da çoğu zaman böyle eğitilir.
  6. Şunu dene: son kareye kadar oynat ve 20.000 geçişteki savrulan eğriyi, erken durdurmanın döndüğü sakin eğriyle karşılaştır. Sonra son dereceyi 3’e indir: doğrulama hatası daha 3. derecede dipteyken bile eğitim hatası düşmeye devam eder.

Neden önemli

Her makine öğrenmesi modeli bu dengeyle yaşar: az karmaşık olan eksik öğrenir, çok karmaşık olan ezberler. Eğitim ve doğrulama verisini ayırmak, çapraz doğrulama ve erken durdurma bu yüzden vardır. Robotta ezberlenmiş bir kalibrasyon, laboratuvarda mükemmel, sahada tehlikelidir.

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ç