Neyron tarmoq formulalari: qo‘llanma · Keyingi bosqich

SiLU / Swish: o‘zini o‘zi o‘tkazadigan kirish

Zamonaviy til modellarining aktivatsiyasi: kirish o‘zining sigmoidasiga ko‘paytiriladi. Mayda detallarigacha tahlil qilamiz: nega uning −0,278 minimumi va birdan katta hosilasi bor, u ReLU va GELU bilan qanday bog‘liq, Swish-β oilasi qayerdan keladi va SiLU LLaMA va Qwen’dagi SwiGLU bloki ichida qanday ishlaydi.

Javharbek Abdulatipov · 35 daq o‘qish
$$\operatorname{SiLU}(x)=x\cdot\sigma(x)=\frac{x}{1+e^{-x}}$$

U nima uchun kerak

ReLU’ning ikki kamchiligi bor: nolda u sinadi, chapda esa butun signalni gradiyent bilan birga tashlab yuboradi. SiLU (Sigmoid Linear Unit) boshqacha tuzilgan: $x$ kirish o‘zining sigmoidasiga ko‘paytiriladi. Katta musbat kirish deyarli to‘liq o‘tadi, katta manfiy kirish deyarli butunlay so‘ndiriladi, nol atrofida esa kirish «qisman» — silliq, sinishsiz o‘tadi.

Parametrli o‘sha funksiya, $x\,\sigma(\beta x)$, Swish deb ataladi. $\beta=1$ da bu aynan SiLU; PyTorch va boshqa kutubxonalarda uni shunday yozishadi: nn.SiLU.

U qayerda uchraydi:

  • katta til modellari — LLaMA, Qwen, Mistral va PaLM SiLU’ni SwiGLU bloki ichida ishlatadi (7-bo‘lim); model konfiguratsiyalarida bu hidden_act = "silu" qatori;
  • kompyuter ko‘rishi — EfficientNet (2019) Swish asosida qurilgan, YOLOv5 va YOLOv8 detektorlari SiLU’dan foydalanadi;
  • mobil tarmoqlar — MobileNetV3 «qattiq» Swish’dan, arzon bo‘lak-polinomial $x\cdot\operatorname{ReLU6}(x+3)/6$ yaqinlashishdan foydalanadi;
  • mustahkamlab o‘qitish — Elfving, Uchibe va Doya (2017) uni SiLU nomi bilan qiymat funksiyalarini approksimatsiya qilish uchun qo‘llagan.
Bir daqiqada asosiysi

$\operatorname{SiLU}(x)=x\,\sigma(x)$. O‘ngda uzoqda u deyarli $x$ ga, chapda uzoqda deyarli 0 ga teng — ReLU kabi, lekin silliq. U nomonoton: minimum $x\approx-1{,}278$ nuqtada $\approx-0{,}278$. $\sigma(x)\bigl(1+x(1-\sigma(x))\bigr)$ hosila nolda $0{,}5$ ga teng va $x>1{,}278$ da 1 dan oshadi (maksimum $\approx1{,}100$). LLM’larda SiLU SwiGLU’da ventil vazifasini bajaradi: $\operatorname{SiLU}(W_1x)\odot W_3x$.

Intuitsiya: kirish o‘zidan qanchasini o‘tkazishni o‘zi hal qiladi

Dastasini oqimning o‘zi buraydigan jo‘mrakni tasavvur qiling. $\sigma(x)$ sigmoida — jo‘mrakning ochiqlik darajasi, 0 dan 1 gacha. Agar kirish katta va musbat bo‘lsa, jo‘mrak deyarli to‘liq ochiq ($\sigma\approx1$) va chiqish deyarli kirishga teng. Agar kirish kuchli manfiy bo‘lsa, jo‘mrak deyarli yopiq va chiqish nolga yaqin. Bunday mexanizm o‘z-o‘zini ventillash (self-gating) deyiladi: kirish bir vaqtning o‘zida ham signal, ham signalning qancha qismini o‘tkazish haqidagi qaror.

Ko‘k nuqtani torting. Firuza egri chiziq — $\sigma(x)$ ventil, ko‘k — $x\cdot\sigma(x)$ ko‘paytma. $x=-1$ atrofiga qarang: ventil allaqachon qisman yopilgan, lekin to‘liq emas, kirish esa manfiy — va chiqish noldan pastga tushadi.

1-rasm. Signal va ventil ko‘paytmasi sifatidagi SiLU. $x=-1$ da ventil $\sigma(-1)=0{,}2689$ ga ochiq va chiqish $-1\cdot0{,}2689=-0{,}2689$ ga teng. Doiracha $(-1{,}278;\,-0{,}278)$ minimumni belgilaydi. Kulrang punktir — ReLU, nuqtali chiziq — $y=x$.
Nimaga e’tibor berish kerak

O‘ngda ko‘k egri chiziq $y=x$ to‘g‘ri chiziqqa, chapda esa nolga yopishadi: bu sohalarda SiLU ReLU’dan deyarli farq qilmaydi. Butun farq taxminan $-5<x<5$ yo‘lakda, ventil qisman ochiq joyda jamlangan. Aynan u yerda ReLU keskin sinadi, SiLU esa chapda kichik «chuqurcha» bilan silliq egiladi.

Formula mayda detallarigacha

SiLU’ni ikki tanish qismdan yig‘amiz va unga bir necha yozuvda qaraymiz.

$$\operatorname{SiLU}(x)=\underbrace{x}_{\text{signal}}\cdot\underbrace{\sigma(x)}_{\text{ventil}}=\frac{x}{1+e^{-x}}$$
$x$
neyron kirishi (pre-aktivatsiya); u o‘tkazilishi kerak bo‘lgan signal ham;
$\sigma(x)=\frac{1}{1+e^{-x}}$
sigmoida, $(0;\,1)$ dagi son — signalning o‘tadigan ulushi;
$x\cdot\sigma(x)$
natija: $\sigma\approx1$ da chiqish $\approx x$, $\sigma\approx0$ da chiqish $\approx0$.

Giperbolik tangens orqali ($\sigma(x)=\tfrac12(1+\tanh\tfrac x2)$) ko‘p narsani tushuntiradigan yozuv hosil bo‘ladi:

$$\operatorname{SiLU}(x)=\frac{x}{2}\Bigl(1+\tanh\frac{x}{2}\Bigr)=\underbrace{\frac{x}{2}}_{\text{toq qism}}+\underbrace{\frac{x}{2}\tanh\frac{x}{2}}_{\text{juft qism}}$$

ReLU bilan solishtiring: $\operatorname{ReLU}(x)=\frac{x}{2}+\frac{|x|}{2}$. Ularning toq qismlari bir xil, SiLU’ning juft qismi $\frac x2\tanh\frac x2$ esa — silliqlangan modul $\frac{|x|}{2}$: katta $|x|$ larda tangens $\pm1$ ga teng va ular ustma-ust tushadi, nol atrofida esa burchak o‘rniga $\approx\frac{x^2}{4}$ parabola hosil bo‘ladi.

$x$$\sigma(x)$$\operatorname{SiLU}(x)$$\operatorname{SiLU}'(x)$
−50,0067−0,0335−0,0265
−30,0474−0,1423−0,0881
−1,27850,2178−0,27850,0000
−10,2689−0,26890,0723
00,50000,00000,5000
10,73110,73110,9277
20,88081,76161,0908
30,95262,85771,0881
50,99334,96651,0265

Jadvalda uchta xususiyat ko‘rinadi: chapdagi manfiy qiymatlar (eng chuquri — $-0{,}2785$), nolda $0{,}5$ hosila va $x=2$ hamda $x=3$ da 1 dan katta hosila.

Xossalar

  • Silliqlik: SiLU cheksiz differensiallanuvchi — birorta ham sinish yo‘q.
  • Asimptotalar: $x\to+\infty$ da $\operatorname{SiLU}(x)-x\to0$ va $x\to-\infty$ da $\operatorname{SiLU}(x)\to0$, ikkala holda ham eksponensial tez.
  • Nomonotonlik: funksiya $(-\infty;\,x^*)$ da kamayadi va $(x^*;\,+\infty)$ da o‘sadi, bu yerda $x^*\approx-1{,}2785$.
  • Quyidan chegaralanganlik: qiymatlar sohasi $[-0{,}2785;\,+\infty)$. Yuqoridan chegaralanmagan.
  • ReLU bilan bog‘liqlik: $\operatorname{ReLU}(x)-\operatorname{SiLU}(x)=|x|\,\sigma(-|x|)$ — 0 dan $0{,}2785$ gacha juft funksiya. SiLU doim ReLU’dan pastda yotadi, lekin $0{,}2785$ dan uzoq emas.
  • Ayirmaning antisimmetriyasi: $\operatorname{SiLU}(x)-\operatorname{SiLU}(-x)=x$, chunki $\sigma(x)+\sigma(-x)=1$.
  • Qavariqlik: funksiya $(-2{,}3994;\,2{,}3994)$ oraliqda qavariq va undan tashqarida botiq; oraliq uchlari $\pm2{,}3994$ — burilish nuqtalari.

Minimum: qayerda va nega −0,278

Minimum hosila nolga teng bo‘lgan joyda. Natijani Lambert W-funksiyasi — $We^{W}=c$ tenglama yechimi orqali yozish qulay:

$$x^*=-1-W\!\left(e^{-1}\right)\approx-1{,}2785,\qquad \operatorname{SiLU}(x^*)=x^*+1=-W\!\left(e^{-1}\right)\approx-0{,}2785$$
Lambert W-funksiyasi orqali keltirib chiqarish

Hosila (5-bo‘lim) $\sigma(x)\bigl(1+x(1-\sigma(x))\bigr)$ ga teng. Sigmoida musbat, shuning uchun nolni faqat qavs beradi: $1+x(1-\sigma)=0$, ya’ni $1-\sigma(x)=-1/x$.

Darhol minimum qiymatini olamiz: $\sigma(x^*)=1+1/x^*$ va $\operatorname{SiLU}(x^*)=x^*\sigma(x^*)=x^*+1$.

Endi $x^*$ ni topamiz. $1-\sigma(x)=\sigma(-x)=\frac{1}{1+e^{x}}$ bo‘lgani uchun tenglama $1+e^{x}=-x$ ko‘rinishini oladi. $u=-x-1$ deylik; u holda $x=-u-1$ va

$$1+e^{-u-1}=u+1\;\Longleftrightarrow\;e^{-u}e^{-1}=u\;\Longleftrightarrow\;u\,e^{u}=e^{-1}\;\Longleftrightarrow\;u=W(e^{-1})\approx0{,}2785$$

Bundan $x^*=-1-W(e^{-1})\approx-1{,}2785$ va $\operatorname{SiLU}(x^*)=x^*+1=-W(e^{-1})\approx-0{,}2785$. Chiroyli moslik: chuqurchaning chuqurligi va uning $x=-1$ nuqtadan masofasi — bir xil son.

Swish-β oilasi

Ventilga $\beta$ tiklik qo‘shsak, Swish oilasi hosil bo‘ladi:

$$\operatorname{Swish}_\beta(x)=x\,\sigma(\beta x),\qquad \lim_{\beta\to\infty}\operatorname{Swish}_\beta(x)=\operatorname{ReLU}(x),\qquad \operatorname{Swish}_0(x)=\frac{x}{2}$$

$\beta=0$ da ventil doim yarim ochiq va funksiya chiziqli. $\beta\to\infty$ da sigmoida zinaga aylanadi va ReLU hosil bo‘ladi. Swish-β — chiziqli funksiya va ReLU orasidagi ko‘prik, SiLU esa bu ko‘prikdagi $\beta=1$ nuqta. $u=\beta x$ almashtirish oilaning barcha a’zolari boshqa masshtabdagi bitta grafik ekanini ko‘rsatadi: $\operatorname{Swish}_\beta(x)=\frac{1}{\beta}\operatorname{SiLU}(\beta x)$.

2-rasm. $x\,\sigma(\beta x)$ va uning hosilasi. $\beta=1$ da minimum $(-1{,}278;\,-0{,}278)$, noldagi qiyalik $0{,}5$, hosila maksimumi $1{,}0998$. $\beta$ ni suring: minimum $(-1{,}278/\beta;\,-0{,}278/\beta)$ ga ko‘chadi, noldagi qiyalik va hosila maksimumi esa o‘zgarmaydi. $\beta=1{,}702$ da funksiya GELU bilan deyarli ustma-ust tushadi.
Bitta funksiya — ikki nom

SiLU (Sigmoid Linear Unit) nomi birinchi marta Xendriks va Gimpelning GELU haqidagi maqolasida (2016) paydo bo‘lgan. Elfving, Uchibe va Doya (2017) $x\,\sigma(x)$ ni mustahkamlab o‘qitishda qo‘llagan. Ramachandran, Zof va Le (2017) $x\,\sigma(\beta x)$ ni mustaqil ravishda nomzod formulalar fazosida avtomatik qidiruv bilan topib, Swish deb atashgan; o‘rganiladigan $\beta$ kam narsa qo‘shgan va amalda $\beta=1$ qaror topgan. Shu sababli bitta funksiyaning ikki nomi bor: PyTorch va Hugging Face’da silu, Keras’da swish.

Hosila: birdan katta va noldan kichik

Ko‘paytma qoidasiga ko‘ra SiLU hosilasi ikki qismdan iborat: ventil va ventil qanchalik tez ochilishi.

$$\operatorname{SiLU}'(x)=\underbrace{\sigma(x)}_{\text{ventil}}+\underbrace{x\,\sigma'(x)}_{\text{ventil ochilishi}}=\sigma(x)\bigl(1+x\,(1-\sigma(x))\bigr)$$
Qadamma-qadam keltirib chiqarish

Ko‘paytma qoidasi: $(x\cdot\sigma(x))'=1\cdot\sigma(x)+x\cdot\sigma'(x)$.

Sigmoida hosilasi ma’lum: $\sigma'(x)=\sigma(x)(1-\sigma(x))$ (keltirib chiqarilishi — sigmoida sahifasida). O‘rniga qo‘yamiz va $\sigma(x)$ ni qavsdan chiqaramiz:

$$\operatorname{SiLU}'(x)=\sigma(x)+x\,\sigma(x)\bigl(1-\sigma(x)\bigr)=\sigma(x)\bigl(1+x(1-\sigma(x))\bigr)$$

Yana bir foydali shakl funksiyaning o‘z qiymati $f=\operatorname{SiLU}(x)$ orqali: qavslarni ochsak, $\sigma+x\sigma-x\sigma^2=f+\sigma(1-f)$ hosil bo‘ladi. Uni amalga oshirishlar ishlatadi: teskari o‘tishda faqat allaqachon hisoblangan $f$ va $\sigma$ kerak.

$$\operatorname{SiLU}'(x)=\operatorname{SiLU}(x)+\sigma(x)\bigl(1-\operatorname{SiLU}(x)\bigr)$$

Hosila xossalari:

  • $\operatorname{SiLU}'(0)=\sigma(0)=\tfrac12$ — nolda qiyalik aynan yarim;
  • $\operatorname{SiLU}'(x)+\operatorname{SiLU}'(-x)=1$ — bu $\operatorname{SiLU}(x)-\operatorname{SiLU}(-x)=x$ ayniyatning hosilasi;
  • hosila $x<-1{,}2785$ da (minimumdan chapda) manfiy, eng kichik qiymati $x\approx-2{,}3994$ da $\approx-0{,}0998$;
  • hosila $x>1{,}2785$ da 1 dan katta — oldingi banddagi simmetriya bo‘yicha — maksimumi $x\approx2{,}3994$ da $\approx1{,}0998$; keyin u 1 ga yuqoridan intiladi.

$\pm2{,}3994$ nuqtalar $x\tanh\frac{x}{2}=2$ tenglamaning ildizlari: u yerda ikkinchi hosila nolga aylanadi

$$\operatorname{SiLU}''(x)=\sigma(x)\bigl(1-\sigma(x)\bigr)\Bigl(2-x\tanh\frac{x}{2}\Bigr),\qquad \operatorname{SiLU}''(0)=\frac12$$
3-rasm. SiLU hosilasi (to‘q sariq) — $\sigma(x)$ ventil va $x\sigma'(x)$ qo‘shiluvchi yig‘indisi. $x=2{,}399$ nuqtada ventil $0{,}9168$, ikkinchi qo‘shiluvchi $0{,}1831$ beradi, birgalikda $1{,}0998$; bu maksimum va bu yerda ikkinchi hosila (pastki grafik) nolga teng. Chapda hosila $-0{,}0998$ gacha tushadi.
Nega 1 dan katta hosila — normal holat

1 dan katta qiyalik $x>1{,}28$ da SiLU nol atrofida ortda qolgan $y=x$ to‘g‘ri chiziqni «quvib yetayotganini» bildiradi. $x>0$ da SiLU chiqishi hech qachon kirishdan oshmaydi ($\sigma<1$), shuning uchun portlash yo‘q: qiyalik 1 dan biroz katta va tezda 1 ga qaytadi.

Silliqlik va qarindoshlar: ReLU va GELU

Bitta grafikda uchta funksiya: ReLU, SiLU va GELU $=x\,\Phi(x)$, bu yerda $\Phi$ — standart normal taqsimot funksiyasi. Faqat funksiyalarning o‘ziga emas, birinchi va ikkinchi hosilalarga ham qarang: silliqlikdagi farq aynan o‘sha yerda ko‘rinadi.

4-rasm. ReLU, SiLU va GELU: funksiyalar, birinchi va ikkinchi hosilalar. $x=-1$ da: SiLU $=-0{,}269$, GELU $=-0{,}159$; birinchi hosilalar $0{,}072$ va $-0{,}083$ (GELU bu nuqtada hali kamayadi, uning minimumi $x\approx-0{,}752$ da $-0{,}170$); ikkinchi hosilalar $0{,}302$ va $0{,}242$. ReLU’ning ikkinchi hosilasi nolda delta-funksiya: butun egrilik bitta nuqtada to‘plangan.
  • ReLU: birinchi hosila — zina, ikkinchisi — delta-funksiya. Optimizator uchun xato sirti keskin qirrali tekis bo‘laklardan iborat.
  • SiLU va GELU: hosilalar uzluksiz, ikkinchi hosilalar — maksimumi nolda bo‘lgan silliq «do‘ngliklar» (SiLU’da $0{,}5$, GELU’da $2\varphi(0)\approx0{,}798$). Xato landshafti silliq bo‘ladi va gradiyent asta-sekin o‘zgaradi.
  • GELU ≈ $\beta=1{,}702$ li Swish: $x\,\Phi(x)\approx x\,\sigma(1{,}702x)$, eng katta xato taxminan $0{,}02$. Shuning uchun GELU SiLU’ning $1{,}702$ marta kichraytirilgan nusxasiga o‘xshaydi: chuqurchasi sayozroq va nolga yaqinroq ($x\approx-0{,}752$ da $-0{,}170$, SiLU’da esa $x\approx-1{,}278$ da $-0{,}278$; Swish-1,702 ning o‘zida $-0{,}164$ bo‘lardi). Lekin GELU’ning hosila maksimumi yuqoriroq ($1{,}129$, SiLU’da esa $1{,}100$), buni masshtab bilan tushuntirib bo‘lmaydi: barcha Swish-β larda u bir xil, $1{,}0998$. Bu endi normal va logistik qonunlar orasidagi farq (pastga qarang).

Ehtimollik ma’nosi: tasodifiy ventil

SiLU va GELU’ning umumiy tushuntirishi bor. Neyron kirish tasodifiy $\varepsilon$ shovqindan katta bo‘lsa, uni to‘liq o‘tkazsin, kichik bo‘lsa — butunlay to‘sib qo‘ysin: $y=x\cdot[\varepsilon\le x]$. U holda chiqishning o‘rtacha qiymati

$$\mathbb E[y]=x\cdot P(\varepsilon\le x)=x\cdot F_\varepsilon(x)=\begin{cases}x\,\sigma(x)=\operatorname{SiLU}(x), & \varepsilon\sim\text{Logistic}(0,1),\\ x\,\Phi(x)=\operatorname{GELU}(x), & \varepsilon\sim N(0,1).\end{cases}$$

Sigmoida — logistik taqsimot funksiyasi, $\Phi$ — normal taqsimotniki. Demak, SiLU — «tasodifiy chegarali, o‘rtachalangan ReLU»: neyron aynan nolda kesish o‘rniga nol atrofidagi tasodifiy nuqtada kesadi, o‘rtacha esa silliq egri chiziq hosil bo‘ladi.

5-rasm. «Boshlash»ni bosing. $x$ ning 33 ta qiymati uchun logistik $\varepsilon$ shovqin tanlanadi va chiqish yo $x$ ga, yo 0 ga teng (punktirlardagi kulrang nuqtalar). To‘q sariq nuqtalar — o‘rtacha chiqishlar; har nuqtada 2000 ta tanlovdan keyin ular SiLU egri chizig‘idan ko‘pi bilan $0{,}031$ ga chetlashadi. Shovqinni normalga almashtiring: o‘rtachalar GELU egri chizig‘ida to‘planadi (chetlanish $0{,}015$).

SwiGLU: katta til modellaridagi SiLU

Transformerda diqqat (attention) blokidan keyin to‘liq bog‘langan blok (feed-forward network, FFN) turadi. Klassik varianti — $W_2\,\operatorname{ReLU}(W_1x)$ (yoki ReLU o‘rniga GELU). Shazir (2020) uni bir tarmoq ikkinchisidan qanchasini o‘tkazishni hal qiladigan ventilli blok (gated linear unit) bilan almashtirishni taklif qilgan:

$$\operatorname{FFN}_{\text{SwiGLU}}(x)=W_2\bigl(\operatorname{SiLU}(W_1x)\odot W_3x\bigr)$$
$x\in\mathbb R^{d}$
$d$ o‘lchamli token vektori (LLaMA-7B da $d=4096$);
$W_1x$
ventil tarmog‘i: SiLU orqali qaysi komponentlarni va qanchalik o‘tkazishni hal qiladi;
$W_3x$
qiymat tarmog‘i: chiziqli, aktivatsiyasiz — o‘tkaziladigan narsa;
$\odot$
$h$ o‘lchamli (yashirin o‘lcham) ikki vektorning elementma-element ko‘paytmasi;
$W_2$
$d$ o‘lchamga qaytarish proyeksiyasi.

Bitta komponent uchun bu ikki sonning funksiyasi: $g(a,b)=\operatorname{SiLU}(a)\cdot b$, bu yerda $a$ — ventil tarmog‘ining, $b$ — qiymat tarmog‘ining komponenti. Uni 3D’da ko‘rish arziydi.

6-rasm. $\operatorname{SiLU}(a)\cdot b$ sirti (uni aylantirish mumkin) va yuqoridan ko‘rinish. $a<0$ da ventil deyarli yopiq ($|\operatorname{SiLU}(a)|\le0{,}278$) va sirt deyarli tekis; katta $a>0$ larda u $a\cdot b$ egarga yaqinlashadi. $(1{,}5;\,2)$ nuqtada: ventil $\operatorname{SiLU}(1{,}5)=1{,}226$, chiqish $2{,}453$, $\partial/\partial a=\operatorname{SiLU}'(1{,}5)\cdot b=2{,}083$, $\partial/\partial b=1{,}226$. Ventilni ReLU, GELU, sigmoidaga almashtiring yoki uni butunlay olib tashlang.

Bu yerdagi gradiyentlar sodda va ibratli: $\frac{\partial g}{\partial b}=\operatorname{SiLU}(a)$ — qiymat tarmog‘i ventil qanchalik ochiq bo‘lsa, shunga mutanosib o‘rganadi; $\frac{\partial g}{\partial a}=\operatorname{SiLU}'(a)\cdot b$ — ventil faqat u orqali o‘tkazadigan narsa bo‘lsagina o‘rganadi.

Nega yashirin o‘lcham 8/3·d

SwiGLU’da ikkita o‘rniga uchta matritsa bor. Parametrlar soni $h=4d$ li oddiy FFN’dagidek ($2\cdot d\cdot4d=8d^2$) qolishi uchun yashirin o‘lcham $h=\frac{2}{3}\cdot4d=\frac83 d$ gacha kamaytiriladi: u holda $3\cdot d\cdot\frac83d=8d^2$. LLaMA-7B da $\frac83\cdot4096\approx10923$ 256 ga karrali songacha yuqoriga yaxlitlanadi: $h=11008$. Natijada blokka $3\cdot4096\cdot11008=135\,266\,304$ parametr to‘g‘ri keladi, $h=4d$ li FFN’da esa $134\,217\,728$ — atigi $0{,}8\%$ ko‘p.

Bu qayerdan kelgan

Ventilli chiziqli bloklarni (GLU, $\sigma(W_1x)\odot W_3x$) Dofin va boshq. (2017) konvolyutsion til modellari uchun taklif qilgan. Shazir (2020) turli ventilli variantlarni — ReGLU, GEGLU, SwiGLU — taqqoslagan va ularning barchasi oddiy FFN’dan o‘zib ketgan. SwiGLU PaLM (2022), keyin LLaMA (2023) uchun tanlangan va shundan beri ochiq LLM’lar standartiga aylangan: Qwen, Mistral va boshqa ko‘plari.

O‘qitishdagi SiLU

Silliq aktivatsiya amalda nima bilan yordam beradi? ReLU neyronlaridan iborat tarmoq funksiyani to‘g‘ri chiziq kesmalaridan, SiLU tarmog‘i esa silliq «egilishlar»dan yig‘adi. Agar maqsadli bog‘liqlik silliq bo‘lsa, SiLU neyronlariga uni takrorlash osonroq. Bundan tashqari, SiLU’da «o‘lik» zona yo‘q: hosila faqat bitta $x^*\approx-1{,}278$ nuqtada nolga aylanadi, boshqa manfiy kirishlarda esa u kichik, lekin nol emas, shuning uchun neyron manfiy kirishli ReLU kabi «o‘lmaydi».

Tajriba: $1\to6\to1$ tarmoq 40 nuqta bo‘yicha $y=\sin1{,}5x+0{,}3x$ egri chiziqni yaqinlashtiradi. Ikkala tarmoq bir xil vaznlardan boshlaydi va faqat aktivatsiya bilan farqlanadi; o‘qitish — $0{,}03$ qadamli Adam, 2000 qadam.

7-rasm. «Boshlash»ni bosing. Ko‘k egri chiziq — SiLU’li tarmoq, qora punktir — ReLU’li. 1-initsializatsiyada 2000 qadamdan keyin SiLU xatosi $0{,}00139$, ReLU’niki — $0{,}00406$, deyarli uch barobar ko‘p. «Neyronlarni ko‘rsatish»ni yoqing: ReLU’da har bir neyron — «burchak», SiLU’da — silliq egilish. Xato grafigidagi kamdan-kam sakrashlar — doimiy qadamli Adam’ning odatiy tebranishlari.

Bitta ishga tushirish bo‘yicha xulosa chiqarmaslik uchun tajribani sakkizta turli initsializatsiya uchun takrorladik. SiLU sakkiztasining hammasida aniqroq chiqdi, yutuq $1{,}4$ dan $5{,}2$ martagacha. Lekin bu silliq maqsadning xossasi: bo‘lak-chiziqli bog‘liqlikda ReLU yomonroq bo‘lmasligi mumkin. Shuning uchun aktivatsiyani tanlash — empirik masala, katta modellarda u tajriba bilan hal qilinadi.

Silliqlik narxi

SiLU ReLU’dan qimmatroq: eksponenta (yoki tanh) kerak, teskari o‘tish uchun esa kirishni saqlash kerak. GPU’da bu odatda matritsa ko‘paytirishlari fonida sezilmaydi, lekin mobil qurilmalarda «qattiq» Swish $x\cdot\operatorname{ReLU6}(x+3)/6$ — eksponentasiz bo‘lak-polinomial yaqinlashish ishlatiladi.

Kodda

Sodda x / (1 + np.exp(-x)) yozuvi $x=-1000$ da $e^{1000}$ ni hisoblaydi va to‘lib ketish haqida ogohlantiradi (natija baribir $-0$). Sigmoidani $\tanh$ orqali hisoblash tozaroq: $\sigma(x)=\tfrac12(1+\tanh\tfrac x2)$ — tangens hech qachon to‘lib ketmaydi.

pythonimport numpy as np

def sigmoid(x):
    # σ(x) = (1 + tanh(x/2)) / 2 — istalgan x da to‘lib ketishsiz
    return 0.5 * (1.0 + np.tanh(0.5 * x))

def silu(x):
    return x * sigmoid(x)

def silu_grad(x):
    s = sigmoid(x)
    return s * (1.0 + x * (1.0 - s))      # = SiLU(x) + σ(x)·(1 − SiLU(x))

def swish(x, beta=1.0):
    return x * sigmoid(beta * x)

np.set_printoptions(precision=4, suppress=True)
x = np.array([-1000.0, -1.0, 0.0, 1.0, 2.3994])
print(silu(x))        # [-0.     -0.2689  0.      0.7311  2.1997]
print(silu_grad(x))   # [-0.      0.0723  0.5     0.9277  1.0998]
pythonimport torch
import torch.nn as nn
import torch.nn.functional as F

z = torch.tensor([-2.0, 0.0, 2.0], requires_grad=True)
y = F.silu(z)                    # tensor([-0.2384, 0.0000, 1.7616])
y.sum().backward()
print(z.grad)                    # tensor([-0.0908, 0.5000, 1.0908])

class SwiGLU(nn.Module):
    """LLaMA va Qwen’ning FFN bloki: W2 · (SiLU(W1 x) ⊙ W3 x)."""
    def __init__(self, d, hidden):
        super().__init__()
        self.w1 = nn.Linear(d, hidden, bias=False)   # ventil tarmog‘i
        self.w3 = nn.Linear(d, hidden, bias=False)   # qiymat tarmog‘i
        self.w2 = nn.Linear(hidden, d, bias=False)   # d o‘lchamga qaytarish
    def forward(self, x):
        return self.w2(F.silu(self.w1(x)) * self.w3(x))

ffn = SwiGLU(4096, 11008)                          # LLaMA-7B o‘lchamlari
print(sum(p.numel() for p in ffn.parameters()))   # 135266304
Kutubxonalardagi nomlar

PyTorch: nn.SiLU, F.silu. TensorFlow/Keras: tf.nn.silu, activation="swish" ($\beta=1$ li o‘sha funksiya). Hugging Face konfiguratsiyalarida: hidden_act="silu". O‘rnatilgan nn.init.calculate_gain SiLU’ni bilmaydi: odatda standart initsializatsiya yoki ReLU uchun initsializatsiya olinadi.

Ko‘p uchraydigan xatolar

  1. «SiLU ReLU kabi manfiy emas». Yo‘q: $x<0$ da u manfiy, minimumi $-0{,}278$. Agar keyin manfiy bo‘lmagan kirish talab qiladigan narsa kelsa (masalan, logarifm yoki ildiz), bu muhim.
  2. «SiLU monoton». Yo‘q: $x\approx-1{,}278$ dan chapda u kamayadi va hosilasi u yerda manfiy. Butun to‘g‘ri chiziqda teskari funksiyasi yo‘q.
  3. SiLU va GELU’ni chalkashtirish. Bular har xil funksiyalar: $x\sigma(x)$ va $x\Phi(x)$. Oldindan o‘qitilgan modelda birini ikkinchisi bilan almashtirib bo‘lmaydi — vaznlar aniq aktivatsiyaga moslangan.
  4. SwiGLU’ning ikkala tarmog‘ida aktivatsiya. SiLU faqat $W_1x$ ventil tarmog‘ida turadi; $W_3x$ qiymat tarmog‘i chiziqli. Ortiqcha aktivatsiya modelni o‘zgartiradi.
  5. SwiGLU’da $4d$ yashirin o‘lcham. Uchta matritsa bilan bu oddiy FFN’dan $1{,}5$ marta ko‘p parametr beradi. Halol taqqoslash uchun $h\approx\frac83d$ olinadi.
  6. O‘zi yozilgan yadrolarda exp(-x) li sodda formula: katta manfiy $x$ larda to‘lib ketish va yarim aniqlikda aniqlik yo‘qolishi. F.silu yoki tanh orqali shakldan foydalaning.
  • Sigmoida: SiLU ventili; $\sigma'=\sigma(1-\sigma)$ hosila $\operatorname{SiLU}'$ ga kiradi.
  • ReLU: $\beta\to\infty$ da $x\sigma(\beta x)$ ning limiti; $\operatorname{ReLU}-\operatorname{SiLU}=|x|\sigma(-|x|)\le0{,}2785$.
  • GELU: $x\Phi(x)\approx x\sigma(1{,}702x)$ — logistik o‘rniga normal shovqinli o‘sha o‘z-o‘zini ventillash.
  • Leaky ReLU: manfiy qismni nolga aylantirmaslikning boshqa usuli — silliq chuqurcha o‘rniga $\alpha x$ to‘g‘ri chiziq.
  • tanh: $\operatorname{SiLU}(x)=\frac x2\bigl(1+\tanh\frac x2\bigr)$.
  • Softmax va Adam: transformerda SwiGLU’ning qo‘shnilari — diqqat (attention) mexanizmi va bunday modellar o‘qitiladigan optimizator.

Xulosa

1) $\operatorname{SiLU}(x)=x\,\sigma(x)=\frac x2\bigl(1+\tanh\frac x2\bigr)$ — o‘z-o‘zini ventillash: kirish o‘zining qancha ulushini o‘tkazishni hal qiladi. 2) Silliq, nomonoton, minimumi $\approx-1{,}278$ nuqtada $-W(e^{-1})\approx-0{,}278$; doim ReLU’dan ko‘pi bilan $0{,}278$ ga pastda. 3) $\operatorname{SiLU}'=\sigma(1+x(1-\sigma))$: nolda $0{,}5$, $x>1{,}278$ da 1 dan katta, maksimumi $\approx1{,}100$. 4) Swish-β chiziqli funksiya ($\beta=0$) va ReLU’ni ($\beta\to\infty$) bog‘laydi; GELU $\approx$ Swish-1,702. 5) Ehtimollik nuqtai nazaridan — tasodifiy logistik chegarali, o‘rtachalangan ReLU. 6) LLM’larda — SwiGLU ventili: $W_2(\operatorname{SiLU}(W_1x)\odot W_3x)$, yashirin o‘lcham $\approx\frac83d$.

O‘zingizni tekshiring

1. $\operatorname{SiLU}(-1)$ taxminan nimaga teng?
2. SiLU eng kichik qanday qiymat qabul qiladi?
3. SiLU’ning noldagi hosilasi nimaga teng?
4. $W_2\bigl(\operatorname{SiLU}(W_1x)\odot W_3x\bigr)$ SwiGLU blokida nechta vazn matritsasi bor va $W_3x$ tarmog‘ida qanday aktivatsiya?
5. $\beta=0$ da $x\,\sigma(\beta x)$ nimaga aylanadi?