İçeriğe geç
academia.sh

Ders 12 / 14

Kapalı ve Açık Ağırlıklı Modeller

İki erişim biçimi üç ölçütte sayıyla karşılaştırılıyor ve her ölçüt başka bir biçimi öne çıkarıyor. Elde tutulan ayar kapalı ağırlıklı biçimde 3/9, açık ağırlıklı biçimde 9/9. Birim bedelde kapalı biçim 0,7917 isabeti istek başına 38,3 belirteçle tutuyor, açık biçim aynı isabete altı örnek eklendikten sonra 176,3 belirteçle ulaşıyor ve oran 4,60 çıkıyor. Veri sınırında kapalı biçimde 24/24 istek, 919 belirteç ve 72 sayısal alan kurum sınırını aşıyor, açık biçimde hiçbiri aşmıyor. İki ölçüt açık, biri kapalı ağırlıklı biçimi seçiyor ve üç sayının ortak birimi yok.

İçindekiler

Önceki derste eklenen her düzenek modelin çevresine kuruldu ve modele erişimin verili olduğu varsayıldı. O erişimin kendisi bir karardır. Bir dil modeline yalnız uzaktaki bir model uç noktası üzerinden ulaşılabilir; ya da modelin ağırlıkları elde tutulur ve kendi donanımında çalıştırılır. İlkine kapalı ağırlıklı, ikincisine açık ağırlıklı erişim denir.

Bu ayrım genelde bir tercih tartışması gibi konuşulur ve tartışma çoğu zaman iki tarafın da doğru olduğu yerde biter, çünkü taraflar farklı ölçütlerden konuşur. Bu ders onu üç ölçütte sayıya çevirir: elde kalan ayar sayısı, aynı işi bitirmenin belirteç bedeli, ve kurum sınırını aşan veri. Üçü de bir mühendisin kendi tarafından, modelin içine hiç bakmadan sayabileceği büyüklüklerdir. Hiçbir model, sağlayıcı ya da lisans adı geçmez, çünkü ölçülen şey ürün değil erişim biçiminin yapısıdır; adlar beş yılda değişir, yapı değişmez.

  • DL58. Görev kümesi ve benzetici öncekiyle aynıdır: 24 kurgu destek talebi beş sınıfa ayrılır, ölçü isabettir. Talepler, sınıflar ve okumalar kurgudur.
  • DL59. İki erişim biçimi tek bir farkla modellenir: benzeticinin tanıdık öbek kümesinin genişliği. Kapalı biçimde geniş, açık biçimde dardır. Bu, kurgunun varsayımıdır ve gerçek modellerin yeteneği hakkında bir iddia değildir; ölçülen şey farkın bedele nasıl döndüğüdür.
  • DL60. Açık biçimin düzeneği örnek eklemektir. İsteme konan her kurgu örnek 23 belirteç tutar ve tanıdık öbek kümesini bir basamak genişletir.
  • DL61. Elde tutulan denetim, dokuz ayarlık kurgu listede her ayarın hangi biçimde kararlaştırılabildiği sayılarak ölçülür.
  • DL62. Veri sınırı üç sayıyla ölçülür: kurum sınırını aşan istek sayısı, belirteç sayısı ve sayısal alan sayısı. Sayısal alanlar kurgu abone numaraları ile sayaç okumalarıdır; bu ölçüt verinin niteliğini değil, sınırı aşan miktarını sayar.
  • DL63. Belirsizlik iki koşumla ölçülür; ikinci koşum tohum 20260219 ile alınır. İki biçim aynı benzeticiyi paylaştığı için, aynı genişlikte aynı sayıyı vermeleri beklenir ve bu tabloda bir denetim noktası olarak kullanılır.
  • DL64. Ölçütler ayrı ayrı okunur, toplanmaz. Ayar sayısı, belirteç sayısı ve sınırı aşan istek sayısı ortak bir birime çevrilmez; her ölçütün kazananı ayrı yazılır.

Birim Bedel: Aynı İsabet Kaça Mal Oluyor

# ORTAK -- KURGUDUR. Iki erisim bicimi ayni benzetici uzerinde kurulur; hicbir model,
# saglayici ya da lisans anilmaz. Kurgudaki tek fark tanidik obek kumesinin genisligidir.
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 belirtecle(metin):
    """Kurgu belirtecleyici: harf obekleri dorder, rakam obekleri ikiser bolunur."""
    cikti, tampon = [], ""
    for ch in metin + " ":
        if ch.isalnum():
            tampon += ch
            continue
        if tampon:
            n = 2 if tampon.isdigit() else 4
            cikti += [tampon[i:i + n] for i in range(0, len(tampon), n)]
            tampon = ""
        if ch.strip():
            cikti.append(ch)
    return cikti


BAS = [("sayac okunmadi tahmini fatura cikti", "olcum"),
       ("fatura tutari gecen aya gore iki kat cikti", "odeme"),
       ("gece boyunca su basinci dustu", "tesisat"),
       ("planli kesinti bildirimi ulasmadi", "kesinti"),
       ("abonelik devri sayaca islenmedi", "sozlesme")]
EK = ["sayacin numarasi degistirilmis olabilir", "adres bilgisi eski gorunuyor",
      "onceki ay ayni sorun yasanmadi", "sayaca ulasilamiyor kapi kapali",
      "kesinti suresi beklenenden uzun surdu", "otomatik talimat sayacta yok"]
SOZLUK = {"kesinti": ["kesi", "bild"], "olcum": ["okun", "olcu", "tahm"],
          "tesisat": ["basi", "dust", "tesi", "vana"],
          "odeme": ["fatu", "odem", "tali", "tuta"],
          "sozlesme": ["abon", "adre", "devr", "sozl"]}
SINIFLAR = list(SOZLUK)
ORNEK_BELIRTEC = 23                             # isteme eklenen her kurgu ornegin bedeli
TALEP = []
for i in range(24):
    r = uretec(TOHUM + 31 * i)
    a, b = 100000 + int(r() * 380000), 100000 + int(r() * 380000)
    TALEP.append({"no": 4100 + i, "sinif": BAS[i % 5][1],
                  "metin": f"abone {4100 + i}: {BAS[i % 5][0]}, {EK[(5 * i + 2) % 6]}."
                           f" ana sayac {a} ara sayac {b}."})


def cagir(t, genislik, tohum):
    """Benzetici: tanidigi obeklerle etiket secer; ilk iki aday esitse belirsiz doner."""
    bel, sz = belirtecle(t["metin"]), {s: set(o[:genislik]) for s, o in SOZLUK.items()}
    p = sorted(((sum(b in sz[s] for b in bel), s) for s in SINIFLAR), key=lambda x: (-x[0], x[1]))
    if p[0][0] == 0 or p[0][0] == p[1][0]:
        return "belirsiz"                       # iki etiket birden yazilir, bicim denetimi gecmez
    r = uretec(tohum + 1009 * genislik + 7 * t["no"])
    return p[1][1] if r() < 0.14 else p[0][1]


def olc(genislik, ornek, tohum=TOHUM):
    dogru = belirtec = 0
    for t in TALEP:
        dogru += cagir(t, genislik, tohum) == t["sinif"]
        belirtec += len(belirtecle(t["metin"])) + ornek * ORNEK_BELIRTEC
    return dogru / 24, belirtec / 24


print("erisim bicimi      ornek  isabet A  isabet B  cagri  belirtec/istek")
for ad, g, o in (("kapali agirlikli", 4, 0), ("acik agirlikli  ", 1, 0),
                 ("acik agirlikli  ", 2, 2), ("acik agirlikli  ", 3, 4),
                 ("acik agirlikli  ", 4, 6)):
    a, bel = olc(g, o)
    b = olc(g, o, TOHUM + 1)[0]
    print(f"{ad}     {o}    {a:.4f}    {b:.4f}   1.0000     {bel:>5.1f}")
erisim bicimi      ornek  isabet A  isabet B  cagri  belirtec/istek
kapali agirlikli     0    0.7917    0.7083   1.0000      38.3
acik agirlikli       0    0.1250    0.1667   1.0000      38.3
acik agirlikli       2    0.3750    0.3750   1.0000      84.3
acik agirlikli       4    0.5833    0.6667   1.0000     130.3
acik agirlikli       6    0.7917    0.7083   1.0000     176.3

Çıplak çağrıda iki biçim aynı belirteci harcıyor ve aynı sayıyı vermiyor: kapalı 0,7917, açık 0,1250. Fark modelin kendisinden değil, açık biçimde koşan benzeticinin dar öbek kümesinden geliyor — kurgunun varsayımı budur. Önemli olan bundan sonrası: fark kapatılabilir bir farktır ve kapatmanın fiyatı belirteçle yazılıdır.

İsteme iki örnek eklendikçe isabet 0,3750, 0,5833 ve 0,7917 basamaklarını çıkıyor. Altıncı örnekte açık biçim kapalı biçimin sayısına tam olarak yetişiyor: 0,7917 karşısında 0,7917, ve ikinci koşumda da 0,7083 karşısında 0,7083. İki biçim artık aynı işi yapıyor. Yapmadıkları tek şey aynı fiyata yapmak: istek başına 38,3 belirteç karşısında 176,3 belirteç. Çağrı sayısı ikisinde de bir, gecikme sınıfı ikisinde de tek çağrıdır; fark tamamen istemin uzunluğundadır.

Merdivenin okunması gereken yeri şurası: bedel modelden isteme taşındı. Açık ağırlıklı biçimde modelin bilmediği şey, her istekte yeniden anlatılıyor. Bu, düzeneğin genel yasasının bu dersteki görünümüdür — bir yerde eksik olan şey başka bir yerde belirteçle ödenir, ve o ödeme her istekte tekrarlanır. Yirmi dört isteklik bir kümede fark 3.312 belirteçtir; istek sayısı büyüdükçe fark doğru orantılı büyür, çünkü örnekler önbelleğe alınmadıkça her çağrıda yeniden gönderilir.

Bir de tabloda görünmeyen bir sayı var. Benzetici, ilk iki adayın puanı eşit olduğunda tek bir etiket yerine iki etiketi birden yazıyor ve biçim denetiminden geçemiyor; bu yanıtlar isabetsiz sayılıyor. Dar öbek kümesiyle bu durum sık, geniş kümeyle seyrektir. Yani açık biçimin düşük sayısının bir kısmı yanlış etiketten değil, kullanılamayan çıktıdan geliyor. Ölçü tek sayıya indirgendiğinde bu ayrım kayboluyor, oysa iki başarısızlık türünün ürün tarafındaki karşılığı farklıdır: yanlış etiket sessizce yanlış bir işi başlatır, biçim bozukluğu ise duran bir istektir.

Elde Tutulan Denetim ve Veri Sınırı

AYAR = [("agirliklarin kendisi", 0, 1), ("belirtecleyici", 0, 1), ("surum sabitleme", 0, 1),
        ("baglam penceresi siniri", 0, 1), ("hiz siniri", 0, 1), ("kesintide geri alma", 0, 1),
        ("dagilim sicakligi", 1, 1), ("durdurma kosulu", 1, 1), ("cikti uzunlugu siniri", 1, 1)]
KAPALI, ACIK = sum(k for _, k, _ in AYAR), sum(a for _, _, a in AYAR)
print("ayar                     kapali agirlikli  acik agirlikli")
for ad, k, a in AYAR:
    print(f"{ad:<25}      {'elde' if k else '  - ':^4}          {'elde' if a else '  - ':^4}")
print(f"olcut 1 -- elde tutulan ayar: kapali {KAPALI}/{len(AYAR)}, acik {ACIK}/{len(AYAR)}")
kimlik = sum(sum(w.isdigit() for w in t["metin"].replace(":", " ").replace(".", " ").split())
             for t in TALEP)
disari = sum(len(belirtecle(t["metin"])) for t in TALEP)
print(f"olcut 3 -- kurum sinirini asan: kapali {len(TALEP)}/{len(TALEP)} istek,"
      f" {disari} belirtec, {kimlik} sayisal alan")
print(f"                                acik   0/{len(TALEP)} istek, 0 belirtec, 0 sayisal alan")
ayar                     kapali agirlikli  acik agirlikli
agirliklarin kendisi             -           elde
belirtecleyici                   -           elde
surum sabitleme                  -           elde
baglam penceresi siniri          -           elde
hiz siniri                       -           elde
kesintide geri alma              -           elde
dagilim sicakligi              elde          elde
durdurma kosulu                elde          elde
cikti uzunlugu siniri          elde          elde
olcut 1 -- elde tutulan ayar: kapali 3/9, acik 9/9
olcut 3 -- kurum sinirini asan: kapali 24/24 istek, 919 belirtec, 72 sayisal alan
                                acik   0/24 istek, 0 belirtec, 0 sayisal alan

Dokuz ayarın üçü kapalı ağırlıklı erişimde elde kalıyor: dağılım sıcaklığı, durdurma koşulu ve çıktı uzunluğu sınırı. Bunlar istekle birlikte gönderilen ayarlardır. Kalan altısı elde değildir ve hepsinin ortak yanı vardır: ağırlıklar, belirteçleyici, sürüm, pencere sınırı, hız sınırı ve kesinti anında eski davranışa dönme, modelin çalıştığı yere ait kararlardır. Model başkasının makinesinde çalışıyorsa o kararlar da başkasındadır. Açık ağırlıklı erişimde dokuzu da elde kalır, çünkü çalıştıran taraf ile karar veren taraf aynıdır.

Bunun görünmeyen bir sonucu, sürümün sabitlenememesidir. Yedinci derste ölçülen uydurma oranı, altıncı derste ölçülen görev isabeti ve bu derste ölçülen 0,7917, hepsi belirli bir davranışa aittir. O davranış haber verilmeden değiştiğinde bütün ölçüler yeniden alınmalıdır ve eski sayıların hiçbiri geçerli değildir. Kapalı ağırlıklı erişimde ölçünün ömrü, elde olmayan bir kararın ömrüyle sınırlıdır.

Üçüncü ölçüt aynı tabloda okunuyor. Kapalı biçimde yirmi dört isteğin 24’ü, 919 belirteç ve 72 sayısal alan kurum sınırını aşıyor; bu sayısal alanlar kurgu abone numaraları ile sayaç okumalarıdır. Açık biçimde üç sayı da sıfırdır. Bu ölçüt ikisi arasında bir derece farkı değil, bir eşik farkıdır: sınırı aşan veri ya vardır ya yoktur.

Tabloyu tek yönlü okumamak gerekir. Kapalı ağırlıklı erişimde elde olmayan altı ayarın karşılığında kuruma geçmeyen bir yük vardır: modelin çalıştırılması, donanımın ayrılması, sürümün taşınması ve kesintinin karşılanması. Açık ağırlıklı erişimde bu dokuz ayar elde kalır çünkü dokuz sorumluluk da elde kalır. Ölçüt “elde tutulan denetim” diye adlandırıldığında bu simetri görünmez olur; sayının yanına ne kazandırdığı kadar ne yüklediği de yazılmalıdır. Bu dersin ölçtüğü şey hangi biçimin iyi olduğu değil, iki biçimin hangi ölçütte ayrıldığıdır.

Seçim Hangi Ölçütte Değişiyor

kb, ab = olc(4, 0), olc(4, 6)
print("olcut         kapali agirlikli    acik agirlikli     kazanan")
print(f"denetim         {KAPALI}/9 ayar           {ACIK}/9 ayar          acik")
print(f"birim bedel   {kb[1]:>6.1f} belirtec    {ab[1]:>6.1f} belirtec     kapali")
print(f"veri siniri    24/24 istek        0/24 istek        acik")
print(f"ayni isabet {kb[0]:.4f} icin bedel orani {ab[1] / kb[1]:.2f}")
print(f"iki olcut acik agirlikli bicimi, biri kapali agirlikli bicimi secer;"
      f" ortak birim yok")
olcut         kapali agirlikli    acik agirlikli     kazanan
denetim         3/9 ayar           9/9 ayar          acik
birim bedel     38.3 belirtec     176.3 belirtec     kapali
veri siniri    24/24 istek        0/24 istek        acik
ayni isabet 0.7917 icin bedel orani 4.60
iki olcut acik agirlikli bicimi, biri kapali agirlikli bicimi secer; ortak birim yok

Seçim birim bedel ölçütünde değişiyor. Denetim ve veri sınırı açık ağırlıklı biçimi seçerken, birim bedel kapalı biçimi seçiyor ve farkı küçük değil: aynı isabet için 4,60 kat belirteç. İki ölçüt bir tarafta, biri öbür tarafta olduğu için “çoğunluk açığı seçiyor” demek yanlış olur, çünkü üç sayının ortak birimi yoktur. Ayar sayısı ile belirteç sayısı toplanamaz; sınırı aşan istek sayısı ile ikisi de karşılaştırılamaz.

Bu, bir eksiklik değil ölçünün doğru okunmasıdır. Karar, ölçütlerin ağırlıklandırılmasıyla verilir ve ağırlığı veren şey sistemin bağlamıdır. Yanıtın gecikmesinden çok verinin nereye gittiğine bakan bir kurumda üçüncü ölçüt tek başına kararı verir ve 4,60 katlık bedel kabul edilir. Belirteç bütçesi dar olan bir kurumda ikinci ölçüt baskındır. Aynı üç sayı, ağırlık değiştikçe iki farklı kararı da destekler; değişen şey ölçüm değil ağırlıktır.

Kursun kuralı burada ikinci kez işliyor: verilmiş bir bileşen yüzeyinden ölçülür. Bu derste ölçülen hiçbir sayı modelin içinden gelmedi. Ayar sayısı arayüzün neye izin verdiğinden, belirteç sayısı isteme ne konulduğundan, sınırı aşan veri isteğin nereye gittiğinden okundu. Üçü de içine bakılamayan bir bileşenin dışarıya bıraktığı izlerdir ve üçü de bir mühendisin kendi kodundan sayabileceği şeylerdir. Bir erişim biçimini “daha güçlü” ya da “daha güvenli” diye nitelemek yerine bu üç sayıyı yazmanın kazancı budur: nitelemeler tartışılır, sayılar karşılaştırılır. Sayının yanında bedeli yazılmadığında ise karşılaştırma yine tartışmaya döner — 0,7917 iki satırda da aynı görünür, aralarındaki 4,60 kat yalnız bedel sütununda vardır.

Özet

  • Kapalı ağırlıklı erişim dokuz ayarın 3’ünü, açık ağırlıklı erişim 9’unu elde bırakıyor; elde olmayan altı ayarın hepsi modelin çalıştığı yere ait kararlardır.
  • Çıplak çağrıda isabet 0,7917 karşısında 0,1250; isteme altı örnek eklendiğinde açık biçim iki koşumda da kapalı biçimin sayısına yetişiyor (0,7917 ve 0,7083).
  • Aynı isabetin bedeli istek başına 38,3 belirtece karşı 176,3 belirteç, oran 4,60 kattır; çağrı sayısı ve gecikme sınıfı ikisinde de aynıdır.
  • Veri sınırında kapalı biçimde 24/24 istek, 919 belirteç ve 72 sayısal alan kurum sınırını aşıyor, açık biçimde hiçbiri aşmıyor; bu bir derece değil eşik farkıdır.
  • Seçim birim bedel ölçütünde değişiyor ve üç sayının ortak birimi olmadığı için karar ağırlıklandırmayla verilir.

Sonraki Adım

Bu ders iki biçimi karşılaştırdı ve kararın ağırlığa kaldığı yerde durdu. Gerçek bir seçimde seçenek iki tane değildir ve ölçüt üç tane değildir: aynı erişim biçiminin içinde yetenek, gecikme ve belirteç bedeli birbirinden ayrı adaylar vardır, ve mahremiyet bunların üstünde ayrı bir ölçüt olarak durur. Sonraki ders üç adayı benzetici düzeyinde kurar, dört ölçütte sayar ve tek bir soruyu yanıtlar: ağırlıklar değiştiğinde kazanan değişiyor mu, ve değişiyorsa hangi eşikte. Ağırlık taraması ve normalleştirme yordamı Python ile Veri Analizi kursundaki Ortam Seçimi dersinde ölçüldü; burada tekrarlanmayacak, yalnız sonucu kullanılacak.

İ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