Ez az egység a 3.1. Vektor, norma és
skalárszorzat alfejezetben bevezetett skalárszorzatot használja fel:
egy lineáris réteg minden kimeneti komponense a súlymátrix egy sora és a
bemeneti vektor skalárszorzata. A cél a lineáris és az affin leképezés
pontos megkülönböztetése, a batchelt
forma indoklása, valamint annak bizonyítása, hogy két lineáris réteg
kompozíciója lineáris, míg nemnulla bias esetén az affin kompozíció
általában nem az. A numerikus ellenőrzéshez a 2.2.
Lebegőpont és stabil elemi számítás alfejezetben tárgyalt
allclose és tolerancia fogalmát idézzük vissza.
Induló becslés. Egy GlyphLab-kép vektorizálva dimenziós. Egy háromkimenetű, bias nélküli lineáris réteg hány skaláris szorzat–összeadást végez egy mintán? Gondolja végig: minden kimeneti komponenshez egy 576 hosszú skalárszorzat tartozik, tehát szorzás–összeadás. A bias hozzáadása ezen felül kimenetenként egy összeadás.
Definíció (lineáris leképezés). Az leképezés lineáris, ha minden és esetén
Egy ilyen leképezést lineáris operátornak is nevezünk. Rögzített bázisban minden lineáris leképezés egy mátrixszal reprezentálható. A standard bázis legyen , ahol -edik koordinátája 1, a többi 0. Mivel minden felírható alakban, a linearitásból
Ha vektorokat egy mátrix oszlopaiként rendezzük, azaz , akkor a fenti összeg éppen a mátrix–vektor szorzat. Megfordítva, tetszőleges mátrix esetén lineáris, mert a mátrixszorzás elosztó az összeadásra és felcserélhető a skalárral. A -edik komponense a -edik sorának és -nek a skalárszorzata:
Definíció (rang). A mátrix rangja a lineáris leképezés képterének dimenziója:
Mivel a képtér legfeljebb -dimenziós és altere, . Az oszloprang és a sorrang egyenlősége ismert lineáris algebrai tétel; a bizonyítást itt nem ismételjük meg, a pontos feltételekhez és bizonyításhoz [B01] lineáris algebrai fejezete szolgál háttérként.
Definíció (transzponált). Az mátrix transzponáltja az mátrix, amelyre . Két mátrix szorzatának transzponáltjára
amelyet komponensenként ellenőrizhetünk:
Definíció (affin leképezés). Az leképezés affin, ha alakú, ahol és a bias (eltolás) vektor. A neurális hálózatok irodalmában az affin réteget gyakran pontatlanul „lineáris rétegnek” nevezik; ebben a könyvben a két fogalmat mindig megkülönböztetjük.
A affin leképezés nem lineáris: , míg minden lineáris leképezés a nullvektort nullvektorba viszi, hiszen . A bias tehát a lineáris rész eltolása; az egyenes grafikonja nem megy át az origón, ezért a „grafikon egyenes” szemlélet sem teszi lineárissá.
A gyakorlatban egyszerre mintát dolgozunk fel. A batchelt bemenet , ahol egy megfigyelés egy sor. A kimenet
Az szorzat eleme
tehát az -edik minta sorvektorának és a -edik kimeneti komponenshez tartozó súlysornak a skalárszorzata; ehhez adjuk a bias-t. A vektor sorirányban broadcastolódik: minden mintához ugyanaz a kimeneti csatornánkénti eltolás adódik. Az absztrakt oszlopvektoros és a batchelt ugyanazt a leképezést jelöli, csak az utóbbiban sorokba rendezve szerepel; a transzponálás éppen a skalárszorzatok irányát állítja helyre.
Állítás. Legyen és , valamint és . Ekkor a kompozíció lineáris, és a reprezentáló mátrixa .
Bizonyítás. Először megmutatjuk, hogy a kompozíció mátrixa a mátrixszorzat. Tetszőleges esetén az -edik kimeneti komponens:
A két összegzés felcserélhető, mert véges összegekről van szó:
Ez minden -re teljesül, tehát .
Most ellenőrizzük a linearitás két tulajdonságát. Legyen és . Az előbbi reprezentációt használva:
A mátrix–vektor szorzás linearitása miatt
Ezzel az additivitást és a homogenitást is beláttuk, tehát a kompozíció lineáris.
A bizonyítás dimenzióellenőrzése: alakja , alakja , így alakja , ami éppen egy leképezés mátrixának felel meg. A rangra a kompozíció nem növeli a dimenziót: ; ez standard tétel, bizonyítását lásd [B01].
Tekintsük a két affin réteget:
ahol , . A kompozíció:
A kompozíció tehát ismét affin, hatékony mátrixszal és hatékony biasszal . Ha , akkor a kompozíció nem lineáris. Konkrét numerikus ellenpélda: legyen , , , . Ekkor
Az additivitás már esetén sérül:
és . Ezzel megadtuk a kért ellenpéldát: két affin, nemnulla biases réteg kompozíciója affin, de általában nem lineáris.
Legyen , , , tehát két minta és három kimenet. A súly, a bias és a bemenet:
Az első mintára az sorai:
A bias hozzáadása után az első kimeneti sor . A második minta:
Bias után: . Tehát
Labor. Munkakönyvtár: lab/n010/. A
következő szkript a fenti kézi számítást ellenőrzi NumPy-ban:
# futtatás: python n010_affine_lab.py
import numpy as np
X = np.array([[1.0, 3.0],
[-2.0, 0.5]], dtype=np.float32) # (2, 2)
W = np.array([[ 1.0, -2.0],
[ 0.0, 1.0],
[ 2.0, 0.0]], dtype=np.float32) # (3, 2)
b = np.array([0.5, -1.0, 0.2], dtype=np.float32) # (3,)
Z = X @ W.T + b
Z_expected = np.array([[-4.5, 2.0, 2.2],
[-2.5, -0.5, -3.8]], dtype=np.float32)
print("Z =")
print(Z)
assert Z.shape == (2, 3)
assert np.allclose(Z, Z_expected, atol=1e-6, rtol=1e-5)
print("OK: shape es numerikus egyezes a kezi szamitassal")A float32 típus miatt a
és
nem feltétlenül pontosan reprezentált tizedestörtek, ezért az
egyenlőséget allclose kezeli a 2.2.
Lebegőpont és stabil elemi számítás alfejezetben bevezetett abszolút
és relatív toleranciával. Fontos: a fenti kimenet a
kézi számításból származó számított példa, nem a labor mért
jegyzőkönyve, amelyet a szkript futtatásakor külön ellenőrizni kell. A
várt kimenet a Z mátrix és az OK üzenet.
F1 (fogalmi, nehézség 1). Adja meg az , leképezés standard bázisbeli mátrixát. Számítsa ki -et esetén, és igazolja a homogenitást mellett. Miért nem lineáris az leképezés? Elvárt átadandó: a mátrix, két kiszámított vektor és egy szöveges indoklás.
F2 (levezetési, nehézség 2). Legyen
Bizonyítsa a fenti állítás alkalmazásával, hogy lineáris, adja meg a mátrixot, és számítsa ki a elemét. Ellenőrizze, hogy . Elvárt átadandó: a bizonyítás lépései, a teljes mátrix és a elem levezetése.
F3 (implementációs, nehézség 2). Írjon
affine_forward(X, W, b) függvényt, amely ellenőrzi, hogy
alakja
,
alakja
,
alakja
,
majd
-t
számol. Hibás alak esetén adjon értelmes AssertionError
üzenetet. Tesztelje a labor
értékeivel, és ellenőrizze np.allclose segítségével
atol=1e-6, rtol=1e-5 mellett a fenti
mátrixszal. Elvárt átadandó: teljes függvény, teszt és a hibaüzenet.
F4 (hibakeresési, nehézség 2). Tekintse a következő függvényt:
def forward_wrong(X, W, b):
return X @ W + bA hívás X.shape=(2,2), W.shape=(3,2),
b.shape=(3,). Mi a hiba oka, mi a közvetlen következménye,
és hogyan javítja? Ellenőrizze a javítást a labor számadataival. Elvárt
átadandó: a hiba oka, a hibás kimenet vagy kivétel leírása, a javított
sor és a visszaellenőrzés.
F5 (kísérlettervezési/transzfer, nehézség 3). A
GlyphLab data/images.npy tömbje
alakú. Tervezzen baseline kísérletet, amely a képeket
dimenziós vektorrá lapítja, és egy háromkimenetű affin réteget alkalmaz.
Adja meg a paraméterszámot, egy kézi kontrollt a helyes alak
ellenőrzésére, a betanítás előtti baseline-t, a metrikát és az
érvényességi korlátot. Ez nyitott feladat: legalább egy teljes
protokollvázlat szükséges. Elvárt átadandó: legfeljebb féloldalas
terv.
F1 megoldás. A standard bázisvektorok képei: , . Ezért
esetén . A homogenitás: , és , tehát egyenlők. Az leképezés nem lineáris, mert , márpedig lineáris leképezés a nullvektort nullvektorba viszi.
F2 megoldás. Mivel lineárisak, a bizonyított állítás szerint lineáris, mátrixa . Számoljuk ki sorait úgy, hogy egy sorát skalárisan szorozzuk oszlopaival. oszlopai és .
Tehát
és a elem a harmadik sor második oszlopában . A nullvektor képe , ahogy minden lineáris leképezésre elvárható. Alakellenőrzés: szorozva mátrixszal -t ad, ezért a négy sor két-két eleme helyes.
F3 megoldás.
import numpy as np
def affine_forward(X, W, b):
assert X.ndim == 2, "X-nek (N, d) alakunak kell lennie"
assert W.ndim == 2, "W-nek (m, d) alakunak kell lennie"
assert b.ndim == 1, "b-nek (m,) alakunak kell lennie"
N, d = X.shape
m, d_w = W.shape
assert d == d_w, f"bemeneti dimenzio elteres: X {d}, W {d_w}"
assert b.shape[0] == m, f"bias meret {b.shape[0]}, de {m} kell"
return X @ W.T + b
X = np.array([[1.0, 3.0], [-2.0, 0.5]], dtype=np.float32)
W = np.array([[1.0, -2.0], [0.0, 1.0], [2.0, 0.0]], dtype=np.float32)
b = np.array([0.5, -1.0, 0.2], dtype=np.float32)
Z = affine_forward(X, W, b)
Z_expected = np.array([[-4.5, 2.0, 2.2], [-2.5, -0.5, -3.8]], dtype=np.float32)
assert Z.shape == (2, 3)
assert np.allclose(Z, Z_expected, atol=1e-6, rtol=1e-5)A hibaüzenet például X.shape=(2,3),
W.shape=(3,2) esetén:
bemeneti dimenzio elteres: X 3, W 2.
F4 megoldás. A hiba oka: a batchelt konvencióban
szerepel, a kód azonban
-t
számol, tehát elmarad a transzponálás. Következmény: a hívott alakokkal
és
belső dimenziói
és
,
ezért a szorzás ValueError kivételt ad; ha véletlenül
lenne, a kód lefutna, de a súly oszlopait használná sorok helyett, ami
általában más értéket ad. Javítás: return X @ W.T + b.
Visszaellenőrzés: a labor számadataival a kimenet a fenti
,
amely allclose szerint egyezik a kézi számítással.
F5 megoldásminta. A vektorizálás
,
a réteg
,
,
a kimenet
.
Paraméterszám:
.
Kézi kontroll: válasszunk egy rögzített képet,
,
mellett
;
majd egyetlen
elem 1-re állításával a megfelelő pixel értéke jelenik meg a kimenetben.
Ez a linearitás közvetlen ellenőrzése. Baseline: az osztályozó mindig a
tanító osztálygyakoriságok szerinti legvalószínűbb osztályt jósolja;
metrika: accuracy, de a három osztály kiegyensúlyozott, így az esély
baseline körülbelül
.
A modellt csak a train spliten tanítjuk, a val
spliten választunk, a test splitet egyszer, a végén
értékeljük; a megfigyelési egység a scene_id. Érvényességi
korlát: az affin modell csak globális intenzitásmintázatot lát, eltolási
invarianciája nincs, ezért ez kizárólag alsó baseline, nem várható tőle
a konvolúciós modellek teljesítménye. A terv nem állít mért eredményt; a
futtatás előtt a protokollt rögzíteni kell.
Gyakori tévedés. A PyTorch
nn.Linear(in_features, out_features) súlymátrixa
(out_features, in_features) alakú, tehát
.
Egyes lineáris algebrai könyvek a sorvektoros
konvencióban
alakot használnak. A két mátrix egymás transzponáltja; ha összekeverjük
őket, a forward rossz lesz. Konkrét ellenpélda: legyen a
PyTorch-konvenciójú súly
tehát
.
Az
bemenetre a helyes kimenet
.
Ha valaki tévesen a sorvektoros
kifejezést számolja, az
eredményt ad; ez nem a kívánt leképezés. Batchelt alakban a hiba
jellemzően az X @ W használata X @ W.T
helyett, ami
esetén alakhibát,
esetén rossz értéket okoz.
Önellenőrzés. (1) Miért
és nem
?
(2) Mondja ki, miért viszi a lineáris leképezés a nullvektort
nullvektorba. (3) Két affin réteg kompozíciójának hatékony bias-vektora
miért
?
(4) Ellenőrizze a laborban, hogy a b a kimenet melyik
tengelyéhez adódik. A válaszok a fenti levezetésekben megtalálhatók; ha
bármelyik kérdésre nem tud indokolni, térjen vissza a megfelelő
szakaszhoz.
Visszahívás. A 3.1. Vektor,
norma és skalárszorzat skalárszorzat-fogalma itt a
sorai és az
közötti szorzatösszegben jelenik meg. A 2.2.
Lebegőpont és stabil elemi számítás allclose- és
float32-tolerancia-gondolata indokolja, miért nem
==-tel ellenőrizzük a
-t
tartalmazó kézi eredményt.
A lineáris leképezés két feltételt teljesít: additivitás és homogenitás. Rögzített bázisban minden lineáris leképezés egy mátrixszal reprezentálható, amelynek oszlopai a bázisvektorok képei; a rang a képtere dimenziója. Az affin leképezés ; ha , nem lineáris, mert a nullvektor képe nem nulla. Batchelt bemenetre a kimenet , ahol a bias sorirányban broadcastolódik. Két lineáris réteg kompozíciója lineáris, mátrixa ; két affin réteg kompozíciója affin, hatékony biasszal , és általában nem lineáris. A NumPy-labor két mintára és három kimenetre ellenőrizte a kézi számítást.
A 3.3. Vetítés, legkisebb négyzetek és kondicionáltság a vetítést és a legkisebb négyzeteket tárgyalja: az affin réteg ott jelenik meg mint a legjobban illeszkedő lineáris modell keresésének alapművelete, a kondicionáltság pedig a mátrix numerikus tulajdonságait kapcsolja a gradiensalapú tanításhoz.