Neyron tarmoq formulalari: qo‘llanma · Optimizator

Adam: inersiya, masshtab va siljishni tuzatish

Neyron tarmoqlar uchun standart optimizator va til modellari o‘qitiladigan AdamW’ning asosi. Ikkala momentni mayda detallarigacha tahlil qilamiz, siljishni tuzatishni keltirib chiqaramiz, nega Adam qadami gradiyent masshtabiga bog‘liq emasligi va shovqinda o‘zi kichrayishini ko‘ramiz, beshta optimizatorni 3D sirtlarda poygaga qo‘yamiz va AdamW nima uchun L2-regulyarizatsiyadan yaxshiroq ekanini aniqlaymiz.

Javharbek Abdulatipov · 40 daq o‘qish
$$\theta_t=\theta_{t-1}-\eta\,\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}$$

Adam nima uchun kerak

Neyron tarmoqda millionlab vazn bor va ularning gradiyentlari juda turli masshtablarda yashaydi: kam uchraydigan tokenlar embeddinglari kamdan-kam katta turtki oladi, oxirgi qatlamlar — doimiy kichiklarini, normallashtirish qatlamlari — yana boshqacha. Oddiy SGD $\eta g$ qadam tashlaydi va barcha uchun bitta $\eta$ tezlik bir vaqtda ba’zi vaznlar uchun juda katta, boshqalari uchun juda kichik. Bundan tashqari, mini-batch gradiyenti shovqinli, yo‘qotish sirti esa cho‘ziq jarliklar va platolarga to‘la.

Adam (adaptive moment estimation, Kingma va Ba, 2014; ICLR 2015) ikkala masalani bitta formula bilan hal qiladi:

  • birinchi moment $m_t$ — gradiyentlarning eksponensial o‘rtachasi: shovqin va zigzaglarni so‘ndiradigan inersiya (Momentum kabi);
  • ikkinchi moment $v_t$ — gradiyent kvadratlarining eksponensial o‘rtachasi: har bir vazn gradiyentining odatiy kattaligi, qadam unga bo‘linadi (RMSProp kabi);
  • siljishni tuzatish — $1-\beta^t$ ga bo‘lish, u dastlabki qadamlarda momentlarning tizimli kam baholanishini yo‘qotadi.

Natija: har bir vazn qadami gradiyent masshtabidan qat’i nazar $\eta$ tartibida, har bir qatlam uchun qo‘lda sozlashsiz. Shuning uchun Adam ko‘pchilik masalalarda standart optimizator, uning AdamW varianti esa transformerlar va katta til modellarini o‘qitadi.

Bir daqiqada asosiysi

$m_t$ — qayerga borish (silliqlangan gradiyent), $\sqrt{v_t}$ — qanchalik katta qadam tashlash (o‘rta kvadratik gradiyent), $1-\beta^t$ — noldan boshlanganlik uchun tuzatish. $\eta\,\hat m_t/(\sqrt{\hat v_t}+\epsilon)$ qadam o‘lchamsiz: gradiyentlarni 1000 ga ko‘paytiring — qadamlar o‘zgarmaydi. Toza signalda qadam $\approx\eta$, shovqinda — kichikroq. AdamW vaznlar so‘nishini gradiyentdan chiqaradi.

Intuitsiya: kompas va spidometr

Yo‘lsiz joyda titrab turgan kompas ko‘rsatkichi bo‘yicha mashina haydayotganingizni tasavvur qiling. Uning har bir siltanishida rulni burish ahmoqlik — o‘rtachalangan yo‘nalishni kuzatish oqilonaroq. Bu $m_t$. Tezlikni esa siltanishlar odatda qanchalik kuchli ekaniga qarab tanlash kerak: tekis yo‘lda ishonch bilan, o‘nqir-cho‘nqirda ehtiyotkorlik bilan. Bu $\sqrt{v_t}$: Adam qadami — turtkilar odatiy kuchiga bo‘lingan yo‘nalish.

Rasmda — bitta vazn gradiyentlari oqimi: 100-qadamgacha o‘rtacha $+0{,}5$, keyin $-0{,}5$, ustiga shovqin. To‘q sariq chiziq — silliqlangan gradiyent $\hat m_t$, firuza rangdagilar — $\pm\sqrt{\hat v_t}$ yo‘lak, pastda — $\eta$ birliklarida yakuniy qadam.

1-rasm. Shovqinli gradiyentda ($\sigma=1$) Adam momentlari. $t$ slayderi qiymatlari rasm ostida ko‘rsatiladigan qadamni tanlaydi. Birinchi qadamda aynan $\hat m_1/\sqrt{\hat v_1}=1$ — $g_1$ qanday bo‘lmasin, qadam $g_1$ ga qarshi tomonga $\eta$ ga teng; tuzatishsiz nisbat $3{,}16$ bo‘lardi. O‘rtacha ishorasi almashgach, $\hat m_t$ 109-qadamdan boshlab butunlay manfiy bo‘ladi, $\sqrt{\hat v_t}$ esa deyarli o‘zgarmaydi ($\approx1{,}1$): qadam kattaligini signal/shovqin nisbati belgilaydi, $0{,}5/\sqrt{1{,}25}\approx0{,}45$. Hatto 200-qadamda ham tuzatishsiz qadam (shtrix) to‘g‘risidan $2{,}35$ marta katta.
Nimaga e’tibor berish kerak

Shovqinni olib tashlang ($\sigma=0$): qadam birinchi qadamdan ishora almashguncha aynan $+1$, almashgandan taxminan 50 qadam keyin esa deyarli aynan $-1$: toza signalda Adam ishora usuli kabi $\eta$ qadamlar bilan yuradi. Shovqinni oshiring — qadam qisqaradi. $\beta_1$ ni nolgacha kamaytiring — $\hat m_t$ gradiyentning o‘ziga aylanadi va $g_t/\sqrt{\hat v_t}$ qadam shovqin bilan birga sakraydi.

Formula mayda detallarigacha

$$\begin{aligned}g_t&=\nabla_\theta L(\theta_{t-1})\\ m_t&=\beta_1 m_{t-1}+(1-\beta_1)\,g_t\\ v_t&=\beta_2 v_{t-1}+(1-\beta_2)\,g_t^2\\ \hat m_t&=\frac{m_t}{1-\beta_1^{\,t}},\qquad \hat v_t=\frac{v_t}{1-\beta_2^{\,t}}\\ \theta_t&=\theta_{t-1}-\eta\,\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}\end{aligned}$$
$g_t$
$t$-qadamdagi mini-batch gradiyenti (qadamlar 1 dan raqamlanadi);
$m_t$
birinchi moment: gradiyentning eksponensial sirpanuvchi o‘rtachasi (EMA), $m_0=0$;
$v_t$
ikkinchi moment: gradiyent elementma-element kvadratining EMA’si, $v_0=0$; har bir vaznning o‘z $m$ va $v$ si bor;
$\beta_1,\ \beta_2$
so‘nish koeffitsiyentlari, standart $0{,}9$ va $0{,}999$: xotira taxminan $1/(1-\beta)$ qadam — 10 va 1000;
$1-\beta^t$
siljishni tuzatish: momentlarning noldan boshlanishini qoplaydi;
$\eta$
o‘qitish tezligi (learning rate), standart $10^{-3}$; bu yerda u vazn birliklarida odatiy qadam uzunligini belgilaydi;
$\epsilon$
nolga bo‘lishdan saqlovchi kichik qo‘shimcha ($10^{-8}$).

Standart $\beta_1=0{,}9$, $\beta_2=0{,}999$ da $0{,}5$, $-0{,}2$, $0{,}4$ gradiyentlar uchun uchta qadamni qo‘lda bajaramiz. Oxirgi ustun — siljishni tuzatishsiz qadam qanday bo‘lardi.

$t$$g_t$$m_t$$v_t$$\hat m_t$$\sqrt{\hat v_t}$qadam $/\eta$tuzatishsiz
10,50,050,000250,50,51,0003,162
2−0,20,0250,000290,13160,38070,3461,469
30,40,06250,000450,23060,38730,5962,948
Birinchi qadam batafsil

$g_1=0{,}5$: $m_1=0{,}1\cdot0{,}5=0{,}05$ va $v_1=0{,}001\cdot0{,}25=0{,}00025$ — ikkala moment ham kam baholangan, 10 va 1000 marta. Tuzatish $\hat m_1=0{,}5$ va $\hat v_1=0{,}25$ ni qaytaradi, nisbat $\hat m_1/\sqrt{\hat v_1}=1$: vazn aynan $\eta$ ga siljiydi. Tuzatishsiz $m_1/\sqrt{v_1}=0{,}05/0{,}0158\approx3{,}16$ bo‘lardi — qadam $3{,}16$ marta oshib ketadi, chunki $\sqrt{v_1}$ $m_1$ dan (10 marta) kuchliroq ($\sqrt{1000}\approx31{,}6$ marta) kam baholangan. Faqat $m$ tuzatilsa, qadam $31{,}6$ marta o‘sardi; faqat $v$ — 10 marta kamayardi.

Uchinchi qadamga e’tibor bering: gradiyentlar ishorasini almashtirdi, shuning uchun $\hat m_3=0{,}23$ gradiyentning odatiy kattaligi $\sqrt{\hat v_3}=0{,}39$ dan sezilarli kichik va Adam atigi $0{,}6\eta$ qadam tashlaydi. Gradiyentlar qanchalik mos bo‘lsa, qadam $\eta$ ga shunchalik yaqin.

Siljishni tuzatish: 1 − βᵗ qayerdan

Momentlar noldan boshlanadi va dastlabki qadamlar shu nolni «eslab qoladi». $m_t$ uchun rekursiyani ochamiz:

$$m_t=(1-\beta_1)\sum_{i=1}^{t}\beta_1^{\,t-i}\,g_i$$

Bu gradiyentlarning vaznli yig‘indisi, lekin vaznlar yig‘indisi 1 emas, $(1-\beta_1)(1+\beta_1+\dots+\beta_1^{t-1})=1-\beta_1^t$ ga teng. Yetishmayotgan $\beta_1^t$ ulush boshlang‘ich nolga tegdi. Tuzatish shundan.

Keltirib chiqarish: $\hat m_t$ va $\hat v_t$ ning siljimaganligi

Gradiyentlar statsionar bo‘lsin: barcha $i$ uchun $\mathbb E[g_i]=\mu$, $\mathbb E[g_i^2]=s$. U holda matematik kutilmaning chiziqliligiga ko‘ra

$$\mathbb E[m_t]=(1-\beta_1)\sum_{i=1}^{t}\beta_1^{\,t-i}\mu=\mu\,(1-\beta_1^{\,t}),\qquad \mathbb E[v_t]=s\,(1-\beta_2^{\,t})$$

$1-\beta^t$ ga bo‘lish $\mathbb E[\hat m_t]=\mu$ va $\mathbb E[\hat v_t]=s$ ni beradi — baholar birinchi qadamdanoq siljimagan. Agar gradiyentlar nostatsionar bo‘lsa, xotira oynasi davomida $\mu$ ning o‘zgarishi tartibidagi siljish qoladi; Kingma va Ba uni kichik ushlab turish mumkinligini ta’kidlaydi, chunki uzoq o‘tmish vaznlari eksponensial kichik.

Tuzatish faqat boshida kerak: $\beta_1^t<0{,}01$ allaqachon $t\ge44$ da, $\beta_2^t<0{,}01$ esa faqat $t\ge4603$ da. Shuning uchun u ikkinchi moment uchun eng muhim.

2-rasm. $1/(1-\beta_1^t)$ va $1/(1-\beta_2^t)$ tuzatish ko‘paytuvchilari (ikkala o‘q ham logarifmik) va o‘zgarmas gradiyentda tuzatishsiz qadamning tuzatishliga nisbati, $(1-\beta_1^t)/\sqrt{1-\beta_2^t}$. Standart $\beta$ larda birinchi ko‘paytuvchilar — 10 va 1000; tuzatishsiz qadam birinchi qadamda $3{,}16$ marta, eng ko‘p — $6{,}57$ marta — 12-qadamda, 200-qadamda hali $2{,}35$ marta va 1000-qadamda $1{,}26$ marta oshib ketgan. $\beta_2=0{,}99$ da birinchi qadamlar mos keladi ($0{,}1/\sqrt{0{,}01}=1$), lekin 13-qadamga kelib oshish $2{,}13$ ga yetadi.
Amaliyotda nega bu muhim

Tuzatishsiz Adam’ning dastlabki qadamlari mo‘ljallanganidan bir necha marta uzun — aynan vaznlar endigina initsializatsiya qilingan va yo‘qotish eng katta bo‘lgan paytda. Bu qizdirishsiz (warmup) transformerlar dastlabki yuzlab qadamlarda uzoqlashib ketishining sabablaridan biri; tuzatishning o‘zi bu xavfni qisman yo‘qotadi, chunki dastlabki qadamlarda $\hat v_t$ atigi bir nechta gradiyent bo‘yicha baholangan.

Qadam xossalari

Masshtab invariantligi

Vaznning barcha gradiyentlarini $c>0$ ga ko‘paytiramiz. U holda $m_t$ $c$ ga, $v_t$ $c^2$ ga, $\sqrt{v_t}$ $c$ ga ko‘payadi va $\hat m_t/\sqrt{\hat v_t}$ nisbat o‘zgarmaydi. Adam qadami gradiyentlarning nolinchi darajali bir jinsli funksiyasi ($\sqrt{\hat v_t}\gg\epsilon$ ekan). Har bir vaznning samarali tezligi $\eta/(\sqrt{\hat v_t}+\epsilon)$ o‘zi moslashadi: kichik gradiyentli vaznlarda katta, katta gradiyentlilarda kichik.

3-rasm. Bir xil shovqinli $c\,(1+0{,}5\xi_t)$ gradiyentli, lekin $c$ masshtablari $10^{-3}$ dan $10^{3}$ gacha bo‘lgan to‘rtta parametr; ustunlar — yuzinchi qadamdagi qadam uzunligi (logarifmik shkala). SGD qadamlari $10^6$ marta farq qiladi, Adam qadamlari bir xil: $8{,}8\cdot10^{-4}=0{,}88\,\eta$, samarali tezlik $\eta/(\sqrt{\hat v}+\epsilon)$ esa $8{,}8\cdot10^{-7}$ dan $0{,}88$ gacha o‘zgaradi. Umumiy $k$ masshtabni $10^{-6}$ gacha kamaytiring: $10^{-9}$ tartibidagi gradiyent $\epsilon=10^{-8}$ dan kichik bo‘lib qoladi va uning qadami 10 marta tushadi — $\epsilon$ juda kichik gradiyentlar uchun moslashuvni shunday o‘chiradi.

Qadam va signal/shovqin nisbati

Vazn gradiyenti $\mu$ o‘rtacha va $\sigma$ standart chetlanish bilan statsionar bo‘lsin. U holda $\hat m_t\approx\mu$, $\hat v_t\approx\mu^2+\sigma^2$ (ikkinchi moment — o‘rtacha kvadrati plyus dispersiya) va o‘rtacha qadam

$$\frac{|\Delta\theta|}{\eta}\approx\frac{|\mu|}{\sqrt{\mu^2+\sigma^2}}=\frac{\mathrm{SNR}}{\sqrt{1+\mathrm{SNR}^2}},\qquad \mathrm{SNR}=\frac{|\mu|}{\sigma}$$

Toza signalda ($\sigma\ll|\mu|$) qadam $\approx\eta$, kuchli shovqinda ($\sigma\gg|\mu|$) u signal/shovqin nisbatiga proporsional. Bu avtomatik «tormoz»: minimum yonida o‘rtacha gradiyent nolga intiladi, shovqin esa qoladi — va Adam qadamlarni o‘zi qisqartiradi.

4-rasm. Adam’ning o‘rtacha qadami ($\eta$ birliklarida) $\mu/\sigma$ signal/shovqin nisbatiga bog‘liq holda: uzluksiz chiziq — yuqoridagi formula, nuqtalar — $\pm$ bitta standart chetlanish tarqoqligi bilan 20 000 qadamli simulyatsiya, shtrix — $\mu$ ga proporsional o‘suvchi SGD qadami. $\mu/\sigma=0{,}3$ da formula $0{,}287$, simulyatsiya — $\pm0{,}216$ tarqoqlik bilan $0{,}298$ beradi. Kuchsiz signalda tarqoqlik $\sqrt{(1-\beta_1)/(1+\beta_1)}\approx0{,}23$ ga yaqin: $\beta_1$ ni kamaytiring — qadamlar tartibsizroq bo‘ladi.
Qadam qanchalik katta bo‘lishi mumkin

Odatda $|\hat m_t|\le\sqrt{\hat v_t}$ va qadam $\eta$ dan oshmaydi, lekin bu teorema emas. Agar gradiyent nol bo‘lib, birdan $g$ ga aylansa, katta $t$ larda $m_t=(1-\beta_1)g$, $v_t=(1-\beta_2)g^2$ va qadam $\eta(1-\beta_1)/\sqrt{1-\beta_2}\approx3{,}16\,\eta$ ga teng — bu holatni Kingma va Ba ko‘rib chiqadi. Aniq yuqori chegara vaznli yig‘indilar uchun Koshi — Bunyakovskiy tengsizligidan kelib chiqadi:

$$\frac{|m_t|}{\sqrt{v_t}}\le\frac{1-\beta_1}{\sqrt{(1-\beta_2)\,(1-\beta_1^2/\beta_2)}}\approx7{,}27$$

($\beta_1^2<\beta_2$ da). Unga gradiyent har qadamda $\beta_2/\beta_1\approx1{,}11$ marta o‘sganda erishiladi. Demak, Adam qadami har qanday gradiyentlarda $\eta$ tartibidagi kattalik bilan chegaralangan — ularning portlashidan ichki himoya.

Xususiy holatlar

  • $\beta_1=\beta_2=0$: $\hat m_t=g_t$, $\sqrt{\hat v_t}=|g_t|$, qadam $\eta\operatorname{sign}(g_t)$ — ishorali gradiyentli tushish (signSGD).
  • $\beta_1=0$: siljishni tuzatishli RMSProp.
  • $\epsilon\gg\sqrt{\hat v_t}$: qadam $\approx(\eta/\epsilon)\,\hat m_t$ — $\eta/\epsilon$ tezlikli inersiyali SGD.
  • Adam — diagonal oldindan shartlovchi: u har bir koordinatani alohida masshtablaydi va o‘qlarni bura olmaydi (SGD sahifasidagi 6-rasmga qarang).

Formula ortidagi matematika

To‘rt qator ortida yashiringan narsalarni jamlaymiz.

  • Vaznli o‘rtacha sifatida EMA. $\hat m_t=\sum_i w_i g_i$, vaznlar $w_i=(1-\beta_1)\beta_1^{t-i}/(1-\beta_1^t)$ musbat va yig‘indisi 1 ga teng. Vazn taxminan har $\ln2/(1-\beta)$ qadamda ikki marta kamayadi: $\beta_1=0{,}9$ uchun 7 va $\beta_2=0{,}999$ uchun 693.
  • Samarali oyna $1/(1-\beta)$: $m$ taxminan oxirgi 10 ta gradiyentni, $v$ — taxminan 1000 tasini o‘rtachalaydi. Yo‘nalish tez, masshtab esa sekin va shuning uchun barqaror javob beradi.
  • Ikkinchi moment — dispersiya emas. $v$ $\mathbb E[g^2]=\mu^2+\sigma^2$ ni, ya’ni gradiyentning «markazlashtirilmagan» kattaligini baholaydi. Shuning uchun toza signalda qadam cheksiz emas, $\approx\eta$.
  • Nyuton usuli bilan bog‘liqlik. Ba’zan $\sqrt v$ egrilikni yaqinlashtiradi deyishadi. Bu faqat qisman to‘g‘ri: $v$ — empirik Fisher matritsasi diagonalining bahosi (mini-batch gradiyentlari bo‘yicha), ba’zi yo‘qotishlar uchun u minimum yonida gessianga yaqin, lekin Adam undan kvadrat ildiz oladi. Adam’ni Nyuton yaqinlashuvi emas, qadamni normallashtirish deb tushunish ishonchliroq.
Yaqinlashish: qarshi misol va AMSGrad

Qavariq masalalar uchun Adam yaqinlashishining dastlabki isbotida xato bor edi. Reddi, Keyl va Kumar (2018) Adam yomonroq nuqtaga yaqinlashadigan oddiy qavariq masala tuzishdi: kamdan-kam, lekin katta gradiyent $v_t$ da tez «unutiladi», chunki $\beta_2$-xotira chekli, va samarali tezlik $\eta/\sqrt{\hat v_t}$ o‘sishi mumkin.

Ularning tuzatmasi AMSGrad $\hat v_t=\max(\hat v_{t-1},v_t)$ dan foydalanadi — samarali tezlik endi o‘smaydi va qavariq holatda yaqinlashish isbotlanadi. Amaliyotda AMSGrad kamdan-kam hollarda Adam’dan sezilarli yaxshiroq (PyTorch’da — amsgrad=True bayrog‘i). Qavariq bo‘lmagan masalalar uchun kafolatlar kamayuvchi tezlik va yetarlicha katta $\beta_2$ da olingan.

3D’da optimizatorlar poygasi

Beshta usulni ikkita sirtda solishtiramiz. Birinchisi — chuqurli plato: $f=1-e^{-q(x,y)}$, $q=0{,}2(x-1)^2+1{,}2(y-0{,}5)^2$. Chuqurlikdan uzoqda $f\approx1$, gradiyent juda kichik, chuqurlikning o‘zi esa cho‘ziq. Ikkinchisi — Rozenbrok banani.

5-rasm. Chapda 3D sirt (uni aylantirish mumkin), o‘ngda yuqoridan ko‘rinish; startni sudrab ko‘chirish mumkin, «Boshlash» poygani qayta ko‘rsatadi. $(-2{,}4;\,-1{,}5)$ start nuqtasida gradiyent $4\cdot10^{-3}$ tartibida: $\eta=0{,}3$ li SGD plato bo‘ylab sudraladi va $f<0{,}01$ ga faqat 246 qadamda yetadi, Momentum — 61 da, RMSProp — 44 da, Adam — 58 da, AdamW — 53 da. Lekin AdamW $(1;\,0{,}5)$ minimumda emas, $f=9\cdot10^{-5}$ bo‘lgan $(0{,}979;\,0{,}498)$ da to‘xtaydi: vaznlar so‘nishi nolga tortadi. Rozenbrokda 2000 qadam ichida: Momentum — 416 qadam, Adam — 717, AdamW — 818, SGD va RMSProp esa $f<0{,}01$ ga yetmaydi.
Poyga nimani o‘rgatadi

Adaptiv usullar gradiyentlar yomon masshtablangan joyda yutadi: platoda ularning qadami $\eta$ tartibida qoladi, SGD’niki esa juda kichik gradiyentga proporsional. Lekin yaxshi sozlangan inersiya ulardan o‘zib ketishi mumkin (Rozenbrok), vaznlar so‘nishi esa yechimni siljitadi — bu xato emas, regulyarizatsiya. Universal g‘olib yo‘q.

AdamW: vaznlarning to‘g‘ri so‘nishi

Klassik $L_2$-regulyarizatsiya yo‘qotishga $\tfrac\lambda2\|\theta\|^2$, ya’ni gradiyentga $\lambda\theta$ qo‘shadi. SGD uchun bu har qadamda vaznlarni $1-\eta\lambda$ ga ko‘paytirish bilan bir xil (vaznlar so‘nishi, weight decay). Adam uchun — yo‘q: $\lambda\theta$ qo‘shiluvchi $m$ va $v$ ga tushadi va $\sqrt{\hat v_t}$ ga bo‘linadi. Loshchilov va Xatter (2017; ICLR 2019) so‘nishni gradiyentdan ajratishni taklif qilishdi:

$$\text{Adam}+L_2:\quad \begin{aligned}g_t&=\nabla L(\theta_{t-1})+\lambda\,\theta_{t-1}\\ \theta_t&=\theta_{t-1}-\eta\,\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}\end{aligned}$$
$$\text{AdamW}:\quad \theta_t=\theta_{t-1}-\eta\Bigl(\frac{\hat m_t}{\sqrt{\hat v_t}+\epsilon}+\lambda\,\theta_{t-1}\Bigr)$$

AdamW’da momentlar faqat yo‘qotish gradiyenti bo‘yicha hisoblanadi, barcha vaznlar esa qadam boshiga bir xil $\eta\lambda$ tezlikda so‘nadi. $L_2$ li Adam’da har bir vazn so‘nishi uning $\sqrt{\hat v_t}$ siga bo‘linadi: katta gradiyentli vaznlar deyarli regulyarizatsiya qilinmaydi, yo‘qotish gradiyenti yo‘q vaznlar esa $\lambda$ dan qat’i nazar qadam boshiga $\approx\eta$ o‘zgarmas tezlikda qisqaradi.

6-rasm. $\theta=1$ dan boshlanadigan uchta vazn; ularning ma’lumot gradiyenti ishorasini almashtiradi, $\pm c$ (o‘rtacha nol), $c=0$, $0{,}1$ va $10$. Tezlik $\eta=0{,}01$, $\lambda=0{,}1$, 1000 qadam. AdamW (binafsha) uchalasini deyarli bir xil, $0{,}368$ va $0{,}361$ gacha kamaytiradi — $e^{-\eta\lambda t}=e^{-1}\approx0{,}37$ ga yaqin. $L_2$ li Adam (to‘q sariq) gradiyentsiz vaznni nolga tushiradi (213-qadamdayoq $0{,}01$ dan past), $c=0{,}1$ li vaznni $0{,}0003$ gacha qisqartiradi va $c=10$ li vaznga deyarli tegmaydi — unda $0{,}889$ qoladi.
Xulosa

Adam’da $L_2$-regulyarizatsiya va vaznlar so‘nishi — turli narsalar. So‘nish kerak bo‘lsa, AdamW dan foydalaning; PyTorch’da torch.optim.Adam(weight_decay=…) aynan gradiyent ichidagi $L_2$ ni amalga oshiradi (yangi versiyalardagi decoupled_weight_decay=True bayrog‘i yoqilmagan bo‘lsa). AdamW da standart $\lambda=0{,}01$; til modellari odatda $\lambda=0{,}1$ bilan va siljishlar hamda normallashtirish vaznlariga so‘nish qo‘llamasdan o‘qitiladi.

O‘qitishda Adam: qizdirish va jadval

Hatto adaptiv usulga ham tezlik jadvali kerak. Transformerlar uchun eng keng tarqalgan sxema — dastlabki yuzlab yoki minglab qadamlarda noldan $\eta_{\max}$ gacha chiziqli qizdirish (warmup), keyin $\eta_{\min}$ gacha kosinusli pasaytirish:

$$\eta_t=\eta_{\max}\,\frac{t}{T_w}\qquad(t\le T_w)$$
$$\eta_t=\eta_{\min}+\tfrac12(\eta_{\max}-\eta_{\min})\bigl(1+\cos\pi p\bigr),\quad p=\frac{t-T_w}{T-T_w}$$
7-rasm. Shovqinli kvadratik masalada Adam (egriliklari $0{,}01$ dan 1 gacha bo‘lgan 10 parametr, gradiyent shovqini $0{,}05$), $\eta_{\max}=0{,}05$, 2000 qadam. Yuqorida — tezlik, pastda — yo‘qotish (logarifmik shkala). O‘zgarmas $\eta$ bilan yo‘qotish $5{,}6\cdot10^{-3}$ shovqin darajasida tiqilib qoladi (oxirgi 100 qadam o‘rtachasi); 200 qadamli qizdirish va $0{,}1\,\eta_{\max}$ gacha kosinus bilan — $7{,}1\cdot10^{-4}$, $7{,}9$ marta past. Bu yerda qizdirish startni biroz kechiktiradi xolos; uning foydasi chuqur tarmoqlarda namoyon bo‘ladi.

Nega pasaytirish yordam beradi: xossalar bo‘limidan ma’lumki, minimum yonida Adam qadami signal/shovqin nisbatiga ko‘paytirilgan $\eta$ ga proporsional. $\eta$ qanchalik kichik bo‘lsa, vaznlar minimum atrofida titraydigan bulut shunchalik kichik.

Nega qizdirish kerak: dastlabki qadamlarda $\hat v_t$ bir nechta gradiyent bo‘yicha baholangan va kuchli shovqinli, vaznlar esa endigina initsializatsiya qilingan va gradiyentlar ayniqsa katta. Lyu va hammualliflar (RAdam, 2019) o‘qitish boshida $\eta/\sqrt{\hat v_t}$ samarali tezlik dispersiyasi katta ekanini ko‘rsatishdi va uni analitik to‘g‘rilashni taklif qilishdi; qizdirish o‘sha muammoni soddaroq hal qiladi.

Til modellari uchun odatiy retsept

$\beta_1=0{,}9$, $\beta_2=0{,}95$, $\lambda=0{,}1$ li AdamW, gradiyentni 1 norma bo‘yicha kesish, ~2000 qadam qizdirish va $\eta_{\max}$ ning 10% igacha kosinus — masalan, LLaMA o‘qitilishi shunday tasvirlangan. Kichikroq $\beta_2$ (1000 o‘rniga 20 qadamlik oyna) gradiyent sakrashlariga tezroq javob beradi va katta modellarni o‘qitishni barqarorroq qiladi.

Kodda: noldan va PyTorch’da

Noldan amalga oshirish — yigirma qator. decoupled bayrog‘i vaznlar so‘nishini AdamW va gradiyent ichidagi $L_2$ orasida almashtiradi.

pythonimport numpy as np

class Adam:
    """Adam; weight_decay > 0 va decoupled=True bo‘lsa — AdamW. torch.optim’dagidek."""
    def __init__(self, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0.0, decoupled=True):
        self.lr, (self.b1, self.b2), self.eps = lr, betas, eps
        self.wd, self.decoupled = weight_decay, decoupled
        self.m = self.v = None
        self.t = 0

    def step(self, theta, g):
        if self.m is None:
            self.m, self.v = np.zeros_like(theta), np.zeros_like(theta)
        if self.wd and not self.decoupled:
            g = g + self.wd * theta                        # gradiyent ichidagi L2 (Adam)
        self.t += 1
        self.m = self.b1 * self.m + (1 - self.b1) * g      # inersiya
        self.v = self.b2 * self.v + (1 - self.b2) * g * g  # masshtab
        m_hat = self.m / (1 - self.b1 ** self.t)           # siljishni tuzatish
        v_hat = self.v / (1 - self.b2 ** self.t)
        if self.wd and self.decoupled:
            theta = theta - self.lr * self.wd * theta      # AdamW: so‘nish alohida
        return theta - self.lr * m_hat / (np.sqrt(v_hat) + self.eps)

# Jadvaldagi uchta qadam: g = 0.5, −0.2, 0.4 (qadam η birliklarida bo‘lishi uchun lr = 1)
opt, th = Adam(lr=1.0), np.zeros(1)
for g in [0.5, -0.2, 0.4]:
    new = opt.step(th, np.array([g]))
    print(f"t={opt.t}: m̂={opt.m[0] / (1 - 0.9 ** opt.t):.4f}  qadam/η={th[0] - new[0]:.4f}")
    th = new
# t=1: m̂=0.5000  qadam/η=1.0000
# t=2: m̂=0.1316  qadam/η=0.3456
# t=3: m̂=0.2306  qadam/η=0.5955

# Masshtab invariantligi: ×1000 gradiyentlar o‘sha qadamlarni beradi
rng = np.random.default_rng(0)
a, b, x, y = Adam(lr=0.01), Adam(lr=0.01), np.zeros(1), np.zeros(1)
for t in range(100):
    g = rng.normal(1.0, 0.5, size=1)
    x, y = a.step(x, g), b.step(y, 1000 * g)
print(x, y, abs(x - y))   # [-0.95081564] [-0.95081565] [8.64890637e-09] — farq faqat ε tufayli

Natija «Formula mayda detallarigacha» bo‘limidagi jadval bilan mos keladi, torch.optim.Adam esa o‘sha birinchi qadamda vaznni aynan $\eta$ ga siljitadi. AdamW, alohida so‘nish guruhlari, qizdirish va kosinus bilan odatiy o‘qitish sikli:

pythonimport math
import torch
import torch.nn.functional as F

decay = [p for p in model.parameters() if p.ndim >= 2]     # vazn matritsalari
no_decay = [p for p in model.parameters() if p.ndim < 2]   # siljishlar va normallashtirishlar
opt = torch.optim.AdamW([{"params": decay, "weight_decay": 0.1},
                         {"params": no_decay, "weight_decay": 0.0}],
                        lr=3e-4, betas=(0.9, 0.95), eps=1e-8)

total, warmup = 10_000, 500
def lr_factor(step):                       # lr ko‘paytuvchisi: qizdirish, keyin 10% gacha kosinus
    if step < warmup:
        return (step + 1) / warmup
    p = (step - warmup) / (total - warmup)
    return 0.1 + 0.9 * 0.5 * (1 + math.cos(math.pi * p))
sched = torch.optim.lr_scheduler.LambdaLR(opt, lr_factor)

for step, (x, y) in zip(range(total), loader):
    loss = F.mse_loss(model(x), y)
    opt.zero_grad(set_to_none=True)
    loss.backward()
    torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)  # gradiyentni kesish
    opt.step()
    sched.step()                          # jadval — har bir qadamdan keyin
Xotira

Adam $m$ va $v$ ni saqlaydi — har bir parametrga ikkita son. 7 mlrd parametrli model uchun bu faqat optimizator holati uchun float32 da $2\cdot7\cdot10^9\cdot4$ bayt $=56$ GB. 8-bitli optimizatorlar, holatni sharding qilish (ZeRO) va Adafactor kabi tejamkor variantlar shundan kelib chiqqan.

Giperparametrlar va amaliyot

ParametrStandartOdatiy diapazon va ma’nosi
$\eta$$10^{-3}$$10^{-4}$–$3\cdot10^{-3}$; transformerlar — taxminan $3\cdot10^{-4}$ va model o‘sishi bilan kamroq; qo‘shimcha o‘qitish — $10^{-5}$–$5\cdot10^{-5}$
$\beta_1$$0{,}9$deyarli hech qachon o‘zgartirilmaydi; yo‘nalish oynasi 10 qadam
$\beta_2$$0{,}999$katta transformerlar uchun $0{,}95$–$0{,}98$: sakrashlarga tezroq javob beradi
$\epsilon$$10^{-8}$past aniqlikda yoki beqarorlikda kattaroq ($10^{-6}$ va undan yuqori); juda katta $\epsilon$ Adam’ni inersiyali SGD’ga aylantiradi
$\lambda$ (AdamW)$0{,}01$$0{,}01$–$0{,}1$; siljishlar va normallashtirishlarga qo‘llanmaydi
qizdirish—yuzlab qadamdan bir necha ming qadamgacha, o‘qitishning 1–5% i
  • Standart qiymatlardan boshlang. $\eta=10^{-3}$ (transformerlar uchun $3\cdot10^{-4}$), $\beta=(0{,}9;\,0{,}999)$, $\lambda=0{,}01$ li AdamW. Avval $\eta$, keyin $\lambda$ va jadvalni tanlash kerak.
  • Norma bo‘yicha ($1{,}0$) gradiyentni kesish deyarli tekin va kamdan-kam chetga chiqishlardan qutqaradi.
  • Vaznlar bilan birga optimizator holatini saqlang (opt.state_dict()): nol $m$ va $v$ bilan o‘qitishni davom ettirganda dastlabki qadamlar yana «sovuq» bo‘ladi.
  • SGD qachon yaxshiroq. Kompyuter ko‘rishi masalalarida yaxshi sozlangan inersiyali SGD ko‘pincha yaxshiroq umumlashtiradi (Uilson va boshq., 2017). Transformerlar, embeddingli tavsiya tizimlari va siyrak gradiyentli masalalarda Adam yutadi.

Ko‘p uchraydigan xatolar

  1. AdamW o‘rniga Adam(weight_decay=…). Bu gradiyent ichidagi $L_2$: so‘nish $\sqrt{\hat v_t}$ ga bo‘linadi va notekis ishlaydi (6-rasm).
  2. SGD’dan olingan tezlik. $\eta=0{,}1$ inersiyali SGD uchun yaxshi, lekin Adam uchun bu har qadamda vazn birliklarida taxminan $0{,}1$ qadam — o‘qitish deyarli albatta uzoqlashadi.
  3. Barcha parametrlarga so‘nish. Siljishlar va LayerNorm/BatchNorm vaznlari odatda weight decay’dan chiqariladi: ularni nolga qisish regulyarizatsiya qilmaydi, zarar keltiradi.
  4. Noto‘g‘ri $\epsilon$. Juda kichigi float16 da nolgacha yaxlitlanadi, juda kattasi ($\gtrsim\sqrt{\hat v}$) moslashuvni jimgina o‘chiradi — qadam $(\eta/\epsilon)\hat m$ ga aylanadi.
  5. Transformerda qizdirishsiz. Shovqinli $\hat v_t$ bahosi bilan birinchi qadamlardanoq katta $\eta$ ko‘pincha o‘qitish boshida yo‘qotish portlashiga olib keladi.
  6. Jadval noto‘g‘ri qadamda. Jadval qadamlar uchun mo‘ljallangan joyda scheduler.step() ni davrda bir marta chaqirish (yoki aksincha) qizdirishni yuzlab marta cho‘zadi yoki qisqartiradi.
  • SGD, Momentum va RMSProp: Adam surati — EMA-inersiya, maxraji — RMSProp’dan $\sqrt v$; o‘sha yerda barqarorlik sharti va shartlanganlik soni.
  • Kross-entropiya va softmax: til modellarida AdamW minimallashtiradigan yo‘qotish; uning logitlar bo‘yicha $s-y$ gradiyenti oxirgi qatlamning $g_t$ sidir.
  • MSE va Huber: maqsad o‘zgaruvchi masshtabi gradiyent masshtabini belgilaydi — Adam unga befarq, SGD esa yo‘q.
  • GELU va SiLU: AdamW bilan o‘qitiladigan transformerlar aktivatsiyalari.

Xulosa

1) Adam ikkita eksponensial o‘rtachani saqlaydi: gradiyentning $m_t$ si (yo‘nalish, ~10 qadamlik oyna) va uning kvadratining $v_t$ si (masshtab, ~1000 qadamlik oyna). 2) Ikkalasi noldan boshlanadi va $1-\beta^t$ marta kam baholangan; tuzatish ularni siljimagan qiladi, usiz dastlabki qadamlar oshib ketadi — birinchi qadamda $3{,}16$ marta. 3) $\eta\,\hat m_t/(\sqrt{\hat v_t}+\epsilon)$ qadam gradiyent masshtabiga bog‘liq emas, toza signalda $\eta$ tartibida va shovqinda signal/shovqin nisbatiga proporsional. 4) AdamW vaznlar so‘nishini gradiyentdan ajratadi — barcha vaznlar bir tekis so‘nadi. 5) Amaliyotda: AdamW, qizdirish, kosinus, gradiyentni kesish; $\eta$ — asosiy giperparametr.

O‘zingizni tekshiring

1. Siljishni tuzatishli Adam’ning birinchi qadami, $g_1=-3$. Vazn qanday o‘zgaradi?
2. $\beta_2=0{,}999$ da $v_t$ taxminan nechta oxirgi qadamni «eslaydi»?
3. Modelning barcha gradiyentlari 100 ga ko‘paytirildi (masalan, yo‘qotish 100 ga ko‘paytirildi). Adam qadamlari nima bo‘ladi?
4. AdamW $L_2$-regulyarizatsiyali Adam’dan nimasi bilan farq qiladi?
5. $\beta_1=0{,}9$, $\beta_2=0{,}999$ da siljishni tuzatishsiz Adam’ning birinchi qadami necha marta oshib ketgan?