Gradiendi laskumised: partii ja stohhastilised gradiendi laskumised. Selle meetodi rakendamine on pooleli. Kogu programm on valmis, peate lihtsalt põhifunktsiooni muutma. Seda nimetatakse rmspropiks. Funktsioon on esitatud allpool. Igaüks neist suurendab mastaapsuse tegurit

Minu sees kodutöö Mul paluti ülesande lahendamiseks rakendada stohhastilist gradiendi laskumist lineaarne regressioon(kuigi mul on ainult 200 koolitusnäidet). Minu probleem on selles, et stohhastiline gradient laskumine läheneb liiga sujuvalt, peaaegu sama, mis partii gradiendi laskumine, mis toob mind minu küsimuseni: miks see tundub nii sujuv, arvestades asjaolu, et see on tavaliselt palju mürarikkam. Kas sellepärast, et ma kasutan seda ainult 200 näitega?

MSE stohhastilise gradiendi laskumise kaaludega: 2,78441258841

MSE, mille raskused on pärit gradiendi laskumisest: 2,78412631451 (identne MSE-ga tavavõrrandi kaaludega)

Def mserror(y, y_pred): n = y.size diff = y - y_pred diff_ruut = diff ** 2 av_er = float(sum(diff_ruut))/n return av_er

Def lineaarne_ennustus(X, w): tagasta punkt(X,np.transpose(w))

Def gradient_descent_step(X, y, w, eta): n = X.shape grad = (2,0/n) * summa(np.transpose(X) * (lineaarne_ennustus(X,w) - y), telg = 1) tagastamine w - eta * grad

Def stochastic_gradient_step(X, y, w, train_ind, eta): n = X.shape grad = (2,0/n) * np.transpose(X) * (lineaarne_ennustus(X,w) - y) return 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))) i jaoks vahemikus (max_iter): w = gradient_descent_step(X, y) , w, eta) errors.append(mserror(y, linear_prediction(X,w))) return w, vead

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))) i jaoks vahemikus (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))) return w, vead

1 vastus

Teie ajakavas pole midagi ebatavalist. Samuti tuleb märkida, et teie partiimeetod nõuab lähenemiseks vähem iteratsioone.

Saate lasta närvivõrgu SGD diagrammidel omada oma vaadet sellest, milline SGD välja peaks nägema. Enamik närvivõrke on palju keerukamad mudelid (raske optimeerida), mis töötavad rohkemal keerulised probleemid. See soodustab ootuspärast "sakilisust".

Lineaarne regressioon on lihtne probleem ja sellel on kumer lahendus. See tähendab, et iga samm, mis vähendab meie veamäära, on kindlasti samm parema poole võimalik lahendus. See on palju raskem kui närvivõrgud ja osa sellest, miks näete vigade arvu järkjärgulist vähenemist. Seetõttu näete peaaegu identset MSE-d. Nii SGD kui ka pakett lähenevad täpsele lahendusele.

Eesmärk on minimeerida funktsiooni F kõigi võimalike punktide ruumis. F graafik on paraboolpind ja sellel peab olema üks miinimum. Ja küsimus, kuidas punkte parandada, et liikuda selle miinimumi poole, on matemaatilises analüüsis juba ammu lahendatud. Selleks peate liikuma vastupidises suunas gradient- vektor, mida mööda tuletis on maksimaalne. Gradient arvutatakse järgmiselt:

Need. gradiendi arvutamiseks peame kasutama tuletist antud funktsioon vastavates punktides (muutujad).

Seega, selleks, et teha kindlaks, kuidas punktide koordinaate õigesti korrigeerida, peame arvutama gradiendi ja lahutama olemasolevast punktide vektorist mingi etteantud pikkusega vektori (meie puhul on see pikkus etteantud samm a):

Selle programmiliseks rakendamiseks peate õppima, kuidas eristada funktsiooni F:

Näide 1 – ühe punkti gradiendi laskumise algoritm.

GradientDescent()

  • 1. Initsialiseerige väikeste juhuslike väärtustega.
  • 2. Korrake Number_of_Steps korda:
    • a) Kõigile i 1-st kuni n
    • b) Kõigile j 1-st kuni m:
      • (i) Kõigile i 1-st kuni n
  • 3. väljundväärtused.

See tähendab, et pärast iga katsenäidet peame punktide koordinaate parandama järgmiselt:

Uus, muudetud algoritm on näidatud näites 1. Siiski tuleb teha muid muudatusi. Esiteks ei saa me enam loota, et jõuame täiuslik harmoonia algandmetega ja me peame õppima ühel hetkel peatuma. Siin peatumise tingimuseks on, et algoritmi täidetakse seni, kuni funktsiooni väärtuste erinevused on väiksemad kui eelnevalt määratud täpsus. Teine muudatus on see, et kui jätate konstandi, siis mingil etapil ei lähene punkt enam soovitud miinimumile, vaid hakkab seda igal iteratsioonil "hüppama", siis ühes suunas, siis teises suunas. Seetõttu tuleb seda aja jooksul vähendada. Selles programmis vähendame sammu kahe võrra.

See algoritm suudab leida lokaalseid miinimume (meie käsitletud paraboloidil on üks lokaalne miinimum). Selle erinevus seisneb selles, et see ei kogu kogu teavet kõigist testjuhtumitest, vaid muudab punkte kohe pärast iga iteratsioonietappi.

Seega on teil ülesanne ennustada mõnda väärtust, näiteks maja maksumust selle suuruse põhjal. Või aeg, mis kulub teie süsteemil päringu töötlemiseks. Ei või iial teada.

Olete otsustanud kasutada lineaarset regressiooni ja soovite nüüd leida koefitsiendid, mille puhul teie mudeli ennustatud hinna ja müüdud kodude tegeliku maksumuse erinevus on minimaalne. Selleks võite kasutada ühte järgmistest meetoditest:

  1. Partii gradiendi laskumine
  2. Stohhastilise gradiendi laskumine
  3. Normaalvõrrandid
  4. Newtoni meetod (Newtoni meetod)

Täna räägime kahest gradiendi laskumise tüübist.

Gradiendi laskumine

Mis on ikkagi gradient laskumine?

Kujutage ette mõnda keeruline funktsioonühest muutujast. Sellel on mõned tõusud ja mõõnad. Selle funktsiooni igas punktis võime võtta tuletise:

Roheline joon näitab, et sel hetkel on tuletis positiivne, punane joon on negatiivne.

Valige funktsiooni suvaline punkt. Tahad "alla minna" sellele punktile lähima miinimumini. Kui teie punkti tuletis on positiivne (roheline joon), tähendab see, et miinimum on teie taga ja selleni jõudmiseks peate oma punkti koordinaadist lahutama x teie tuletise väärtus.

Kui teie punktis on tuletis negatiivne (punane joon), tähendab see, et miinimum on teie ees ja selleni jõudmiseks peate taas koordinaadist lahutama x teie tuletise väärtus. Selle väärtus on negatiivne ja seetõttu, lahutades negatiivse väärtuse, suurendate koordinaati x.

Noh, et laskumine ei oleks valusalt pikk või ekslikult kiire, korrutage oma tuletise väärtus valitud punktis mõne koefitsiendiga.

Kuid see kõik kehtib juhul, kui funktsioon sõltub ühest koordinaadist. Meie majade müügi mudeli puhul sõltub väärtusfunktsioon kahest muutujast.

Seda funktsiooni võib pidada "tassiks" 3D-ruumis:

Mitme muutuja funktsioonide tuletist nimetatakse gradiendiks. Gradient on muutujate arvu mõõtmega vektor, milles iga vektori element on ühe muutuja tuletis.

Meie kulufunktsioon on:

Selle gradient on tähistatud järgmiselt ja see arvutatakse järgmise valemi abil:

Igas osatuletises käsitleme seda ühe muutuja funktsioonina. Kõiki teisi muutujaid loeme konstantideks, seetõttu on nende tuletised võrdsed nulliga:

Pärast seda värskendame iga väärtust järgmise valemi abil:

Parameetrit nimetatakse õppimiskiiruseks ja see määrab, kui kiiresti liigume funktsiooni minimaalse väärtuseni. Iga parameetrite uuendamisega astume väikese sammu miinimumi poole. Pärast seda kordame protseduuri. Samas vaatame, kui palju on kulufunktsiooni väärtus võrreldes eelmise sammuga muutunud. Kui see muutus muutub väga väikeseks (märkime aega), võime peatuda ja arvata, et oleme jõudnud miinimumpunkti.

See on nagu kõndimine mäest alla lähedal asuva oru poole. Gradiendi laskumine võimaldab teil leida kohaliku miinimumi, kuid mitte globaalset. See tähendab, et kui on mitu punkti, kus teie funktsioon on minimaalne, viib gradient laskumine teid ühte neist – sellesse, mis on lähtepunktile kõige lähemal, kuid mitte tingimata kõige sügavamasse lõhe.

Enne esimest sammu määrame parameetrid juhuslikult ja täpselt see, kuidas me neid määrame, määrab, millisesse miinimumi me langeme:


Siin sulgudes tuleb märkida, et ülaltoodu puudutab gradiendi laskumist üldine vaade, kuid ei käsitle gradiendi laskumist spetsiaalselt lineaarse regressiooni jaoks. Lineaarse regressiooni maksumuse funktsioon on kumer ja sellel on ainult üks miinimum (mõelge 3D-tassile), nii et gradiendiga laskumine leiab selle alati üles.

Mida lähemale jõuate kulufunktsiooni miinimumile (mida väiksem on erinevus prognoositud hinna ja tegeliku hinna vahel), seda paremini kirjeldab sirgjoon teie ajaloolisi andmeid:

Kui ajaloolisi näiteid pole palju, on kõik hästi, aga kui neid on miljoneid, siis iga väikese sammu kohta miinimumi poole peame tegema miljoneid arvutusi ja see võib võtta kaua aega.

Selle alternatiiviks oleks stohhastiline gradiendi laskumine - meetod, mille puhul võtame ühe näite ja värskendame väärtusi ainult selle põhjal. Seejärel võtame järgmise näite ja värskendame parameetreid, keskendudes sellele. Ja nii edasi. See toob kaasa asjaolu, et me ei lähe alati mäest alla, mõnikord astume sammu üles või küljele, kuid varem või hiljem jõuame selle miinimumini ja hakkame selle ümber ringi käima. Kui väärtused hakkavad meile sobima (jõuavad vajaliku täpsuse), peatame laskumise.

Pseudokoodis näeb stohhastilise gradiendi laskumine välja järgmine:

Kuni kulufunktsiooni muutus on väike: (

j jaoks:= 1 kuni m (

Lõpuks algoritmi konvergentsi omadused: partii gradient laskumine läheneb alati miinimumile, eeldusel, et kasutatakse piisavalt väikest väärtust. Stohhastilise gradiendi laskumine oma üldisel kujul ei koondu miinimumini, kuid selles on modifikatsioone, mis võimaldavad tal lähenemist saavutada.

Gradiendi laskumine- enimkasutatav õppealgoritm, seda kasutatakse peaaegu igas mudelis. Gradient laskumine on sisuliselt see, kuidas modelle koolitatakse. Ilma GS-ita poleks masinõpe praegu seal, kus ta on. Gradiendi laskumise meetodit kasutatakse mõningate muudatustega laialdaselt õppimiseks ja sügavaks õppimiseks ning seda nimetatakse vigadeks.

Sellest postitusest leiate gradiendi laskumise selgituse koos väikese matemaatikaga. Kokkuvõte:

  • GS-i tähendus on kogu algoritmi selgitus;
  • Algoritmi erinevad variatsioonid;
  • Koodi rakendamine: koodi kirjutamine Phytonis.

Mis on gradiendi laskumine

Gradiendi laskumine on meetod kadufunktsiooni minimaalse väärtuse leidmiseks (seda funktsiooni on mitut tüüpi). Mis tahes funktsiooni minimeerimine tähendab selle funktsiooni sügavaima oru leidmist. Pidage meeles, et funktsiooni kasutatakse mudeli prognooside vigade kontrollimiseks masinõpe. Minimaalse leidmine tähendab väikseima saamist võimalik viga või mudeli täpsuse parandamine. Suurendame täpsust, korrates treeningandmete kogumit, häälestades samal ajal oma mudeli parameetreid (kaalud ja kalded).

Seega on kadufunktsiooni minimeerimiseks vaja gradiendi laskumist.

Algoritmi olemus on saamise protsess madalaim väärtus vead. Samamoodi võib seda pidada süvendisse laskumiseks, püüdes leida kuristiku põhjast kulda (madalaim veaväärtus).


Funktsiooni miinimumi leidmine

Tulevikus, et leida kõige rohkem madal viga(sügavaim org) kaotusfunktsioonis (ühe kaalu suhtes), peate kohandama mudeli parameetreid. Kuidas me neid seadistame? See aitab matemaatiline analüüs. Analüüsi kaudu teame, et funktsiooni graafiku kalle on funktsiooni tuletis muutuja suhtes. See kalle osutab alati lähimasse lohku!

Joonisel näeme ühe kaaluga kadufunktsiooni graafikut (nimega "Viga" sümboliga "J"). Kui nüüd arvutada kadufunktsiooni kalle (nimetage seda dJ/dw) ühe kaalu suhtes, saame suuna, milles peame liikuma, et jõuda kohalike miinimumideni. Kujutagem praegu ette, et meie mudelil on ainult üks kaal.

Kaotuse funktsioon

Tähtis: kui me kordame kõiki treeninguandmeid, lisame iga raskuse jaoks dJ/dw väärtusi. Kuna kaotus sõltub treeningu näitest, siis ka dJ/dw muutub jätkuvalt. Seejärel jagame keskmise saamiseks kogutud väärtused koolitusnäidete arvuga. Seejärel kasutame seda (iga kaalu) keskmist iga kaalu kohandamiseks.

Pange tähele ka järgmist. Kaotamise funktsioon on mõeldud vea jälgimiseks iga treeningnäite puhul, samas kui suhtelise üksiku kaalufunktsiooni tuletis on koht, kus raskust tuleb selle treeningunäite minimeerimiseks nihutada. Saate luua mudeleid isegi ilma kadufunktsiooni kasutamata. Kuid iga kaalu (dJ/dw) puhul peate kasutama tuletist.

Nüüd, kui oleme kindlaks määranud suuna, kuhu raskust suruma peame, peame välja mõtlema, kuidas seda teha. Siin kasutame õppimiskiiruse koefitsienti, seda nimetatakse hüperparameetriks. Hüperparameeter on teie mudeli nõutav väärtus, millest meil on tegelikult vaid ähmane ettekujutus. Tavaliselt saab neid väärtusi õppida katse-eksituse meetodil. Siin pole nii: üks sobib kõigile hüperparameetritele. Õppimiskiiruse tegurit võib käsitleda kui "sammu õiges suunas", kus suund tuleb dJ/dw-st.

See oli ühele kaalule üles ehitatud kaotusfunktsioon. IN tõeline mudel teeme kõik ülalloetletud kõigi raskuste jaoks, võttes läbi kõik treeningnäited. Isegi suhteliselt väikeses masinõppemudelis on teil rohkem kui 1 või 2 kaalu. See muudab visualiseerimise keeruliseks, kuna graafikul on mõõtmed, mida mõistus ei suuda ette kujutada.

Lisateavet gradientide kohta

Lisaks kadufunktsioonile on gradiendi laskumiseks vaja ka gradienti, mis on dJ/dw (kaofunktsiooni tuletis ühe kaalu suhtes, teostatakse kõigi kaalude jaoks). dJ/dw sõltub teie valitud kadufunktsioonist. Kõige tavalisem kadufunktsioon on ruutkeskmine viga.

Selle funktsiooni tuletis mis tahes kaalu suhtes (see valem näitab gradiendi arvutamist:

See on kogu matemaatika GSis. Seda vaadates võime öelda, et sisuliselt ei sisalda GS eriti palju matemaatikat. Ainus matemaatika, mida see sisaldab, on korrutamine ja jagamine, milleni me ka jõuame. See tähendab, et teie funktsiooni valik mõjutab iga kaalu gradiendi arvutamist.

Õppimismäära tegur

Kõik, mis ülal on kirjutatud, on õpikus. Gradiendi laskumise kohta saate avada mis tahes raamatu, seal kirjutatakse sama. Iga kadufunktsiooni gradiendi valemeid võib leida Internetist, teadmata, kuidas neid ise tuletada.

Enamiku mudelite probleem on aga õppimiskiirus. Vaatame iga kaalu värskendatud avaldist (j ulatub 0-st kaalude arvuni ja teeta-j on j-nda kaal kaalude vektoris on k vahemikus 0 kuni nihkete arvuni, kus B-k on kth nihe nihkevektoris). Siin on alfa õppimiskiiruse koefitsient. Selle põhjal saame öelda, et arvutame dJ/dTheta-j (Theta-j kaalu gradient) ja seejärel sammu suuruse alfa selles suunas. Seetõttu läheme gradienti alla. Nihke värskendamiseks asenda Theta-j B-k-ga.

Kui see sammu suurus alfa on liiga suur, ületame miinimumi: see tähendab, et jääme minimaalsest ilma. Kui alfa on liiga väike, kasutame miinimumini jõudmiseks liiga palju iteratsioone. Nii et alfa peaks sobima.

Gradient Descenti kasutamine

Noh, see on kõik. See on kõik, mida peate gradiendi laskumise kohta teadma. Võtame kõik pseudokoodis kokku.

Märkus. Siin olevad skaalad on esitatud vektorites. Suuremates mudelites on need tõenäoliselt maatriksid.

Alates i = 0 kuni "koolitusnäidete arv"

1. Arvutage i-nda treeningunäite kaotusfunktsiooni gradient iga kaalu ja kallutamise kohta. Nüüd on teil vektor, mis on täis iga kaalu gradiente, ja muutuja, mis sisaldab kallutatuse gradienti.

2. Lisage eraldi akumulatiivse vektori jaoks arvutatud kaalude gradiendid, mis pärast iga treeningunäite itereerimist peaksid sisaldama iga raskuse gradientide summat mitme iteratsiooni jooksul.

3. Sarnaselt skaalade olukorrale lisage akumulatiivsele muutujale kallutatuse gradient.

Nüüd, PÄRAST kõigi koolitusnäidete läbimist, tehke järgmist.

1. Jagage kumulatiivse kaalu ja kallutatuse muutujad treeningnäidete arvuga. See annab meile kõigi kaalude keskmise gradiendi ja kalde keskmise gradiendi. Me nimetame neid uuendatud akudeks (RA).

2. Seejärel värskendage alloleva valemi abil kõiki kaalusid ja nihkeid. dJ / dTheta-j asemel asendate kaalud OA (uuendatud aku) ja kallutamise OA. Tehke sama nihkega.

See oli vaid üks gradiendi laskumise iteratsioon.

Korrake seda protsessi algusest lõpuni mitme iteratsiooni jaoks. See tähendab, et GS-i 1. iteratsiooni puhul kordate läbi kõik treeningnäited, arvutate gradiendid, seejärel värskendate kaalusid ja kaldeid. Seejärel teete seda mitme HS-i iteratsiooni jaoks.

Erinevad gradiendi laskumise tüübid

Gradiendi laskumiseks on 3 võimalust:

1. Minipartii: Selle asemel, et itereerida kõiki koolitusnäiteid ja iga iteratsiooniga teha arvutusi ainult ühe treeningunäite kohta, töötleme korraga n koolitusnäidet. See valik sobib väga suurte andmekogumite jaoks.

2.Stohhastiline gradiendi laskumine: Sel juhul KASUTAMINE AINULT ÜKS kord selle asemel, et kasutada ja läbi vaadata iga treeningu näide. Siin on mõned asjad, mida tasub tähele panna.

  • Iga GS-i iteratsiooniga peate treeningkomplekti segama ja valima juhuslik näide koolitust.
  • Kuna kasutate ainult ühte treeningnäidet, on teie tee kohalike miinimumini väga lärmakas, nagu purjus inimesel, kes on palju joonud.

3. GS seeria: Sellest on kirjutatud eelmistes osades. Tsükli iga õppenäite üle.


Pilt, mis võrdleb 3 tabamust kohalike miinimumidega

Näidiskood pythonis

GS-seeria puhul näeb Pythoni treeningkoodi plokk välja selline.

Def train(X, y, W, B, alfa, max_iters): """ Teostab GD kõigi treeningnäidete puhul, X: treeninguandmete kogum, y: treeningandmete sildid, W: kaaluvektor, B: kallutatud muutuja, alfa : Õppimiskiirus, max_iters: Maksimaalne GD iteratsioon """ dW = 0 # Kaalud gradiendi akumulaatori dB = 0 # Nihe gradiendi akumulaatori m = X. kuju # Ei. näidetest i jaoks vahemikus(max_iters): dW = 0 # Akumulaatorite lähtestamine dB = 0 j jaoks vahemikus (m): # 1. Korrake kõiki näiteid, # 2. Arvutage kaalude ja kõrvalekallete gradiendid väärtuses w_grad ja b_grad, # 3. Värskendage dW lisades w_grad ja dB, lisades b_grad, W = W - alfa * (dW / m) # Värskendage kaalusid B = B - alfa * (dB / m) # Värskendage nihke tagastamist W, B # Tagasta värskendatud kaalud ja kallutatus.

See on kõik. Nüüd peaks teil olema hea arusaam sellest, mis on gradient laskumine.

Stohhastilist gradienti hinnatakse järgmise valemiga:

st see on kõigi juhuslike vektorite summa, mille kaal on võrdne antud juhuslikes suundades minimeeritud funktsiooni juurdekasvuga.

Kui võtta parameetritena ühikvektorid, siis see hinnang, nagu on hõlpsasti näha punktist (3.3.22), annab täpne väärtus gradient.

Mõlemat kirjeldatud gradiendi hinnangut saab tõhusalt kasutada mis tahes väärtuste jaoks, sealhulgas ja mis eristab neid oluliselt deterministlikust hindamismeetodist (3.3.22), mille puhul rangelt kinnitab sama asjaolu, et deterministlikud meetodid on üldistatud juhuslikeks (vt lõpus). alajaotis 3.3.1). Toome sellise üldistuse kohta veel ühe näite.

Gradiendiotsing (3.3.21) on erijuhtum vastavalt vähemalt kaks juhuslikku otsingu algoritmi. Esimene algoritm:

kus on ikka ühikjuhuslik -mõõtmeline vektor. See on hästi tuntud gradiendi juhusliku otsingu algoritm. Teisel algoritmil on vorm (3.3.23), kuid gradiendi hinnang arvutatakse valemi abil

Kui, nagu on lihtne näha, taanduvad mõlemad algoritmid gradiendiotsingu algoritmiks (3.3.21).

Seega on juhuslik otsing teadaolevate tavaotsingumeetodite loomulik jätk, jätk ja üldistus.

Veel üks juhuslik otsingufunktsioon, mis avaneb rohkelt võimalusi selle tõhusaks kasutamiseks on kasutada juhusliku sammu operaatorit keerukate tavaliste operaatorite stohhastilise mudelina otsingusuundade leidmiseks optimeeritud parameetrite ruumist.

Seega on lineaarse taktikaga juhusliku otsingu algoritm (3.3.12) kõige järsema laskumisalgoritmi stohhastiline mudel:

milles juhuslik vektor modelleerib gradiendi hinnangut. On uudishimulik, et sellist "hinnangut" ei saa isegi umbkaudseks nimetada, kuna selle stohhastilised omadused ei sarnane hinnangulise gradiendi omadustega. Kuid nagu ülal näidatud, pole juhusliku otsingu algoritm mitte ainult tõhus, vaid mõnel juhul on see tõhusam kui kõige järsem laskumisalgoritm. Siin

juhusliku sammu operaator asendab kohmaka gradiendi hinnangu operaatori näiteks valemi (3.3.22) järgi.

Järgmine juhusliku otsingu tunnus, mis seda tavameetoditest soodsalt eristab, on selle globaalsus, mis avaldub eelkõige lokaalsetes juhuslikes otsingualgoritmides, mis ei ole mõeldud globaalse ekstreemumi leidmiseks. Seega võib juhusliku laskumise algoritm leida globaalse ekstreemumi, kuid tavaline kõige järsema laskumise algoritm seda võimalust põhimõtteliselt ei võimalda, kuna see on loodud lokaalse ekstreemumi leidmiseks.

Järelikult on juhuslike otsingualgoritmide globaalsus juhuslikkuse kasutamise "lisatasu" ja midagi sellist nagu " tasuta rakendus» algoritmile. See asjaolu on eriti oluline tundmatu struktuuriga objektide optimeerimisel, kui puudub täielik kindlus probleemi üks-äärmuslikkuses ja mitme ekstreemsuse olemasolu on võimalik (kuigi mitte oodata). Meetodite kasutamine sel juhul globaalne otsing see oleks ebamõistlik ekstravagantsus. Siin on kõige sobivamad kohalikud juhuslikud otsingumeetodid, kuna need lahendavad tõhusalt kohaliku probleemi ja võivad põhimõtteliselt lahendada globaalse probleemi, kui see ilmneb. See annab juhuslikele otsingutele omamoodi psühholoogilise usaldusväärsuse, mida kasutajad kõrgelt hindavad.

Juhusliku otsingu algoritmiline lihtsus muudab selle atraktiivseks eelkõige tarbijatele. Kogemus näitab, et teadaolevad juhuslikud otsingualgoritmid on vaid "lõuend", millele kasutaja igal konkreetsel juhul "tikib" uute algoritmide mustreid, mis ei peegelda mitte ainult tema maitset ja kalduvusi (mida ei saa eirata), vaid ka spetsiifikat. optimeeritavast objektist. Viimane loob soodsa aluse üldtuntud põhimõtte elluviimiseks, et algoritm peab olema loodud “objekti jaoks”. Lõpuks määrab juhusliku otsingu algoritmiline lihtsus selle riistvara rakendamise lihtsuse. See mitte ainult ei võimalda luua lihtsaid, kompaktseid ja usaldusväärseid optimeerijaid piiramatu arvu optimeeritud parameetritega, vaid muudab ka nende optimaalse sünteesi korraldamise arvutis üsna lihtsaks.