---
title: 'İnce Ayar'
source: 'https://academia.sh/tr/kurslar/model-apileri/ince-ayar'
course: "Model API'leri ile Uygulama Geliştirme"
language: tr
updated: '2026-08-17T18:06:38+00:00'
license: 'CC BY-SA 4.0'
---

# İnce Ayar

Aynı etiketli örneklerin isteme konmasıyla ağırlıklara işlenmesinin aynı 60 kurgu sınama kaydında yan yana ölçülmesi: düzeneksiz taban 0,6000, dört örnekle ince ayar hiçbir ağırlığı oynatmıyor ve 0,6000'de kalıyor, sekiz örnekte 0,7333 ile istem düzeneğinin 0,6500'ünü geçiyor, on altı örnekte 0,8833. Otuz iki örnekte iki yol 0,9000 ile 0,9500 bandında örtüşüyor, altmış örnekte istem düzeneği 0,9667 veriyor ve ince ayar 0,9500'de kalıyor: ince ayar kazanmıyor. Bedel iki ayrı birimdedir; istem düzeneği istek başına bağlamı 28,48'den 623,48 belirtece, yani 21,9 katına çıkarıyor, ince ayar bir kerelik 180 güncelleme adımı ve 605 ağırlığın 0,2992 payını oynatıyor.

Önceki iki derste ağırlıklar hep verilmiş kabul edildi: ölçek seçildi, basamak sayısı düşürüldü,
bellek ve isabet yan yana yazıldı. Ağırlıkların kendisine dokunulmadı. Oysa yerel bir kurulumun
uzak bir uç noktada bulunmayan asıl imkânı budur; ağırlıklar elinde olduğu için değiştirilebilirler.

İkinci dersin sonundaki tablo bir seçim dayatmıştı: bütçe küçük ölçeği seçtirdiğinde bu görevdeki
isabet düşük kalıyor. Bunu yükseltmenin iki yolu var ve ikisi de **aynı şeye** ihtiyaç duyuyor,
etiketli örneğe. Birinci yol örnekleri **isteme koymaktır**; her istekle birlikte modele birkaç
çözülmüş talep gösterilir. İkinci yol örnekleri **ağırlığa işlemektir**; model bir kez eğitilir ve
istem kısa kalır. Bu ders ikisini aynı örnek sayısında yan yana ölçer ve ince ayarın **kazanmadığı**
noktayı gösterir. Önceden eğitim ile ince ayarın iki aşamalı yapısı Makine Öğrenmesi kursunun
mimariler konusunda ve Yapay Zekâ Mühendisliğine Giriş kursunun dil modelleri konusunda ele
alındı; o ayrım burada tekrarlanmaz, yalnız iki yolun sayısı karşılaştırılır.

- **YM21.** Kod bir **benzeticidir**; talepler **kurgudur**, tohum **20260218**. Ölçek önceki
  derslerin **küçük** ölçeğidir, çünkü bütçe onu seçtirdi.
- **YM22.** 120 kurgu talebin ilk 60'ı **eğitim havuzu**, son 60'ı **sınama kümesidir**. Sınama
  kümesine hiçbir düzenek dokunmaz.
- **YM23. İstem düzeneği:** seçilen örnekler isteme konur. Bağlamdaki bir örnek, kendi parçalarına
  kendi konusu için **geçici** bir destek verir; destek istekten isteğe taşınmaz.
- **YM24. İnce ayar:** aynı örnekler üzerinde **hata güdümlü** güncelleme. Yalnız yanlış bilinen
  örneklerde ağırlık oynar, ve oynayan ağırlık **kalıcıdır**.
- **YM25.** Koşum sayısı, eğitim kümesinin baştan sona kaç kez geçildiğidir; güncelleme adımı
  sayısı örnek sayısı çarpı koşum sayısıdır.
- **YM26.** İki yol **aynı örnekleri** kullanır. Karşılaştırma eşit etiketli örnek sayısındadır;
  değişen tek şey örneğin nereye konduğudur.
- **YM27.** İki koşum, örneklerin **iki ayrı çekilişidir** (tohum 20260218 ve 20260219). Altmış
  örnekte iki çekiliş aynı kümeyi verir, bu yüzden orada fark sıfırdır.
- **YM28. Kazanç kuralı:** bir yolun üstünlüğü iki çekilişin **ikisinde de** aynı yönde değilse
  ölçülmemiş sayılır.
- **YM29.** Bedel iki ayrı birimdedir: istem düzeneği **istek başına belirteç**, ince ayar **bir
  kerelik örnek ve koşum sayısı**.
- **YM30.** Ağırlık tablosu 121 satır çarpı beş konu, yani **605 ağırlıktır**; ince ayarın
  oynattığı kayıt sayısı bunun içinden sayılır.

## Aynı Örnekler, İki Ayrı Yer

Benzetici önceki derslerinkiyle aynı; değişen tek şey, puanın üstüne bir **düzeltme tablosu**
eklenebilmesi. Düzeltme istemden geliyorsa geçicidir ve o isteğin bağlamıyla birlikte gider;
eğitimden geliyorsa kalıcıdır ve istem kısa kalır. İkisinin de girdisi aynı etiketli örneklerdir.

```python
# YEREL BENZETICI -- KURGUDUR. Onceki derslerin benzeticisi kisaltilarak kurulur.
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 belirtecle(m):                      # KURGU belirtecleyici, parca en cok bes damga
    b = []
    for s in m.lower().split():
        while len(s) > 5:
            b.append(s[:5])
            s = s[5:]
        b.append(s)
    return b


KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"]
KALIP = {"fatura": ["bu ayki tutar gecen aya gore cok yuksek",
                    "odedim ama sistemde borc gorunuyor",
                    "ayrintili dokumu nereden gorebilirim"],
         "ariza": ["evde su akmiyor bir sorun var",
                   "baglanti bozuk oldu ve hic calismiyor",
                   "ariza kaydi actim ama ekip gelmedi"],
         "sayac": ["okuma yanlis girilmis endeks tutmuyor",
                   "cihaz degisimi icin randevu istiyorum",
                   "endeksi ile fatura ayni degil"],
         "tarife": ["hangi basamaktayim ogrenmek istiyorum",
                    "tarife degisikligi icin ne yapmaliyim",
                    "birim ucret abone tipine gore degisir mi"],
         "kesinti": ["mahallede elektrik yok ne zaman gelecek",
                     "planli duyuru nereden takip edilir",
                     "aksamdan beri kesinti yasiyoruz"]}
EK = ["ayrica gecen hafta da aradim", "kayit numarasi verildi",
      "ekip bilgi verecekti", "degisiklik talebim de var"]
TALEP = []                              # 120 KURGU destek talebi
for i in range(120):
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    m = KALIP[k][int(r() * 3)]
    if r() < 0.34:
        m += " " + EK[int(r() * 4)]
    TALEP.append({"no": 4001 + i, "konu": k, "metin": m})

GECIS = {}
for k, liste in KALIP.items():
    for m in liste:
        for t in set(belirtecle(m)):
            GECIS.setdefault(t, {})[k] = 1
for e in EK:
    for t in set(belirtecle(e)):
        GECIS.setdefault(t, {})

TABAN, AGIRLIK = 0.50, {}
for i, t in enumerate(sorted(GECIS)):
    r = uretec(TOHUM + 7919 * (i + 1))
    satir = {k: TABAN for k in KONU}
    if GECIS[t]:
        for k in GECIS[t]:
            satir[k] = TABAN + 0.05 + 0.40 * r()
    else:
        satir[KONU[int(r() * 5)]] = TABAN + 0.02 + 0.10 * r()
    AGIRLIK[t] = satir

SATIR = 12                              # kucuk olcek: butcenin sectigi olcek
OGRENILMIS = set(sorted(AGIRLIK,
                        key=lambda t: (TABAN - max(AGIRLIK[t].values()), t))[:SATIR])
EGITIM, SINAMA = TALEP[:60], TALEP[60:]
YONERGE = "Talebi su etiketlerden birine ata: fatura ariza sayac tarife kesinti . "


def puan(metin, duzeltme=None):
    """Taban puan ogrenilmis satirlarin en yuksek degeri; duzeltme ustune eklenir."""
    parca = belirtecle(metin)
    p = {k: TABAN for k in KONU}
    for t in parca:
        if t in OGRENILMIS:
            for k in KONU:
                p[k] = max(p[k], AGIRLIK[t][k])
    for t in parca:
        for k in KONU:
            p[k] += (duzeltme or {}).get((t, k), 0.0)
    return max(sorted(p), key=lambda a: p[a])


def olc(duzeltme=None):
    return sum(puan(x["metin"], duzeltme) == x["konu"] for x in SINAMA) / 60


print("egitim havuzu", len(EGITIM), "kayit ; sinama", len(SINAMA), "kayit")
print("taban isabet (duzeneksiz kucuk olcek):", f"{olc():.4f}")
print("yonerge belirteci:", len(belirtecle(YONERGE)),
      "; ortalama talep belirteci:",
      round(sum(len(belirtecle(x["metin"])) for x in SINAMA) / 60, 2))
```

```
egitim havuzu 60 kayit ; sinama 60 kayit
taban isabet (duzeneksiz kucuk olcek): 0.6000
yonerge belirteci: 18 ; ortalama talep belirteci: 10.48
```

Taban **0,6000**. Bu, ikinci dersin sonunda bütçenin dayattığı ölçeğin bu görevdeki hâlidir ve iki
yolun da aşması gereken sayıdır. Ortalama bir talep 10,48 belirteç, yönerge 18 belirteç; yani
düzeneksiz bir istek yaklaşık 28 belirteçtir. Bu sayı istem düzeneğinin bedelini okurken ölçü
olacak.

## Örnek Sayısı Arttıkça

Aşağıdaki kod aynı örnek kümesini iki yere de koyar ve yalnız sınama kümesinde ölçer. Örnekler
eğitim havuzundan iki ayrı çekilişle seçilir; ikinci çekiliş kazancın ölçülmüş sayılıp
sayılmayacağına karar vermek içindir.

```python
ORNEK, ADIM = 0.30, 0.05                # baglamdan gelen destek ve ince ayar adimi


def sec_ornek(n, tohum):
    r, h = uretec(tohum), list(range(60))
    for i in range(59, 0, -1):
        j = int(r() * (i + 1))
        h[i], h[j] = h[j], h[i]
    return [EGITIM[i] for i in sorted(h[:n])]


def baglamdan(ornekler):                # isteme konan ornekler: gecici destek
    return {(t, o["konu"]): ORNEK for o in ornekler for t in belirtecle(o["metin"])}


def egit(ornekler, gecis):              # hata gudumlu guncelleme; agirliklar kalici
    D = {}
    for _ in range(gecis):
        for o in ornekler:
            s = puan(o["metin"], D)
            if s != o["konu"]:
                for t in belirtecle(o["metin"]):
                    D[(t, o["konu"])] = D.get((t, o["konu"]), 0.0) + ADIM
                    D[(t, s)] = D.get((t, s), 0.0) - ADIM
    return D


print(" n  istem A  istem B  ayar k=1  ayar k=3  ayarB k=3  istem bel  oynayan")
for n in (4, 8, 16, 32, 60):
    a, b = sec_ornek(n, TOHUM), sec_ornek(n, TOHUM + 1)
    ia, ib = olc(baglamdan(a)), olc(baglamdan(b))
    y1, y3, yb = olc(egit(a, 1)), olc(egit(a, 3)), olc(egit(b, 3))
    bel = sum(len(belirtecle(o["metin"])) for o in a)
    print(f"{n:>2}  {ia:.4f}   {ib:.4f}   {y1:.4f}    {y3:.4f}     {yb:.4f}"
          f"     {bel:>6}  {len(egit(a, 3)):>7}")

print("\nn=60 sabit , kosum sayisi degisiyor:")
print("  k   isabet  guncelleme adimi  oynayan kayit")
for k in (1, 2, 3, 6, 10):
    D = egit(sec_ornek(60, TOHUM), k)
    print(f" {k:>2}   {olc(D):.4f}  {60 * k:>16}  {len(D):>13}")

ort = sum(len(belirtecle(x["metin"])) for x in SINAMA) / 60
bel60 = sum(len(belirtecle(o["metin"])) for o in sec_ornek(60, TOHUM))
gi = len(belirtecle(YONERGE)) + bel60 + ort
ga = len(belirtecle(YONERGE)) + ort
D60 = egit(sec_ornek(60, TOHUM), 3)
print(f"\nistek basina baglam: istem duzenegi {gi:.2f} , ince ayar {ga:.2f} belirtec"
      f" ({gi / ga:.1f} kat)")
print(f"ince ayarin bedeli n=60 , k=3: {60 * 3} guncelleme adimi , {len(D60)} kayit ,"
      f" 605 agirligin {len(D60) / 605:.4f} payi")
```

```
 n  istem A  istem B  ayar k=1  ayar k=3  ayarB k=3  istem bel  oynayan
 4  0.5667   0.6500   0.6000    0.6000     0.7333         38        0
 8  0.6500   0.6667   0.7333    0.7333     0.8000         73       35
16  0.8333   0.7500   0.8833    0.8833     0.8667        138       49
32  0.9000   0.9500   0.8500    0.9167     0.9000        292      101
60  0.9667   0.9667   0.9333    0.9500     0.9500        595      181

n=60 sabit , kosum sayisi degisiyor:
  k   isabet  guncelleme adimi  oynayan kayit
  1   0.9333                60            121
  2   0.9333               120            162
  3   0.9500               180            181
  6   0.9500               360            181
 10   0.9500               600            181

istek basina baglam: istem duzenegi 623.48 , ince ayar 28.48 belirtec (21.9 kat)
ince ayarin bedeli n=60 , k=3: 180 guncelleme adimi , 181 kayit , 605 agirligin 0.2992 payi
```

En üstteki satır iki yolun da işe yaramadığı yerdir. Dört örnekle ince ayar **hiçbir ağırlığı
oynatmıyor**: oynayan kayıt sayısı **0**, çünkü model o dört örneği zaten doğru biliyordu ve hata
güdümlü güncellemenin tetiklenmesi için bir hata gerekiyor. İsabet tabanda, 0,6000'de kalıyor. Aynı
dört örnek isteme konduğunda ise isabet **0,5667**'ye **düşüyor**; bağlamdaki dört örnek, sınama
kayıtlarının bir bölümünü kendi konularına doğru çekiyor. İkinci çekilişte aynı iki sayı 0,6500 ve
0,7333, yani yön bile aynı değil. Dört örnekle ölçülmüş hiçbir şey yoktur.

Sekiz ve on altı örnekte ince ayar açık ara önde. Sekizde **0,7333** ve **0,8000**, istem
düzeneğinin iki çekilişteki en iyisi olan 0,6667'nin üstünde; on altıda **0,8833** ve 0,8667,
istem düzeneğinin 0,8333 ve 0,7500'ünün üstünde. Her iki çekilişte de aynı yönde olduğu için bu
üstünlük ölçülmüş sayılır. Nedeni yapısaldır: hata güdümlü güncelleme örneği **birden çok kez**
kullanır ve yalnız yanlış bilinen yerleri düzeltir, bağlama konan örnek ise bir kez okunur ve
doğru bildiği yerleri de oynatır.

## İnce Ayarın Kazanmadığı Nokta

Otuz iki örnekte tablo dönüyor. İnce ayar üç koşumla **0,9167** ve **0,9000** veriyor, istem
düzeneği **0,9000** ve **0,9500**. Bantlar örtüşüyor ve iki çekilişte üstünlük aynı yöne bakmıyor;
YM28'e göre burada ölçülmüş bir kazanç yoktur. Aynı satırda tek koşumluk ince ayar **0,8500**, yani
istem düzeneğinin iki değerinin de altında. İkinci koşumu eklemek 0,0667 kazandırıyor ve bu, örnek
eklemekten değil **aynı örneği yeniden geçmekten** gelen bir kazançtır.

Altmış örnekte belirsizlik kalmıyor. İki çekiliş de bütün havuzu seçtiği için sayılar birbirinin
aynı: istem düzeneği **0,9667**, ince ayar **0,9500**. Fark **0,0167** ve koşum değişkenliği
**sıfır**. Bu, ince ayarın **kazanmadığı** noktadır ve tesadüf değildir. Altmış örneğin tamamı
bağlamda duruyorsa model her isteği çözülmüş bir kümeyle birlikte okuyor; ince ayar ise aynı
örneklerden yalnız **hata verdiklerini** kullanmış, 605 ağırlığın 181'ini oynatmış ve geri kalanına
dokunmamış. Elinde bütün etiketli veri varken onu bir eğitim koşumuna sıkıştırmak, bu görevde
kayıptır.

Koşum sayısı bu farkı kapatamıyor. Altmış örnek sabit tutulup koşum sayısı artırıldığında isabet
tek koşumda **0,9333**, üç koşumda **0,9500** ve orada duruyor; altı ve on koşum aynı 0,9500'ü
veriyor. Üçüncü koşumdan sonra eğitim kümesinde düzeltilecek hata kalmadığı için oynayan kayıt
sayısı da **181**'de sabitleniyor. Güncelleme adımı 180'den 600'e çıkıyor ve karşılığında hiçbir
şey alınmıyor. İnce ayarın bu görevdeki tavanı 0,9500'dür ve o tavan koşum ekleyerek değil ancak
başka bir yolla yükselir.

Kararı veren şey isabet sütunu değil, son iki satırdır. İstem düzeneği altmış örnekle isteğin
bağlamını 28,48 belirteçten **623,48** belirtece, yani **21,9 katına** çıkarıyor ve bu bedel her
istekte yeniden ödeniyor. İlk dersin hesabına göre bağlam uzunluğu istek başına ara durumla doğru
orantılıdır; yirmi bir kat bağlam, aynı bütçede yirmi bir kat az eşzamanlı istek demektir. İnce
ayarın bedeli ise **bir kereliktir**: altmış etiketli örnek, üç koşum, 180 güncelleme adımı ve
0,2992 payında oynayan ağırlık. Sonraki her istek yine 28,48 belirteç.

Karşılaştırma bu yüzden tek sayıyla kapanmaz. Etiketli örnek azken ince ayar üstün ve ucuzdur.
Örnek çoğaldıkça istem düzeneği isabette yakalar ve geçer, ama bunu bağlamı büyüterek yapar; kaç
isteğin aynı anda işleneceği önemliyse, 0,0167'lik bir isabet farkı yirmi bir kat kapasiteye
değmez. Ölçülmesi gereken ikisidir, ve bu iki sayı aynı birimde değildir.

## Özet

- İki yol da aynı girdiyi ister: etiketli örnek. Değişen tek şey örneğin isteme mi ağırlığa mı
  konduğudur; bu yüzden karşılaştırma eşit örnek sayısında yapılır.
- Dört örnekle ince ayar hiçbir ağırlığı oynatmıyor ve taban 0,6000'de kalıyor; aynı dört örnek
  isteme konduğunda isabet 0,5667'ye düşüyor. İki çekilişin yönü bile aynı değil.
- Sekiz ve on altı örnekte ince ayar iki çekilişte de önde: 0,7333 ile 0,8833'e karşı 0,6500 ile
  0,8333. Bu üstünlük ölçülmüş sayılır.
- Otuz iki örnekte bantlar örtüşüyor (0,9000 ile 0,9500'e karşı 0,9000 ile 0,9167); ölçülmüş bir
  kazanç yoktur ve tek koşumluk ince ayar 0,8500 ile geride kalır.
- Altmış örnekte istem düzeneği 0,9667, ince ayar 0,9500; koşum değişkenliği sıfır olduğu için
  ince ayarın kaybı gerçektir.
- Bedeller aynı birimde değildir: istem düzeneği bağlamı istek başına 21,9 katına çıkarır, ince
  ayar bir kerelik 180 güncelleme adımı ve 605 ağırlığın 0,2992 payını oynatır.

## Sonraki Adım

Son satırdaki 0,2992 payı sorulmadan geçildi. İnce ayar hangi ağırlığın oynayacağına **karar
vermedi**; hata güdümlü güncelleme, yanlış bilinen bir örnekte hangi parça geçtiyse ona dokundu ve
181 kayıt öylece ortaya çıktı. Bu sayı bir tasarım kararı değil, bir yan üründür. Oysa oynayan
ağırlık sayısı doğrudan bir maliyettir: saklanacak, taşınacak, geri alınacak ve her görev için
ayrıca tutulacak olan şey odur. Aynı isabet daha az ağırlık oynatılarak alınabilir miydi, hangi
ağırlıkların dondurulacağına önceden karar verilse ne kaybedilirdi, ve güncellemenin kendisi
tabloya bir **ek** olarak yazılsa saklanan sayı adedi ne olurdu — bunların hiçbiri denenmedi.
Sonraki ders tam güncellemeyi, katman dondurmayı ve tabloya eklenen düşük ranklı bir düzeltmeyi
yan yana ölçer ve iki sayıyı basar: güncellenen parametre payı ile isabet.
