A 30.1. Pretext és downstream feladat egységben elválasztottuk a pretext feladatot a downstream feladattól, és rögzítettük, hogy a reprezentációtanulás célja olyan vektor előállítása, amely a feladat szempontjából hasznos invarianciákat őrzi meg. Ott a pozitív párt csak elnagyoltan, „ugyanannak a jelenetnek két augmentált nézete” formájában adtuk meg. Ebben az alfejezetben ezt a szerződést pontos, kiszámítható veszteséggé alakítjuk.
A 29.2. Denoising és korrupciós modell denoising célban a pár aszimmetrikus volt: zajos bemenetből tiszta target. A kontrasztív cél ezzel szemben két egyenrangú nézetet illeszt egymáshoz, ezért nincs kitüntetett „tiszta” oldal. A 26.2. Egy- és kétlépcsős detektor detektoros párosítási szabályhoz hasonlóan itt is előre rögzíteni kell, mely indexek alkotnak pozitív párt; ezt nem a modell hasonlósági pontszáma dönti el. A 18.2. Batch normalization train és eval módban tanulsága pedig az, hogy a batchtől függő mennyiségek train és eval szerepét külön kell adminisztrálni: a kontrasztív nevező is batchfüggő, de csak előtanítási cél, nem kiértékelési metrika.
Induló kérdés. Adott négy normalizált reprezentáció: A pozitív párok és . Mennyi a kontrasztív loss mellett, ha minden mintához az összes többi minta szerepel a nevezőben? A választ a 4. szakaszban kézzel ellenőrizzük; előzetes becslésként érdemes megfigyelni, hogy a pozitív párok koszinusz-hasonlósága , de a – negatív pár hasonlósága is viszonylag magas, tehát a loss nem lesz nulla.
Legyen egy minibatch reprezentációja ahol az -edik sort jelöli. Feltesszük, hogy a sorok már -normalizáltak, azaz . Ekkor a hasonlósági mátrix tehát a két vektor koszinusz-hasonlósága. A vektor előállításáért felelős hálózat kimenetét a gyakorlatban a veszteségszámítás előtt normalizáljuk, mert a cél nem az abszolút norma, hanem az irányok együttállása.
A pozitív párt egy előre rögzített, adatból származó hozzárendelés. Legyen az indexű minta pozitív párja. A páros szerződés a következő:
A pozitív hozzárendelést a maszkkal is leírhatjuk: pontosan akkor, ha , egyébként . A kontrasztív tanulásban ez a maszk a target: nem a modell által megjósolt osztály, hanem az adatelőkészítés által garantált párkapcsolat. A GlyphLab-szerű adaton például ugyanazon scene két különböző zajrealizációjú nézete lehet pozitív pár; a 90 fokos forgatás viszont csak akkor, ha a downstream feladat valóban invariáns az orientációra, ami az 1.1. Modell, tanulás és felhasználási szerződés alfejezetben definiált háromosztályos orientációs cél esetén nem áll fenn.
A hőmérséklet egy pozitív skalár, amely a hasonlóságok exponenciális skálázását szabályozza. A nem valószínűség, nem küszöb és nem margin. Az hányadost skálázott logitnak nevezzük; dimenzió nélküli, mert is az.
A diagonális maszk a mátrix, ahol pontosan akkor, ha . A nevezőhöz használt maszk ennek komplementere: Tehát minden olyan párra , ahol . A nevezőben minden indexű hasonlóság exponenciálisa szerepel, beleértve a pozitív párt is; a diagonális kizárás csupán az önmagával vett triviális tagot távolítja el.
A negatívok azok a indexek, amelyekre és . A nevező azonban a pozitív tagot is tartalmazza, ezért pontosabb a „nevező-halmaz” kifejezés, mint a „negatívok összege”. Ez a megkülönböztetés az F4 hibakeresési feladatban döntő lesz.
Egy anchorra a választott kontrasztív veszteséget a pozitív exponenciális és a nevező-halmaz exponenciálisainak hányadosaként definiáljuk:
Mivel minden sorában pontosan egy áll, a számláló egytagú:
A hányadosra vonatkozó azonosságot, alakban alkalmaztuk. A (2) jobb oldalának második tagja egy log-sum-exp művelet: numerikusan stabil, mert a legnagyobb logit kiemelésével számítható.
A teljes batch-veszteség az anchorok átlaga:
Index- és shape-ellenőrzés: , és alakja egyaránt ; minden szummáció fut; skalár; skalár. A diagonális garantálja, hogy a tag sehol sem szerepel a nevezőben. A pozitív pár a nevezőben marad, mert a feltétel miatt.
Ez a veszteség az NT-Xent (normalized temperature-scaled cross entropy) páros formája. Az InfoNCE elnevezést tágabb értelemben használjuk az olyan kontrasztív célokra, ahol egy pozitív mintát egy negatív halmazzal versenyeztetünk; az NT-Xent ennek normalizált, hőmérséklet-skálázott, többosztályos softmax alakja. A megnevezés nem változtat a fenti definíción: az érvényes állítások a (1)–(3) képletekből következnek, nem a névből.
A [P17] absztraktja azt emeli ki, hogy a reprezentációt a különbözően augmentált nézetek közötti egyezés kontrasztív növelésével tanítják. A jelen alfejezetben használt -mintás képlet a kontrasztív softmax ismert szerkezetét követi; annak ellenőrzése, hogy a konkrét cikkváltozat a bővített nézetre milyen indexelést és szimmetrizálást használ, a teljes módszertani szakasz olvasását igényli. A fejezet a saját -mintás képletét nem azonosítja automatikusan az eredeti cikk teljes, szimmetrizált veszteségével.
A hőmérséklet hatását a következő, saját lemmában rögzítjük.
Lemma (hőmérsékleti határeset). Legyen soronként normalizált, , , és . A (2) veszteségre minden -re:
Bizonyítás. Rögzítsük az sort. Az (1) hányados nemnegatív, mert a pozitív tag a nevezőben is szerepel, ezért a hányados legfeljebb , és . Ez adja a harmadik állítás végén szereplő nemnegativitást.
Mivel minden véges -re, . A nevezőben pontosan darab tag van, a számlálóban egy darab. A hányados határértéke , ezért a loss .
Legyen és . A legnagyobb logit kiemelésével pontosan Mivel véges sok tag van, a második tag -hez tart, ahol a maximális -t elérő indexek száma. Innen ; ha , az első tag -hez tart, míg ha , a veszteség határértéke .
A feltétel szerint a pozitív pár egyedüli maximum a nevező indexei között, ezért , , és .
A tétel feltételei végesek: nincs szükség mértékelméleti eszközökre, csak a véges exponenciális tagok határértékére. A lemma azt mutatja, hogy kis mellett a pozitívnál nagyobb negatív hasonlóság különbsége arányban növeli a veszteséget; egyenlő maximális hasonlóságoknál a holtversenyek száma határértéket ad. A puszta hasonlóságkülönbség nem azonos a veszteség határértékével. Ez a megfigyelés heurisztikus tervezési szabály, nem általános tanítási konvergenciatétel.
A bevezető kérdés adataival dolgozunk, mellett. A mátrix:
A sorok normája valóban , tehát közvetlenül koszinusz-hasonlóság. A szorzat:
A pozitív párok: , , , . A maszkban tehát az , , , elemek -esek. A nevezőmaszk , tehát minden -hez a másik három index.
Első sor, . A nevező tagjai . mellett: A nevező összege , a pozitív tag , így
Második sor, . A pozitív ; a másik két nevezőtag és . A nevező: tehát
Harmadik sor, . A szimmetria miatt ; negyedik sor, : . A teljes loss:
A példa azt is megmutatja, miért nem nulla a loss: a pozitív párok hasonlósága , de a – és – negatív párok hasonlósága , tehát a nevező nem kizárólag a pozitív tagból áll.
A labor munkakönyvtára lab/n118/. A bemenet a fenti
mátrix, a pozitív párok explicit listája,
.
A kód torch.float64 pontossággal, CPU-n fut, és a
diagonálist a masked_fill művelettel zárja ki a
log-sum-expből.
# lab/n118/nt_xent_pairs.py
import math
import numpy as np
import torch
# Input: normalizált reprezentációk, N x d
z_np = np.array([
[1.0, 0.0],
[0.8, 0.6],
[0.0, 1.0],
[0.6, 0.8],
], dtype=np.float64)
tau = 1.0
# A pozitív párok irányított indexelése: p(0)=1, p(1)=0, p(2)=3, p(3)=2
pos = torch.tensor([1, 0, 3, 2], dtype=torch.int64)
device = torch.device("cpu")
torch.manual_seed(20261020) # determinisztikus seed; a labornak nincs véletlen ága
z = torch.tensor(z_np, dtype=torch.float64, device=device)
# Normalizálás: a labor bemenete már normált, de a függvény önállóan is ellenőrzi
norms = z.norm(dim=1, keepdim=True)
if not torch.all(norms > 0):
raise ValueError("Nulla normájú reprezentáció nem normalizálható.")
z = z / norms
S = z @ z.T # alak: (N, N), [-1, 1]
logits = S / tau # alak: (N, N)
N = z.shape[0]
den_mask = torch.ones(N, N, dtype=torch.bool, device=device)
den_mask.fill_diagonal_(False) # diagonális kizárás: M_ii = 0
neg_inf = torch.tensor(-math.inf, dtype=torch.float64, device=device)
masked_logits = logits.masked_fill(~den_mask, neg_inf)
lse = torch.logsumexp(masked_logits, dim=1) # alak: (N,)
pos_logit = logits[torch.arange(N, device=device), pos] # alak: (N,)
per_row = lse - pos_logit # = -log(hányados)
loss = per_row.mean() # batch-átlag
print(f"S:\n{S}")
print(f"per-row loss: {per_row.detach().numpy()}")
print(f"mean NT-Xent (tau={tau}): {loss.item():.6f}")A blokk után álló ellenőrző sor a (2)–(3) képletekből, 64 bites
lebegőpontos aritmetikával számított várható érték; ez a kézirat
írásakor nem futtatott mérés, hanem a 4. szakasz kézi
példájának gépi újraszámolása. A kód futtatása
python lab/n118/nt_xent_pairs.py, várható ellenőrző
kimenet:
per-row loss: [0.8189, 0.9344, 0.8189, 0.9344]
mean NT-Xent (tau=1.0): 0.8766
Az ellenőrzés toleranciája abszolút hiba: a kézi példában a közelítő exponenciális értékek miatt az utolsó jegyek eltérhetnek, de az első négy tizedesjegynek egyeznie kell.
F1 (fogalmi, nehézség 1). Magyarázza el, miért kötelező a diagonális kizárás, és mutassa meg egy konkrét háromelemű példán, hogy esetén a nevezőt a triviális önhasonlóság dominálhatja. Adja meg a helyes maszkot.
F2 (levezetési/bizonyítási, nehézség 2). Vizsgáljunk egyetlen anchor-sort három reprezentáció közül: és . A többi anchor párját itt nem definiáljuk, mert a teljes, szimmetrikus és önpár nélküli párosítás páratlan mellett nem létezik. A -adik sorra , . Számítsa ki a lemma alapján és értékét. Indokolja meg, hogy melyik határérték érzékeny a negatív pontos értékére.
F3 (implementációs, nehézség 1). Futtassa az 5. szakasz kódját, majd módosítsa a bemenetet -ra úgy, hogy a pár pozitív, a negatív hasonlóság legyen. Adja meg a négy soronkénti loss értékét és a batch-átlagot toleranciával. A kódban ne változtassa meg a maszk definícióját.
F4 (hibakeresési, nehézség 2). Egy hallgató a nevezőt így számítja:
neg_mask = den_mask.clone()
neg_mask[torch.arange(N), pos] = False # a pozitívat is kizárja
lse_bad = torch.logsumexp(logits.masked_fill(~neg_mask, -math.inf), dim=1)
loss_bad = (lse_bad - pos_logit).mean()Magyarázza el a hiba okát és következményét. Ellenőrizze a 4. szakasz során, hogy a rossz nevezővel kapott loss kisebb-e a helyesnél, és adja meg a javítás utáni invariánst, amely a helyes loss nemnegativitását garantálja.
F5 (kísérlettervezési/transzfer, nehézség 3). Tervezzen kontrasztív előtanítási kísérletet a GlyphLab orientációs feladatra, amelyben az egyetlen változó tényező a pozitív pár definíciója: (A) ugyanazon orientáció két különböző zajrealizációja; (B) ugyanazon jelenet két nézete, de az egyik 90 fokkal elforgatva. Írja le a protokollt: pretext adat, downstream frozen probe, scene-alapú split, baseline és metrika. Indokolja, miért nem szabad a downstream címkét a pozitív pár definíciójába beengedni, és miért várható, hogy a (B) változat a háromosztályos orientációs célon gyengébb lesz.
F1 megoldás. A diagonális kizárás nélkül a nevezőben szerepelne , amely minden más hasonlóságnál legalább akkora. Kis esetén az önhasonlósági tag a nevezőt növeli. Ha a pozitív pár hasonlósága szigorúan kisebb 1-nél, a hibás veszteség végtelenhez nőhet; ha a pozitív pár is tökéletesen egyezik (), az önhasonlóság és a pozitív tag holtversenye miatt a hibás veszteség -höz tart, nem a végtelenhez. Például , , , esetén mellett a helyes nevező ; ha is szerepel, a nevező , így a pozitív hányados csökken. A helyes maszk , azaz minden -re.
F2 megoldás. A pozitív hasonlóság szigorúan nagyobb a negatív értéknél, tehát és . A lemma szerint . A határérték a lemma (1) pontja alapján . A felé tartó határérték a negatív tagtól valójában nem függ addig, amíg ; a pozitív hasonlóság a legnagyobb, ezért a veszteség nullához tart. Ha viszont lenne, akkor , és ; ugyanakkor . Ha pontosan, akkor a két maximális tag miatt .
F3 megoldás. Az új normája . A hasonlósági mátrix új elemei: , , . A soronkénti nevezők:
A batch-átlag . A változás jól mutatja, hogy a negatív pár távolítása csökkenti a loss-t, mert a nevező domináns tagjai ritkulnak.
F4 megoldás. A hiba oka, hogy a hallgató a pozitív tagot is kivette a nevezőből. A helyes NT-Xent nevezője a pozitív exponenciálist is tartalmazza; a diagonális kizárás csak az tagra vonatkozik. Következmény: a nevező kisebb lesz, a hányados nagyobb, a loss tehát kisebb, és akár negatívvá is válhat, ha a pozitív exponenciális meghaladja a fennmaradó negatív tagok összegét. A 4. szakasz során a rossz nevező , a hányados , a loss , ami valóban kisebb a helyes -nél. A javítás utáni invariáns: a nevező a pozitív tagot tartalmazza, ezért a hányados mindig legfeljebb , és a per-példa loss mindig nemnegatív.
F5 megoldásminta. A protokoll célja annak mérése, hogy a pozitív pár definíciója milyen invarianciát ír elő. Pretext adat: a GlyphLab train split 120 független scene-je, scene-enként mindkét nézet. Az (A) ágban minden train képhez a pozitív pár a saját scene másik nézete; a (B) ágban a másik nézet 90 fokkal elforgatott változata. Az orientációs címke nem szerepel a párképzésben, mert akkor a pretext cél szivárogtatná a downstream választ. Downstream: az előtanított encoder fagyasztott kimenetéből lineáris probe a train képeken, a val split a legjobb epoch kiválasztására. Baseline: ugyanaz a háló véletlen inicializálással, csak lineáris probe tanítva. Az értékelés a rögzített test spliten mért accuracy, máshol nem használt modellválasztással. A (B) ág várhatóan gyengébb, mert a 90 fokos forgatás a vertical és horizontal osztályt felcseréli, tehát a reprezentáció olyan invarianciát tanul, amely a downstream céllal ellentétes.
Gyakori tévedés. „Az NT-Xent formula automatikusan a kölcsönös információ alsó korlátja.” Ez az állítás így nem igazolható. Az információelméleti interpretáció további feltételeket igényel a kritikus függvényre, a negatív minták eloszlására és a becslő torzítására. A minibatch-nevezőben a negatívok nem függetlenek a pozitív pár eloszlásától, ezért a puszta képletazonosságból nem következik MI-korlát. A jelen egység csak a (1)–(3) veszteségfüggvényt definiálta és a hőmérsékleti határértékeket bizonyította.
Önellenőrzés. Az 5. szakasz kódjában
alakja
,
a masked_fill után a log-sum-exp alakja
,
a loss skalár. A
szélsőesetben minden sor nevezője csak a pozitív tagot tartalmazza,
ezért minden per-példa loss
;
a kontrasztív cél valódi negatívok nélkül degenerált. Ezért a páros loss
használatához legalább két pozitív pár, tehát
szükséges.
Korábbi fogalom visszahívása. A 29.2. Denoising és korrupciós modell denoising szerződésében a tiszta target szivárgása torzította a kiértékelést. Itt az analog szivárgás a downstream címke beépítése a pozitív pár definíciójába. A 26.2. Egy- és kétlépcsős detektor párosítási szabályhoz hasonlóan a pozitív hozzárendelést a tanítás előtt rögzíteni kell; a 18.2. Batch normalization train és eval módban train/eval különválasztás pedig arra figyelmeztet, hogy a batchfüggő nevező nem tekinthető a downstream modell kiértékelési statisztikájának.
A kontrasztív loss normalizált reprezentációk hasonlósági mátrixából építkezik. Minden anchorhoz egy előre rögzített pozitív pár tartozik; a nevező az összes többi minta skálázott exponenciálisát tartalmazza, a diagonálist kizárva. A hőmérséklet a softmax koncentrációját szabályozza: mellett a veszteség nullához tart, ha a pozitív pár az egyedüli maximum; maximális holtversenynél -hez tart, a pozitívnál nagyobb negatív esetén pedig divergens. mellett -hez tart. A négymintás kézi és kódolt példa rögzítette az indexelést, a maszk szerepét és a numerikusan stabil log-sum-exp megvalósítást. A pozitív pár definíciója a pretext invarianciát határozza meg, ezért a downstream szempontból helytelen augmentáció nem javítható csupán a hőmérséklet hangolásával.
A 30.3. Negatív nélküli módszerek és collapse egység a negatív minták nélküli módszereket és a reprezentációs összeomlást vizsgálja. Ott azt kérdezzük, mi történik, ha a nevező negatívjait elhagyjuk, és milyen regularizáló tagok akadályozzák meg, hogy minden bemenet azonos reprezentációba essen.