stubbur Hvað er Gradient Descent? - Unite.AI
Tengja við okkur

AI 101

Hvað er Gradient Descent?

mm
Uppfært on

Hvað er Gradient Descent?

Ef þú hefur lesið um hvernig taugakerfi eru þjálfuð, hefur þú næstum örugglega rekist á hugtakið „halli niðurkoma“ áður. Hækkun á stigi er aðalaðferðin til að hámarka afköst taugakerfis, draga úr tapi/villuhlutfalli netsins. Hins vegar getur hallafall verið svolítið erfitt að skilja fyrir þá sem eru nýir í vélanámi og þessi grein mun leitast við að gefa þér ágætis innsæi fyrir hvernig hallafall virkar.

Gradient decent er hagræðingaralgrím. Það er notað til að bæta afköst tauganets með því að gera klip á færibreytum netsins þannig að munurinn á spám netsins og raunverulegum/væntum gildum netsins (kallað tapið) sé lítill og mögulegt er. Gradient decent tekur upphafsgildi færibreytanna og notar aðgerðir byggðar á útreikningi til að stilla gildi þeirra í átt að gildunum sem gera netið eins nákvæmt og það getur verið. Þú þarft ekki að kunna mikinn reikning til að skilja hvernig hallafall virkar, en þú þarft að hafa skilning á halla.

Hvað eru hallar?

Gerum ráð fyrir að til sé línurit sem sýnir hversu mikið skekkjuverk tauganet gerir. Neðst á línuritinu táknar punkta með minnstu villu en efst á línuritinu er þar sem skekkjan er hæst. Við viljum færa okkur efst á línuritinu niður í botn. Halli er bara leið til að mæla sambandið milli villu og þyngdar tauganetsins. Sambandið á milli þessara tveggja hluta hægt að setja línurit sem halla, þar sem rangar þyngdir valda meiri villu. Bratt halla/halli táknar hversu hratt líkanið er að læra.

Brattari halli þýðir að miklar skerðingar á villum eru gerðar og líkanið er að læra hratt, en ef hallinn er núll er líkanið á hásléttu og er ekki að læra. Við getum fært okkur niður brekkuna í átt að minni skekkju með því að reikna halla, hreyfistefnu (breyting á breytum netsins) fyrir líkanið okkar.

Við skulum breyta myndlíkingunni aðeins og ímyndum okkur röð af hæðum og dölum. Við viljum komast niður á hæðina og finna þann hluta dalsins sem er minnst tap. Þegar við byrjum efst á hæðinni getum við stigið stór skref niður hæðina og verið viss um að við séum á leið í átt að lægsta punkti dalsins.

Hins vegar, eftir því sem við komumst nær lægsta punktinum í dalnum, verða skrefin okkar að minnka, annars gætum við farið yfir hinn raunverulega lægsta punkt. Að sama skapi er mögulegt að þegar þyngd netkerfisins er stillt, geti leiðréttingarnar í raun tekið það lengra frá þeim stað þar sem minnst tap er, og því verða breytingarnar að minnka með tímanum. Í samhengi við að lækka hæð í átt að stað þar sem minnst tap er, er hallinn vigur/leiðbeiningar sem lýsa leiðinni sem við ættum að fara og hversu stór skref okkar ættu að vera.

Nú vitum við að hallar eru leiðbeiningar sem segja okkur í hvaða átt við eigum að hreyfa okkur (hvaða stuðla ætti að uppfæra) og hversu stór skrefin sem við ættum að taka eru (hversu mikið ætti að uppfæra stuðlana), við getum kannað hvernig hallinn er reiknaður.

Útreikningur á halla og falllækkun

Hækkandi niðurkoma byrjar á stað þar sem mikið tap er og í gegnum margar endurtekningar, tekur skref í átt að minnsta tapi, með það að markmiði að finna bestu þyngdarstillingarnar. Mynd: Роман Сузи í gegnum Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Til þess að framkvæma hallafall verður fyrst að reikna hallann. Í pöntun til að reikna hallann, við þurfum að vita tap/kostnaðarfallið. Við munum nota kostnaðarfallið til að ákvarða afleiðuna. Í útreikningi vísar afleiðan bara til halla falls á tilteknum stað, þannig að við erum í rauninni bara að reikna út halla hæðarinnar út frá tapfallið. Við ákveðum tapið með því að keyra stuðlana í gegnum tapfallið. Ef við táknum tapfallið sem „f“ þá getum við fullyrt að jafnan til að reikna tapið sé sem hér segir (við erum bara að keyra stuðlana í gegnum valið kostnaðarfall okkar):

Tap = f(stuðull)

Við reiknum svo afleiðuna, eða ákveðum hallann. Að fá afleiðu tapsins mun segja okkur hvaða átt er upp eða niður brekkuna, með því að gefa okkur viðeigandi tákn til að stilla stuðlana okkar eftir. Við munum tákna viðeigandi stefnu sem "delta".

delta = afleiðufall(tap)

Við höfum nú ákvarðað hvaða átt er niður á við í átt að lægsta tapinu. Þetta þýðir að við getum uppfært stuðlana í færibreytum taugakerfisins og vonandi dregið úr tapinu. Við munum uppfæra stuðlana út frá fyrri stuðlum að frádregnum viðeigandi breytingu á gildi eins og ákvarðað er af stefnunni (delta) og röksemdafærslu sem stjórnar stærð breytinga (stærð skrefsins okkar). Röksemdin sem stjórnar stærð uppfærslunnar kallast „námshlutfall” og við munum tákna það sem „alfa“.

stuðull = stuðull – (alfa * delta)

Við endurtökum þá bara þetta ferli þar til netið hefur safnast saman í kringum lægsta tapið, sem ætti að vera nálægt núlli.

Það er mjög mikilvægt að velja rétt gildi fyrir námshlutfallið (alfa). Valið námshlutfall má hvorki vera of lítið né of mikið. Mundu að þegar við nálgumst lægsta tapið verða skrefin okkar að verða minni, annars munum við fara fram úr hinum sanna punkti lægsta tapsins og lenda hinum megin. Minnsta tapið er lítið og ef breytingatíðni okkar er of mikil getur skekkjan á endanum aukist aftur. Ef skrefastærðirnar eru of stórar mun afköst netkerfisins halda áfram að skoppast í kringum þann punkt þar sem minnst tap er, og fer yfir það á annarri hliðinni og svo hinni. Ef þetta gerist mun netið aldrei sameinast um raunverulega ákjósanlega þyngdarstillingu.

Aftur á móti, ef námshlutfallið er of lítið, getur netkerfið hugsanlega tekið óvenju langan tíma að ná saman ákjósanlegum lóðum.

Tegundir hallafalls

Nú þegar við skiljum hvernig hallafall virkar almennt, skulum við kíkja á eitthvað af því sem er öðruvísi tegundir hallafalls.

Batch Gradient Descent: Þetta form af hallafalli rennur í gegnum öll þjálfunarsýnin áður en stuðlarnir eru uppfærðir. Þessi tegund af hallafalli er líklega skilvirkasta form hallalækkunar, þar sem lóðin eru aðeins uppfærð þegar búið er að vinna úr allri lotunni, sem þýðir að það eru færri uppfærslur samtals. Hins vegar, ef gagnasafnið inniheldur fjöldann allan af þjálfunardæmum, þá getur lotufallshlutfall valdið því að þjálfun tekur langan tíma.

Stochastic Gradient Descent: Í Stochastic Gradient Descent er aðeins unnið úr einu þjálfunardæmi fyrir hverja endurtekningu á hallafalli og breytuuppfærslu. Þetta gerist fyrir hvert þjálfunardæmi. Vegna þess að aðeins eitt þjálfunardæmi er unnið áður en færibreyturnar eru uppfærðar, hefur það tilhneigingu til að renna saman hraðar en Batch Gradient Descent, þar sem uppfærslur eru gerðar fyrr. Hins vegar, vegna þess að ferlið verður að fara fram á hverju atriði í þjálfunarsettinu, getur það tekið töluvert langan tíma að klára það ef gagnasafnið er stórt, og þess vegna er hægt að nota eina af öðrum tegundum hallafalls ef þess er óskað.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent starfar með því að skipta öllu þjálfunargagnasettinu upp í undirkafla. Það býr til smærri mini-lotur sem keyrðar eru í gegnum netið og þegar mini-lotan hefur verið notuð til að reikna út villuna eru stuðlarnir uppfærðir. Mini-lotu Gradient Descent slær milliveg á milli Stochastic Gradient Descent og Batch Gradient Descent. Líkanið er uppfært oftar en þegar um er að ræða Batch Gradient Descent, sem þýðir aðeins hraðari og öflugri samleitni á bestu færibreytum líkansins. Það er líka skilvirkara reikningslega en Stochastic Gradient Descent

Bloggari og forritari með sérsvið í vél Learning og Deep Learning efni. Daniel vonast til að hjálpa öðrum að nota kraft gervigreindar í félagslegum tilgangi.