Miteremko ya gradient: descents ya bechi na stochastic gradient. Utekelezaji wa njia hii unaendelea. Programu nzima iko tayari, unahitaji tu kubadilisha kazi kuu. Itaitwa rmsprop. Kazi imewasilishwa hapa chini. Kila mmoja huongeza sababu ya scalability

Ndani yangu kazi ya nyumbani Niliulizwa kutekeleza asili ya gradient ya stochastic kutatua shida rejeshi la mstari(ingawa nina mifano 200 tu ya mafunzo). Shida yangu ni kwamba asili ya gradient ya stochastic inabadilika vizuri sana, karibu sawa na asili ya gradient ya kundi, ambayo inanileta kwa swali langu: kwa nini inaonekana laini sana, kwa kuzingatia ukweli kwamba kawaida ni kelele zaidi. Ni kwa sababu ninaitumia tu na mifano 200?

MSE yenye uzani kutoka asili ya gradient ya stochastic: 2.78441258841

MSE yenye uzani kutoka ukoo wa upinde rangi: 2.78412631451 (sawa na MSE yenye uzani kutoka kwa mlinganyo wa kawaida)

Def mserror(y, y_pred): n = y.size diff = y - y_pred diff_squared = diff ** 2 av_er = kuelea(jumla(diff_squared))/n rudisha av_er

Def linear_prediction(X, w): return nukta(X,np.transpose(w))

Def gradient_descent_step(X, y, w, eta): n = X.shape grad = (2.0/n) * jumla(np.transpose(X) * (linear_prediction(X,w) - y), mhimili = 1) kurudi w - eta * grad

Def stochastic_gradient_step(X, y, w, train_ind, eta): n = X.shape grad = (2.0/n) * np.transpose(X) * (linear_prediction(X,w) - y) rudisha w - eta * grad

Def gradient_descent(X, y, w_init, eta, max_iter): w = w_init errors = errors.append(mserror(y, linear_prediction(X,w)))) kwa i katika masafa(max_iter): w = gradient_descent_step(X, y , w, eta) errors.append(mserror(y, linear_prediction(X,w))) rudisha w, makosa

Def stochastic_gradient_descent(X, y, w_init, eta, max_iter): n = X.shape w = w_init errors = errors.append(mserror(y, linear_prediction(X,w)))) kwa i in range(max_iter): random_ind = np.random.randint(n) w = stochastic_gradient_step(X, y, w, random_ind, eta) errors.append(mserror(y, linear_prediction(X,w))) rudisha w, makosa

Jibu 1

Hakuna jambo lisilo la kawaida kuhusu ratiba yako. Ikumbukwe pia kuwa njia yako ya batch inahitaji marudio machache ili kuungana.

Unaweza kuruhusu viwanja vya SGD vya mtandao wa neural kuwa na mtazamo wako mwenyewe wa jinsi SGD inapaswa kuonekana. Mitandao mingi ya neural ni miundo changamano zaidi (ngumu kuboresha) ambayo inafanya kazi zaidi matatizo magumu. Hii inakuza "ugumu" unaotarajia.

Urejeshaji wa mstari ni shida rahisi na ina suluhisho la laini. Hii ina maana kwamba hatua yoyote ambayo itapunguza kiwango cha makosa yetu imehakikishwa kuwa hatua kuelekea bora suluhisho linalowezekana. Ni ngumu zaidi kuliko mitandao ya neva, na sehemu ya kwa nini unaona makosa yakipungua taratibu. Ndio maana unaona MSE inayokaribia kufanana. SGD na kifurushi vitaungana kwa suluhisho kamili.

Lengo ni kupunguza kazi F katika nafasi ya pointi zote zinazowezekana. Grafu ya F ni uso wa kimfano na lazima iwe na kiwango cha chini kimoja. Na swali la jinsi ya kusahihisha pointi ili kuelekea kiwango cha chini hiki kilitatuliwa muda mrefu uliopita katika uchambuzi wa hisabati. Ili kufanya hivyo, unahitaji kwenda kinyume upinde rangi- vector ambayo derivative ni ya juu. Gradient imehesabiwa kama ifuatavyo:

Wale. ili kukokotoa upinde rangi lazima tutumie derivative yake kazi iliyopewa katika pointi sambamba (vigezo).

Kwa hivyo, ili kuamua jinsi ya kusahihisha kwa usahihi kuratibu za vidokezo, lazima tuhesabu gradient na kutoa vekta ya urefu fulani ulioamuliwa (kwa upande wetu, urefu huu ni hatua fulani a) kutoka kwa vekta iliyopo ya vidokezo:

Ili kutekeleza hili kwa utaratibu, unahitaji kujifunza jinsi ya kutofautisha kazi F:

Mfano 1 - algorithm ya kushuka kwa gradient kwa nukta moja.

GradientDescent()

  • 1. Anzisha na maadili madogo ya nasibu.
  • 2. Rudia Idadi_ya_Hatua mara:
    • a) Kwa kila mtu i kutoka 1 hadi n
    • b) Kwa kila mtu j kutoka 1 hadi m:
      • (i) Kwa kila mtu i kutoka 1 hadi n
  • 3. maadili ya pato.

Hii inamaanisha kuwa tunahitaji kusahihisha kuratibu za alama baada ya kila mfano wa jaribio kama hii:

Algorithm mpya, iliyorekebishwa imeonyeshwa katika mfano 1. Hata hivyo, mabadiliko mengine yanahitajika kufanywa. Kwanza, hatuwezi tena kutegemea kufikia maelewano kamili na data ya awali, na tunahitaji kujifunza kuacha wakati fulani. Masharti ya kuacha hapa ni kwamba algorithm inatekelezwa mradi tu tofauti kati ya maadili ya kazi ni chini ya usahihi uliobainishwa hapo awali. Mabadiliko mengine ni kwamba ikiwa utaacha mara kwa mara, basi katika hatua fulani hatua hiyo haitakaribia tena kiwango cha chini unachotaka, lakini itaanza "kuruka" kwa kila iteration, kisha kwa mwelekeo mmoja, kisha kwa mwingine. Kwa hivyo, lazima ipunguzwe kwa muda. Katika mpango huu tunapunguza hatua kwa mbili.

Kanuni hii inaweza kupata minima ya ndani (paraboloid tuliyozingatia ina kiwango cha chini kimoja cha ndani). Tofauti yake ni kwamba haina kukusanya taarifa zote kutoka kesi zote za mtihani, lakini kurekebisha pointi mara moja, baada ya kila hatua iteration.

Kwa hivyo, unayo kazi ya kutabiri thamani fulani kama gharama ya nyumba kulingana na saizi yake. Au wakati inachukua kwa mfumo wako kuchakata ombi. Hauwezi kujua.

Umeamua kutumia urejeshaji wa mstari na sasa unataka kupata hesabu ambapo tofauti kati ya bei ambayo mtindo wako unatabiri na gharama halisi ya nyumba zinazouzwa itakuwa ndogo. Ili kufanya hivyo, unaweza kutumia moja ya njia hizi:

  1. Kushuka kwa Gradient ya Kundi
  2. Kushuka kwa Gradient ya Stochastic
  3. Milinganyo ya Kawaida
  4. Njia ya Newton (Njia ya Newton)

Leo tutazungumza juu ya aina mbili za asili ya gradient.

Kushuka kwa Gradient

Mteremko wa gradient ni nini?

Fikiria baadhi kazi tata kutoka kwa tofauti moja. Ina baadhi ya juu na chini. Katika kila nukta ya chaguo la kukokotoa tunaweza kuchukua derivative:

Mstari wa kijani unaonyesha kwamba katika hatua hii derivative itakuwa chanya, mstari nyekundu itakuwa mbaya.

Chagua sehemu yoyote kwenye chaguo la kukokotoa. Unataka "kushuka" hadi kiwango cha chini kabisa kufikia hatua hiyo. Ikiwa derivative katika hatua yako ni chanya (mstari wa kijani), hii inamaanisha kuwa kiwango cha chini ni "nyuma" yako, na kwenda chini kwake, unahitaji kutoa kutoka kwa kuratibu kwa uhakika wako. x thamani ya derivative yako.

Ikiwa katika hatua yako derivative ni hasi (mstari mwekundu), hii ina maana kwamba kiwango cha chini ni "mbele" yako, na kupata hiyo, unahitaji, tena, kutoa kutoka kwa kuratibu. x thamani ya derivative yako. Thamani yake ni hasi, na kwa hiyo, kwa kuondoa thamani hasi, utaongeza kuratibu x.

Kweli, ili mteremko usiwe mrefu sana au haraka kimakosa, zidisha thamani ya derivative yako katika sehemu iliyochaguliwa kwa mgawo fulani.

Lakini hii yote ni kwa kesi wakati kazi inategemea kuratibu moja. Katika kesi ya mfano wetu wa kuuza nyumba, kazi ya thamani inategemea vigezo viwili.

Unaweza kufikiria kazi hii kama "kikombe" katika nafasi ya 3D:

Derivative ya kazi za vigezo kadhaa inaitwa gradient. Gradient ni vekta yenye mwelekeo wa idadi ya vigezo, ambapo kila kipengele cha vekta ni derivative ya variable moja.

Kazi yetu ya gharama ni:

Mteremko wake umeashiriwa kama na utahesabiwa kwa kutumia fomula ifuatayo:

Katika kila derivati ​​ya sehemu tunaiona kuwa kazi ya kigezo kimoja. Tunazingatia anuwai zingine zote kuwa za kudumu, kwa hivyo, derivatives zao zitakuwa sawa na sifuri:

Baada ya hayo, tunasasisha kila thamani kwa kutumia fomula:

Parameta inaitwa kiwango cha kujifunza na huamua jinsi tutakavyohamia kwa thamani ya chini ya kazi. Kwa kila sasisho la vigezo tunachukua hatua ndogo kuelekea kiwango cha chini. Baada ya hayo, tunarudia utaratibu. Wakati huo huo, tunaangalia ni kiasi gani thamani ya kazi ya gharama imebadilika ikilinganishwa na hatua ya awali. Wakati mabadiliko haya yanakuwa madogo sana (tunaashiria wakati), tunaweza kuacha na kuzingatia kwamba tumefikia kiwango cha chini.

Ni kama kutembea chini ya mlima kuelekea bonde lililo karibu. Mteremko wa gradient hukuruhusu kupata kiwango cha chini cha ndani, lakini sio cha kimataifa. Hii ina maana kwamba ikiwa kuna pointi kadhaa ambazo kazi yako ni ndogo, asili ya gradient itakupeleka kwa mmoja wao - moja ambayo ni karibu na mahali pa kuanzia, lakini si lazima mwanya wa kina kabisa.

Kabla ya hatua ya kwanza kabisa, tunaamua vigezo kwa nasibu, na jinsi tunavyoamua huamua ni kiwango gani cha chini tutaanguka:


Hapa katika mabano ni lazima ieleweke kwamba hapo juu inahusu kushuka kwa gradient katika mtazamo wa jumla, lakini haishughulikii mteremko wa gradient haswa kwa urejeshaji wa mstari. Kitendakazi cha gharama ya rejista ya mstari ni laini na ina kiwango cha chini kimoja tu (fikiria kikombe cha 3D), kwa hivyo mteremko wa gradient utaipata kila wakati.

Kadiri unavyokaribia kiwango cha chini cha chaguo la kukokotoa (kadiri tofauti kati ya bei iliyotabiriwa na bei halisi inavyopungua), ndivyo mstari wako wa moja kwa moja unavyofafanua data yako ya kihistoria vyema:

Wakati hakuna mifano mingi ya kihistoria, kila kitu ni sawa, lakini wakati kuna mamilioni yao, kwa kila hatua ndogo kuelekea kiwango cha chini tunapaswa kufanya mamilioni ya mahesabu, na hii inaweza kuchukua muda mrefu.

Njia mbadala ya hii itakuwa asili ya gradient ya stochastic - njia ambayo tunachukua mfano mmoja na kusasisha maadili kulingana nayo tu. Kisha tunachukua mfano unaofuata na kusasisha vigezo, tukizingatia. Nakadhalika. Hii inaongoza kwa ukweli kwamba sisi si mara zote "hushuka" kutoka kilima, wakati mwingine tunachukua hatua juu au kando, lakini mapema au baadaye tunafikia kiwango cha chini sana na kuanza kuizunguka. Wakati maadili yanaanza kutufaa (kufikia usahihi tunaohitaji), tunasimamisha asili.

Katika pseudocode, asili ya gradient ya stochastic inaonekana kama hii:

Hadi mabadiliko ya Kazi ya Gharama ni ndogo: (

Kwa j:= 1 hadi m (

Hatimaye, vipengele vya muunganisho wa algorithm: gradient ya kundi asili daima hubadilika kuwa kiwango cha chini, mradi tu thamani ndogo ya kutosha itatumika. Asili ya gradient ya Stochastic kwa ujumla haiunganishi kwa kiwango cha chini, lakini kuna marekebisho yake ambayo huruhusu muunganisho kufikiwa.

Kushuka kwa Gradient- algorithm inayotumiwa zaidi ya kujifunza, inatumiwa karibu kila mfano. Kushuka kwa gradient kimsingi ni jinsi modeli zinavyofunzwa. Bila GS, ujifunzaji wa mashine haungekuwa hapa ulipo leo. Mbinu ya mteremko wa kushuka, iliyo na marekebisho fulani, inatumika sana kwa kujifunza na kujifunza kwa kina, na inajulikana kama makosa.

Katika chapisho hili utapata maelezo ya asili ya gradient na hesabu kidogo. Muhtasari:

  • Maana ya GS ni maelezo ya algorithm nzima;
  • Tofauti tofauti za algorithm;
  • Utekelezaji wa kanuni: msimbo wa kuandika katika Phyton.

Kushuka kwa gradient ni nini

Kushuka kwa gradient ni njia ya kupata thamani ya chini ya kazi ya kupoteza (kuna aina nyingi za kazi hii). Kupunguza utendakazi wowote kunamaanisha kupata bonde lenye kina kirefu zaidi katika kitendakazi hicho. Kumbuka kuwa chaguo la kukokotoa linatumika kudhibiti makosa katika utabiri wa mfano kujifunza mashine. Kupata kiwango cha chini kunamaanisha kupata ndogo zaidi kosa linalowezekana au kuboresha usahihi wa mfano. Tunaongeza usahihi kwa kurudia zaidi ya seti ya data ya mafunzo huku tukirekebisha vigezo vyetu vya modeli (uzito na upendeleo).

Kwa hivyo, kushuka kwa gradient inahitajika ili kupunguza utendaji wa upotezaji.

Kiini cha algorithm ni mchakato wa kupata thamani ya chini makosa. Vivyo hivyo, inaweza kuzingatiwa kama kwenda chini katika unyogovu katika jaribio la kutafuta dhahabu chini ya bonde (thamani ya chini ya makosa).


Kupata kiwango cha chini cha chaguo za kukokotoa

Katika siku zijazo, kupata zaidi kosa la chini(unyogovu wa kina) katika kazi ya kupoteza (kwa heshima na uzito mmoja), unahitaji kurekebisha vigezo vya mfano. Je, tunaziwekaje? Hii itasaidia uchambuzi wa hisabati. Kupitia uchanganuzi, tunajua kwamba mteremko wa grafu ya chaguo za kukokotoa ni derivative ya chaguo za kukokotoa kwa heshima na utofautishaji. Mteremko huu daima unaonyesha unyogovu wa karibu zaidi!

Katika takwimu tunaona grafu ya kazi ya kupoteza (inayoitwa "Kosa" na ishara "J") yenye uzito mmoja. Sasa ikiwa tunahesabu mteremko (kuiita dJ / dw) ya kazi ya kupoteza kwa heshima na uzito mmoja, tutapata mwelekeo ambao tunahitaji kusonga ili kufikia minima ya ndani. Hebu fikiria kwa sasa kwamba mtindo wetu una uzito mmoja tu.

Kazi ya kupoteza

Muhimu: tunaporudia data yote ya mafunzo, tunaendelea kuongeza thamani za dJ/dw kwa kila uzito. Kwa kuwa hasara inategemea mfano wa mafunzo, dJ/dw pia inaendelea kubadilika. Kisha tunagawanya maadili yaliyokusanywa kwa idadi ya mifano ya mafunzo ili kupata wastani. Kisha tunatumia wastani huu (wa kila uzito) kurekebisha kila uzito.

Pia kumbuka: Chaguo za kukokotoa za upotevu zinakusudiwa kufuatilia hitilafu kwa kila mfano wa mafunzo, ilhali kinyago cha chaguo la kukokotoa la uzani mmoja ambapo uzani unahitaji kubadilishwa ili kuupunguza kwa mfano huo wa mafunzo. Unaweza kuunda mifano hata bila kutumia kazi ya kupoteza. Lakini itabidi utumie derivative kwa heshima ya kila uzani (dJ/dw).

Sasa kwa kuwa tumeamua mwelekeo ambao tunahitaji kusukuma uzito, tunahitaji kufikiri jinsi ya kufanya hivyo. Hapa tunatumia mgawo wa kiwango cha kujifunza, inaitwa hyper-parameter. Kigezo cha hali ya juu ni thamani inayohitajika na kielelezo chako ambayo kwa kweli tuna wazo lisiloeleweka tu kuihusu. Kwa kawaida maadili haya yanaweza kujifunza kupitia majaribio na makosa. Sio hivyo hapa: moja inafaa vigezo vyote vya hyper. Kipengele cha kiwango cha ujifunzaji kinaweza kuzingatiwa kama "hatua katika mwelekeo sahihi", ambapo mwelekeo unatoka kwa dJ/dw.

Hii ilikuwa kazi ya kupoteza iliyojengwa kwa uzito mmoja. KATIKA mfano halisi tunafanya kila kitu kilichoorodheshwa hapo juu kwa uzani wote, kupitia mifano yote ya mafunzo. Hata katika modeli ndogo ya kujifunza ya mashine utakuwa na uzani zaidi ya 1 au 2. Hii inafanya taswira kuwa ngumu kwa sababu grafu itakuwa na vipimo ambavyo akili haiwezi kufikiria.

Zaidi kuhusu gradients

Kando na utendakazi wa upotevu, mteremko wa upinde pia uhitaji upinde rangi ambayo ni dJ/dw (kiini cha kitendakazi cha kupoteza kwa heshima na uzani mmoja, unaotekelezwa kwa uzani wote). dJ/dw inategemea chaguo lako la utendaji wa upotezaji. Chaguo la kukokotoa la upotezaji la kawaida ni kosa la maana ya mraba.

Derivative ya chaguo hili la kukokotoa kwa heshima na uzito wowote (fomula hii inaonyesha hesabu ya gradient kwa):

Hii ni hisabati yote katika GS. Kuangalia hili, tunaweza kusema kwamba, kwa asili, GS haina hisabati nyingi. Hesabu pekee iliyomo ni kuzidisha na kugawanya, ambayo tutafikia. Hii ina maana kwamba uchaguzi wako wa kazi itaathiri hesabu ya gradient ya kila uzito.

Sababu ya kiwango cha kujifunza

Kila kitu kilichoandikwa hapo juu kiko kwenye kitabu cha maandishi. Unaweza kufungua kitabu chochote kuhusu asili ya gradient, kitu kimoja kitaandikwa hapo. Fomula za gradient kwa kila kazi ya upotezaji zinaweza kupatikana kwenye Mtandao, bila kujua jinsi ya kuzipata mwenyewe.

Hata hivyo, tatizo la mifano mingi ni kiwango cha kujifunza. Wacha tuangalie usemi uliosasishwa kwa kila uzani (j huanzia 0 hadi idadi ya uzani, na Theta-j ni uzito wa j katika vekta ya uzani, k ni kati ya 0 hadi idadi ya kukabiliana, ambapo B-k iko kth kukabiliana kwenye vekta ya uhamishaji). Hapa alfa ni mgawo wa kiwango cha kujifunza. Kutoka kwa hili tunaweza kusema kwamba tunahesabu dJ/dTheta-j (gradient ya uzito wa Theta-j), na kisha saizi ya hatua ya alfa katika mwelekeo huo. Kwa hivyo, tunashuka kwenye gradient. Ili kusasisha kifaa, badilisha Theta-j na B-k.

Ikiwa saizi ya hatua hii ya alpha ni kubwa sana, tutazidi kiwango cha chini: yaani, tutakosa kiwango cha chini. Ikiwa alpha ni ndogo sana, tunatumia marudio mengi sana kufikia kiwango cha chini zaidi. Kwa hivyo alfa inapaswa kuwa sahihi.

Kutumia Kushuka kwa Gradient

Naam, ndivyo hivyo. Hiyo ndiyo yote unahitaji kujua kuhusu asili ya gradient. Hebu tufanye muhtasari wa kila kitu katika pseudocode.

Kumbuka: Mizani hapa inawakilishwa katika vekta. Katika mifano kubwa zaidi watakuwa matrices.

Kutoka i = 0 hadi "idadi ya mifano ya mafunzo"

1. Kokotoa upinde rangi ya kitendakazi cha kupoteza kwa mfano wa mafunzo ya i-th kwa kila uzito na upendeleo. Sasa unayo vekta ambayo imejaa gradient kwa kila uzani na kibadilishaji kilicho na upendeleo wa upendeleo.

2. Ongeza gradient za uzani uliokokotolewa kwa vekta limbikizi tofauti, ambayo, baada ya kurudia juu ya kila mfano wa mafunzo, inapaswa kuwa na jumla ya viunzi vya kila uzani kwa marudio mengi.

3. Sawa na hali ya mizani, ongeza gradient ya upendeleo kwa kutofautiana kwa mkusanyiko.

Sasa, BAADA ya kupitia mifano yote ya mafunzo, fanya yafuatayo:

1. Gawanya uzito limbikizi na vigeu vya upendeleo kwa idadi ya mifano ya mafunzo. Hii itatupa viwango vya wastani vya uzani wote na upinde rangi wa wastani wa upendeleo. Tutaziita betri zilizosasishwa (RA).

2. Kisha, kwa kutumia formula hapa chini, sasisha uzito wote na upendeleo. Badala ya dJ/dTheta-j utabadilisha OA (kikusanyaji kilichosasishwa) kwa uzani na OA kwa upendeleo. Fanya vivyo hivyo kwa kukabiliana.

Hii ilikuwa ni marudio moja tu ya kushuka kwa upinde rangi.

Rudia mchakato huu kutoka mwanzo hadi mwisho kwa marudio kadhaa. Hii ina maana kwamba kwa marudio ya 1 ya GS, unarudia kupitia mifano yote ya mafunzo, kuhesabu gradient, kisha kusasisha uzani na upendeleo. Kisha unafanya hivi kwa marudio kadhaa ya HS.

Aina tofauti za kushuka kwa gradient

Kuna chaguzi 3 za kushuka kwa gradient:

1. Kundi ndogo: Hapa, badala ya kurudia mifano yote ya mafunzo na kila marudio yakifanya hesabu kwenye mfano mmoja tu wa mafunzo, tunachakata n mifano ya mafunzo mara moja. Chaguo hili ni nzuri kwa seti kubwa za data.

2.Kushuka kwa gradient ya Stochastic: Katika kesi hii, badala ya kutumia na kutazama kila mfano wa mafunzo, TUNATUMIA MARA MOJA TU. Kuna mambo machache ya kuzingatia:

  • Kwa kila marudio ya GS unahitaji kuchanganya seti ya mafunzo na kuchagua mfano random mafunzo.
  • Kwa kuwa unatumia mfano mmoja tu wa mafunzo, njia yako kuelekea minima ya karibu itakuwa na kelele nyingi, kama mtu mlevi ambaye amekunywa sana.

3. mfululizo wa GS: Hiki ndicho kilichoandikwa katika sehemu zilizopita. Mzunguko kwa kila mfano wa kujifunza.


Picha ikilinganisha vibao 3 na minima ya ndani

Nambari ya mfano katika python

Inatumika kwa safu ya GS, hivi ndivyo kizuizi cha nambari ya mafunzo huko Python kitakavyoonekana.

Def train(X, y, W, B, alpha, max_iters): """ Hutekeleza GD kwa mifano yote ya mafunzo, X: Seti ya data ya mafunzo, y: Lebo za data ya mafunzo, W: Vekta ya Uzito, B: Tofauti ya upendeleo, alpha : Kiwango cha ujifunzaji, max_iters: Upeo wa marudio wa GD """ dW = 0 # Kikusanya upinde rangi ya uzani dB = 0 # Kikusanyaji cha upinde rangi cha upendeleo m = X.shape # No. ya mafunzo ya mifano kwa i in range(max_iters): dW = 0 # Kuweka upya vilimbikizaji dB = 0 kwa j katika safu(m): # 1. Rudia mifano yote, # 2. Kokotoa viwango vya uzani na upendeleo katika w_grad na b_grad, # 3. Sasisha dW kwa kuongeza w_grad na dB kwa kuongeza b_grad, W = W - alpha * (dW / m) # Sasisha uzani B = B - alpha * (dB / m) # Sasisha urejesho wa upendeleo W, B # Rudisha uzani uliosasishwa na upendeleo.

Ni hayo tu. Unapaswa sasa kuwa na ufahamu mzuri wa asili ya gradient ni nini.

Gradient ya stochastic inakadiriwa na formula:

yaani, ni jumla ya vekta zote nasibu zilizo na uzani sawa na nyongeza za chaguo za kukokotoa zikipunguzwa katika maelekezo ya nasibu.

Ikiwa tutachukua vekta za kitengo kama vigezo, basi makadirio haya ya, kama inavyoweza kuonekana kwa urahisi kutoka (3.3.22), inatoa thamani halisi upinde rangi.

Makadirio yote mawili ya upinde rangi yaliyofafanuliwa yanaweza kutumika vyema kwa thamani zozote, ikijumuisha na ambayo inazitofautisha kwa kiasi kikubwa na mbinu ya kukadiria bainishi (3.3.22), ambayo kwa uthabiti. Hali hiyo hiyo inathibitisha kuwa mbinu za kubainisha zinajumuishwa kwa ujumla kwa zile zisizo na mpangilio (tazama mwisho wa kifungu kidogo cha 3.3.1). Wacha tutoe mfano mwingine wa ujanibishaji kama huo.

Utafutaji wa gradient (3.3.21) ni kesi maalum kulingana na angalau algoriti mbili za utaftaji nasibu. Algorithm ya kwanza:

ambapo bado ni kitengo random -dimensional vector. Hii ni algoriti ya utafutaji wa gradient nasibu inayojulikana. Algorithm ya pili ina fomu (3.3.23), lakini makadirio ya upinde rangi yanakokotolewa kwa kutumia fomula.

Wakati, kama inavyoonekana kwa urahisi, algorithms zote mbili huharibika na kuwa algoriti ya utafutaji ya gradient (3.3.21).

Kwa hivyo, utaftaji wa nasibu ni ugani wa asili, mwendelezo na ujanibishaji wa njia zinazojulikana za utaftaji.

Kipengele kingine cha utafutaji cha random kinachofungua fursa nyingi kwa matumizi yake madhubuti, ni kutumia opereta wa hatua bila mpangilio kama kielelezo cha stochastic cha waendeshaji changamano wa mara kwa mara kupata maelekezo ya utafutaji katika nafasi ya vigezo vilivyoboreshwa.

Kwa hivyo, algoriti ya utaftaji nasibu iliyo na mbinu za mstari (3.3.12) ni kielelezo cha stochastic cha algorithm ya asili ya mwinuko zaidi:

ambamo vekta nasibu huonyesha ukadiriaji wa upinde rangi. Inashangaza kwamba "makadirio" kama hayo hayawezi hata kuitwa kuwa mbaya, kwani mali zake za stochastic hazifanani na mali ya gradient inayokadiriwa. Hata hivyo, kama inavyoonyeshwa hapo juu, algorithm ya utafutaji wa random sio tu ya ufanisi, lakini katika baadhi ya matukio ni ya ufanisi zaidi kuliko algorithm ya kushuka kwa kasi zaidi. Hapa

opereta wa hatua bila mpangilio anachukua nafasi ya mwendeshaji mbaya wa kukadiria gradient, kwa mfano, kulingana na fomula (3.3.22).

Kipengele kinachofuata cha utafutaji wa nasibu ambacho huitofautisha vyema na mbinu za kawaida ni utandawazi wake, ambao hujidhihirisha hasa katika algoriti za utafutaji wa nasibu za ndani ambazo hazikusudiwa kupata msimamo mkali wa kimataifa. Kwa hivyo, algorithm ya asili ya nasibu inaweza kupata upeo wa kimataifa, lakini algorithm ya kawaida ya kushuka kwa kasi, kwa kanuni, hairuhusu uwezekano huu, kwa kuwa imeundwa kupata upeo wa ndani.

Kwa hivyo, utandawazi wa algoriti za utafutaji bila mpangilio ni aina ya "premium" kwa matumizi ya nasibu na kitu kama " maombi ya bure»kwa algorithm. Hali hii ni muhimu sana wakati wa kuboresha vitu na muundo usiojulikana, wakati hakuna imani kamili katika hali moja ya shida na uwepo wa extrema kadhaa inawezekana (ingawa haijatarajiwa). Kutumia mbinu katika kesi hii utafutaji wa kimataifa itakuwa ni ubadhirifu usio na busara. Njia za utaftaji wa nasibu za mitaa ndizo zinazofaa zaidi hapa, kwani zinasuluhisha kwa ufanisi shida ya ndani na inaweza, kimsingi, kutatua moja ya kimataifa, ikiwa moja itatokea. Hii hutoa utafutaji wa nasibu na aina ya uaminifu wa kisaikolojia ambao unathaminiwa sana na watumiaji.

Usahili wa algorithmic wa utafutaji wa nasibu huifanya kuvutia hasa kwa watumiaji. Uzoefu unaonyesha kwamba algoriti za utafutaji wa nasibu zinazojulikana ni "turubai" tu ambayo mtumiaji, katika kila hali mahususi, "hupamba mifumo" ya algoriti mpya ambazo haziakisi tu ladha na mielekeo yake (ambayo haiwezi kupuuzwa), lakini pia maelezo mahususi. ya kitu kinachoboreshwa. Mwisho huunda msingi mzuri wa utekelezaji wa kanuni inayojulikana kwamba algorithm inapaswa kuundwa "kwa kitu." Hatimaye, unyenyekevu wa algorithmic wa utafutaji wa random huamua urahisi wa utekelezaji wake wa maunzi. Hii sio tu inafanya uwezekano wa kuunda viboreshaji rahisi, kompakt na vya kuaminika na idadi isiyo na kikomo ya vigezo vilivyoboreshwa, lakini pia inafanya iwe rahisi kupanga usanisi wao bora kwenye kompyuta.