Ikkinchi blok — freymvorklarning ichki dunyosi: har qatlam mustaqil forward/backward juftligi sifatida yoziladi va ulardan tarmoqlar yig’iladi.
Modulli qatlamlar
Asosiy naqsh: har qatlam forward(x, w) -> out, cache va backward(dout, cache) -> dx, dw juftligi. cache — backward’ga kerak bo’ladigan oraliq qiymatlar ombori. Shu kelishuvga rioya qilinsa, qatlamlarni LEGO kabi istalgan tartibda ulash mumkin — zamonaviy freymvorklarning autogradi ham aynan shu g’oyaning avtomatlashgani. Affine (Linear) qatlam misolida:
def affine_forward(x, w, b):
out = x @ w + b
return out, (x, w)
def affine_backward(dout, cache):
x, w = cache
return dout @ w.T, x.T @ dout, dout.sum(axis=0) # dx, dw, db
Batch normalization
G’oya: har qatlam kirishini mini-batch bo’yicha normalizatsiya qilish ((x − μ)/σ), so’ng o’rganiladigan gamma/beta bilan qayta masshtablash. Chuqur tarmoq o’qitishni sezilarli barqarorlashtiradi va tezlashtiradi. Ikki nozik joyi: (1) train’da batch statistikasi ishlatiladi va yuruvchi o’rtacha (running mean/var) yangilanadi, test’da esa o’sha yig’ilgan statistika ishlatiladi — rejimlarni adashtirish klassik bug; (2) backward’i zanjir qoidasining jiddiy mashqi — μ va σ ham x ga bog’liq ekanini unutmaslik kerak.
Dropout
Train’da har neyron p ehtimol bilan o’chiriladi — tarmoq bitta "yo’lakka" suyanib qolmaydi, overfitting kamayadi. Inverted dropout amaliyoti: maska qo’llangach qiymatlar p ga bo’linadi — shunda test vaqtida hech narsa qilish shart emas (kutilgan qiymat saqlangan). Test’da dropout butunlay o’chiq bo’ladi.
| Qatlam | Train rejimi | Test rejimi |
|---|---|---|
| Batch norm | batch statistikasi + running yangilash | running mean/var |
| Dropout | maska + 1/p masshtab | o’chiq (identity) |
Konvolyutsiya: forward va backward
Topshiriqda konvolyutsiya avval to’rt sikl bilan "sodda va sekin" yoziladi — maqsad tezlik emas, mexanikani his qilish: chiqishning har (i, j) nuqtasi — filtr bilan mos oynaning skalyar ko’paytmasi. Backward’da chiroyli simmetriya ochiladi: kirish bo’yicha gradient — dout’ning filtr bilan "teskari" konvolyutsiyasi; filtr bo’yicha gradient — kirish oynalari bilan dout’ning konvolyutsiyasi. Har oyna filtrga hissa qo’shadi, gradientlar yig’iladi (+=, tenglashtirish emas — yana bir tipik xato). Max-pool backward’i esa gradientni faqat maksimum bo’lgan pozitsiyaga uzatadi.
Yig’ilgan qatlamlardan uch qatlamli CNN (conv → ReLU → pool → affine → ReLU → affine) quriladi va kichik datasetda overfit qilib ko’rsatiladi — "model sog’lig’i" testi: yaxshi implementatsiya 20–30 rasmni 100% yodlay olishi kerak.
Normalizatsiya turlari va PyTorch
Batch norm batchga bog’liq — kichik batchda beqaror. Muqobillar o’rtachalash o’qi bilan farqlanadi: layer norm — har misolning o’z xususiyatlari bo’yicha (batchga bog’liq emas, transformerlarda standart), group norm — kanal guruhlari bo’yicha (ko’rishda kichik batch uchun), instance norm — har kanal alohida.
Yakunda xuddi shu tarmoq PyTorch’ning uch darajasida yoziladi: yalang’och tensor + autograd → nn.Module → tayyor qatlamlar. Har daraja pastdagisining ustiga qurilgani, loss.backward() siz qo’lda yozgan backward’larning avtomatlashgani ekani endi ichdan tushunarli bo’ladi.
Amaliyot
- Affine backward formulalarini o’lchamlar mosligidan keltirib chiqaring: dx (N×D), dw (D×M), db (M,) — har biri nega aynan shunday?
- Batch norm’da test vaqtida batch statistikasi ishlatilsa nima buzilishini bitta misolli batch bilan tushuntiring.
- Inverted dropout’da 1/p masshtabining sababini kutilgan qiymat hisobida ko’rsating (p = 0.5 misolida).
- 1D misolda ([1, 2, 3, 4], filtr [1, 0, −1]) konvolyutsiya forward va dx backward’ini qo’lda hisoblang.
- Layer norm va batch norm qaysi o’q bo’yicha o’rtachalashini (N, D) matritsada chizib ko’rsating.
Modul testi keyingi darsda.