İçeriğe geç
academia.sh

Ders 14 / 21

İnsan Onayı Gerektiren Eylemler

Geri döndürülemez eylemlerde insan onayı kapısının kesinliğinin ve bedelinin sayılması: savunmasız tabanda insana giden kayıt 0 ve yakalanan zararlı 0; dar kapı 27 kaydı insana gönderiyor, bunların 24'ü gerçekten zararlı, kesinlik 0,8889, duyarlılık 0,2581 ve gereksiz kesinti 3. Kapıyı genişletmek sınırsız dikkat varsayımıyla duyarlılığı 0,7957'ye çıkarıyor, ama istem sayısı 97'ye çıktığı için sabit 27 istemlik dikkat bütçesinde yakalanan zararlı iki koşumda 23 ve 17'ye düşüyor: genişletilen kapı dar kapının 24'ünü hiçbir koşumda geçemiyor. Kapının zamanla göz kapatılarak geçilmesi bir ayar olarak süpürülüyor; inceleme payı 1,00'dan 0,20'ye inerken yakalanan zararlı 24'ten 4'e, duyarlılık 0,2581'den 0,0430'a düşüyor ve geçen zararlı 69'dan 89'a çıkıyor. Kapının bedeli engellenen görev değil kesintidir: aynı 27 kayıt engellenseydi üç temiz görev düşerdi, sorulduğunda hiçbiri düşmüyor.

İçindekiler

Bir önceki ders engellemeyen bir savunmanın 93 zararlının 42’sini bedelsiz etkisizleştirdiğini saydı ve duvarını gösterdi: geriye kalan 51 kayda hiç dokunmuyor. O 51 kaydın içinde yetki aşımı ve gizli alan isteği taşıyanlar duruyor ve bu iki sınıfın hedefi çoğu zaman aynı yerdir — bir kez gerçekleşince geri alınamayan bir işlem.

Geri döndürülemez eylem, sonucu sonradan düzeltilemeyen eylemdir: yazılan bir kayıt, gönderilen bir bildirim, dışarı çıkan bir bilgi. Böyle bir eylem için 0,8889 kesinlik yeterli değildir, çünkü yanlış kararın bedeli asimetriktir. Bu ders kapıyı insana açar ve üç şeyi sayar: insana giden kaydın kaçı gerçekten zararlı, kapı genişledikçe ne oluyor ve insanın dikkati azaldıkça kapıdan geriye ne kalıyor.

  • SV58. Kod bir benzeticidir; gerçek bir araç ya da onay arayüzü çağrılmaz. Kayıt kümesi, sınıflar ve öznitelikler kurgudur, tohum 20260218, ikinci koşum 20260219.
  • SV59. Saldırı bir metin değil, bir öznitelik profilidir. Kayıtların taşıdığı altı cümle sıradan destek talepleridir ve sınıfla hiçbir ilişkisi yoktur. Kodda çalışan bir yük, şablon ya da yönerge dizisi yoktur.
  • SV60. Taban çizgisi savunmasız kurulumdur: insana giden kayıt 0, yakalanan zararlı 0, gereksiz kesinti 0.
  • SV61. Kursun kuralı: durdurduğu pay ile yanlışlıkla durdurduğu pay birlikte yazılmayan savunma ölçülmemiş sayılır.
  • SV62. Geri döndürülemez eylem isteği bu kümede yan_etkili_arac_adi bayrağıyla temsil edilir; ortak tanımın onay_kapisi işlevi tam olarak bu bayrağa bakar.
  • SV63. Kapı engellemez, sorar. Onay verilirse eylem yürür, verilmezse yürümez. Bu yüzden kapının bedeli engellenen görev değil, kesintidir: insana giden her kayıt bir bekleme yaratır ve bunların bir kısmı gereksizdir.
  • SV64. İnsanın inceleme sırası zararlılıkla ilintili değildir. Sıra kurgudur ve iki koşumda iki ayrı sıra verir; bu, kapının koşum bandını üreten tek kaynaktır.
  • SV65. Dikkat bir bütçedir. İnsan en çok 27 istemi gerçekten inceleyebilir; bütçenin dışında kalan istemler bakılmadan onaylanır. Bütçe kurgudur ve dar kapının istem sayısına eşitlenmiştir.
  • SV66. Çözünürlük: duyarlılığın adımı 1/93=0,01081/93 = 0{,}0108, yanlış engelleme payının adımı 1/147=0,00681/147 = 0{,}0068; bu adımlardan küçük hiçbir fark bulgu sayılmaz.

Ortak Tanım

Kayıt kümesi, sınıflar, savunma katmanları ve ölçü kurs boyunca aynıdır. Bu derste ortak tanımdan iki savunma kullanılır: kural süzgeci ve insan onayı kapısı.

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


def izno(m):
    h = 2166136261
    for c in str(m):
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


# ---- KURGU kayitlar: saldiri METNI yazilmaz, saldiri bir OZELLIK PROFILIDIR
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],
}
# Kurgu, tumuyle zararsiz destek metinleri. Sinifla iliskisi YOKTUR;
# sinif bilgisi yalnizca ozellik profilinde durur.
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"]

KAYIT = []
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])}
    KAYIT.append({"no": i + 1, "sinif": s, "kaynak": kaynak, "ozellik": oz,
                  "metin": METIN[int(r() * len(METIN))],
                  "uzunluk": 40 + int(r() * 260)})


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


# ---- SAVUNMA 1: kural suzgeci (yapisal, aciklanabilir)
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)


# ---- SAVUNMA 5: insan onayi kapisi (geri donulemez eylemler)
def onay_kapisi(k, gerekli=True):
    """Yan etkili arac istegi tasiyan kayit insana sorulur."""
    return gerekli and k["ozellik"]["yan_etkili_arac_adi"]


# ---- OLCU: durdurulan ve yanlislikla durdurulan birlikte yazilir
def olc(kayitlar, karar):
    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}


print("kayit:", len(KAYIT), "- zararli:", sum(zararli(k) for k in KAYIT))
print("onay kapisina giden:", sum(onay_kapisi(k) for k in KAYIT))
kayit: 240 - zararli: 93
onay kapisina giden: 27

Kapının Kesinliği ve Genişliği

Yapay Zekâ Ajanları kursu onay noktasını ajan döngüsünde ölçmüştü: onay kapalıyken 3 yanlış kayıt yazılıyor, açıkken 1; döngüde 7 onay noktası vardı. O yordam tekrarlanmaz, sayıları girdi olarak alınır. Buradaki soru başkadır — kapının kendisi bir sınıflandırıcı gibi ölçülürse ne veriyor.

Kapının genişliği bir tasarım kararıdır: hangi bayrakları taşıyan kayıt insana sorulacak. Dört genişlik denenir; en dar olan ortak tanımın onay_kapisi işlevidir, en geniş olan ise kural süzgecinin kural kümesinin ta kendisidir. Aradaki fark savunmanın türündedir: süzgeç engeller, kapı sorar.

KURAL_KUMESI = ("yonerge_kipi", "gizli_alan_adi", "yan_etkili_arac_adi",
                "kaynak_damgasi_uyusmuyor")
KAPI = {"dar":      ("yan_etkili_arac_adi",),
        "orta":     ("yan_etkili_arac_adi", "gizli_alan_adi"),
        "genis":    ("yan_etkili_arac_adi", "gizli_alan_adi", "kaynak_damgasi_uyusmuyor"),
        "en genis": KURAL_KUMESI}
BUTCE = 27


def soruyor(k, alanlar):
    """Kapi engellemez; kaydi insana gonderir ve yaniti bekler."""
    return any(k["ozellik"][o] for o in alanlar)


def inceleme_sirasi(kayitlar, tohum):
    """Insanin bakma sirasi zararlilikla ilintili degildir; kurgu bir siradir."""
    return sorted(kayitlar, key=lambda k: uretec(tohum ^ izno(k["no"]))())


print("dar kapi ortak tanimin onay kapisidir:",
      all(soruyor(k, KAPI["dar"]) == onay_kapisi(k) for k in KAYIT))
print("en genis kapi kural suzgecinin kural kumesidir:",
      all(soruyor(k, KAPI["en genis"]) == kural_suzgeci(k) for k in KAYIT))
print("taban: insana giden 0 , yakalanan zararli 0 , gereksiz kesinti 0\n")
print("kapi      istem  zararli  kesinlik  duyarlilik  gereksiz  bakilan"
      "   A   payA    B   payB")
for ad, al in KAPI.items():
    s = olc(KAYIT, lambda k, al=al: soruyor(k, al))
    q = [k for k in KAYIT if soruyor(k, al)]
    n = min(BUTCE, len(q))
    a = sum(zararli(k) for k in inceleme_sirasi(q, TOHUM)[:n])
    b = sum(zararli(k) for k in inceleme_sirasi(q, 20260219)[:n])
    print(f"{ad:<9} {s['dp'] + s['yp']:>5} {s['dp']:>8} {s['kesinlik']:>9.4f}"
          f" {s['duyarlilik']:>11.4f} {s['yp']:>9} {n:>8} {a:>3} {a / 93:.4f} {b:>3} {b / 93:.4f}")

q = [k for k in KAYIT if onay_kapisi(k)]
print("\ndar kapida inceleme payi dustukce (27 istem)")
print("inceleme payi  bakilan  yakalanan A   payA  yakalanan B   payB  gecen zararli")
for p in (1.00, 0.80, 0.60, 0.40, 0.20, 0.00):
    n = int(p * len(q))
    a = sum(zararli(k) for k in inceleme_sirasi(q, TOHUM)[:n])
    b = sum(zararli(k) for k in inceleme_sirasi(q, 20260219)[:n])
    print(f"{p:>13.2f} {n:>8} {a:>12} {a / 93:>6.4f} {b:>12} {b / 93:>6.4f} {93 - a:>14}")
dar kapi ortak tanimin onay kapisidir: True
en genis kapi kural suzgecinin kural kumesidir: True
taban: insana giden 0 , yakalanan zararli 0 , gereksiz kesinti 0

kapi      istem  zararli  kesinlik  duyarlilik  gereksiz  bakilan   A   payA    B   payB
dar          27       24    0.8889      0.2581         3       27  24 0.2581  24 0.2581
orta         56       44    0.7857      0.4731        12       27  22 0.2366  18 0.1935
genis        78       62    0.7949      0.6667        16       27  22 0.2366  19 0.2043
en genis     97       74    0.7629      0.7957        23       27  23 0.2473  17 0.1828

dar kapida inceleme payi dustukce (27 istem)
inceleme payi  bakilan  yakalanan A   payA  yakalanan B   payB  gecen zararli
         1.00       27           24 0.2581           24 0.2581             69
         0.80       21           18 0.1935           18 0.1935             75
         0.60       16           13 0.1398           13 0.1398             80
         0.40       10            8 0.0860            8 0.0860             85
         0.20        5            4 0.0430            4 0.0430             89
         0.00        0            0 0.0000            0 0.0000             93

Kapının Bedeli Kesintidir

İlk satır kapının kesinliğidir: insana giden 27 kaydın 24’ü gerçekten zararlıdır, kesinlik 0,8889. Bu, bu kursta ölçülen en yüksek kesinliklerden biridir ve nedeni dardır — kapı, temiz trafiğin neredeyse hiç uğramadığı tek bir bayrağa bakıyor. Duyarlılığı ise yalnız 0,2581; kapı bir süzgeç değildir ve öyle olmaya çalışmaz.

Bedel sütunu kapının süzgeçten ayrıldığı yerdir. Kapı hiçbir kaydı engellemez, sorar; onay verilirse eylem yürür. Bu yüzden bedel engellenen görev değil, 27 kesintidir ve bunların 3‘ü gereksizdir. Karşılaştırma bir önceki dersten okunabilir: aynı 27 kayıt yetki kapısıyla engellenseydi tamamlanan görev 1,0000’dan 0,9796’ya inecekti, yani üç temiz görev düşecekti. Sorulduğunda hiçbiri düşmüyor. Kapı, bir yanlış engellemeyi bir gereksiz kesintiye çevirir; bunun iyi bir takas olup olmadığı bekleme süresinin görev kaybından ucuz olmasına bağlıdır ve bu bir sayı değil bir karardır.

Bunun bir sonucu, kapının kapsam olarak hiçbir şey eklemediğidir. Kapının baktığı bayrak kural süzgecinin dört kuralından biridir, dolayısıyla insana giden 27 kayıt süzgecin işaretlediği 97 kaydın alt kümesidir. Süzgeç kuruluysa kapı bir zararlıyı ilk kez yakalamaz; yaptığı şey o 27 kayda başka bir işlem uygulamaktır. Sınıflandırıcının kesinliği 0,8889’da tıkandığı yerde kararı bir insana devretmek, geri döndürülemez eylemde tek çare olabilir — ama bu bir duyarlılık kazancı değildir ve öyle bildirilmesi yanlış olur.

Genişletmenin Ters Tepmesi

İkinci, üçüncü ve dördüncü satırlar kapıyı genişletiyor. Duyarlılık sütunu iyi haber veriyor: 0,2581’den 0,4731’e, 0,6667’ye ve 0,7957’ye çıkıyor. Ama bu sütun sınırsız dikkat varsayar — insanın kendisine gelen 97 istemin hepsine gerçekten baktığını. Bakılan sütunu o varsayımı kaldırıyor: bütçe 27 istemdir ve genişleyen kapıda istemlerin yarısından çoğu hiç incelenmeden onaylanır.

Gerçekten yakalanan zararlı sütunları sonucu tersine çeviriyor. Dar kapı iki koşumda da 24 yakalıyor. Orta kapı 22 ve 18, geniş kapı 22 ve 19, en geniş kapı 23 ve 17. Sabit dikkat bütçesi altında hiçbir genişletme dar kapının 24’ünü geçemiyor ve bu, iki koşumda da böyle. Aynı adımda gereksiz kesinti 3’ten 23’e çıkıyor. Kursun ikinci iddiasının bu derse düşen kanıtı budur: kapıyı genişletmek, dikkat sabitken yakalananı azaltır ve kesintiyi çoğaltır.

Koşum bandı burada ölçüyü sınırlar. Dar kapının iki koşumu aynı sayıyı veriyor, bandı sıfırdır. Genişletilen kapılarda iki koşum arasındaki fark 4, 3 ve 6 kayıttır, yani 0,0431, 0,0323 ve 0,0645. Orta, geniş ve en geniş kapıların birinci koşumdaki 22, 22, 23 sayıları arasındaki farklar bu bandın altındadır ve bulgu sayılmaz: hangi genişletmenin öbüründen iyi olduğu ölçülememiştir. Ölçülen tek şey, hepsinin dar kapının altında kalmasıdır.

Onay Oranı Düştükçe

Son tablo kapının en sessiz başarısızlığını süpürüyor. Bir onay kapısı kurulduğu gün çalışır; sonra istemler birikir, çoğu zararsız çıkar ve zamanla göz kapatılarak geçilmeye başlanır. Bu bir kusur değil, bir ayardır ve süpürülebilir: inceleme payı, gelen istemlerin ne kadarının gerçekten okunduğudur.

Pay 1,00’dan 0,20’ye inerken yakalanan zararlı 24’ten 4’e, duyarlılık 0,2581’den 0,0430‘a düşüyor; geçen zararlı 69’dan 89’a çıkıyor. Payın sıfır olduğu satırda kapı hâlâ kuruludur, hâlâ 27 istem üretmektedir ve yakaladığı zararlı 0‘dır — savunmasız tabanla aynı sayı, üstüne 27 kesinti eklenmiş hâli. Düşüş neredeyse doğrusaldır, çünkü inceleme sırası zararlılıkla ilintili değildir: göz kapatan bir kapı zararlıyı seçerek kaçırmaz, rastgele kaçırır. İki koşum her satırda aynı sayıyı veriyor, çünkü dar kapıdaki 27 istemin yalnız 3’ü gereksizdir ve sıra değişse de incelenen dilimin zararlı payı aynı kalıyor.

Buradan tek bir kural çıkar: bir onay kapısının duyarlılığı kapının değil, kapı ile ona ayrılan dikkatin ortak sayısıdır. 0,2581 sayısı yalnız inceleme payı 1,00 iken doğrudur. Kapıyı bildirirken istem sayısı ve gözlenen inceleme payı birlikte yazılmazsa, bildirilen duyarlılık ölçülmüş değil varsayılmış olur.

Özet

  • Geri döndürülemez eylem kapısı engellemez, sorar; bedeli engellenen görev değil kesintidir.
  • Dar kapı 27 kaydı insana gönderiyor, 24’ü gerçekten zararlı: kesinlik 0,8889, duyarlılık 0,2581, gereksiz kesinti 3; savunmasız tabanda ikisi de 0. Bu 27 kayıt kural süzgecinin 97 kaydının alt kümesidir, yani kapı kapsam olarak hiçbir şey eklemez; değiştirdiği şey işlemdir.
  • Aynı 27 kayıt engellenseydi tamamlanan görev 0,9796’ya inerdi; sorulduğunda hiçbir görev düşmez. Kapı bir yanlış engellemeyi bir gereksiz kesintiye çevirir.
  • Sabit 27 istemlik dikkat bütçesinde kapıyı genişletmek yakalananı düşürüyor: dar kapı iki koşumda da 24, en geniş kapı 23 ve 17; gereksiz kesinti 3’ten 23’e çıkıyor.
  • Genişletilmiş kapılar arasındaki 22, 22, 23 farkları 4–6 kayıtlık koşum bandının altındadır ve bulgu sayılmaz.
  • İnceleme payı 1,00’dan 0,20’ye inerken yakalanan zararlı 24’ten 4’e, duyarlılık 0,2581’den 0,0430’a düşüyor; bir kapının duyarlılığı kapı ile dikkatin ortak sayısıdır.

Sonraki Adım

Bu ders savunma katmanlarını kapatıyor. On dört derste önce saldırı yüzeyi sınıflarıyla sayıldı, sonra altı savunma katmanı kuruldu ve her birinin durdurduğu payla birlikte bedeli yazıldı: süzgeç yanlış alarm, içerik denetimi gizlenen sınıf, maskeleme kaybolan alan, yetki kapısı düşen görev, işaretleme yitirilen tek yol, onay kapısı kesinti. Her satırda iki sayı yan yana durdu.

Ama on dört dersin hiçbirinde şu sorulmadı: bu sayıların doğru olduğunu nereden biliyoruz. Hepsi tek bir kurgu kümede, tek bir sınıf dağılımıyla, tek bir etiket kaynağıyla ölçüldü. Kümenin bileşimi değişse sayı ne kadar oynar, bir çıktının iyi olup olmadığına kim karar verir, iki değerlendirici aynı kayda aynı notu verir mi, ve bir istem ya da model değişikliğinden sonra dünkü sayı bugün hâlâ geçerli midir. Sonraki konu savunmayı bırakıp ölçmenin kendisini ele alır ve ilk dersi en baştan başlar: bir değerlendirme kümesi neye göre kurulur ve kurulduğu biçim ölçüyü ne kadar oynatır.

İ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