Ders 24 / 24
Ayar Değişkeni Araması
Koşum değişkenliğinin aramayı yanıltmasının ölçülmesi: on aday aynı bütçeyle iki kez koşturulduğunda adaylar arası açıklık doğrulama kümesinde 0,0317 iken tek bir adayın iki koşumu arasındaki fark 0,0238'e çıkıyor ve kırk beş aday çiftinin yirmi üçü ayırt edilemiyor, yedisinde sıralama ters dönüyor. Birinci koşumdan bakan arama on altı birimli adayı seçip sınamada 0,8135 alırken ikinci koşumdan bakan arama dört birimli adayı seçip 0,8016 alıyor; on adayın sınama ortalaması 0,8036, taban çizgisi 0,7579. Kurs kapanışı yirmi dört dersin taban çizgisini, ağın sayısını ve ikinci koşumunu tek tabloda toplar.
İçindekiler
Önceki ders eğitimin kalemlerini saydı ve hepsini sabitledi; en büyük oynamayı yapan kalem başlangıç değerleriydi. Gerçek bir eğitimde kalemlerin bir bölümü bilerek serbest bırakılır: bir aday listesi kurulur, hepsi koşturulur ve doğrulama kümesinden en iyisi seçilir.
Arama yöntemleri M27/K03’ün model değerlendirme konusunda ölçüldü — ızgara, rastgele ve model temelli arama aynı elli adaylık bütçede sınamada 0,7937, 0,7857 ve 0,8016 vermişti — ve burada tekrarlanmaz. Değişen tek şey şudur: orada her adayın sayısı tek bir koşumdan okunuyordu. Dersin sorusu şudur: aday sayısı aynıyken, aynı adayın iki koşumu arasındaki fark adaylar arasındaki farktan büyük olduğunda arama neyi seçiyor.
- EP24. Küme, ağ ve taban çizgisi 01. dersten devralınır; ayrıca doğrulama kümesi kullanılır (252 satır) ve seçim ondan, rapor sınamadan okunur.
- EP25. Aday sayısı on, bütçe her adayda eşittir (40 tur) ve adaylar elle listelenir; arama yöntemi seçimi bu dersin konusu değildir.
- EP26. Ayar uzayı üç eksenlidir: gizli birim (4, 8, 16), öğrenme adımı (0,15, 0,30, 0,60) ve toplu boy (20, 30, 50). Her aday iki kez koşturulur ve iki koşum yalnız başlangıç değerlerinde ayrılır; öbür kalemler 04. dersteki gibi sabittir.
- EP27. İki aday, farkları her ikisinin de koşum farkından küçükse ayırt edilemez sayılır; eşik ölçünün kendisinden gelir. Beraberlik listedeki ilk adaya verilir ve bu da bir karardır.
Küme, Ağ ve Aday Listesi
# ORTAK — KURGUDUR. M27/K01-K04'un abone tablosu ayni tohumla (20260218) uretilir; # egitim kumesi 756'dan 300 satira kucultulmustur. Bu derste DOGRULAMA kumesi de # kullanilir: secim ondan, rapor sinama kumesinden okunur. Ag 01. dersten gelir, # gizli birim sayisi h adaya gore degisir. import math TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF BOLGE = [("kuzey", 0.28, 21, 0.00), ("guney", 0.22, 17, -0.10), ("dogu", 0.18, 26, 0.30), ("bati", 0.14, 14, -0.05), ("merkez", 0.18, 23, 0.05)] ALAN = ["b_guney", "b_dogu", "b_bati", "b_merkez", "hane", "memnuniyet", "donem", "ortalama"] def uretec(t): x = ((t ^ (t >> 16)) * 2246822507) & M32 x = ((x ^ (x >> 13)) * 3266489909) & M32 s = [(x ^ (x >> 16)) & M32] def sonraki(): s[0] = (s[0] * 1664525 + 1013904223) & M32 return s[0] / 4294967296 return sonraki def ayrik(u, w): t = 0.0 for i, x in enumerate(w): t += x if u < t: return i return len(w) - 1 def karistir(dizi, tohum): r, s = uretec(tohum), list(dizi) for i in range(len(s) - 1, 0, -1): j = int(r() * (i + 1)) s[i], s[j] = s[j], s[i] return s VERI = [] for i in range(HAM): r = uretec(TOHUM + i) b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])] hane = 1 + ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05]) memnun = 1 + ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17]) if r() < 0.046: continue no = 10001 + i r, v = uretec(TOHUM + 7000 + no), [] for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])): v.append(0.0 if r() < 0.038 else math.floor( b[2] * math.exp((r() + r() + r() - 1.5) * 0.62) * (1 - d * 0.05) * 100 + 0.5) / 100) r() if not v: continue ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + no) z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn + 0.24 * (hane >= 5) - 0.20 * (memnun >= 4) + b[3] + 0.9 * (no - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30) x = {"hane": hane, "memnuniyet": memnun, "donem": len(v), "ortalama": round(ort, 2), "supheli": int(z > 1.35)} for q in BOLGE[1:]: x["b_" + q[0]] = int(b[0] == q[0]) VERI.append(x) K = karistir(VERI, TOHUM + 90000) EGT, DOG, SIN = K[:300], K[756:1008], K[1008:] def tablo(satirlar, ist=None): X = [[float(s[a]) for a in ALAN] for s in satirlar] if ist is None: # olcek yalniz egitim kumesinden ogrenilir ist = [] for j in range(4, 8): m = sum(v[j] for v in X) / len(X) ist.append((j, m, math.sqrt(sum((v[j] - m) ** 2 for v in X) / len(X)))) for v in X: for j, m, sd in ist: v[j] = (v[j] - m) / sd return X, [s["supheli"] for s in satirlar], ist XE, yE, IST = tablo(EGT) XD, yD, _ = tablo(DOG, IST) XS, yS, _ = tablo(SIN, IST) TABAN = sum(v == 0 for v in yS) / len(yS) G = len(ALAN) def ilklendir(tohum, h): r = uretec(tohum) return [(r() * 2 - 1) * math.sqrt(2.0 / G) for _ in range(h * G)] + [0.0] * h \ + [(r() * 2 - 1) * math.sqrt(2.0 / h) for _ in range(h)] + [0.0] def egim(p, X, y, par, h): g = [0.0] * len(p) for k in par: x, hh = X[k], [0.0] * h for j in range(h): s = p[h * G + j] + sum(p[j * G + i] * x[i] for i in range(G)) hh[j] = s if s > 0 else 0.0 s = p[-1] + sum(p[h * G + h + j] * hh[j] for j in range(h)) d = (1.0 / (1.0 + math.exp(-s)) if s > -30 else 0.0) - y[k] g[-1] += d for j in range(h): g[h * G + h + j] += d * hh[j] if hh[j] > 0: g[h * G + j] += d * p[h * G + h + j] for i in range(G): g[j * G + i] += d * p[h * G + h + j] * x[i] return [v / len(par) for v in g] def egit(tohum, h, adim, toplu, tur): p = ilklendir(tohum, h) for t in range(tur): d = karistir(range(len(XE)), TOHUM + 700 + t) for b in range(0, len(d) - toplu + 1, toplu): p = [u - adim * v for u, v in zip(p, egim(p, XE, yE, d[b:b + toplu], h))] return p def dogruluk(p, X, y, h): n = 0 for k in range(len(X)): x = X[k] o = p[-1] + sum(p[h * G + h + j] * max(0.0, p[h * G + j] + sum(p[j * G + i] * x[i] for i in range(G))) for j in range(h)) n += (o >= 0.0) == (y[k] == 1) return n / len(X) print(f"kurgu: egitim {len(XE)} satir (756'dan kucultuldu), dogrulama {len(XD)}, " f"sinama {len(XS)}; taban cizgisi {TABAN:.4f}")
kurgu: egitim 300 satir (756'dan kucultuldu), dogrulama 252, sinama 252; taban cizgisi 0.7579
On Aday, İki Koşum
# ON ADAY, her biri IKI KOSUM. Arama yontemleri M27/K03'te olculdu ve burada # tekrarlanmaz; degisen tek sey her adayin sayisinin KAC KOSUMDAN okundugudur. # Secim dogrulama kumesinden yapilir, rapor sinama kumesinden. ADAY = [(4, 0.15, 30), (4, 0.30, 30), (8, 0.15, 30), (8, 0.30, 30), (8, 0.60, 30), (8, 0.30, 20), (8, 0.30, 50), (16, 0.15, 30), (16, 0.30, 30), (16, 0.60, 30)] DOGRULAMA, SINAMA = [], [] print(f"{'aday':>4} {'gizli':>6} {'adim':>5} {'toplu':>6} {'dog k1':>7} {'dog k2':>7} " f"{'|fark|':>7} {'sin k1':>7} {'sin k2':>7}") for no, (h, adim, toplu) in enumerate(ADAY, 1): P = [egit(TOHUM + k, h, adim, toplu, 40) for k in (1, 2)] d = [dogruluk(p, XD, yD, h) for p in P] s = [dogruluk(p, XS, yS, h) for p in P] DOGRULAMA.append(d) SINAMA.append(s) print(f"{no:>4} {h:>6} {adim:>5.2f} {toplu:>6} {d[0]:>7.4f} {d[1]:>7.4f} " f"{abs(d[0] - d[1]):>7.4f} {s[0]:>7.4f} {s[1]:>7.4f}")
aday gizli adim toplu dog k1 dog k2 |fark| sin k1 sin k2 1 4 0.15 30 0.8135 0.8175 0.0040 0.8095 0.8056 2 4 0.30 30 0.8016 0.8254 0.0238 0.8095 0.8016 3 8 0.15 30 0.8135 0.8175 0.0040 0.8016 0.8056 4 8 0.30 30 0.8095 0.8175 0.0079 0.8095 0.7937 5 8 0.60 30 0.8016 0.8056 0.0040 0.7857 0.8056 6 8 0.30 20 0.7976 0.8095 0.0119 0.7976 0.7976 7 8 0.30 50 0.8095 0.8175 0.0079 0.8016 0.8056 8 16 0.15 30 0.8294 0.8254 0.0040 0.8135 0.8056 9 16 0.30 30 0.8294 0.8175 0.0119 0.8095 0.8016 10 16 0.60 30 0.8016 0.8016 0.0000 0.7976 0.7976
Birinci doğrulama sütunu alışıldık bir sonuç veriyor: en yüksek iki sayı 0,8294 ve ikisi de on altı birimli adaylara ait, yani kapasite kazandırmış görünüyor. İkinci sütun bunu bozuyor: iki numaralı aday — listenin en küçük ağı — birinci koşumda 0,8016 verirken ikinci koşumda 0,8254’e çıkıp sekiz numaralı adayla başa baş geliyor.
Arama Neyi Seçiyor
# Aramanin sectigi aday, hangi kosumdan bakildigina bagli. ADAYLAR_ARASI = max(d[0] for d in DOGRULAMA) - min(d[0] for d in DOGRULAMA) KOSUM_ICI = [abs(d[0] - d[1]) for d in DOGRULAMA] print(f"adaylar arasi yayilim (kosum 1, dogrulama) {ADAYLAR_ARASI:.4f}") print(f"ayni adayin iki kosumu arasindaki fark: en cok {max(KOSUM_ICI):.4f}, " f"ortanca {sorted(KOSUM_ICI)[len(KOSUM_ICI) // 2]:.4f}") CIFT = [(i, j) for i in range(len(ADAY)) for j in range(i + 1, len(ADAY))] belirsiz = sum(1 for i, j in CIFT if abs(DOGRULAMA[i][0] - DOGRULAMA[j][0]) <= max(KOSUM_ICI[i], KOSUM_ICI[j])) ters = sum(1 for i, j in CIFT if (DOGRULAMA[i][0] - DOGRULAMA[j][0]) * (DOGRULAMA[i][1] - DOGRULAMA[j][1]) < 0) print(f"{len(CIFT)} aday ciftinin {belirsiz}'i kosum farkiyla ayirt edilemiyor; " f"{ters} ciftte siralama iki kosum arasinda TERS donuyor") for k in (0, 1): en = max(range(len(ADAY)), key=lambda i: (DOGRULAMA[i][k], -i)) print(f"kosum {k + 1}'e gore secilen aday {en + 1} (gizli {ADAY[en][0]}, " f"adim {ADAY[en][1]:.2f}, toplu {ADAY[en][2]}): dogrulama " f"{DOGRULAMA[en][k]:.4f}, sinama {SINAMA[en][k]:.4f}") ort = sum(s[0] for s in SINAMA) / len(SINAMA) print(f"on adayin sinama ortalamasi {ort:.4f}; taban cizgisi {TABAN:.4f}")
adaylar arasi yayilim (kosum 1, dogrulama) 0.0317 ayni adayin iki kosumu arasindaki fark: en cok 0.0238, ortanca 0.0079 45 aday ciftinin 23'i kosum farkiyla ayirt edilemiyor; 7 ciftte siralama iki kosum arasinda TERS donuyor kosum 1'e gore secilen aday 8 (gizli 16, adim 0.15, toplu 30): dogrulama 0.8294, sinama 0.8135 kosum 2'e gore secilen aday 2 (gizli 4, adim 0.30, toplu 30): dogrulama 0.8254, sinama 0.8016 on adayin sinama ortalamasi 0.8036; taban cizgisi 0.7579
Dersin sayısı ilk iki satırda. Adaylar arası açıklık 0,0317, aynı adayın iki koşumu arasındaki en büyük fark 0,0238; ikisi aynı büyüklük sırasındadır. Kırk beş aday çiftinin yirmi üçü, yani yarıdan fazlası, koşum farkıyla ayırt edilemiyor ve yedi çiftte sıralama iki koşum arasında ters dönüyor.
Birinci koşumdan bakan arama sekiz numaralı adayı seçiyor: on altı birim. İkinci koşumdan bakan arama iki numaralı adayı: dört birim. Aynı liste, aynı bütçe ve kapasite sorusuna iki ayrı yanıt; seçilenlerin sınama sayıları 0,8135 ve 0,8016.
On adayın sınama ortalaması 0,8036: birinci koşumdan seçilen aday bunun 0,0099 üstünde, ikinci koşumdan seçilen 0,0020 altında. Arama, hangi koşumdan bakıldığına göre iki buçuk abone kazandırıyor ya da yarım abone kaybettiriyor. Ayar bütçesi M27/K03’te sayının şişmesini üretiyordu; burada ondan önce gelen bir sorun var — arama sıralaması gürültüden kurulmuşsa şişecek bir kazanç da yoktur. Çaresi pahalıdır: her adayı birden çok koşumla ölçüp sayısını koşumların ortalaması olarak yazmak; bütçe on adaydan beşe iner.
Özet
- Adaylar arası açıklık doğrulama kümesinde 0,0317, tek bir adayın iki koşumu arasındaki en büyük fark 0,0238; ikisi aynı büyüklük sırasındadır.
- Kırk beş aday çiftinin yirmi üçü koşum farkıyla ayırt edilemiyor, yedisinde sıralama ters dönüyor.
- Birinci koşumdan bakan arama on altı birimli, ikinci koşumdan bakan dört birimli adayı seçiyor: aynı liste kapasite sorusuna iki ayrı yanıt veriyor, sınama sayıları 0,8135 ile 0,8016.
- On adayın sınama ortalaması 0,8036 ve taban çizgisi 0,7579; arama hangi koşumdan bakıldığına göre iki buçuk abone kazandırıyor ya da yarım abone kaybettiriyor.
Kurs Kapanışı
Yirmi dört dersin hesabı tek tabloda ve her sayı kendi dersinden okundu. Satırlar ortak birim taşımaz: kurs üç ayrı kurgu küme kullandı ve son sütun hangisinden okunduğunu yazar. Ölçüt yirmi üç satırda doğruluktur ve büyük olan iyidir; son satır etiketsizdir, geri kurma hatasıyla okunur ve orada küçük olan iyidir. İkinci koşum, aynı kurulumun yalnız başlangıç değerleri değiştirilerek yeniden eğitilmesidir.
| Ders | Taban çizgisi | Ağın sayısı | İkinci koşum | Küme |
|---|---|---|---|---|
| Temeller 01 | 0,7579 | 0,7857 | 0,7698 | abone |
| Temeller 02 | 0,7579 | 0,7937 | 0,7976 | abone |
| Temeller 03 | 0,7579 | 0,7540 | 0,7738 | abone |
| Temeller 04 | 0,7579 | 0,7619 | 0,7897 | abone |
| Temeller 05 | 0,7579 | 0,7857 | 0,7698 | abone |
| Temeller 06 | 0,7579 | 0,7857 | 0,7698 | abone |
| Temeller 07 | 0,7579 | 0,7817 | 0,7778 | abone |
| Temeller 08 | 0,7579 | 0,7937 | 0,7738 | abone |
| Temeller 09 | 0,7579 | 0,7698 | 0,7857 | abone |
| Mimariler 01 | 0,5850 | 0,8000 | 0,8150 | ızgara |
| Mimariler 02 | 0,5850 | 0,8050 | 0,8050 | ızgara |
| Mimariler 03 | 0,5850 | 0,8150 | 0,8900 | ızgara |
| Mimariler 04 | 0,7100 | 0,7350 | 0,7150 | dizi |
| Mimariler 05 | 0,7100 | 0,9750 | 0,9150 | dizi |
| Mimariler 06 | 0,6333 | 0,8889 | 0,9944 | dizi |
| Mimariler 07 | 0,6611 | 0,8778 | 0,8833 | dizi |
| Mimariler 08 | 0,6444 | 0,9722 | 0,9833 | olay kodu |
| Mimariler 09 | 0,6444 | 0,8333 | 0,8500 | olay kodu |
| Mimariler 10 | 2,9007 | 0,7949 | 0,7638 | dizi (hata) |
| Eğitim 01 | 0,7579 | 0,8095 | 0,7937 | abone |
| Eğitim 02 | 0,7579 | 0,8016 | 0,8095 | abone |
| Eğitim 03 | 0,7579 | 0,8056 | 0,7937 | abone |
| Eğitim 04 | 0,7579 | 0,8095 | 0,7937 | abone |
| Eğitim 05 | 0,7579 | 0,8135 | 0,8016 | abone |
Kursun kuralı budur: bir ağın sayısı, kapasitesinden değil eğitiminden gelebilir; aynı kapasitenin iki koşumda iki ayrı sayı verdiği yazılmayan sonuç ölçülmemiş sayılır. Üçüncü sütun tek bir sayıya iner: kapasitenin ya da mimarinin kattığı farkın kendi dersinde yazıldığı yirmi bir derste on dördünde ikinci koşumun farkı o farktan büyük çıktı — evrişimli mimaride derinliğin kattığı 0,0575’e karşı 0,0750, çok başlı dikkatte baş sayısının kattığı 0,0250’ye karşı 0,0500, algılayıcıda kapasitenin kattığı bir aboneye karşı dört abone. Kalan yedide kapasitenin kattığı fark koşum farkına eşit ya da ondan büyüktü.
Kursun ikinci iddiası aynı tablodan okunur ve saklanmaz. Abone tablosunun on dört satırında karşılaştırma çizgileri M27/K03’ten gelir: karar ağacı 0,7857, doğrusal model 0,8016. Sinir ağı temellerinin dokuz dersinde ağın sayısı hiçbir koşumda 0,8016’yı geçmedi; on sekiz koşumun en yükseği 0,7976 ve üç dersin ağın sayısı tam olarak ağacın sayısında durdu. Eğitim pratiğinin beş dersinde ağın sayısı 0,8016 ile 0,8135 arasında, yani doğrusal modelin çizgisinde ya da üstünde kaldı; ama sekiz sütunlu bir öznitelik kümesiyle koştular ve birinci dersin on ilklendirmesi 0,7857–0,8095 arasına yayıldı, iki çizgi de bu aralığın içinde. Derin ağ bu kurgu tablo verisinde karar ağacını ve doğrusal modeli, koşum değişkenliğinden ayrılabilir biçimde geçemedi. Kazanç kapasiteden değil eğitim pratiğinden geldi ve en az bir derste daha derin ağ daha sığ ağı geçemedi.
Yirmi dört derste mimari kuruldu ve her sayının yanına ikinci koşumu yazıldı. Ama girdiler hep hazır sayılardı: bir sütun, bir ızgara hücresi, bir okuma dizisi, bir olay kodu. Bir metnin ya da bir görüntünün sayıya nasıl çevrildiği, o çevirinin hangi tabana karşı ölçüldüğü ve alanın kendi ölçütlerinin ne olduğu hiç sorulmadı. Sonraki kurs, Doğal Dil İşleme ve Bilgisayarla Görme, bu soruyla açılır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.