Ders 06 / 14
Önceden Eğitim ve İnce Ayar
Maskeli kestirimle etiketsiz notlardan öğrenilen bir gömme tablosunun etiketli göreve taşınması ve kattığı farkın etiket sayısıyla birlikte okunması: vekil görev kendi ölçüsünde 0,0419 tabanını 0,3450'ye çıkarıyor ve bunun için sıfır etiket harcanıyor. Alanın tabanı 0,4420 iken yirmi etiketle sıfırdan eğitim 0,5850, önceden eğitim ve ince ayar 0,7480 veriyor; sıfırdan eğitim bu sayıya ancak kırk etiketle ulaşıyor. Fark yüz altmış etikette 0,0090 eksiye döner. Öğrenmeyen denetim kurulumu — rastgele tablonun dondurulması — beş ölçümde de 0,51'in altında kalıyor ve iki koşumu 0,1320 ayrılıyor; önceden eğitilmiş tablonun iki koşumu 0,0020 ayrılıyor.
İçindekiler
Önceki derste sözcük torbası alanın tabanını 0,5200 geçti, ama bunun için 1.100 etiketli not harcandı. Her etiket bir denetçinin sahada geçirdiği zamanın karşılığıdır ve elde yirmi tane olabilir. Etiketsiz not ise boldur: ölçüm ağı her dönem binlerce not üretir ve hiçbirine olay türü yazılmamıştır.
Bu derste sorulan şey şudur: bu etiketsiz yığından bir vekil görev kurulabilir mi, ve orada
öğrenilen temsil etiketli göreve taşındığında kaç etiketle ne kadar fark katar. Vekil görev
maskeli kestirimdir: bir notun bir sözcüğü gizlenir ve kalan sözcüklerden kestirilir. Doğru cevap
metnin kendisindedir, dışarıdan hiçbir etiket gerekmez. Dikkat katmanı, çok başlı dikkat ve
konum kodlaması M27/K05 mimariler/06–07’de kuruldu ve ölçüldü; burada ölçülen şey mimari
değildir. Ölçülen şey döngüdür: önceden eğitim, sonra ince ayar.
- NL48. Metin kurgusu önceki dersinkiyle aynıdır ve kurgudur; tohum 20260218.
- NL49. Küme üçe ayrılır: ilk 700 not etiketsiz havuzdur (yalnız metni kullanılır, olay türü hiç okunmaz), sonraki 400 not etiketli havuzdur, son 500 not ayrılmış kümedir. Ayrılmış küme önceki dersinkiyle aynı 500 nottur.
- NL50. Sözlük yalnız etiketsiz havuzdan kurulur; en az iki notta geçen sözcükler alınır.
- NL51. Model ders içinde yazılır: sözcük başına altı sayılık bir gömme tablosu, notun gömmelerinin ortalaması ve dört sınıflı bir doğrusal gövde. Tablo 654, gövde 28 parametredir.
- NL52. Vekil görevin tabanı en sık sözcüktür: her maskeli konuma sözlüğün en sık sözcüğünü yazan yordam.
- NL53. Dört kurulum karşılaştırılır: sıfırdan (tablo rastgele ilklendirilir ve öğrenilir), rastgele tablo donduruk (öğrenilmez — denetim kurulumu), önceden eğitim donduruk, önceden eğitim ince ayarlı.
- NL54. Etiketli örnek sayısı beş değerde ölçülür: 10, 20, 40, 80, 160. Ayrılmış küme beşinde de aynıdır.
- NL55. Her sayı iki koşumla basılır; koşumlar gövdenin ilklendirme tohumunda ayrılır.
Etiketsiz Yığın ve Üç Ayrım
Önceden eğitimin gerektirdiği tek şey metnin kendisidir. Bu yüzden ayrım burada üçlüdür: etiketin hiç okunmadığı bir havuz, etiketin sayılarak harcandığı bir havuz ve hiçbirinin dokunmadığı bir ayrılmış küme.
# KURGU saha notlari — M27/K02'nin not alaninin genisletilmis hali. Tohum 20260218. import math TOHUM, M32 = 20260218, 0xFFFFFFFF TUR = ("olagan", "erisilemedi", "sayac arizasi", "kacak suphesi") PAY = (0.46, 0.22, 0.19, 0.13) OBEK = {t: s.split("|") for t, s in zip(TUR, ( "okuma normal|okuma normaldi|sayac erisimi saglandi|sayaca erisildi|olcum tekrarlandi|" "olcumu yineledik|vana kontrol edildi|vanada sorun yok|kapak temiz|kapakta iz yok|" "gosterge okunakli|gostergede rakam net", "abone evde degildi|abone bulunamadi|erisim saglanamadi|erisim yok|kapi zili calismiyor|" "zil calismadi|bahce kapisi kilitli|bahce kapisi kapali|bodrum katina inilemedi|" "bodrum kilitli|adres bulunamadi|adres eksik", "gosterge donmuyor|gostergede hareket yok|sayac cami kirik|sayacin cami catlak|" "rakam okunmuyor|rakamlar silik|ibre sabit kalmis|ibre kilitli|mekanizma takilmis|" "mekanizmada takilma|sayac durmus|sayac calismiyor", "muhur izi var|muhurde iz goruldu|muhur kopmus|muhurler kopuk|baglanti degistirilmis|" "baglantida degisiklik|kelepce gevsek|kelepcede gevseme|boru ek yeri yeni|boruda yeni ek|" "sayac ters takilmis|sayaci ters takmislar"))} GURULTU = ("arac park halinde|kapak kirli|hava yagisli|adres teyit edildi|not kisa tutuldu|" "ikinci ziyaret|bahce icinde|kaldirim uzerinde").split("|") BOLGE = "kuzey hatti|guney hatti|dogu hatti|bati hatti|merkez hatti".split("|") SUP_P = {"kacak suphesi": 0.86, "sayac arizasi": 0.21, "erisilemedi": 0.07, "olagan": 0.03} 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 not_kur(no): r = uretec(TOHUM + 41000 + no) u, k = r(), 0.0 for i, p in enumerate(PAY): k += p if u < k: t = TUR[i] break p = [OBEK[t][int(r() * 12)]] if r() < 0.55: p.append(OBEK[t][int(r() * 12)]) if r() < 0.34: # baska turden odunc alinan yan kayit p.append(OBEK[TUR[int(r() * 4)]][int(r() * 12)]) if r() < 0.62: p.append(GURULTU[int(r() * 8)]) if r() < 0.30: p.append(BOLGE[int(r() * 5)]) return {"metin": ", ".join(p), "tur": t, "supheli": 1 if r() < SUP_P[t] else 0} NOT = [not_kur(i) for i in range(1600)] TUR_I = {t: i for i, t in enumerate(TUR)} HAVUZ, ETIKETLI, SINAMA = NOT[:700], NOT[700:1100], NOT[1100:] def bol(m): return [w.strip(",").lower() for w in m.split() if w.strip(",")] d = {} for x in HAVUZ: for w in set(bol(x["metin"])): d[w] = d.get(w, 0) + 1 S = {w: i for i, w in enumerate(sorted(w for w, c in d.items() if c >= 2))} V, GOM = len(S), 6 DIZI = [z for z in ([S[w] for w in bol(x["metin"]) if w in S] for x in HAVUZ) if len(z) >= 3] say = [0] * V for z in DIZI: for i in z: say[i] += 1 EN_SIK_S = max(range(V), key=lambda i: say[i]) say2 = {} for x in ETIKETLI[:160]: say2[x["tur"]] = say2.get(x["tur"], 0) + 1 ES = max(say2, key=say2.get) TABAN = sum(x["tur"] == ES for x in SINAMA) / len(SINAMA) print(f"etiketsiz havuz {len(DIZI)} not, etiketli havuz {len(ETIKETLI)}, " f"ayrilmis {len(SINAMA)}") print(f"sozluk {V}, gomme boyutu {GOM}, tablo parametresi {V * GOM}, " f"govde parametresi {4 * GOM + 4}") print(f"alanin tabani (en sik sinif '{ES}') {TABAN:.4f}")
etiketsiz havuz 664 not, etiketli havuz 400, ayrilmis 500 sozluk 109, gomme boyutu 6, tablo parametresi 654, govde parametresi 28 alanin tabani (en sik sinif 'olagan') 0.4420
Parametre sayıları bu dersin gerilimini gösteriyor: tablo 654, gövde 28. On etiketli örnekle 682
parametrenin hepsini öğrenmek, kapasitenin veriyi kat kat geçtiği durumdur ve M27/K01
genelleme/02 bunu ölçmüştü. Önceden eğitimin iddiası şudur: 654 parametre etiketsiz metinden
öğrenilebilir, geriye öğrenilecek 28 parametre kalır.
Vekil Görev: Maskeli Kestirim
Maskeli kestirimde her notun her konumu sırayla gizlenir ve gizlenen sözcük kalan sözcüklerin gömme ortalamasından kestirilir. Öğrenilen şey iki tablodur: girdi gömmesi ve çıktı gömmesi. Asıl göreve yalnız birincisi taşınır.
def tablo(tohum, olcek=0.5): r = uretec(tohum) return [[(r() + r() + r() - 1.5) * olcek for _ in range(GOM)] for _ in range(V)] def maskeli_egit(tohum, tur=4, adim=0.1): # MODELDIR: vekil gorev T, U, c = tablo(tohum), tablo(tohum + 7, 0.3), [0.0] * V for _ in range(tur): for z in DIZI: for k in range(len(z)): hedef, cev = z[k], z[:k] + z[k + 1:] h = [sum(T[i][j] for i in cev) / len(cev) for j in range(GOM)] o = [sum(U[i][j] * h[j] for j in range(GOM)) + c[i] for i in range(V)] e = [math.exp(p - max(o)) for p in o] s = sum(e) dh = [0.0] * GOM for i in range(V): f = (e[i] / s - (1.0 if i == hedef else 0.0)) * adim c[i] -= f for j in range(GOM): dh[j] += f * U[i][j] U[i][j] -= f * h[j] for i in cev: for j in range(GOM): T[i][j] -= dh[j] / len(cev) return T, U, c def maskeli_olc(T, U, c): dog = taban = t = 0 for z in DIZI[:300]: for k in range(len(z)): hedef, cev = z[k], z[:k] + z[k + 1:] h = [sum(T[i][j] for i in cev) / len(cev) for j in range(GOM)] o = [sum(U[i][j] * h[j] for j in range(GOM)) + c[i] for i in range(V)] dog += max(range(V), key=lambda i: o[i]) == hedef taban += EN_SIK_S == hedef t += 1 return dog / t, taban / t T0, U0, c0 = maskeli_egit(TOHUM) mk, mt = maskeli_olc(T0, U0, c0) print(f"maskeli kestirim: taban (en sik sozcuk) {mt:.4f}, vekil gorev {mk:.4f}, " f"fark {mk - mt:+.4f}") print(f"harcanan etiket 0; on egitim {4} tur, {len(DIZI)} not")
maskeli kestirim: taban (en sik sozcuk) 0.0419, vekil gorev 0.3450, fark +0.3032 harcanan etiket 0; on egitim 4 tur, 664 not
Vekil görev kendi ölçüsünde tabanını 0,3032 geçiyor ve harcanan etiket sıfır. M27/K01
ml-kavramlari/03 aynı yapıyı sayısal bir vekil görevle kurmuş, orada da vekil görev kendi
tabanını geçmişti — ama taşınan gösterimin katkısı ölçüldüğünde öğrenilmiş kısmın payı 0,0027
eksi çıkmıştı. O dersin sonucu şuydu: vekil görevde tabanı geçmek asıl görevde tabanı geçmeyi
getirmez. Aynı soru burada yeniden sorulur ve cevabı yeniden ölçülür.
Kattığı Fark ve Kaç Etiketle
Asıl görev önceki dersin görevidir: notun olay türü. Değişen tek şey elde kaç etiket olduğudur. Dördüncü satırdaki denetim kurulumu bu bölümün asıl aracıdır: rastgele ilklendirilmiş ve hiç eğitilmemiş bir tablo dondurulup aynı gövdeyle kullanılırsa, sayının ne kadarı ortalama almanın kendisinden gelir.
def kodla(x): return [S[w] for w in bol(x["metin"]) if w in S] or [EN_SIK_S] ETI = [(kodla(x), TUR_I[x["tur"]]) for x in ETIKETLI] SNV = [(kodla(x), TUR_I[x["tur"]]) for x in SINAMA] def egit(T, D, tohum, ogren, tur=150, adim=3.0): # MODELDIR T = [u[:] for u in T] r = uretec(tohum) W = [[(r() - 0.5) * 0.2 for _ in range(GOM)] for _ in range(4)] b, n = [0.0] * 4, len(D) for _ in range(tur): gW = [[0.0] * GOM for _ in range(4)] gb = [0.0] * 4 gT = {} if ogren else None for z, y in D: h = [sum(T[i][j] for i in z) / len(z) for j in range(GOM)] o = [sum(W[q][j] * h[j] for j in range(GOM)) + b[q] for q in range(4)] e = [math.exp(p - max(o)) for p in o] s = sum(e) dh = [0.0] * GOM for q in range(4): f = e[q] / s - (1.0 if q == y else 0.0) gb[q] += f for j in range(GOM): gW[q][j] += f * h[j] dh[j] += f * W[q][j] if ogren: for i in z: g = gT.setdefault(i, [0.0] * GOM) for j in range(GOM): g[j] += dh[j] / len(z) for q in range(4): b[q] -= adim * gb[q] / n for j in range(GOM): W[q][j] -= adim * gW[q][j] / n if ogren: for i, g in gT.items(): for j in range(GOM): T[i][j] -= adim * g[j] / n return T, W, b def dogruluk(P, D): T, W, b = P return sum(max(range(4), key=lambda q: sum( W[q][j] * sum(T[i][j] for i in z) / len(z) for j in range(GOM)) + b[q]) == y for z, y in D) / len(D) ORNEK = (10, 20, 40, 80, 160) KURULUM = (("sifirdan", False, True), ("rastgele tablo, donduruk", False, False), ("on egitim, donduruk", True, False), ("on egitim, ince ayar", True, True)) SONUC = {} print(f"{'kurulum':<25}{'ogrenen':>9}" + "".join(f"{'n=' + str(n):>9}" for n in ORNEK) + f"{'kosum':>8}") for ad, onceden, ogren in KURULUM: SONUC[ad] = {} for n in ORNEK: SONUC[ad][n] = [dogruluk(egit(T0 if onceden else tablo(TOHUM + 900 + k), ETI[:n], TOHUM + 30 + k, ogren), SNV) for k in (1, 2)] print(f"{ad:<25}{4 * GOM + 4 + (V * GOM if ogren else 0):>9}" + "".join(f"{sum(SONUC[ad][n]) / 2:>9.4f}" for n in ORNEK) + f"{max(abs(v[0] - v[1]) for v in SONUC[ad].values()):>8.4f}") print(f"alanin tabani {TABAN:.4f} (son sutun: iki kosumun en buyuk farki)") for ad, n in (("on egitim, donduruk", 10), ("on egitim, ince ayar", 20)): h = sum(SONUC[ad][n]) / 2 y = [m for m in ORNEK if sum(SONUC["sifirdan"][m]) / 2 >= h] print(f"{ad} n={n} -> {h:.4f}; sifirdan ayni sayiya " f"{y[0] if y else '>160'} ornekle ulasiyor")
kurulum ogrenen n=10 n=20 n=40 n=80 n=160 kosum sifirdan 682 0.5050 0.5850 0.7770 0.8740 0.9160 0.0460 rastgele tablo, donduruk 28 0.4510 0.4630 0.5000 0.5050 0.5000 0.1320 on egitim, donduruk 28 0.6050 0.6610 0.7470 0.7470 0.7550 0.0020 on egitim, ince ayar 682 0.5880 0.7480 0.8180 0.8780 0.9070 0.0080 alanin tabani 0.4420 (son sutun: iki kosumun en buyuk farki) on egitim, donduruk n=10 -> 0.6050; sifirdan ayni sayiya 40 ornekle ulasiyor on egitim, ince ayar n=20 -> 0.7480; sifirdan ayni sayiya 40 ornekle ulasiyor
İkinci satır bu tablonun en önemli satırıdır ve okumadan önce yazılması gerekir. Rastgele ilklendirilmiş, hiçbir şey öğrenmemiş bir tablo dondurulduğunda beş ölçümün beşinde de 0,51’in altında kalıyor — tabanın 0,06 kadar üstünde. Ortalama almanın kendisi, sözcüklerin hangi vektöre oturduğu öğrenilmeden, neredeyse hiçbir şey vermiyor. Üçüncü satırın 0,7550’si bu yüzden maskeli kestirimin öğrendiğinin karşılığıdır: aynı 28 parametre, aynı ortalama, tek fark tablonun etiketsiz metinden gelmiş olması, ve fark 0,2550.
Bu, M27/K01 ml-kavramlari/03‘ün sonucunun tersidir. Orada vekil görevin öğrenilmiş kısmı asıl
göreve 0,0027 eksi katmış, katkının tamamı taşınan ham gözlemden gelmişti. Burada taşınan ham
gözlem yoktur — taşınan yalnız öğrenilmiş tablodur ve katkı 0,2550’dir. İki dersin farkı vekil
görevin ne kadar ilişkili olduğundadır: bir dönemin okumasını kestirmek ile kaçak şüphesi
arasındaki bağ zayıftır, gizli sözcüğü kestirmek ile olay türü arasındaki bağ ise doğrudandır,
çünkü ikisi de aynı sözcük birlikteliklerinden çıkar.
Etiket sayısı sütunları ikinci cevabı verir. Yirmi etikette ince ayarlı kurulum 0,7480, sıfırdan eğitim 0,5850 veriyor: fark 0,1630 ve bu farkın koşum değişkenliği 0,0460’ın üç katından büyük olduğu için ölçülmüş sayılır. Sıfırdan eğitim aynı sayıya ancak kırk etiketle ulaşıyor. Yüz altmışta ise sıfırdan 0,9160, ince ayarlı 0,9070 veriyor — fark 0,0090 eksiye dönmüş, yani kapanmıştır. Önceden eğitimin kazandırdığı şey son sayı değil, o sayıya varmak için toplanmayan yirmi etikettir.
Son sütun tabloda ayrıca durur. Rastgele donduruk kurulumun iki koşumu 0,1320 ayrılıyor: o satırda basılan her sayı, hangi rastgele tablonun düştüğüne bağlı bir kazadır. Önceden eğitilmiş tabloyla aynı gövde 0,0020 ayrılıyor. Önceden eğitim yalnız ortalamayı yükseltmiyor, koşumlar arasındaki saçılmayı da düşürüyor; bu ikincisi tek bir sayı basan bir tabloda hiç görünmez.
Özet
- Vekil görev maskeli kestirimdir ve etiket harcamaz: kendi ölçüsünde taban 0,0419 iken 0,3450 veriyor, fark 0,3032.
- Alanın tabanı 0,4420; yirmi etikette sıfırdan eğitim 0,5850, önceden eğitim ve ince ayar 0,7480 veriyor ve sıfırdan eğitim bu sayıya ancak kırk etiketle ulaşıyor.
- Fark etiket sayısıyla kapanır: yüz altmış etikette ince ayarlı kurulum sıfırdan eğitimin 0,0090 altına iner.
- Denetim kurulumu farkın kaynağını ayırır: hiç eğitilmemiş rastgele bir tablo dondurulduğunda beş ölçümde de 0,51’in altında kalır; önceden eğitilmiş tablo aynı 28 parametreyle 0,7550 verir.
- Önceden eğitim koşum saçılmasını da düşürür: rastgele tablonun iki koşumu 0,1320, önceden eğitilmiş tablonun iki koşumu 0,0020 ayrılır.
Sonraki Adım
Altı derste modelin çıktısı hep bir etiket oldu: bir sınıf numarası ya da belirteç başına bir sınıf numarası. Doğru cevap elde vardı ve ölçü tek bir karşılaştırmaydı. Bir modelin çıktısı metnin kendisi olduğunda bu ölçü kurulamaz: bir notun özeti için tek bir doğru dizi yoktur, aynı içeriği taşıyan başka diziler de doğrudur. Bu durumda ölçüt aday metin ile kaynak metin arasındaki örtüşmeye çevrilir. Sonraki ders bu ölçütün ne ödüllendirdiğini sayar ve şunu gösterir: girdiyi olduğu gibi geri veren, hiçbir şey öğrenmemiş bir yordam örtüşme temelli ölçütte yüksek bir sayı alır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.