---
title: 'Öğrenme Aktarımı'
source: 'https://academia.sh/tr/kurslar/derin-ogrenme/ogrenme-aktarimi'
course: 'Derin Öğrenme'
language: tr
updated: '2026-08-17T18:10:08+00:00'
license: 'CC BY-SA 4.0'
---

# Öğrenme Aktarımı

Kurgu bir kaynak görevden kendi elimizle üretilen önceden eğitilmiş bir modelin hedef göreve taşınmasının ne kattığının ölçülmesi: en sık sınıf tabanı 0,6444 iken yirmi etiketle sıfırdan eğitim 0,7194, dondurmalı aktarım 0,8417 ve ince ayarlı aktarım 0,8083 veriyor. Dondurma dört ölçümde de 0,83 dolayında düz duruyor ve sıfırdan eğitim onu kırk ile seksen örnek arasında geçiyor; ince ayar dört noktanın üçünde sıfırdanın üstünde kalıyor ama yüz altmış örnekte fark 0,0028'e iniyor. Kaynak görevden gelen tablo bakım ayrımını 3,6373, şüpheli ayrımını 2,4767 taşıyor; ince ayardan sonra bu iki sayı 2,4685 ve 3,7991 oluyor.

Gömme tablosu önceki derste görevin kendi etiketleriyle öğrenildi ve iki yüz örnek buna yetti.
Etiketin pahalı olduğu durumlarda bu varsayım düşer. Şüpheli olarak işaretlenmiş bir abone
kaydı, bir denetçinin sahada geçirdiği saatin karşılığıdır; elde yirmi ya da kırk tane olabilir.
Yüz üç parametrenin hepsini yirmi etiketten öğrenmek, kapasitenin veriyi geçtiği durumdur ve
M27/K01 `genelleme` bunu ölçmüştü.

Bir yol daha vardır. Aynı kodlar başka bir soruya da cevap verir ve o soru için etiket boldur.
Temsil orada öğrenilip buraya taşınabilir. Bu dersin sorusu ikilidir: taşımak hangi sayıyı
oynatır, ve **kaç etiketle**. İkinci soru birincisinden önemlidir, çünkü aktarımın değeri son
sayıda değil, o sayıya kaç etiketle varıldığındadır.

- **MI73.** Bu payın dizi kurgusu `mimariler/06`'da, olay kodları `mimariler/08`'de kuruldu ve
  **kurgudur**. Bu derste ikinci bir **kurgu** etiket eklenir. Tohum 20260218.
- **MI74.** **Kaynak görev kurgudur ve etiketi boldur**: on iki adımın en az altısında bir **bakım
  kodu** bulunması. Bakım kodları on tanedir.
- **MI75.** **Hedef görev** `mimariler/08`'in görevidir: en az beş adımda **şüpheli kod**. Şüpheli
  kodlar sekiz tanedir ve sekizi de bakım kodları arasındadır; bakım kümesinde onların dışında iki
  kod daha vardır. İki görev ilişkilidir ama aynı değildir.
- **MI76.** **Önceden eğitilmiş model bu derste üretilir.** Hiçbir hazır model, ağırlık deposu ya
  da dış kaynak kullanılmaz; kaynak görev üç yüz örnekle burada eğitilir ve **modeldir**.
- **MI77.** Kaynak ile hedef **ayrı dizilerde** çalışır: kaynak ilk üç yüz dizi, hedef havuzu
  sonraki iki yüz kırk, ayrılmış küme son yüz seksen. Önceden eğitilmiş model hedef görevin hiçbir
  etiketini görmez.
- **MI78.** Üç kurulum karşılaştırılır: **sıfırdan** (tablo rastgele ilklendirilir), **aktarım +
  dondurma** (tablo kaynaktan alınır ve hiç güncellenmez), **aktarım + ince ayar** (tablo
  kaynaktan alınır ve güncellenir).
- **MI79.** Hedef etiket sayısı dört değerde ölçülür: 20, 40, 80, 160. Ayrılmış küme her dördünde
  aynıdır.
- **MI80.** Taban çizgisi **en sık sınıftır** ve ayrılmış kümeden okunur; etiket sayısı değişse de
  taban değişmez.
- **MI81.** Her sayı **iki koşumla** basılır; koşumlar ilklendirme tohumunda ayrılır.

## Kaynak Görev ve Önceden Eğitilmiş Model

Aktarımın öznesi bir dosya değil, bir **temsildir**. Burada taşınan şey gömme tablosudur: yirmi
dört kodun üç boyutlu vektörleri. Kaynak görev bu tabloyu kendi sorusuna göre yerleştirir ve
hedef görev onu devralır.

```python
# ORTAK — MODELDIR. `mimariler/06`'nin KURGU dizi kumesi + `08`'in KURGU olay kodlari.
import math

TOHUM, M32, ADIM = 20260218, 0xFFFFFFFF, 12
KOD = 24
BAK = (1, 2, 4, 5, 7, 9, 13, 16, 20, 22)     # KURGU kaynak gorev: bakim kodlari
SUP = (1, 4, 5, 9, 13, 16, 20, 22)           # KURGU hedef gorev: supheli kodlar


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 dizi_kur(n, tohum):
    D = []
    for i in range(n):
        r = uretec(tohum + i)
        r()
        [round((r() + r() + r() - 1.5) * 1.9, 3) for _ in range(ADIM - 1)]
        r()
        o = uretec(tohum + 8000 + i)
        kod = [int(o() * KOD) for _ in range(ADIM)]
        D.append({"kod": kod, "kaynak": 1 if sum(c in BAK for c in kod) >= 6 else 0,
                  "y": 1 if sum(c in SUP for c in kod) >= 5 else 0})
    return D


VERI = dizi_kur(720, TOHUM)
KAYNAK, HAVUZ, SIN = VERI[:300], VERI[300:540], VERI[540:]
oran = sum(x["y"] for x in SIN) / len(SIN)
TABAN = max(oran, 1 - oran)
ORTAK = [c for c in SUP if c in BAK]
print(f"kod {KOD}, bakim {len(BAK)}, supheli {len(SUP)}, ortak {len(ORTAK)}")
print(f"kaynak gorev orani {sum(x['kaynak'] for x in KAYNAK) / len(KAYNAK):.4f}, "
      f"kaynak ornek {len(KAYNAK)}")
print(f"hedef gorev orani ayrilmis {oran:.4f}, taban cizgisi {TABAN:.4f}, "
      f"havuz {len(HAVUZ)}")
```

```
kod 24, bakim 10, supheli 8, ortak 8
kaynak gorev orani 0.3533, kaynak ornek 300
hedef gorev orani ayrilmis 0.3556, taban cizgisi 0.6444, havuz 240
```

İki görevin ilişkisi tek satırdadır: sekiz şüpheli kodun sekizi de bakım kümesindedir, ama bakım
kümesinde iki fazla kod vardır. Kaynak görevi çözen bir temsil, hedef görevin istediği ayrımı
yaklaşık olarak taşır; tam olarak taşımaz.

```python
GIZ, GOM = 6, 3


def temsil(T, kod):
    h = [0.0] * GOM
    for c in kod:
        for j in range(GOM):
            h[j] += T[c][j] / ADIM
    return h


def yeni_tablo(tohum):
    r = uretec(tohum)
    return [[(r() + r() + r() - 1.5) * 1.1 for _ in range(GOM)] for _ in range(KOD)]


def egit(tohum, T, D, alan, tur, ogren, adim=0.9):
    r = uretec(tohum + 500)
    g = lambda: (r() + r() + r() - 1.5) * 0.9
    W1 = [[g() for _ in range(GOM)] for _ in range(GIZ)]
    b1, w, b, n = [0.0] * GIZ, [g() for _ in range(GIZ)], [0.0], len(D)
    for _ in range(tur):
        gW1 = [[0.0] * GOM for _ in range(GIZ)]
        gb1, gw, gb = [0.0] * GIZ, [0.0] * GIZ, 0.0
        gT = [[0.0] * GOM for _ in range(KOD)] if ogren else None
        for x in D:
            h = temsil(T, x["kod"])
            z = [sum(W1[i][j] * h[j] for j in range(GOM)) + b1[i] for i in range(GIZ)]
            o = sum(w[i] * z[i] for i in range(GIZ) if z[i] > 0) + b[0]
            df = 1.0 / (1.0 + math.exp(-max(-30.0, min(30.0, o)))) - x[alan]
            gb += df
            da = [df * w[i] if z[i] > 0 else 0.0 for i in range(GIZ)]
            for i in range(GIZ):
                gw[i] += df * max(0.0, z[i])
                gb1[i] += da[i]
                for j in range(GOM):
                    gW1[i][j] += da[i] * h[j]
            if ogren:                   # dondurmada tablonun egimi hic hesaplanmaz
                dh = [sum(da[i] * W1[i][j] for i in range(GIZ)) for j in range(GOM)]
                for c in x["kod"]:
                    for j in range(GOM):
                        gT[c][j] += dh[j] / ADIM
        for i in range(GIZ):
            w[i] -= adim * gw[i] / n
            b1[i] -= adim * gb1[i] / n
            for j in range(GOM):
                W1[i][j] -= adim * gW1[i][j] / n
        b[0] -= adim * gb / n
        if ogren:
            for c in range(KOD):
                for j in range(GOM):
                    T[c][j] -= adim * gT[c][j] / n
    return {"T": T, "W1": W1, "b1": b1, "w": w, "b": b[0]}


def dogruluk(P, D, alan="y"):
    s = 0
    for x in D:
        h = temsil(P["T"], x["kod"])
        z = [sum(P["W1"][i][j] * h[j] for j in range(GOM)) + P["b1"][i]
             for i in range(GIZ)]
        o = sum(P["w"][i] * max(0.0, z[i]) for i in range(GIZ)) + P["b"]
        s += (o > 0) == (x[alan] == 1)
    return s / len(D)


def kopya(T):
    return [u[:] for u in T]


ONCEDEN = []
print(f"kaynak gorev ornegi {len(KAYNAK)}, tur 400, gomme boyutu {GOM}, "
      f"gizli birim {GIZ}")
for k in (1, 2):
    P = egit(TOHUM + k, yeni_tablo(TOHUM + 900 + k), KAYNAK, "kaynak", 400, True)
    ONCEDEN.append(P)
    print(f"onceden egitilmis model kosum {k}: kaynak gorevde egitim "
          f"{dogruluk(P, KAYNAK, 'kaynak'):.4f}, ayrilmis "
          f"{dogruluk(P, SIN, 'kaynak'):.4f}")
print(f"bu iki model hedef gorevin hicbir etiketini gormedi")
```

```
kaynak gorev ornegi 300, tur 400, gomme boyutu 3, gizli birim 6
onceden egitilmis model kosum 1: kaynak gorevde egitim 1.0000, ayrilmis 1.0000
onceden egitilmis model kosum 2: kaynak gorevde egitim 1.0000, ayrilmis 1.0000
bu iki model hedef gorevin hicbir etiketini gormedi
```

## Dondurma, İnce Ayar ve Kaç Etiket

Aktarımın iki biçimi vardır. **Dondurmada** taşınan tablo sabittir ve yalnız üstündeki gövde
öğrenilir: otuz bir parametre. **İnce ayarda** tablo da güncellenir: yüz üç parametre. İkisi
arasındaki seçim, elde kaç etiket olduğuna bağlıdır ve bu bağın kendisi ölçülebilir.

```python
ORNEK, KURULUM = (20, 40, 80, 160), (("sifirdan", False, True),
                                     ("aktarim + dondurma", True, False),
                                     ("aktarim + ince ayar", True, True))
SONUC = {}
print(f"hedef tur 250, taban cizgisi {TABAN:.4f}, ayrilmis {len(SIN)}")
print(f"{'kurulum':<21}{'ogrenilen':>10}{'kosum':>7}"
      + "".join(f"{'n=' + str(n):>9}" for n in ORNEK))
for ad, kaynakli, ogren in KURULUM:
    SONUC[ad] = {}
    for k in (1, 2):
        sat = []
        for n in ORNEK:
            T = kopya(ONCEDEN[k - 1]["T"]) if kaynakli else yeni_tablo(TOHUM + 900 + k)
            P = egit(TOHUM + 30 + k, T, HAVUZ[:n], "y", 250, ogren)
            SONUC[ad].setdefault(n, []).append(dogruluk(P, SIN))
            sat.append(SONUC[ad][n][-1])
            if n == ORNEK[-1] and k == 1:
                SONUC[ad]["T"] = P["T"]
        print(f"{ad if k == 1 else '':<21}"
              f"{GIZ * GOM + 2 * GIZ + 1 + (0 if not ogren else KOD * GOM):>10}"
              f"{k:>7}" + "".join(f"{v:>9.4f}" for v in sat))
```

```
hedef tur 250, taban cizgisi 0.6444, ayrilmis 180
kurulum               ogrenilen  kosum     n=20     n=40     n=80    n=160
sifirdan                    103      1   0.7222   0.8056   0.8167   0.9556
                            103      2   0.7167   0.8389   0.8611   0.9722
aktarim + dondurma           31      1   0.8333   0.8278   0.8389   0.8333
                             31      2   0.8500   0.8444   0.8278   0.8278
aktarim + ince ayar         103      1   0.8111   0.8556   0.8556   0.9556
                            103      2   0.8056   0.8500   0.8556   0.9667
```

Dondurma satırı yatay bir çizgidir: 0,8278 ile 0,8500 arasında, etiket sayısıyla neredeyse hiç
oynamıyor. Otuz bir parametre yirmi etiketten öğrenilebiliyor, ama yüz altmış etiket de aynı otuz
bir parametreye gidecek yeni bir yer bulmuyor. Aktarımın tavanı taşınan tablodadır.

```python
def ort(ad, n):
    return sum(SONUC[ad][n]) / 2


print(f"{'ornek':>7}{'sifirdan':>10}{'dondurma':>10}{'ince ayar':>11}"
      f"{'dondurma farki':>16}{'ince ayar farki':>17}")
for n in ORNEK:
    a, b, c = (ort(k, n) for k, *_ in KURULUM)
    print(f"{n:>7}{a:>10.4f}{b:>10.4f}{c:>11.4f}{b - a:>+16.4f}{c - a:>+17.4f}")
hedef = ort("aktarim + dondurma", 20)
yeter = [n for n in ORNEK if ort("sifirdan", n) >= hedef]
print(f"dondurma 20 ornekle {hedef:.4f}; sifirdan ayni sayiya "
      f"{yeter[0] if yeter else '>160'} ornekle ulasiyor")


def ikili(T, P, Q):
    d = [sum((T[i][j] - T[k][j]) ** 2 for j in range(GOM)) ** 0.5
         for i in P for k in Q if i != k]
    return sum(d) / len(d)


def ayrim(T, G):
    A = [c for c in range(KOD) if c in G]
    B = [c for c in range(KOD) if c not in G]
    return ikili(T, A, B) / ((ikili(T, A, A) + ikili(T, B, B)) / 2)


print(f"{'tablo':<28}{'bakim ayrimi':>14}{'supheli ayrimi':>16}")
for ad, T in (("kaynak gorevden gelen", ONCEDEN[0]["T"]),
              ("ince ayardan sonra n=160", SONUC["aktarim + ince ayar"]["T"]),
              ("sifirdan n=160", SONUC["sifirdan"]["T"])):
    print(f"{ad:<28}{ayrim(T, BAK):>14.4f}{ayrim(T, SUP):>16.4f}")
```

```
  ornek  sifirdan  dondurma  ince ayar  dondurma farki  ince ayar farki
     20    0.7194    0.8417     0.8083         +0.1222          +0.0889
     40    0.8222    0.8361     0.8528         +0.0139          +0.0306
     80    0.8389    0.8333     0.8556         -0.0056          +0.0167
    160    0.9639    0.8306     0.9611         -0.1333          -0.0028
dondurma 20 ornekle 0.8417; sifirdan ayni sayiya 160 ornekle ulasiyor
tablo                         bakim ayrimi  supheli ayrimi
kaynak gorevden gelen               3.6373          2.4767
ince ayardan sonra n=160            2.4685          3.7991
sifirdan n=160                      2.1087          3.3228
```

İlk tablo aktarımın kattığı farkı örnek sayısıyla birlikte okur ve tek bir sayı vermez. Yirmi
etikette dondurma sıfırdan eğitimin 0,1222 üstündedir; kırkta fark 0,0139'a düşer; seksende işaret
döner ve yüz altmışta dondurma sıfırdanın 0,1333 **altına** iner. İnce ayar dört noktanın üçünde
üsttedir ama yüz altmışta farkı 0,0028'e, yani ölçüm gürültüsünün içine iner.

İkinci satır bu dersin asıl sayısıdır. Dondurma yirmi etiketle 0,8417 veriyor; sıfırdan eğitim aynı
sayıya ancak yüz altmış etiketle ulaşıyor — sekiz katı. Aktarımın kazandırdığı şey son sayı değil,
o sayıya varmak için **toplanmayan etiketlerdir**. Etiket başına bir saha ziyareti düşünüldüğünde
ölçünün birimi doğruluk değil, yüz kırk ziyarettir.

Yüz altmış satırındaki eksi işaret üzerinde durmaya değer. Orada dondurmalı aktarım, hiçbir şey
aktarmayan kuruluma yenilmektedir; taşınan temsil bir başlangıç noktası olmaktan çıkıp bir kısıt
hâline gelmiştir. Aktarım her zaman kazandırmaz ve kazanıp kazandırmadığı ancak aktarımsız kurulum
aynı ayrılmış kümede koşulduğunda bilinir. Bu ölçünün taban çizgisi en sık sınıf değil, **sıfırdan
eğitimin kendisidir**.

Koşum değişkenliği bu dersin okumasını iki yerde belirler. Yirmi etikette üç kurulumun koşumları
arasındaki fark en fazla 0,0167'dir, aktarımın kattığı ise 0,1222 — yani fark koşum
değişkenliğinin yedi katıdır ve ölçülmüş sayılır. Yüz altmışta ise ince ayarın sıfırdan farkı
0,0028'dir ve aynı kurulumun iki koşumu 0,0111 ayrılmaktadır; orada fark koşumun içinde kaybolur
ve "ince ayar biraz daha iyi" demek ölçülmemiş bir cümledir.

Üçüncü tablo aktarımın niçin bir yerde durduğunu söyler. Kaynaktan gelen tablo bakım ayrımını
3,6373 taşıyor ama şüpheli ayrımını yalnız 2,4767; iki fazla bakım kodu tabloda şüphelilerin
yanına yerleşmiş durumda ve dondurulmuş bir tablo bunu düzeltemez. İnce ayar iki sayıyı yer
değiştiriyor: bakım ayrımı 2,4685'e düşerken şüpheli ayrımı 3,7991'e çıkıyor. Sıfırdan eğitilen
tablo da şüpheli ayrımını 3,3228'e getiriyor, ama bunun için sekiz kat etiket harcıyor.

## Özet

- Önceden eğitilmiş model bu derste kurgu bir kaynak görevden üretildi; kaynak görevde iki koşum da
  1,0000 veriyor ve hedef görevin hiçbir etiketini görmedi.
- Yirmi etikette taban 0,6444, sıfırdan eğitim 0,7194, dondurma 0,8417 ve ince ayar 0,8083; aktarım
  bu noktada 0,1222'ye kadar fark katıyor.
- Dondurma otuz bir parametre öğrenir ve etiket sayısıyla oynamaz: dört ölçümde de 0,83 dolayında
  düz durur, yüz altmış etikette sıfırdan eğitimin 0,1333 altına iner.
- Aktarımın ölçüsü doğruluk değil etiket sayısıdır: dondurmanın yirmi etiketle verdiği 0,8417'ye
  sıfırdan eğitim ancak yüz altmış etiketle ulaşır.
- Tavanın nedeni taşınan temsildir: kaynak tablo bakım ayrımını 3,6373, şüpheli ayrımını 2,4767
  taşır; ince ayardan sonra bu iki sayı 2,4685 ve 3,7991 olur.

## Sonraki Adım

Dokuz derste her mimari bir **etiketi** kestirdi. Girdi verildi, çıktı bir sayıya indirildi ve
ölçü hep aynı biçimdeydi: ayrılmış kümede kaç doğru. Bir ağın etiket kestirmekten başka bir işi
daha olabilir — girdinin kendisini yeniden üretmek, ya da girdiye benzeyen yeni örnekler kurmak.
Böyle bir ağın ölçüsü nedir, çünkü karşılaştırılacak bir etiket yoktur. Sonraki ders örtük uzay
üzerinden çalışan iki üretici düzeni ele alır: geri kurma hatasıyla ölçülen otokodlayıcıyı
(M27/K04'ün ölçüsüne atıfla) ve iki ağın birbirine karşı eğitildiği çekişmeli düzeni; ikincisinde
ölçülen şey başarım değil, aynı düzenin iki koşumunun ne kadar ayrıldığıdır.
