9.7 Atgalinis sklidimas laike

Jei atlikote 9.5 skyrelis pratimus, matėte, kad gradientų apkarpymas yra gyvybiškai svarbus siekiant užkirsti kelią retkarčiais pasitaikantiems milžiniškiems gradientams destabilizuoti apmokymą. Užsiminėme, kad sprogstantys gradientai kyla iš atgalinio sklidimo per ilgas sekas. Prieš pristatydami daugybę šiuolaikinių RNN architektūrų, atidžiau pažvelkime, kaip atgalinis sklidimas veikia sekų modeliuose, matematiškai išsamiai. Tikimės, kad ši diskusija suteiks tikslumo nykstančių ir sprogstančių gradientų sampratai. Jei prisimenate mūsų diskusiją apie tiesioginį ir atgalinį sklidimą per skaičiavimo grafus, kai pristatėme MLP 5.3 skyrelis, tai tiesioginis sklidimas RNN turėtų būti santykinai paprastas. Atgalinio sklidimo taikymas RNN vadinamas atgaliniu sklidimu laike (Werbos, 1990). Ši procedūra reikalauja išskleisti (arba išvynioti) RNN skaičiavimo grafą po vieną laiko žingsnį. Išvyniotas RNN iš esmės yra tiesioginio sklidimo neuroninis tinklas su ta ypatinga savybe, kad tie patys parametrai kartojami visame išvyniotame tinkle, pasirodydami kiekviename laiko žingsnyje. Tada, kaip ir bet kuriame tiesioginio sklidimo neuroniniame tinkle, galime taikyti grandinės taisyklę, atgaline kryptimi sklidindami gradientus per išvyniotą tinklą. Gradientas kiekvieno parametro atžvilgiu turi būti susumuotas per visas vietas, kuriose parametras pasitaiko išvyniotame tinkle. Tokio svorių susiejimo tvarkymas turėtų būti pažįstamas iš mūsų skyrių apie konvoliucinius neuroninius tinklus.

Komplikacijų kyla dėl to, kad sekos gali būti gana ilgos. Nėra neįprasta dirbti su teksto sekomis, sudarytomis iš daugiau nei tūkstančio teksto vienetų. Atkreipkite dėmesį, kad tai kelia problemų ir skaičiavimo (per daug atminties), ir optimizavimo (skaitinis nestabilumas) požiūriu. Įvestis iš pirmojo žingsnio praeina per daugiau nei 1000 matricų sandaugų, kol pasiekia išvestį, ir dar 1000 matricų sandaugų reikia gradientui apskaičiuoti. Dabar išanalizuosime, kas gali nepavykti ir kaip su tuo susidoroti praktikoje.

9.7.1 Gradientų RNN analizė

Pradedame nuo supaprastinto modelio, kaip veikia RNN. Šis modelis ignoruoja paslėptosios būsenos specifikos ir jos atnaujinimo detales. Matematinis žymėjimas čia aiškiai neskiria skaliarų, vektorių ir matricų. Tik bandome susikurti šiek tiek intuicijos. Šiame supaprastintame modelyje hth_t žymime paslėptąją būseną, xtx_t – įvestį, o oto_t – išvestį laiko žingsniu tt. Prisiminkite mūsų diskusijas 9.4.2 skyrelis, kad įvestis ir paslėptoji būsena gali būti sujungtos prieš dauginant iš vieno paslėptojo sluoksnio svorio kintamojo. Todėl whw_\textrm{h} ir wow_\textrm{o} naudojame paslėptojo sluoksnio ir išvesties sluoksnio svoriams žymėti atitinkamai. Dėl to paslėptosios būsenos ir išvestys kiekvienu laiko žingsniu yra

ht=f(xt,ht−1,wh),ot=g(ht,wo),(9.7.1)\begin{aligned}h_t &= f(x_t, h_{t-1}, w_\textrm{h}),\\o_t &= g(h_t, w_\textrm{o}),\end{aligned} \tag{9.7.1}

kur ff ir gg yra atitinkamai paslėptojo sluoksnio ir išvesties sluoksnio transformacijos. Taigi turime reikšmių grandinę {…,(xt−1,ht−1,ot−1),(xt,ht,ot),…}\{\ldots, (x_{t-1}, h_{t-1}, o_{t-1}), (x_{t}, h_{t}, o_t), \ldots\}, kurios priklauso viena nuo kitos per rekurentinį skaičiavimą. Tiesioginis sklidimas yra gana paprastas. Reikia tik eiti ciklu per trejetus (xt,ht,ot)(x_t, h_t, o_t) po vieną laiko žingsnį. Neatitikimas tarp išvesties oto_t ir norimo tikslo yty_t tada įvertinamas tikslo funkcija per visus TT laiko žingsnių taip:

L(x1,…,xT,y1,…,yT,wh,wo)=1T∑t=1Tl(yt,ot).L(x_1, \ldots, x_T, y_1, \ldots, y_T, w_\textrm{h}, w_\textrm{o}) = \frac{1}{T}\sum_{t=1}^T l(y_t, o_t).

Atgaliniam sklidimui reikalai yra šiek tiek sudėtingesni, ypač kai skaičiuojame gradientus tikslo funkcijos LL parametrų whw_\textrm{h} atžvilgiu. Konkrečiai, pagal grandinės taisyklę,

∂L∂wh=1T∑t=1T∂l(yt,ot)∂wh=1T∑t=1T∂l(yt,ot)∂ot∂g(ht,wo)∂ht∂ht∂wh.(9.7.2)\begin{aligned}\frac{\partial L}{\partial w_\textrm{h}} & = \frac{1}{T}\sum_{t=1}^T \frac{\partial l(y_t, o_t)}{\partial w_\textrm{h}} \\& = \frac{1}{T}\sum_{t=1}^T \frac{\partial l(y_t, o_t)}{\partial o_t} \frac{\partial g(h_t, w_\textrm{o})}{\partial h_t} \frac{\partial h_t}{\partial w_\textrm{h}}.\end{aligned} \tag{9.7.2}

Pirmąjį ir antrąjį sandaugos narį (9.7.2) lengva apskaičiuoti. Trečiasis narys ∂ht/∂wh\partial h_t/\partial w_\textrm{h} yra ten, kur reikalai pasidaro sudėtingi, nes turime rekurentiškai apskaičiuoti parametro whw_\textrm{h} poveikį hth_t. Pagal rekurentinį skaičiavimą (9.7.1), hth_t priklauso ir nuo ht−1h_{t-1}, ir nuo whw_\textrm{h}, kur ht−1h_{t-1} skaičiavimas taip pat priklauso nuo whw_\textrm{h}. Taigi, įvertinus pilnąją hth_t išvestinę whw_\textrm{h} atžvilgiu pagal grandinės taisyklę, gaunama

∂ht∂wh=∂f(xt,ht−1,wh)∂wh+∂f(xt,ht−1,wh)∂ht−1∂ht−1∂wh.(9.7.3)\frac{\partial h_t}{\partial w_\textrm{h}}= \frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial w_\textrm{h}} +\frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial h_{t-1}} \frac{\partial h_{t-1}}{\partial w_\textrm{h}}. \tag{9.7.3}

Kad išvestume aukščiau pateiktą gradientą, tarkime, kad turime tris sekas {at},{bt},{ct}\{a_{t}\},\{b_{t}\},\{c_{t}\}, tenkinančias a0=0a_{0}=0 ir at=bt+ctat−1a_{t}=b_{t}+c_{t}a_{t-1}, kai t=1,2,…t=1, 2,\ldots. Tada, kai t≥1t\geq 1, lengva parodyti, kad

at=bt+∑i=1t−1(∏j=i+1tcj)bi.(9.7.4)a_{t}=b_{t}+\sum_{i=1}^{t-1}\left(\prod_{j=i+1}^{t}c_{j}\right)b_{i}. \tag{9.7.4}

Pakeitę ata_t, btb_t ir ctc_t pagal

at=∂ht∂wh,bt=∂f(xt,ht−1,wh)∂wh,ct=∂f(xt,ht−1,wh)∂ht−1,\begin{aligned}a_t &= \frac{\partial h_t}{\partial w_\textrm{h}},\\ b_t &= \frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial w_\textrm{h}}, \\ c_t &= \frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial h_{t-1}},\end{aligned}

gradiento skaičiavimas (9.7.3) tenkina at=bt+ctat−1a_{t}=b_{t}+c_{t}a_{t-1}. Taigi, pagal (9.7.4), galime pašalinti rekurentinį skaičiavimą (9.7.3) su

∂ht∂wh=∂f(xt,ht−1,wh)∂wh+∑i=1t−1(∏j=i+1t∂f(xj,hj−1,wh)∂hj−1)∂f(xi,hi−1,wh)∂wh.(9.7.5)\frac{\partial h_t}{\partial w_\textrm{h}}=\frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial w_\textrm{h}}+\sum_{i=1}^{t-1}\left(\prod_{j=i+1}^{t} \frac{\partial f(x_{j},h_{j-1},w_\textrm{h})}{\partial h_{j-1}} \right) \frac{\partial f(x_{i},h_{i-1},w_\textrm{h})}{\partial w_\textrm{h}}. \tag{9.7.5}

Nors galime naudoti grandinės taisyklę ∂ht/∂wh\partial h_t/\partial w_\textrm{h} apskaičiuoti rekursyviai, ši grandinė gali tapti labai ilga, kai tik tt didelis. Aptarkime keletą strategijų, kaip susidoroti su šia problema.

9.7.1.1 Pilnas skaičiavimas

Viena idėja gali būti apskaičiuoti pilną sumą (9.7.5). Tačiau tai labai lėta, o gradientai gali sprogti, nes subtilūs pradinių sąlygų pokyčiai gali potencialiai labai paveikti rezultatą. Tai yra, galėtume pamatyti kažką panašaus į drugelio efektą, kai minimalūs pradinių sąlygų pokyčiai lemia neproporcingus rezultato pokyčius. Tai paprastai nepageidautina. Juk ieškome tvirtų įvertinių, kurie gerai apibendrina. Todėl ši strategija praktikoje beveik niekada nenaudojama.

9.7.1.2 Laiko žingsnių nukirtimas

Alternatyviai, galime nukirsti sumą (9.7.5) po τ\tau žingsnių. Tai yra tai, ką iki šiol aptarinėjome. Tai veda prie tikrojo gradiento aproksimacijos, tiesiog nutraukiant sumą ties ∂ht−τ/∂wh\partial h_{t-\tau}/\partial w_\textrm{h}. Praktikoje tai veikia gana gerai. Tai dažniausiai vadinama nukirstu atgaliniu sklidimu laike (Jaeger, 2002). Viena iš to pasekmių yra ta, kad modelis pirmiausia sutelkia dėmesį į trumpalaikę įtaką, o ne į ilgalaikes pasekmes. Tai iš tikrųjų pageidautina, nes šališkai nukreipia įvertį link paprastesnių ir stabilesnių modelių.

9.7.1.3 Atsitiktinis nukirtimas

Galiausiai galime pakeisti ∂ht/∂wh\partial h_t/\partial w_\textrm{h} atsitiktiniu dydžiu, kuris yra teisingas laukiamąja prasme, bet nukirsta seką. Tai pasiekiama naudojant seką ξt\xi_t su iš anksto nustatytais 0≤πt≤10 \leq \pi_t \leq 1, kur P(ξt=0)=1−πtP(\xi_t = 0) = 1-\pi_t ir P(ξt=πt−1)=πtP(\xi_t = \pi_t^{-1}) = \pi_t, taigi E[ξt]=1E[\xi_t] = 1. Tai naudojame gradientui ∂ht/∂wh\partial h_t/\partial w_\textrm{h} (9.7.3) pakeisti

zt=∂f(xt,ht−1,wh)∂wh+ξt∂f(xt,ht−1,wh)∂ht−1∂ht−1∂wh.z_t= \frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial w_\textrm{h}} +\xi_t \frac{\partial f(x_{t},h_{t-1},w_\textrm{h})}{\partial h_{t-1}} \frac{\partial h_{t-1}}{\partial w_\textrm{h}}.

Iš ξt\xi_t apibrėžimo išplaukia, kad E[zt]=∂ht/∂whE[z_t] = \partial h_t/\partial w_\textrm{h}. Kai tik ξt=0\xi_t = 0, rekurentinis skaičiavimas nutraukiamas tuo laiko žingsniu tt. Tai veda prie svertinės skirtingo ilgio sekų sumos, kur ilgos sekos yra retos, bet tinkamai persvertos. Šią idėją pasiūlė (Tallec ir Ollivier, 2017).

9.7.1.4 Strategijų palyginimas

Gradientų skaičiavimo RNN strategijų palyginimas. Iš viršaus į apačią: atsitiktinis nukirtimas, įprastas nukirtimas ir pilnas skaičiavimas.

9.7.1 pav. Gradientų skaičiavimo RNN strategijų palyginimas. Iš viršaus į apačią: atsitiktinis nukirtimas, įprastas nukirtimas ir pilnas skaičiavimas.

9.7.1 pav. iliustruoja tris strategijas, analizuojant pirmuosius kelis Laiko mašinos simbolius naudojant atgalinį sklidimą laike RNN:

  • Pirmoji eilutė yra atsitiktinis nukirtimas, kuris skaido tekstą į skirtingo ilgio segmentus.
  • Antroji eilutė yra įprastas nukirtimas, kuris skaido tekstą į vienodo ilgio posekius. Tai yra tai, ką darėme RNN eksperimentuose.
  • Trečioji eilutė yra pilnas atgalinis sklidimas laike, vedantis prie skaičiavimo požiūriu neįgyvendinamos išraiškos.

Deja, nors teoriškai patrauklus, atsitiktinis nukirtimas neveikia daug geriau nei įprastas nukirtimas, greičiausiai dėl keleto veiksnių. Pirma, stebėjimo poveikio po keleto atgalinio sklidimo žingsnių į praeitį pakanka priklausomybėms praktikoje užfiksuoti. Antra, padidėjusi dispersija neutralizuoja faktą, kad gradientas yra tikslesnis su daugiau žingsnių. Trečia, mes iš tikrųjų norime modelių, turinčių tik trumpą sąveikų nuotolį. Todėl įprastai nukirstas atgalinis sklidimas laike turi nedidelį reguliarizuojantį poveikį, kuris gali būti pageidautinas.

9.7.2 Atgalinis sklidimas laike išsamiai

Aptarę bendrąjį principą, aptarkime atgalinį sklidimą laike išsamiai. Priešingai nei analizėje 9.7.1 skyrelis, toliau parodysime, kaip apskaičiuoti tikslo funkcijos gradientus visų išskaidytų modelio parametrų atžvilgiu. Kad viskas būtų paprasta, nagrinėjame RNN be poslinkio parametrų, kurio aktyvacijos funkcija paslėptajame sluoksnyje naudoja tapatybės atvaizdavimą (ϕ(x)=x\phi(x)=x). Laiko žingsniui tt tegul vieno pavyzdžio įvestis ir tikslas yra atitinkamai xt∈Rd\mathbf{x}_t \in \mathbb{R}^d ir yty_t. Paslėptoji būsena ht∈Rh\mathbf{h}_t \in \mathbb{R}^h ir išvestis ot∈Rq\mathbf{o}_t \in \mathbb{R}^q apskaičiuojamos taip:

ht=Whxxt+Whhht−1,ot=Wqhht,\begin{aligned}\mathbf{h}_t &= \mathbf{W}_\textrm{hx} \mathbf{x}_t + \mathbf{W}_\textrm{hh} \mathbf{h}_{t-1},\\ \mathbf{o}_t &= \mathbf{W}_\textrm{qh} \mathbf{h}_{t},\end{aligned}

kur Whx∈Rh×d\mathbf{W}_\textrm{hx} \in \mathbb{R}^{h \times d}, Whh∈Rh×h\mathbf{W}_\textrm{hh} \in \mathbb{R}^{h \times h} ir Wqh∈Rq×h\mathbf{W}_\textrm{qh} \in \mathbb{R}^{q \times h} yra svorių parametrai. Pažymėkime l(ot,yt)l(\mathbf{o}_t, y_t) nuostolį laiko žingsniu tt. Mūsų tikslo funkcija, nuostoliai per TT laiko žingsnių nuo sekos pradžios, todėl yra

L=1T∑t=1Tl(ot,yt).L = \frac{1}{T} \sum_{t=1}^T l(\mathbf{o}_t, y_t).

Kad vizualizuotume priklausomybes tarp modelio kintamųjų ir parametrų skaičiavimo RNN metu, galime nubraižyti modelio skaičiavimo grafą, kaip parodyta 9.7.2 pav.. Pavyzdžiui, 3 laiko žingsnio paslėptųjų būsenų skaičiavimas, h3\mathbf{h}_3, priklauso nuo modelio parametrų Whx\mathbf{W}_\textrm{hx} ir Whh\mathbf{W}_\textrm{hh}, ankstesnio laiko žingsnio paslėptosios būsenos h2\mathbf{h}_2 ir dabartinio laiko žingsnio įvesties x3\mathbf{x}_3.

Skaičiavimo grafas, rodantis priklausomybes RNN modeliui su trimis laiko žingsniais. Dėžutės reiškia kintamuosius (neuždengtos) arba parametrus (uždengtos), o apskritimai – operatorius.

9.7.2 pav. Skaičiavimo grafas, rodantis priklausomybes RNN modeliui su trimis laiko žingsniais. Dėžutės reiškia kintamuosius (neuždengtos) arba parametrus (uždengtos), o apskritimai – operatorius.

Kaip ką tik minėta, modelio parametrai 9.7.2 pav. yra Whx\mathbf{W}_\textrm{hx}, Whh\mathbf{W}_\textrm{hh} ir Wqh\mathbf{W}_\textrm{qh}. Apskritai šio modelio apmokymas reikalauja gradientų skaičiavimo šių parametrų atžvilgiu ∂L/∂Whx\partial L/\partial \mathbf{W}_\textrm{hx}, ∂L/∂Whh\partial L/\partial \mathbf{W}_\textrm{hh} ir ∂L/∂Wqh\partial L/\partial \mathbf{W}_\textrm{qh}. Pagal 9.7.2 pav. priklausomybes galime eiti priešinga rodyklėms kryptimi, kad paeiliui apskaičiuotume ir saugotume gradientus. Kad lanksčiai išreikštume skirtingų formų matricų, vektorių ir skaliarų daugybą grandinės taisyklėje, toliau naudojame operatorių prod\textrm{prod}, aprašytą 5.3 skyrelis.

Visų pirma, tikslo funkcijos diferencijavimas modelio išvesties atžvilgiu bet kuriuo laiko žingsniu tt yra gana paprastas:

∂L∂ot=∂l(ot,yt)T⋅∂ot∈Rq.(9.7.6)\frac{\partial L}{\partial \mathbf{o}_t} = \frac{\partial l (\mathbf{o}_t, y_t)}{T \cdot \partial \mathbf{o}_t} \in \mathbb{R}^q. \tag{9.7.6}

Dabar galime apskaičiuoti tikslo gradientą išvesties sluoksnio parametro Wqh\mathbf{W}_\textrm{qh} atžvilgiu: ∂L/∂Wqh∈Rq×h\partial L/\partial \mathbf{W}_\textrm{qh} \in \mathbb{R}^{q \times h}. Remiantis 9.7.2 pav., tikslas LL priklauso nuo Wqh\mathbf{W}_\textrm{qh} per o1,…,oT\mathbf{o}_1, \ldots, \mathbf{o}_T. Pritaikius grandinės taisyklę, gaunama

∂L∂Wqh=∑t=1Tprod(∂L∂ot,∂ot∂Wqh)=∑t=1T∂L∂otht⊤,\frac{\partial L}{\partial \mathbf{W}_\textrm{qh}} = \sum_{t=1}^T \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{o}_t}, \frac{\partial \mathbf{o}_t}{\partial \mathbf{W}_\textrm{qh}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \mathbf{o}_t} \mathbf{h}_t^\top,

kur ∂L/∂ot\partial L/\partial \mathbf{o}_t pateikiamas (9.7.6).

Toliau, kaip parodyta 9.7.2 pav., paskutiniu laiko žingsniu TT tikslo funkcija LL priklauso nuo paslėptosios būsenos hT\mathbf{h}_T tik per oT\mathbf{o}_T. Todėl galime lengvai rasti gradientą ∂L/∂hT∈Rh\partial L/\partial \mathbf{h}_T \in \mathbb{R}^h naudodami grandinės taisyklę:

∂L∂hT=prod(∂L∂oT,∂oT∂hT)=Wqh⊤∂L∂oT.(9.7.7)\frac{\partial L}{\partial \mathbf{h}_T} = \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{o}_T}, \frac{\partial \mathbf{o}_T}{\partial \mathbf{h}_T} \right) = \mathbf{W}_\textrm{qh}^\top \frac{\partial L}{\partial \mathbf{o}_T}. \tag{9.7.7}

Sudėtingiau yra bet kuriam laiko žingsniui t<Tt < T, kur tikslo funkcija LL priklauso nuo ht\mathbf{h}_t per ht+1\mathbf{h}_{t+1} ir ot\mathbf{o}_t. Pagal grandinės taisyklę, paslėptosios būsenos gradientą ∂L/∂ht∈Rh\partial L/\partial \mathbf{h}_t \in \mathbb{R}^h bet kuriuo laiko žingsniu t<Tt < T galima rekurentiškai apskaičiuoti taip:

∂L∂ht=prod(∂L∂ht+1,∂ht+1∂ht)+prod(∂L∂ot,∂ot∂ht)=Whh⊤∂L∂ht+1+Wqh⊤∂L∂ot.(9.7.8)\frac{\partial L}{\partial \mathbf{h}_t} = \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{h}_{t+1}}, \frac{\partial \mathbf{h}_{t+1}}{\partial \mathbf{h}_t} \right) + \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{o}_t}, \frac{\partial \mathbf{o}_t}{\partial \mathbf{h}_t} \right) = \mathbf{W}_\textrm{hh}^\top \frac{\partial L}{\partial \mathbf{h}_{t+1}} + \mathbf{W}_\textrm{qh}^\top \frac{\partial L}{\partial \mathbf{o}_t}. \tag{9.7.8}

Analizei išskleidus rekurentinį skaičiavimą bet kuriam laiko žingsniui 1≤t≤T1 \leq t \leq T, gaunama

∂L∂ht=∑i=tT(Whh⊤)T−iWqh⊤∂L∂oT+t−i.(9.7.9)\frac{\partial L}{\partial \mathbf{h}_t}= \sum_{i=t}^T {\left(\mathbf{W}_\textrm{hh}^\top\right)}^{T-i} \mathbf{W}_\textrm{qh}^\top \frac{\partial L}{\partial \mathbf{o}_{T+t-i}}. \tag{9.7.9}

Iš (9.7.9) matome, kad šis paprastas tiesinis pavyzdys jau parodo kai kurias pagrindines ilgų sekų modelių problemas: jis apima potencialiai labai dideles Whh⊤\mathbf{W}_\textrm{hh}^\top laipsnius. Jame tikrinės reikšmės, mažesnės nei 1, išnyksta, o didesnės nei 1 – diverguoja. Tai skaitiniu požiūriu nestabilu, o tai pasireiškia nykstančiais ir sprogstančiais gradientais. Vienas būdas tai spręsti yra nukirsti laiko žingsnius skaičiavimo požiūriu patogiu dydžiu, kaip aptarta 9.7.1 skyrelis. Praktikoje šį nukirtimą taip pat galima atlikti atjungiant gradientą po tam tikro laiko žingsnių skaičiaus. Vėliau pamatysime, kaip sudėtingesni sekų modeliai, tokie kaip ilga trumpalaikė atmintis, gali tai dar labiau sušvelninti.

Galiausiai 9.7.2 pav. rodo, kad tikslo funkcija LL priklauso nuo modelio parametrų Whx\mathbf{W}_\textrm{hx} ir Whh\mathbf{W}_\textrm{hh} paslėptajame sluoksnyje per paslėptąsias būsenas h1,…,hT\mathbf{h}_1, \ldots, \mathbf{h}_T. Kad apskaičiuotume gradientus šių parametrų atžvilgiu ∂L/∂Whx∈Rh×d\partial L / \partial \mathbf{W}_\textrm{hx} \in \mathbb{R}^{h \times d} ir ∂L/∂Whh∈Rh×h\partial L / \partial \mathbf{W}_\textrm{hh} \in \mathbb{R}^{h \times h}, taikome grandinės taisyklę, gaudami

∂L∂Whx=∑t=1Tprod(∂L∂ht,∂ht∂Whx)=∑t=1T∂L∂htxt⊤,∂L∂Whh=∑t=1Tprod(∂L∂ht,∂ht∂Whh)=∑t=1T∂L∂htht−1⊤,\begin{aligned} \frac{\partial L}{\partial \mathbf{W}_\textrm{hx}} &= \sum_{t=1}^T \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{h}_t}, \frac{\partial \mathbf{h}_t}{\partial \mathbf{W}_\textrm{hx}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \mathbf{h}_t} \mathbf{x}_t^\top,\\ \frac{\partial L}{\partial \mathbf{W}_\textrm{hh}} &= \sum_{t=1}^T \textrm{prod}\left(\frac{\partial L}{\partial \mathbf{h}_t}, \frac{\partial \mathbf{h}_t}{\partial \mathbf{W}_\textrm{hh}}\right) = \sum_{t=1}^T \frac{\partial L}{\partial \mathbf{h}_t} \mathbf{h}_{t-1}^\top, \end{aligned}

kur ∂L/∂ht\partial L/\partial \mathbf{h}_t, kuris rekurentiškai apskaičiuojamas pagal (9.7.7) ir (9.7.8), yra pagrindinis dydis, darantis įtaką skaitiniam stabilumui.

Kadangi atgalinis sklidimas laike yra atgalinio sklidimo taikymas RNN, kaip paaiškinome 5.3 skyrelis, RNN apmokymas kaitaliuoja tiesioginį sklidimą su atgaliniu sklidimu laike. Be to, atgalinis sklidimas laike paeiliui apskaičiuoja ir saugo aukščiau pateiktus gradientus. Konkrečiai, saugomos tarpinės reikšmės naudojamos pakartotinai, kad būtų išvengta dubliuotų skaičiavimų, pavyzdžiui, saugojamas ∂L/∂ht\partial L/\partial \mathbf{h}_t, kuris naudojamas skaičiuojant ir ∂L/∂Whx\partial L / \partial \mathbf{W}_\textrm{hx}, ir ∂L/∂Whh\partial L / \partial \mathbf{W}_\textrm{hh}.

9.7.3 Santrauka

Atgalinis sklidimas laike yra tik atgalinio sklidimo taikymas sekų modeliams su paslėptąja būsena. Nukirtimas, įprastas ar atsitiktinis, reikalingas skaičiavimo patogumui ir skaitiniam stabilumui. Dideli matricų laipsniai gali lemti diverguojančias ar nykstančias tikrines reikšmes. Tai pasireiškia sprogstančiais ar nykstančiais gradientais. Efektyviam skaičiavimui atgalinio sklidimo laike metu tarpinės reikšmės talpinamos podėlyje.

9.7.4 Pratimai

  1. Tarkime, kad turime simetrinę matricą M∈Rn×n\mathbf{M} \in \mathbb{R}^{n \times n} su tikrinėmis reikšmėmis λi\lambda_i, kurias atitinkantys tikriniai vektoriai yra vi\mathbf{v}_i (i=1,…,ni = 1, \ldots, n). Be bendrumo apribojimo, tarkime, kad jos išdėstytos tvarka ∣λi∣≥∣λi+1∣|\lambda_i| \geq |\lambda_{i+1}|.
    1. Parodykite, kad Mk\mathbf{M}^k turi tikrines reikšmes λik\lambda_i^k.
    2. Įrodykite, kad atsitiktiniam vektoriui x∈Rn\mathbf{x} \in \mathbb{R}^n su didele tikimybe Mkx\mathbf{M}^k \mathbf{x} bus labai gerai sulygiuotas su M\mathbf{M} tikriniu vektoriumi v1\mathbf{v}_1. Formalizuokite šį teiginį.
    3. Ką aukščiau pateiktas rezultatas reiškia gradientams RNN?
  2. Be gradientų apkarpymo, ar galite sugalvoti kitų būdų susidoroti su gradientų sprogimu rekurentiniuose neuroniniuose tinkluose?

Diskusijos