stubs Kas ir gradienta nolaišanās? - Apvienojieties.AI
Savienoties ar mums
AI meistarklase:

AI 101

Kas ir gradienta nolaišanās?

mm
Atjaunināts on

Kas ir gradienta nolaišanās?

Ja esat lasījis par to, kā tiek apmācīti neironu tīkli, jūs gandrīz noteikti jau esat saskāries ar terminu “gradienta nolaišanās”. Gradienta nolaišanās ir primārā metode neironu tīkla veiktspējas optimizēšanai, samazinot tīkla zudumu/kļūdu līmeni. Tomēr tiem, kuri nav sākuši izmantot mašīnmācīšanos, var būt nedaudz grūti saprast gradienta nolaišanos, un šajā rakstā tiks mēģināts sniegt pienācīgu intuīciju par to, kā darbojas gradienta nolaišanās.

Gradienta nolaišanās ir optimizācijas algoritms. To izmanto, lai uzlabotu neironu tīkla veiktspēju, pielāgojot tīkla parametrus tā, lai starpība starp tīkla prognozēm un tīkla faktiskajām/paredzamajām vērtībām (saukta par zaudējumiem) būtu pēc iespējas mazāka. Gradienta nolaišanās izmanto parametru sākotnējās vērtības un izmanto aprēķinos balstītas darbības, lai pielāgotu to vērtības vērtībām, kas padarīs tīklu pēc iespējas precīzāku. Jums nav jāzina daudz aprēķinu, lai saprastu, kā darbojas gradienta nolaišanās, taču jums ir jābūt izpratnei par gradientiem.

Kas ir gradienti?

Pieņemsim, ka ir grafiks, kas attēlo neironu tīkla kļūdu apjomu. Diagrammas apakšā ir norādīti mazākās kļūdas punkti, savukārt diagrammas augšdaļā ir lielākā kļūda. Mēs vēlamies pāriet no diagrammas augšdaļas uz leju. Gradients ir tikai veids, kā kvantitatīvi noteikt saistību starp kļūdu un neironu tīkla svaru. Attiecības starp šīm divām lietām var attēlot kā slīpumu, ar nepareiziem svariem, kas rada vairāk kļūdu. Slīpuma/gradienta stāvums parāda, cik ātri modelis mācās.

Stāvāks slīpums nozīmē, ka tiek ievērojami samazināts kļūdu skaits un modelis ātri mācās, turpretim, ja slīpums ir nulle, modelis atrodas plato un nemācās. Mēs varam virzīties lejup pa slīpumu uz mazāku kļūdu, aprēķinot mūsu modeļa gradientu, kustības virzienu (tīkla parametru izmaiņas).

Pārbīdīsim metaforu tikai nedaudz un iedomāsimies pakalnu un ieleju virkni. Mēs vēlamies nokļūt kalna lejā un atrast ielejas daļu, kas atspoguļo mazāko zaudējumu. Sākot no kalna virsotnes, varam spert lielus soļus lejup no kalna un būt pārliecināti, ka virzāmies uz ielejas zemāko punktu.

Tomēr, tuvojoties ielejas zemākajam punktam, mūsu soļiem būs jāsamazinās, pretējā gadījumā mēs varam pārspēt patieso zemāko punktu. Tāpat ir iespējams, ka, pielāgojot tīkla svarus, korekcijas faktiski var attālināt to no zemākā zuduma punkta, un tāpēc laika gaitā korekcijām ir jāsamazinās. Saistībā ar nokāpšanu no kalna uz zemāko zaudējumu punktu, gradients ir vektors/instrukcijas, kas sīki apraksta ceļu, pa kuru mums vajadzētu iet un cik lieliem jābūt mūsu soļiem.

Tagad mēs zinām, ka gradienti ir norādījumi, kas mums norāda, kurā virzienā virzīties (kuri koeficienti ir jāatjaunina) un cik lieli soļi mums ir jāveic (cik daudz koeficienti ir jāatjaunina), mēs varam izpētīt, kā tiek aprēķināts gradients.

Gradientu un gradientu nolaišanās aprēķināšana

Gradienta nolaišanās sākas vietā, kur ir liels zudums, un, veicot vairākas iterācijas, sper soļus mazākā zaudējuma virzienā, cenšoties atrast optimālo svara konfigurāciju. Foto: Роман Сузи, izmantojot Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Lai veiktu gradienta nolaišanos, vispirms ir jāaprēķina gradienti. Kārtībā lai aprēķinātu gradientu, mums jāzina zaudējumu/izmaksu funkcija. Mēs izmantosim izmaksu funkciju, lai noteiktu atvasinājumu. Aprēķinos atvasinājums attiecas tikai uz funkcijas slīpumu noteiktā punktā, tāpēc mēs būtībā tikai aprēķinām kalna slīpumu, pamatojoties uz zaudēšanas funkcija. Mēs nosakām zaudējumus, palaižot koeficientus caur zaudējumu funkciju. Ja mēs attēlojam zaudējumu funkciju kā “f”, tad varam apgalvot, ka zaudējumu aprēķināšanas vienādojums ir šāds (mēs tikai palaižam koeficientus, izmantojot mūsu izvēlēto izmaksu funkciju):

Zaudējums = f (koeficients)

Pēc tam mēs aprēķinām atvasinājumu vai nosakām slīpumu. Zaudējuma atvasinājuma iegūšana mums parādīs, kurš virziens ir augšup vai lejup pa nogāzi, dodot mums atbilstošu zīmi, pēc kuras koriģēt mūsu koeficientus. Mēs attēlosim atbilstošo virzienu kā “delta”.

delta = atvasinātā_funkcija(zaudējumi)

Tagad esam noskaidrojuši, kurš virziens ir lejup uz mazāko zaudējumu punktu. Tas nozīmē, ka mēs varam atjaunināt koeficientus neironu tīkla parametros un, cerams, samazināt zaudējumus. Mēs atjaunināsim koeficientus, pamatojoties uz iepriekšējiem koeficientiem, no kuriem atņemtas atbilstošās vērtības izmaiņas, ko nosaka virziens (delta) un arguments, kas kontrolē izmaiņu lielumu (mūsu soļa lielumu). Arguments, kas kontrolē atjauninājuma lielumu, tiek saukts par "mācīšanās ātrums” un mēs to attēlosim kā “alfa”.

koeficients = koeficients – (alfa * delta)

Pēc tam mēs vienkārši atkārtojam šo procesu, līdz tīkls ir saplūdis ap zemākā zuduma punktu, kam vajadzētu būt tuvu nullei.

Ir ļoti svarīgi izvēlēties pareizo mācīšanās ātruma (alfa) vērtību. Izvēlētais mācīšanās ātrums nedrīkst būt ne pārāk mazs, ne pārāk liels. Atcerieties, ka, tuvojoties mazāko zaudējumu punktam, mūsu soļiem ir jāsamazinās, pretējā gadījumā mēs pārsniegsim patieso mazāko zaudējumu punktu un nonāksim otrā pusē. Mazākā zaudējuma punkts ir mazs, un, ja mūsu izmaiņu ātrums ir pārāk liels, kļūda var atkal palielināties. Ja soļu izmēri ir pārāk lieli, tīkla veiktspēja turpinās lēkt ap zemākā zuduma punktu, pārspējot to vienā un pēc tam otrā pusē. Ja tas notiek, tīkls nekad nesasniegs patieso optimālo svara konfigurāciju.

Turpretim, ja mācīšanās ātrums ir pārāk mazs, tīklam var būt nepieciešams ārkārtīgi ilgs laiks, lai sasniegtu optimālo svaru.

Gradienta nolaišanās veidi

Tagad, kad esam sapratuši, kā gradienta nolaišanās darbojas kopumā, apskatīsim dažus no tiem gradienta nolaišanās veidi.

Partijas gradienta nolaišanās: pirms koeficientu atjaunināšanas šī gradienta nolaišanās forma tiek veikta cauri visiem apmācības paraugiem. Šis gradienta nolaišanās veids, visticamāk, ir skaitļošanas ziņā visefektīvākais gradienta nolaišanās veids, jo svari tiek atjaunināti tikai tad, kad ir apstrādāta visa partija, kas nozīmē, ka kopumā ir mazāk atjauninājumu. Tomēr, ja datu kopā ir liels skaits apmācības piemēru, pakešu gradienta nolaišanās var padarīt apmācību par ilgu laiku.

Stohastiskā gradienta nolaišanās: Stohastiskā gradienta nolaišanās gadījumā katrai gradienta nolaišanās un parametru atjaunināšanas iterācijai tiek apstrādāts tikai viens apmācības piemērs. Tas notiek katrā apmācības piemērā. Tā kā pirms parametru atjaunināšanas tiek apstrādāts tikai viens apmācības piemērs, tam ir tendence saplūst ātrāk nekā Batch Gradient Descent, jo atjauninājumi tiek veikti ātrāk. Tomēr, tā kā process ir jāveic katram mācību kopas vienumam, tā pabeigšana var aizņemt diezgan ilgu laiku, ja datu kopa ir liela, un tādēļ, ja vēlaties, izmantojiet kādu no citiem gradienta nolaišanās veidiem.

Mini-Batch Gradient Descent: Mini-Batch Gradient Descent darbojas, sadalot visu apmācības datu kopu apakšsadaļās. Tas rada mazākas mini partijas, kas tiek darbinātas tīklā, un, kad mini partija ir izmantota kļūdas aprēķināšanai, koeficienti tiek atjaunināti. Mini-partijas gradienta nolaišanās ir vidusceļš starp stohastisko gradienta nolaišanos un pakešu gradienta nolaišanos. Modelis tiek atjaunināts biežāk nekā Batch Gradient Descent gadījumā, kas nozīmē nedaudz ātrāku un spēcīgāku modeļa optimālo parametru konverģenci. Tas ir arī skaitļošanas ziņā efektīvāks nekā Stochastic Gradient Descent

Emuāru autors un programmētājs ar specialitātēm Mašīnu mācīšana un Dziļa mācīšanās tēmas. Daniels cer palīdzēt citiem izmantot mākslīgā intelekta spēku sociālā labuma gūšanai.