İçeriğe geç
academia.sh

Ders 05 / 21

Eğitim Verisi Zehirleme

Zehirlemenin bir yordam olarak değil, kaynak sınıfı başına zararlı payı olarak sayılması: süzgeçsiz derlemede 240 kaydın 93'ü zararlı, pay 0,3875. Kaynak başına pay kullanıcıda 0,2701, erişilen belgede 0,5417, araç çıktısında 0,5484; ama hacim oranı tersine çeviriyor — en düşük paylı kanal 37, en yüksek paylı kanal 17 zararlı katıyor. Kaynak kapısı derlemin payını 0,2701'e indirip 47 temiz kayıt kaybettiriyor, kural kapısı 0,1329'a indirip 23 temiz kayıt kaybettiriyor. İkisini birlikte koymak payı 0,1383 yapıyor ve bu fark 94 kayıtlık derlemin 0,0106'lık adımının altında kalıyor, yani ölçülemez; buna karşılık kaybedilen temiz kayıt 23'ten 66'ya çıkıyor. Kural süzgecinin duyarlılığı kullanıcı kanalında 0,6486, erişilen belgede 0,9487. İki koşumda paylar oynuyor, sıralama oynamıyor.

İçindekiler

Bir önceki derste sayılan şey isteğe aitti: kayıt geldi, yan etkili araç adı bayrağını taşıdı, onay kapısı onu insana yönlendirdi ya da yönlendirmedi. Karar tek bir kaydın üstündeydi ve kayıt işlendikten sonra sistemde bir iz bırakmıyordu. Kendi trafiğinden beslenen bir sistem böyle çalışmaz. Yanıtlanan destek talepleri, erişilen belgeler ve araç çıktıları bir derlemde toplanır, o derlem sonraki uyarlamanın girdisi olur, ve o noktadan sonra zararlı öznitelik profili bir olay olmaktan çıkıp bir özellik hâline gelir.

Eğitim verisi zehirleme tam olarak budur ve bu derste bir yordam olarak değil, bir sınıf ve bir sayım olarak ele alınır. Sorulan soru şudur: derleme giren kayıtların ne kadarı zararlı öznitelik profili taşıyor, bu pay kaynak sınıfına göre nasıl değişiyor, ve bir kaynağı derleme almamak neyi kazandırıp neyi kaybettiriyor. Hiçbir zehirleme yordamı, örnek üretimi ya da etiket bozma yöntemi yazılmaz.

Ayrım ölçü açısından belirleyicidir. Çalışma anındaki bir savunma yanlış karar verdiğinde tek bir kayıt etkilenir ve karar geri alınabilir; derleme yanlışlıkla giren bir kayıt ise o derlemden beslenen her yanıta yayılır ve tek bir kaydı geri almakla düzelmez. Bu yüzden derlem tarafında ölçülen birim kayıt değil paydır.

  • SY49. Kayıt kümesi, kaynak sınıfları ve kapılar kurgudur; gerçek bir derlem ya da eğitim koşumu yoktur. Tohum 20260218.
  • SY50. Saldırı bir metin değil bir öznitelik profilidir. Kayıtların metni tümüyle zararsız destek talepleridir ve sınıfla hiçbir ilişkisi yoktur; sınıf yalnız öznitelik profilinde durur.
  • SY51. Zehirleme burada derlemin zararlı payıdır. Bir kaydın derleme girdikten sonra modele ne yaptığı bu derste ölçülmez ve iddia edilmez; ölçülen tek şey derlemin bileşimidir.
  • SY52. Taban çizgisi süzgeçsiz derlemdir: hiçbir kapı yok, 240 kaydın hepsi alınır, durdurulan zararlı 0, kaybedilen temiz kayıt 0.
  • SY53. Kaynak damgası kaydın kendisinden okunur ve doğru varsayılır. Damganın taklit edilmesi ayrı bir sınıftır (kaynak_taklidi) ve bu ders o sınıfın damgasını da doğru sayar; dolayısıyla kaynağa göre süzmenin buradaki sayısı en iyimser sayısıdır.
  • SY54. Kaynak kapısı bir derleme kapısıdır, çalışma anındaki bir engelleme değildir. Bedeli engellenen trafik değil, derleme alınmayan kayıt sayısıdır.
  • SY55. Çözünürlük: payın adımı 240 kayıtta 0,0042, kalan derlem 143 kayıtsa 0,0070, 94 kayıtsa 0,0106. Kaynak başına adım kullanıcıda 0,0073, erişilen belgede 0,0139, araç çıktısında 0,0323.
  • SY56. Veri kalitesi, veri sızıntısı ve eğitim verisi hazırlama yordamı önceki müfredatlarda ölçüldü ve tekrarlanmaz; bu ders yalnız kaynak başına payı ekler.

Zehirleme Bir Yordam Değil Bir Paydır

Birinci blok kümeyi, sınıfları ve kural süzgecini kurar. Kaydın kaynağı kullanici, erisilen_belge ya da arac_ciktisi olabilir ve her sınıfın kaynak dağılımı farklıdır: dolaylı yönerge ağırlıkla erişilen belgeden, bozulmuş girdi ağırlıkla kullanıcıdan gelir. Bu dağılım kurgudur ve zehirlemenin sayısı da buradan çıkar.

# KURGUDUR. Kayitlar, kaynak siniflari ve kapilar ders icinde tanimlanir; gercek bir
# derlem ya da egitim kosumu yoktur. Saldiri METNI yazilmaz: bir OZELLIK PROFILIDIR.
TOHUM, M32 = 20260218, 0xFFFFFFFF


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


SINIF = ["temiz", "dolayli_yonerge", "gizli_alan_istegi", "yetki_asimi",
         "kaynak_taklidi", "bozulmus_girdi"]
KAYNAK = ["kullanici", "erisilen_belge", "arac_ciktisi"]
# Ozellikler yapisaldir; hicbiri calisan bir yuk degildir.
OZELLIK = ["yonerge_kipi", "rol_degistirme_istegi", "gizli_alan_adi", "yan_etkili_arac_adi",
           "kaynak_damgasi_uyusmuyor", "olagandisi_damga_dagilimi", "asiri_uzunluk"]
PROFIL = {
    "temiz":              [0.06, 0.02, 0.05, 0.03, 0.02, 0.04, 0.05],
    "dolayli_yonerge":    [0.88, 0.42, 0.10, 0.30, 0.35, 0.08, 0.12],
    "gizli_alan_istegi":  [0.35, 0.15, 0.86, 0.12, 0.10, 0.06, 0.08],
    "yetki_asimi":        [0.30, 0.25, 0.12, 0.84, 0.14, 0.05, 0.07],
    "kaynak_taklidi":     [0.22, 0.55, 0.08, 0.10, 0.82, 0.07, 0.06],
    "bozulmus_girdi":     [0.05, 0.03, 0.04, 0.03, 0.06, 0.80, 0.62],
}
KAYNAK_PAYI = {
    "temiz":             [0.72, 0.20, 0.08],
    "dolayli_yonerge":   [0.05, 0.70, 0.25],
    "gizli_alan_istegi": [0.55, 0.30, 0.15],
    "yetki_asimi":       [0.40, 0.35, 0.25],
    "kaynak_taklidi":    [0.10, 0.60, 0.30],
    "bozulmus_girdi":    [0.65, 0.20, 0.15],
}
# Tumuyle zararsiz destek metinleri; sinifla iliskisi YOKTUR.
METIN = ["bu ayki fatura tutari gecen aya gore yuksek geldi",
         "sayac endeksi yanlis girilmis olabilir",
         "mahallede kesinti ne zaman bitecek",
         "tarife basamagimi ogrenmek istiyorum",
         "ariza kaydim icin ekip ne zaman gelir",
         "adres degisikligi nasil yapilir"]


def kume(tohum=TOHUM):
    ks = []
    for i in range(240):
        r = uretec(tohum + 6151 * i)
        s = SINIF[ayrik(r(), [0.62, 0.10, 0.07, 0.07, 0.07, 0.07])]
        kaynak = KAYNAK[ayrik(r(), KAYNAK_PAYI[s])]
        oz = {o: (r() < p) for o, p in zip(OZELLIK, PROFIL[s])}
        ks.append({"no": i + 1, "sinif": s, "kaynak": kaynak, "ozellik": oz,
                   "metin": METIN[int(r() * len(METIN))],
                   "uzunluk": 40 + int(r() * 260)})
    return ks


KAYIT = kume()


def zararli(k):
    return k["sinif"] != "temiz"


def kural_suzgeci(k, kurallar=("yonerge_kipi", "gizli_alan_adi", "yan_etkili_arac_adi",
                               "kaynak_damgasi_uyusmuyor")):
    return any(k["ozellik"][o] for o in kurallar)


def olc(kayitlar, karar):
    """Durdurulan zararli ile yanlislikla durdurulan temiz BIRLIKTE yazilir."""
    dp = yp = dn = yn = 0
    for k in kayitlar:
        isaret, gercek = karar(k), zararli(k)
        if isaret and gercek:
            dp += 1
        elif isaret and not gercek:
            yp += 1
        elif not isaret and gercek:
            yn += 1
        else:
            dn += 1
    kesinlik = dp / (dp + yp) if dp + yp else 0.0
    duyarlilik = dp / (dp + yn) if dp + yn else 0.0
    return {"dp": dp, "yp": yp, "yn": yn, "dn": dn,
            "kesinlik": round(kesinlik, 4), "duyarlilik": round(duyarlilik, 4),
            "yanlis_engelleme_payi": round(yp / (yp + dn), 4) if yp + dn else 0.0}

Kaynak Başına Sayım

İkinci blok önce kaynak başına zararlı payını, sonra dört derleme kapısını yan yana koyar. Kapıya takılan kayıt engellenmez, yalnızca derleme alınmaz; bu yüzden bedel sütunu kaybedilen temiz kayıttır.

def derlem(kayitlar, kapi):
    """Derleme kapisi: kapiya takilan kayit derleme ALINMAZ."""
    kalan = [k for k in kayitlar if not kapi(k)]
    dusen = [k for k in kayitlar if kapi(k)]
    z = sum(1 for k in kalan if zararli(k))
    return (len(kalan), z, z / len(kalan) if kalan else 0.0,
            len(dusen), sum(1 for k in dusen if not zararli(k)))


def kaynak_disi(k):
    return k["kaynak"] != "kullanici"


print("kaynak           kayit  zararli  zararli payi")
for kay in KAYNAK:
    g = [k for k in KAYIT if k["kaynak"] == kay]
    z = sum(1 for k in g if zararli(k))
    print(f"{kay:<16} {len(g):>5} {z:>8}        {z / len(g):.4f}")
print(f"{'tum kume':<16} {len(KAYIT):>5} {sum(1 for k in KAYIT if zararli(k)):>8}"
      f"        {sum(1 for k in KAYIT if zararli(k)) / len(KAYIT):.4f}")

print("\nderlem kapisi    kalan  zararli  zararli payi  dusen  dusen temiz")
for ad, f in (("suzgecsiz", lambda k: False), ("kaynak kapisi", kaynak_disi),
              ("kural kapisi", kural_suzgeci),
              ("kaynak + kural", lambda k: kaynak_disi(k) or kural_suzgeci(k))):
    a, z, p, d, dt = derlem(KAYIT, f)
    print(f"{ad:<16} {a:>5} {z:>8}        {p:.4f} {d:>6} {dt:>12}")

print("\nkaynak basina kural suzgeci")
for kay in KAYNAK:
    s = olc([k for k in KAYIT if k["kaynak"] == kay], kural_suzgeci)
    print(f"  {kay:<15} dp {s['dp']:>3}  yp {s['yp']:>3}"
          f"  kesinlik {s['kesinlik']:.4f}  duyarlilik {s['duyarlilik']:.4f}")

print("\nkullanici kanalinin 37 zararlisi hangi sinifta")
kz = [k for k in KAYIT if k["kaynak"] == "kullanici" and zararli(k)]
print("  " + "  ".join(f"{s} {sum(1 for k in kz if k['sinif'] == s)}"
                       for s in SINIF[1:] if any(k["sinif"] == s for k in kz)))

print("\nkaynak basina zararli payi, iki kosum")
for t in (20260218, 20260219):
    ks = kume(t)
    satir = []
    for kay in KAYNAK:
        g = [k for k in ks if k["kaynak"] == kay]
        satir.append(f"{kay} {sum(1 for k in g if zararli(k)) / len(g):.4f}")
    print(f"  {t}: " + "  ".join(satir))
kaynak           kayit  zararli  zararli payi
kullanici          137       37        0.2701
erisilen_belge      72       39        0.5417
arac_ciktisi        31       17        0.5484
tum kume           240       93        0.3875

derlem kapisi    kalan  zararli  zararli payi  dusen  dusen temiz
suzgecsiz          240       93        0.3875      0            0
kaynak kapisi      137       37        0.2701    103           47
kural kapisi       143       19        0.1329     97           23
kaynak + kural      94       13        0.1383    146           66

kaynak basina kural suzgeci
  kullanici       dp  24  yp  19  kesinlik 0.5581  duyarlilik 0.6486
  erisilen_belge  dp  37  yp   4  kesinlik 0.9024  duyarlilik 0.9487
  arac_ciktisi    dp  13  yp   0  kesinlik 1.0000  duyarlilik 0.7647

kullanici kanalinin 37 zararlisi hangi sinifta
  dolayli_yonerge 2  gizli_alan_istegi 13  yetki_asimi 3  kaynak_taklidi 3  bozulmus_girdi 16

kaynak basina zararli payi, iki kosum
  20260218: kullanici 0.2701  erisilen_belge 0.5417  arac_ciktisi 0.5484
  20260219: kullanici 0.2323  erisilen_belge 0.5484  arac_ciktisi 0.5652

Kanalın Oranı ve Hacmi

İlk tablo kaynağa göre süzmenin gerekçesini kuruyor: erişilen belgenin zararlı payı 0,5417, araç çıktısınınki 0,5484, kullanıcınınki 0,2701. İki kullanıcı dışı kanal, kullanıcı kanalının iki katına yakın oran taşıyor. Kullanıcı ile erişilen belge arasındaki fark 0,2716, yani erişilen belge kanalının 0,0139’luk adımının yirmi katından fazla; bu bir dalgalanma değil bir ölçümdür. Buraya kadar okuyan biri açık bir sonuca varır: derleme yalnız kullanıcıdan gelen kaydı almak gerekir.

Aynı tablonun ikinci sütunu bu sonucu bozuyor. Kullanıcı kanalı 37, erişilen belge 39, araç çıktısı 17 zararlı katıyor. En düşük oranlı kanal, en yüksek oranlı kanaldan yalnız iki eksik zararlı getiriyor, çünkü kayıtların 137’si oradan geliyor. Oran bir kanalın niteliğidir, hacim onun ağırlığıdır; ikisi ayrı yazılmadığında “kullanıcıdan gelen daha temizdir” cümlesi aynı anda hem doğru hem yanıltıcı olur. Kullanıcı kanalını kapatmadan alınacak her karar, derlemin zararlısının yaklaşık beşte ikisini yerinde bırakır.

İkinci tablo iki kapıyı yan yana koyuyor. Kaynak kapısı derlemin payını 0,3875’ten 0,2701‘e indiriyor, 103 kayıt düşürüyor ve bunların **47’si temiz**. Kural kapısı aynı payı 0,1329‘a indiriyor, 97 kayıt düşürüyor ve bunların **23’ü temiz**. Kural kapısı iki eksende birden üstün: derlemde daha az zararlı bırakıyor ve daha az temiz kayıt kaybettiriyor. Nedeni yapısaldır. Kaynak, sınıfın bir vekilidir ve zayıf bir vekildir; öznitelik profili sınıfın kendisine çok daha yakın durur. Bir vekil ölçüt, ölçmek istediği şeye ne kadar uzaksa o kadar temiz kayıt yakar.

Üçüncü satırla dördüncü satır arasındaki fark bu dersin en dikkatli okunması gereken yeridir. Kaynak kapısını kural kapısının üstüne koymak payı 0,1329’dan 0,1383‘e taşıyor, yani iyileştirmiyor. Ama bu farkı bir bulgu diye yazmak yanlış olur: 94 kayıtlık bir derlemde payın adımı 0,0106‘dır ve aradaki fark 0,0054, adımın altında. İki pay ayırt edilemez; katmanın kazancı ölçülemez. Ölçülebilen ise bedeldir: kaybedilen temiz kayıt 23’ten 66‘ya çıkıyor, kırk üç kayıt fazladan, ve derlem 143’ten 94’e iniyor. Kursun ikinci iddiası burada en temiz hâliyle görünür — eklenen savunma, ölçülemeyen bir kazanç için ölçülebilir bir bedel ödetti. Bir kurulumda iki kapı bulunduğunu söyleyip iki katman saymak, bu tabloda bir katman ve kırk üç kayıp demektir.

Üçüncü tablo kural süzgecinin kanallara göre neden farklı davrandığını gösteriyor. Duyarlılık erişilen belgede 0,9487, araç çıktısında 0,7647, kullanıcıda ise yalnız 0,6486. Süzgeç en çok kaydın geldiği kanalda en zayıf. Sebebi dördüncü tabloda yazılı: kullanıcı kanalının 37 zararlısının 16’sı bozulmuş girdi sınıfında ve o sınıfın taşıdığı iki bayrak — olagandisi_damga_dagilimi ile asiri_uzunluk — kural listesinde yok. Zayıflık kanalın değil listenin özelliğidir, ve bir kanalı kapatarak kapatılamaz. Aynı tablodaki 1,0000’lık kesinlik de dikkatle okunmalı: araç çıktısı kanalında yalnız 14 temiz kayıt var, yanlış engellemenin adımı orada 0,0714, dolayısıyla o kusursuz sayı on dört kayıttan okunmuş bir sayıdır.

Aynı tablo kaynağa dayalı savunmanın en zayıf yerini de gösteriyor. Kaynak taklidi sınıfı, adı gereği, kaynak damgasının kaydın geri kalanıyla uyuşmadığı sınıftır; o sınıfın 23 kaydından 3’ü kullanıcı damgası taşıyor ve kaynak kapısından temiz geçiyor. Bu ders damgayı doğru saydığı için kaynak kapısının 0,2701’i onun en iyimser sayısıdır. Damganın kaydı gönderen tarafça belirlendiği bir kurulumda kapı, süzmek istediği tarafın yazdığı bir alandan karar okur. Kural süzgeci böyle bir bağımlılık taşımaz: baktığı bayraklar kaydın yapısından çıkar, damgasından değil. İki kapı arasındaki 0,2701 ile 0,1329 farkının bir kısmı bu bağımlılığın bedelidir ve damga güvenilir olmaktan çıktığında fark kapanmaz, açılır.

Son satırlar ölçünün hangi kısmının koşumdan bağımsız olduğunu söylüyor. İkinci çekimde paylar oynuyor: kullanıcı 0,2701’den 0,2323’e, erişilen belge 0,5417’den 0,5484’e, araç çıktısı 0,5484’ten 0,5652’ye. Değerlerin hiçbiri sabit değil. Sabit olan sıralamadır: kullanıcı her iki koşumda da en düşük, araç çıktısı en yüksek. Kaynağa dayalı bir öncelik sıralamaya güvenle kurulabilir; belli bir paya kurulmuş bir eşik ise ikinci koşumda yerinden oynar.

Özet

  • Süzgeçsiz derlemde 240 kaydın 93’ü zararlıdır ve pay 0,3875’tir; taban çizgisinde kaybedilen temiz kayıt 0’dır.
  • Kaynak başına zararlı payı kullanıcıda 0,2701, erişilen belgede 0,5417, araç çıktısında 0,5484’tür; ama hacim sıralamayı tersine çevirir, en düşük paylı kanal 37 zararlı katar.
  • Kaynak kapısı payı 0,2701’e indirip 47 temiz kayıt kaybettirir; kural kapısı 0,1329’a indirip 23 temiz kayıt kaybettirir, yani iki eksende de üstündür. Kaynak, sınıfın zayıf bir vekilidir.
  • Kaynak kapısını kural kapısının üstüne koymak payı 0,1383 yapar; fark 0,0054, 94 kayıtlık derlemin 0,0106’lık adımının altındadır ve ölçülemez. Kaybedilen temiz kayıt ise 23’ten 66’ya çıkar.
  • Kural süzgecinin duyarlılığı kullanıcı kanalında 0,6486, erişilen belgede 0,9487’dir; zayıflık kanalın değil kural listesinin özelliğidir.
  • İki koşumda paylar oynar, kanalların sıralaması oynamaz.

Sonraki Adım

Bu iki derste sayılan her şey girdi tarafındaydı: kaydın taşıdığı bayrak, geldiği kanal, kapının onu insana yönlendirmesi ya da derleme almaması. Kural süzgeci de, kaynak kapısı da modele ulaşmadan önce karar veriyordu. Ama bir sistemin sızdırdığı bilginin girdiden geçmesi gerekmez. Model bir alanı hiç sorulmadan yanıtına koyabilir, bir aboneyle ilgili doğrudan bir alan taşımayan bir ifadeyle o abonenin kümede bulunduğunu belli edebilir, ve bunların hiçbiri girdi tarafında bir bayrak üretmez. Sonraki ders ölçüyü çıktı tarafına taşır: kaç yanıt gizli alan sınıfına giren bir alan taşıyor, çıktı süzgeci kaçını çıkarıyor ve süzgeçten sonra geriye ne kalıyor.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat