Neyron tarmoq formulalari: qo‘llanma · Aktivatsiya funksiyalari

ReLU: to‘g‘rilangan chiziqli funksiya

Eng sodda nochiziqlilik va chuqur o‘qitishning ishchi oti. Mayda detallarigacha tahlil qilamiz: nega istalgan siniq chiziqni yig‘ish uchun bitta sinish yetarli, sinish nuqtasidagi hosila nima, ReLU tarmog‘i fazoni qanday qilib chiziqli bo‘laklarga ajratadi, nega neyronlar «o‘ladi» va He initsializatsiyasidagi ikki qayerdan keladi.

Javharbek Abdulatipov · 35 daq o‘qish
$$\operatorname{ReLU}(x)=\max(0,\,x)$$

U nima uchun kerak

Nochiziqliliksiz neyron tarmoq foydasiz: chiziqli qatlamlar kompozitsiyasi qancha qatlam qo‘yilmasin, yana chiziqli funksiya. Chiziqlilikni «sindiradigan», lekin arzon hisoblanadigan va gradiyentni bo‘g‘maydigan funksiya kerak. ReLU (rectified linear unit, «to‘g‘rilangan chiziqli funksiya») eng kam narsani qiladi: musbatni o‘zgarishsiz o‘tkazadi, manfiyni nol bilan almashtiradi.

U qayerda uchraydi:

  • o‘ramli tarmoqlar — AlexNet, VGG, ResNet: o‘ramlardan keyingi asosiy nochiziqlilik — ReLU;
  • to‘liq bog‘langan tarmoqlar va jadval modellari — yashirin qatlamlar uchun standart tanlov;
  • asl Transformer (2017) — FFN bloki: $\max(0,\,xW_1+b_1)W_2+b_2$; zamonaviy LLM’lar uning silliq qarindoshlari GELU va SiLU ga o‘tgan (ko‘pincha ventilli SwiGLU bloki tarkibida);
  • mobil tarmoqlar — MobileNet’dagi ReLU6 $=\min(\max(0,x),\,6)$ past razryadli hisoblashlar uchun qulay;
  • boshqa formulalar ichida — $\max(0,\cdot)$ bu SVM’ning hinge yo‘qotishi ham, triplet loss ham, sonning musbat qismi $x^+$ ham.
Bir daqiqada asosiysi

$\operatorname{ReLU}(x)=\max(0,x)$: chapda nol, o‘ngda $y=x$ to‘g‘ri chiziq. Hosila — zina: $x<0$ da 0 va $x>0$ da 1; nolda hosila yo‘q, kutubxonalar 0 oladi. O‘ngda gradiyent susaymasdan o‘tadi — shuning uchun ReLU’li chuqur tarmoqlar tez o‘qitiladi. Buning bahosi — kirishi doim manfiy bo‘lgan «o‘lik» neyronlar.

Intuitsiya: to‘g‘rilagich

Nom elektronikadan kelgan: to‘g‘rilagich diod tokni bir tomonga o‘tkazadi, ikkinchi tomonga o‘tkazmaydi. ReLU’li neyron — datchik: belgi chegaradan past bo‘lsa, u jim; chegaradan o‘tishi bilan qanchalik kuchli o‘tganiga mutanosib javob beradi.

Nuqtani torting. Noldan o‘ngda urinma funksiyaning o‘zi bilan ustma-ust tushadi (qiyalik 1), chapda o‘qda yotadi (qiyalik 0). Nolda yagona urinma yo‘q: qiyaligi 0 dan 1 gacha bo‘lgan har qanday to‘g‘ri chiziq grafikka pastdan tegadi — bular tayanch chiziqlar.

1-rasm. ReLU, urinma va hosila (pastda). $x=1{,}5$ da: $\operatorname{ReLU}=1{,}5$, $\operatorname{ReLU}'=1$. Nuqtani nolga olib boring: hosila aniqlanmagan, tayanch chiziqlar qiyaliklari to‘plami — $[0;\,1]$ kesma (subdifferensial); PyTorch va TensorFlow undan 0 ni oladi.
Nimaga e’tibor berish kerak

ReLU o‘ngda to‘yinmaydi: $x=100$ da hosila $x=0{,}1$ dagi kabi 1 ga teng. Sigmoida va tanh da $|x|=5$ da hosila allaqachon $0{,}01$ dan kichik. Buning o‘rniga chapda ReLU to‘liq «to‘yingan»: hosila aynan 0.

Formula mayda detallarigacha

Bir xil funksiyani turli yozuvlarda tanib olish foydali — har biri o‘z xossasini yoritadi:

$$\operatorname{ReLU}(x)=\max(0,x)=\begin{cases}x, & x>0\\0, & x\le0\end{cases}=\frac{x+|x|}{2}=x\cdot\mathbb 1[x>0]$$
$\max(0,x)$
nol bilan taqqoslash — eksponenta va bo‘lishsiz bitta amal;
$\frac{x+|x|}{2}$
$x>0$ da qo‘shiluvchilar teng va $x$ beradi, $x<0$ da bir-birini yo‘qotadi;
$x\cdot\mathbb 1[x>0]$
ventil: kirish ishorasiga qarab 0 ga yoki 1 ga ko‘paytiriladi. Har bir misol uchun ReLU tarmog‘i — neyronlarning bir qismi o‘chirilgan chiziqli tarmoq.
$x$$\operatorname{ReLU}(x)$$\operatorname{ReLU}'(x)$
−300
−100
−0,500
00[0; 1]
0,50,51
111
2,52,51

Sinishlardan — istalgan siniq chiziq

$v\cdot\operatorname{ReLU}(x-c)$ neyroni — «sharnir» (hinge): $c$ nuqtagacha nol, keyin qiyaligi $v$ bo‘lgan to‘g‘ri chiziq. Turli $c$ li sharnirlarni qo‘shib, siniq chiziq olamiz: har bir $c_k$ nuqtada qiyalik aynan $v_k$ ga o‘zgaradi. Masalan, $\operatorname{ReLU}(x+1)-2\operatorname{ReLU}(x)+\operatorname{ReLU}(x-1)$ — balandligi 1 bo‘lgan «qalpoqcha».

2-rasm. Sinishlari $-1$, $0$, $1$ da bo‘lgan uchta sharnir yig‘indisi. $(1;\,-2;\,1)$ vaznlarda qalpoqcha hosil bo‘ladi: bo‘laklar qiyaliklari $0,\ 1,\ -1,\ 0$, balandlik $f(0)=1$. Pastda — hosila: $c_k$ nuqtada aynan $v_k$ ga sakraydigan zinapoya funksiya.

ReLU tarmoqlarining asosiy siri shu: to‘g‘ri chiziqdagi $m$ ta sinishli istalgan uzluksiz bo‘lakli-chiziqli funksiya — $a+bx$ va $m$ ta sharnir, ya’ni $m$ neyronli bitta yashirin qatlamli tarmoq (va chiqish siljishi $a$; $bx$ qo‘shiluvchini ham ikki neyron bilan ifodalash mumkin: $x=\operatorname{ReLU}(x)-\operatorname{ReLU}(-x)$). Siniq chiziqlar bilan esa kesmadagi istalgan uzluksiz funksiyani istalgancha aniq yaqinlashtirish mumkin.

Xossalar

  • Qiymatlar sohasi — $[0;\,+\infty)$: sigmoida va tanh’dan farqli, yuqoridan chegaralanmagan.
  • Bo‘lakli chiziqlilik: ikki chiziqli bo‘lak, nolda bitta sinish.
  • Uzluksizlik va 1 konstantali Lipshits sharti: $|\operatorname{ReLU}(a)-\operatorname{ReLU}(b)|\le|a-b|$.
  • Qavariqlik: grafik istalgan vatardan yuqori emas — ikki chiziqli funksiyaning maksimumi doim qavariq.
  • Musbat bir jinslilik: $\alpha\ge0$ da $\operatorname{ReLU}(\alpha x)=\alpha\operatorname{ReLU}(x)$. Masshtabni qatlamlar orasida ko‘chirish mumkin: qatlam vaznlarini $\alpha>0$ ga, keyingisinikini $1/\alpha$ ga ko‘paytirsak, o‘sha tarmoq hosil bo‘ladi.
  • Idempotentlik: $\operatorname{ReLU}(\operatorname{ReLU}(x))=\operatorname{ReLU}(x)$.
  • Sonni yoyish: $x=\operatorname{ReLU}(x)-\operatorname{ReLU}(-x)$ va $|x|=\operatorname{ReLU}(x)+\operatorname{ReLU}(-x)$.
  • Siyraklik (sparsity): neyronlar kirishlari nolga nisbatan simmetrik bo‘lsa, chiqishlarning taxminan yarmi aynan nol.
Isbotlar: qavariqlik va bir jinslilik

Qavariqlik. $t\in[0;1]$ va istalgan $a,b$ uchun: $\max(0,\,ta+(1-t)b)\le\max\bigl(0,\,t\max(0,a)+(1-t)\max(0,b)\bigr)=t\max(0,a)+(1-t)\max(0,b)$, chunki $a\le\max(0,a)$, $b\le\max(0,b)$, o‘ng tomon esa manfiy emas.

Bir jinslilik. $\alpha>0$ da $\alpha x$ ning ishorasi $x$ niki bilan bir xil, shuning uchun $\max(0,\alpha x)=\alpha\max(0,x)$; $\alpha=0$ da ikkala tomon 0 ga teng. $\alpha<0$ da tenglik buziladi: $\operatorname{ReLU}(-x)\ne-\operatorname{ReLU}(x)$ — funksiya toq emas.

Hosila, subgradiyent va silliq qarindoshlar

$$\operatorname{ReLU}'(x)=\begin{cases}1, & x>0\\0, & x<0\end{cases},\qquad \partial\operatorname{ReLU}(0)=[0,\,1]$$
Nega nolda hosila yo‘q

Hosila — ayirmalar nisbatining limiti. Noldan o‘ngda va chapda u turlicha:

$$\lim_{h\to0^+}\frac{\operatorname{ReLU}(h)-0}{h}=\lim_{h\to0^+}\frac{h}{h}=1,\qquad \lim_{h\to0^-}\frac{\operatorname{ReLU}(h)-0}{h}=\lim_{h\to0^-}\frac{0}{h}=0$$

Bir tomonlama hosilalar mos kelmaydi, demak, oddiy hosila yo‘q. Qavariq funksiyalar uchun o‘rinbosar bor — subgradiyent: barcha $y$ da $f(y)\ge f(x)+g(y-x)$ bo‘ladigan $g$ soni, ya’ni qiyaligi $g$ bo‘lgan to‘g‘ri chiziq grafik ostida yotadi. Nolda barcha $g\in[0;1]$ shunday: bu to‘plam subdifferensial $\partial\operatorname{ReLU}(0)$ deb ataladi.

Nega bu o‘qitishga deyarli xalaqit bermaydi: uzluksiz ma’lumotlarda neyron kirishi aynan nolga teng bo‘lish ehtimoli 0. Suzuvchi nuqtali arifmetikada aniq nollar baribir uchraydi, lekin shunchalik kamki, $[0;1]$ dan qaysi qiymat olinishi deyarli ahamiyatsiz (16 bitli arifmetikada nollar sezilarli darajada ko‘p uchraydi va $\operatorname{ReLU}'(0)$ tanlovi ba’zan o‘qitishga ta’sir qiladi). Kutubxonalar kelishuv bo‘yicha 0 oladi.

Ikkinchi hosila noldan boshqa hamma joyda nolga teng (umumlashgan funksiyalar ma’nosida $\operatorname{ReLU}''=\delta(x)$). Shuning uchun har bir chiziqli soha ichida ReLU tarmog‘i kirishning affin funksiyasi, uning kirish bo‘yicha gradiyenti esa bo‘lakli-o‘zgarmas.

Softplus: silliqlangan ReLU

Agar sinish xalaqit bersa (masalan, ikkinchi tartibli optimallashtirish yoki fizik model uchun silliq funksiya kerak bo‘lsa), uni yumaloqlash mumkin:

$$\operatorname{softplus}_\beta(x)=\frac1\beta\ln\bigl(1+e^{\beta x}\bigr),\qquad \operatorname{softplus}_\beta'(x)=\sigma(\beta x)$$

$\operatorname{softplus}_\beta(x)-\operatorname{ReLU}(x)=\frac1\beta\ln\bigl(1+e^{-\beta|x|}\bigr)$ ayirma nolda eng katta va $\frac{\ln2}{\beta}$ ga teng; $\beta\to\infty$ da softplus ReLU’ga, uning hosilasi — sigmoida esa zinaga intiladi. Nolda u doim $\sigma(0)=0{,}5$ ga teng — $[0;1]$ subdifferensialning o‘rtasi.

3-rasm. Yuqorida ReLU va $\operatorname{softplus}_\beta$, pastda ularning hosilalari. $\beta=1$ da eng katta farq $\ln2\approx0{,}693$, $\beta=4$ da — $0{,}173$, $\beta=32$ da — $0{,}022$. Softplus’ning noldagi hosilasi doim $0{,}5$.

Fazodagi ReLU tarmog‘i: chiziqli sohalar

Ikki kirishli birinchi qatlam neyroni $w^\top x+b=0$ to‘g‘ri chiziqning bir tomonida o‘chiq, ikkinchi tomonida chiziqli. Har bir shunday to‘g‘ri chiziq — bukilish chizig‘i. $H$ ta neyron tekislikni sohalarga bo‘ladi va har bir sohada yoniq neyronlar to‘plami (aktivatsiya patterni) o‘zgarmas, demak, tarmoq u yerda oddiy affin funksiya. Chiqish sirti — yassi yoqlardan yopishtirilgan ko‘pyoq.

4-rasm. Chapda — 3D’da tarmoq chiqishi $f(x_1,x_2)=\sum_k v_k\operatorname{ReLU}(w_k^\top x+b_k)$: yassi yoqlar va bukilish qirralari. O‘ngda — yuqoridan ko‘rinish: rang — chiziqli soha raqami, punktir — neyronlar to‘g‘ri chiziqlari, ingichka chiziqlar — $f$ sathlari (ular chegaralarda sinadi). 4 neyronda oynada mumkin bo‘lgan 11 tadan ($1+H+\tfrac{H(H-1)}{2}$) 10 ta soha bor; 8 neyronda — 37 tadan 25 ta. Har biri 4 neyronli ikki qatlam allaqachon 30 ta soha beradi: ikkinchi qatlam chegaralari birinchisining chegaralarida egiladi.

Umumiy holatdagi $H$ ta to‘g‘ri chiziq tekislikni ko‘pi bilan $1+H+\binom H2$ qismga bo‘ladi — bitta qatlam sohalari soni polinomial o‘sadi. Chuqurlik boshqacha ishlaydi: har bir keyingi qatlam allaqachon kesilgan fazoni «buklaydi» va sohalar soni qatlamlar soni bilan eksponensial o‘sishi mumkin (Montúfar va boshq., 2014). Bu nega chuqur tarmoqlar bir xil neyronlar sonida keng tarmoqlardan ifodaliroq ekanining tushuntirishlaridan biri.

Universal approksimatsiya

Bitta yashirin ReLU qatlamli va yetarlicha neyronli tarmoq chegaralangan yopiq to‘plamdagi istalgan uzluksiz funksiyani istalgan aniqlikda yaqinlashtiradi (Leshno va boshq., 1993: ko‘phad bo‘lmagan istalgan uzluksiz aktivatsiya yaraydi). ReLU uchun bu tom ma’noda ko‘rinadi: siniq chiziqlar — sharnirlardan, ko‘pyoqli sirtlar — burmalardan.

O‘qitishda ReLU: tarmoq siniq chiziq chizadi

Bitta yashirin qatlam $\hat y(x)=\sum_{k=1}^{H}v_k\operatorname{ReLU}(w_kx+b_k)+c$ ni sinusoida nuqtalarida o‘qitamiz. Har bir neyron — sinishi $x=-b_k/w_k$ da bo‘lgan sharnir; gradiyent tushish sinishlarni egri chiziq egiladigan joyga suradi va qiyaliklarni tanlaydi.

$$\frac{\partial\hat y}{\partial b_k}=v_k\,\mathbb 1[w_kx+b_k>0],\qquad \frac{\partial\hat y}{\partial w_k}=v_k\,x\,\mathbb 1[w_kx+b_k>0]$$

Neyron parametrlari bo‘yicha gradiyent faqat neyron yoniq bo‘lgan nuqtalardan keladi. Bunday nuqtalar umuman bo‘lmasa, neyron o‘rganishni to‘xtatadi — «o‘lish» shu.

5-rasm. Shovqinli ($\sigma=0{,}08$) $y=\sin(1{,}6x)$ ning 40 nuqtasi, to‘liq gradiyent va $0{,}02$ qadamli Adam. Firuza chiziqlar — sharnirlar, pastdagi nuqtalar — ularning sinishlari, qizil punktir — o‘lik neyronlar. 6 neyron bilan MSE 100-qadamga kelib $3{,}102$ dan $0{,}267$ gacha, 300-qadamga kelib $0{,}012$ gacha va 1500-qadamga kelib $0{,}0090$ gacha tushadi; yo‘lda bitta neyron o‘ladi. 3 neyron bilan ulardan biri boshidanoq o‘lik va ikki tirik sharnirdan iborat siniq chiziq juda qo‘pol — $0{,}265$; 12 neyron bilan natija $0{,}0101$, lekin 12 tadan 4 tasi o‘lik (ulardan uchtasi initsializatsiyadayoq).
Rasmda nima ko‘rinadi

ReLU tarmog‘i silliq narsani chiza olmaydi — faqat siniq chiziqlarni. 1500-qadamga kelib 6 neyrondan 5 tasi tirik va ularning sinishlari taxminan $-2{,}5$, $-1{,}2$, $-0{,}4$, $0{,}3$ va $1{,}0$ nuqtalarda turadi: sinusoida cho‘qqilari yonida ($\pm1$ atrofida va chap chetda) hamda uning nol atrofidagi deyarli to‘g‘ri bo‘lagining chetlarida. Ortiqcha neyronlar har doim ham yordam bermaydi: 12 neyronda ularning bir qismi o‘ladi, bir qismi qo‘shnilarini takrorlaydi ($-1{,}2$ va $-1{,}0$ dagi, $-0{,}25$ va $-0{,}09$ dagi sinishlar).

O‘layotgan ReLU

Agar barcha o‘quv misollarida $w^\top x+b\le0$ bo‘lsa, neyron «o‘lik». U holda uning chiqishi doim 0, $w$ va $b$ bo‘yicha gradiyentlar doim 0 (yuqoridagi formulaga qarang) va gradiyent qadamining o‘zi uni tiriltirmaydi. Kirishlari o‘zgarmas ma’lumotlar bo‘lgan birinchi qatlam neyroni uchun bu umrbod (oddiy SGD’da). Chuqurroq qatlamlarda neyron kirishi oldingi qatlamlar bilan birga o‘zgaradi, momentum va Adam inersiyasi esa parametrlarni yana bir muddat siljitadi, shuning uchun neyronlar ba’zan jonlanadi — lekin bunga umid qilib bo‘lmaydi.

Bu qanday sodir bo‘ladi: gradiyent tushishning bitta katta qadami $b$ siljishni keskin kamaytiradi yoki $w$ ni shunday buradiki, neyron gipertekisligi ma’lumotlar bulutidan tashqariga chiqib ketadi. O‘qitish tezligi qancha katta bo‘lsa, bu shuncha tez-tez yuz beradi.

6-rasm. 128 ta $y=\sin(3x_1)+x_2$, $x\in[-1;1]^2$ nuqtadagi 64 ta ReLU neyronli tarmoq, 16 talik mini-batchlar, oddiy SGD, 600 qadam, bir xil He initsializatsiyasi (ikki kirishda $\operatorname{Var}w=2/2=1$, siljishlar 0). O‘ngda — neyronlar: ko‘klari tirik (yorqinlik — neyron yoniq bo‘lgan nuqtalar ulushi), qizillari o‘lik. $\eta=0{,}3$ da dastlabki 5 qadamdayoq neyronlarning $91\%$ i o‘ladi, oxiriga kelib — $97\%$, MSE $0{,}137$ da tiqilib qoladi. $\eta=0{,}2$ da chorak qismi ($27\%$) o‘lik, MSE $0{,}004$; $\eta=0{,}1$ va $0{,}03$ da o‘liklar yo‘q (MSE $0{,}005$ va $0{,}041$ — kichik qadam shunchaki sekinroq).

Qanday davolash mumkin:

  • mo‘tadil o‘qitish tezligi, qizdirish (warm-up) va gradiyentni kesish;
  • normallashtirish va adaptiv optimizatorlar: aktivatsiyadan oldingi BatchNorm har bir neyron kirishini batch bo‘yicha markazlashtiradi, Adam esa har bir parametr qadamini taxminan $\eta$ bilan cheklaydi, shuning uchun bitta ulkan gradiyent siljishni uzoqqa olib ketmaydi (bu xavfni kamaytiradi, lekin yo‘qotmaydi);
  • chapda qiyaligi noldan farqli aktivatsiyalar — Leaky ReLU, PReLU, ELU, GELU, SiLU: chapda gradiyent nolga teng emas va neyron qaytishi mumkin;
  • ehtiyotkor initsializatsiya: siljishlar 0 (ba’zan kichik musbat), vaznlar He bo‘yicha. Kuchli manfiy siljishlar neyronlarni o‘qitishdan oldinoq o‘ldiradi.

He initsializatsiyasi: ikki qayerdan keladi

$z=\sum_{j=1}^{n}w_jh_j$ bo‘lsin, vaznlar mustaqil, $\mathbb Ew_j=0$, $\operatorname{Var}w_j=c/n$. U holda $\operatorname{Var}z=c\cdot q$, bu yerda $q=\mathbb E[h^2]$ — kirishlarning o‘rtacha kvadrati. Agar $z$ nolga nisbatan simmetrik bo‘lsa, ReLU uning taqsimotining aynan yarmini nolga aylantiradi va

$$q_{l}=\mathbb E\bigl[\operatorname{ReLU}(z)^2\bigr]=\frac12\operatorname{Var}z=\frac c2\,q_{l-1}\qquad\Longrightarrow\qquad q_L=q_0\Bigl(\frac c2\Bigr)^{L}$$

$c=1$ da (tanh’dagi kabi) signal har qatlamda ikki marta zaiflashadi, $c=3$ da — bir yarim marta o‘sadi. Masshtabni faqat $c=2$ saqlaydi: bu He initsializatsiyasi (He va boshq., 2015), $\operatorname{Var}w=2/n_\text{in}$. Teskari o‘tish ham xuddi shunday ishlaydi ($n_\text{in}$ o‘rniga $n_\text{out}$ bilan; qatlamlar kengligi bir xil bo‘lsa, bu bir narsa), shuning uchun gradiyentlar ham so‘nmaydi va portlamaydi.

7-rasm. Kengligi 100 bo‘lgan tasodifiy tarmoqning 30 qatlamining har birida aktivatsiyalarning o‘rtacha kvadrati $q_l$ (logarifmik shkala), to‘q sariq punktir — nazariya $q_0(c/2)^l$. $c=2$ da $q_{30}/q_0=2{,}66$; $c=1$ da — $2{,}47\cdot10^{-9}$ (nazariya $9{,}3\cdot10^{-10}$); $c=3$ da — $5{,}1\cdot10^5$ (nazariya $1{,}9\cdot10^5$). $\approx2{,}66$ ko‘paytuvchi uchala holatda bir xil: vaznlar bir xil, ReLU esa musbat bir jinsli, shuning uchun $c$ butun signalni $(c/2)^{L/2}$ ga ko‘paytiradi xolos; nazariyadan og‘ish — chekli kenglikning tasodifiy tebranishi. Oxirgi qatlamdagi faol neyronlar ulushi — $51\%$, deyarli roppa-rosa yarmi.
Biroz tarix

To‘g‘rilagich g‘oyasi eski: uni Fukushima 1969 yildayoq ishlatgan. ReLU chuqur o‘qitishga 2010–2011 yillarda kirdi (Nair va Hinton; Glorot, Bordes va Bengio), AlexNet maqolasida (2012) esa ReLU’li to‘rt qatlamli o‘ramli tarmoq CIFAR-10 o‘quv to‘plamida 25% xatoga xuddi shunday tanh’li tarmoqdan 6 marta tezroq yetdi. 2015 yilda He va hammualliflar $2/n$ initsializatsiyasini keltirib chiqardi va u bilan hatto 30 qatlamli ReLU tarmog‘i noldan o‘qitilishini, Ksavye initsializatsiyasi bilan esa o‘qitilmasligini ko‘rsatdi.

Kodda

ReLU to‘lib ketmaydi va aniqlikni yo‘qotmaydi: nol bilan taqqoslash istalgan arifmetikada aniq. E’tiborni boshqa narsaga qaratish kerak: noldagi kelishuvga, o‘lik neyronlarga va initsializatsiyaga.

pythonimport numpy as np

def relu(x):
    return np.maximum(0.0, x)

def relu_grad(x):
    # subgradiyent: 0 nuqtada PyTorch va TensorFlow kabi 0 olamiz
    return (x > 0).astype(float)

x = np.array([-3.0, 0.0, 2.5])
print(relu(x), relu_grad(x))     # [0.  0.  2.5] [0. 0. 1.]

# «O‘lik» neyronlar: butun ma’lumotlar to‘plamida birorta ham musbat kirish yo‘q
rng = np.random.default_rng(0)
X = rng.normal(size=(1000, 20))
W = rng.normal(size=(20, 64)) * np.sqrt(2 / 20)   # He initsializatsiyasi
for b0 in (0.0, -5.0):
    Z = X @ W + b0
    dead = np.mean((Z > 0).sum(axis=0) == 0)
    print(b0, f"{dead:.0%}")     # 0.0 0%  va  -5.0 66%
pythonimport torch
import torch.nn as nn

x = torch.tensor([-1.0, 0.0, 2.0], requires_grad=True)
torch.relu(x).sum().backward()
print(x.grad)                    # tensor([0., 0., 1.]) — nolda 0

# He initsializatsiyasi: Var w = 2 / fan_in
layer = nn.Linear(512, 512)
nn.init.kaiming_normal_(layer.weight, mode="fan_in", nonlinearity="relu")
nn.init.zeros_(layer.bias)

# Asl Transformer’ning FFN bloki: Linear → ReLU → Linear
ffn = nn.Sequential(nn.Linear(512, 2048), nn.ReLU(), nn.Linear(2048, 512))
# nn.ReLU(inplace=True) xotirani tejaydi, lekin kirish hali kerak bo‘lsa, uni buzadi
Qoida

ReLU va He initsializatsiyasi (nonlinearity='relu' bilan kaiming_normal_), siljishlar 0, oqilona o‘qitish tezligi. Vaqti-vaqti bilan batchda bir marta ham yonmagan neyronlar ulushini tekshiring: agar u o‘sayotgan bo‘lsa, qadamni kamaytiring yoki Leaky ReLU / GELU’ga o‘ting.

Ko‘p uchraydigan xatolar

  1. Maqsad manfiy bo‘lishi mumkin bo‘lgan regressiya chiqishida ReLU. Tarmoq jismonan $y<0$ chiqara olmaydi. Regressiya chiqishida — chiziqli qatlam; chiqishdagi ReLU faqat tabiatan manfiy bo‘lmagan kattaliklar uchun o‘rinli (va u holda ham ko‘pincha softplus yaxshiroq: chiqishdagi ReLU manfiy kirishda nol gradiyent beradi).
  2. tanh’dagi kabi initsializatsiya. $\operatorname{Var}w=1/n$ da chuqur ReLU tarmog‘ida signal $2^{-L}$ kabi so‘nadi: 30 qatlamdan keyin $2^{30}\approx10^9$ marta (7-rasm). He initsializatsiyasini oling.
  3. Juda katta o‘qitish tezligi. Neyronlarni ommaviy o‘ldiradi va ularni tiklab bo‘lmaydi (6-rasm). Belgisi — yo‘qotish qotib qolgan, nol aktivatsiyalar ulushi esa 100% ga yaqin.
  4. «ReLU’ning noldagi hosilasi 1/2 ga teng» yoki «aniqlanmagan — demak, xato». Matematik jihatdan nolda $[0;1]$ subdifferensial bor, undagi istalgan qiymat joiz; kutubxonalar 0 oladi. Amalda bu o‘qitishga deyarli ta’sir qilmaydi.
  5. Kirish keyin kerak bo‘ladigan joyda inplace=True. Amal kirishni ustidan yozadi; agar u qoldiq bog‘lanishda yoki boshqa amalning teskari o‘tishida ishlatilsa, PyTorch xato beradi yoki natija noto‘g‘ri bo‘ladi.
  • Leaky ReLU: $\max(\alpha x,x)$ — chapdagi noldan farqli $\alpha$ qiyalik o‘lishni davolaydi.
  • GELU va SiLU: $x\Phi(x)$ va $x\sigma(x)$ — qattiq $x\cdot\mathbb 1[x>0]$ o‘rniga silliq «ventillar»; noldan uzoqda ReLU kabi ishlaydi.
  • Sigmoida: softplus’ning hosilasi — bu $\sigma(\beta x)$; ReLU to‘yinish tufayli sigmoidani yashirin qatlamlardan siqib chiqardi.
  • tanh: ikki tomondan to‘yinadi; tanh uchun — Ksavye initsializatsiyasi, ReLU uchun — He.
  • Huber va Triplet loss: $\max(0,\cdot)$ kesish yo‘qotish funksiyalarida ham uchraydi.
  • Adam va SGD: qancha neyron o‘lishi optimizator va qadam tanloviga bog‘liq.

Xulosalar

1) $\operatorname{ReLU}(x)=\max(0,x)=\frac{x+|x|}2$ — ventil: kirish $\mathbb 1[x>0]$ ga ko‘paytiriladi. 2) Hosila — 0/1 zina, nolda subdifferensial $[0;1]$, amalda 0; o‘ngda to‘yinish yo‘q. 3) $v_k\operatorname{ReLU}(x-c_k)$ sharnirlar yig‘indisi — istalgan siniq chiziq; tekislikda ReLU tarmog‘i chiziqli sohalardan iborat ko‘pyoq, chuqurlik ularning sonini ko‘paytiradi. 4) softplus — silliq ReLU, uning hosilasi — sigmoida. 5) Katta o‘qitish tezligi neyronlarni butunlay o‘ldiradi. 6) He initsializatsiyasi $\operatorname{Var}w=2/n_\text{in}$ ReLU signalning yarmini nolga aylantirishini qoplaydi.

O‘zingizni tekshiring

1. $\operatorname{ReLU}(x)-\operatorname{ReLU}(-x)$ nimaga teng?
2. PyTorch $x=0$ nuqtada ReLU gradiyenti sifatida nimani qaytaradi?
3. 5 ta ReLU neyronli bitta yashirin qatlamli va bitta $x$ kirishli tarmoq. Uning grafigi qanday bo‘lishi mumkin?
4. Nega ReLU neyroni butunlay «o‘lishi» mumkin?
5. $n_\text{in}$ kirishli qatlam uchun He initsializatsiyasi vaznlarning qanday dispersiyasini taklif qiladi?