Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • TV (Smart TV)
  • Yandex ka prezantuar një version të ri të kërkimit bazuar në rrjetet nervore. Yandex hap teknologjinë e mësimit të makinerive CatBoost

Yandex ka prezantuar një version të ri të kërkimit bazuar në rrjetet nervore. Yandex hap teknologjinë e mësimit të makinerive CatBoost

Historikisht, rrjetet nervore artificiale, gjatë historisë së tyre më shumë se gjysmë shekullore, kanë përjetuar të dyja periudhat e rritjes së shpejtë dhe vëmendjes së shtuar të publikut, si dhe periudhat e skepticizmit dhe indiferencës që i pasuan. NË Kohe të mira Shkencëtarëve dhe inxhinierëve u duket se më në fund kanë gjetur një teknologji universale që mund të zëvendësojë njerëzit në çdo detyrë njohëse. Ashtu si kërpudhat pas shiut, po shfaqen modele të ndryshme të reja të rrjeteve nervore dhe ka debate intensive midis autorëve të tyre, matematikanëve profesionistë, për shkallën më të madhe ose më të vogël të biologjisë së modeleve që ata propozojnë. Biologët profesionistë i vëzhgojnë këto diskutime nga mënjanë, duke i thyer periodikisht dhe duke thirrur "Po, kjo nuk ndodh në natyrën reale!" - dhe pa shumë efekt, pasi matematikanët e rrjeteve nervore dëgjojnë biologët, si rregull, vetëm kur faktet e biologëve janë në përputhje me teoritë e tyre. Megjithatë, me kalimin e kohës, gradualisht grumbullohet një grup detyrash për të cilat rrjetet nervore performojnë sinqerisht dobët dhe entuziazmi i njerëzve ftohet.

Këto ditë, rrjetet nervore janë kthyer në zenitin e famës së tyre falë shpikjes së metodës së pambikëqyrur të para-stërvitjes bazuar në Makinat e kufizuara Bolzmann (RBM), e cila bën të mundur trajnimin e rrjeteve nervore të thella (d.m.th. me shumë të mëdha, në renditja e dhjetëra mijërave, numri i neuroneve) dhe suksesi i rrjeteve të thella nervore në problemet praktike të njohjes së të folurit dhe imazhit. Për shembull, njohja e të folurit në Android zbatohet duke përdorur rrjete të thella nervore. Nuk dihet se sa do të zgjasë kjo dhe sa mirë rrjetet nervore të thella do të përmbushin pritshmëritë e tyre.
Ndërkohë, paralelisht me të gjitha mosmarrëveshjet, rrymat dhe tendencat shkencore, dallohet qartë një komunitet përdoruesish të rrjeteve nervore – inxhinierë softuerësh praktikues, të cilët janë të interesuar për aspektin e aplikuar të rrjeteve nervore, aftësinë e tyre për të mësuar nga të dhënat e mbledhura dhe për të zgjidhur problemet e njohjes. Shumë probleme praktike të klasifikimit dhe parashikimit trajtohen bukur nga modele të mirë-projektuara, relativisht të vogla të Perceptronit me shumë shtresa (MLP) dhe rrjeteve të funksionit të bazës radiale (RBF). Këto rrjete nervore janë përshkruar shumë herë; Unë do të rekomandoja librat e mëposhtëm, sipas simpatisë sime personale për to: Osovsky, Peshkopi, Khaikin; Ekzistojnë gjithashtu kurse të mira për Coursera dhe burime të ngjashme.

Sidoqoftë, sa i përket qasjes së përgjithshme për përdorimin e rrjeteve nervore në praktikë, ajo është thelbësisht e ndryshme nga qasja e zakonshme e zhvillimit determinist "e programuar, funksionon, do të thotë se funksionon gjithmonë". Rrjetet nervore janë për nga natyra e tyre modele probabiliste dhe qasja ndaj tyre duhet të jetë krejtësisht e ndryshme. Fatkeqësisht, shumë programues të rinj të teknologjive të mësimit të makinerive në përgjithësi dhe rrjeteve nervore në veçanti bëjnë gabime të sistemit kur punojnë me ta, zhgënjehen dhe heqin dorë nga kjo çështje. Ideja për të shkruar këtë traktat në Habr lindi pas komunikimit me përdorues të tillë të zhgënjyer të rrjeteve nervore - programues të shkëlqyer, me përvojë dhe vetëbesim.

Këtu është lista ime e rregullave dhe gabimeve të zakonshme kur përdorni rrjetet nervore.

1. Nëse është e mundur të mos përdorni rrjete nervore, mos i përdorni ato.
Rrjetet nervore ju lejojnë të zgjidhni një problem nëse është e pamundur të propozoni një algoritëm duke i parë në mënyrë të përsëritur (ose shumë të përsëritur) të dhënat me sytë tuaj. Për shembull, nëse ka shumë të dhëna, ato janë jolineare, të zhurmshme dhe/ose përmasa të mëdha.

2. Kompleksiteti i rrjeteve neurale duhet të jetë adekuat me kompleksitetin e detyrës.
Moderne kompjuterët personalë(për shembull, Core i5, 8 GB RAM) ju lejojnë të trajnoni rrjetet nervore në një kohë të rehatshme duke përdorur mostra prej dhjetëra mijëra shembujsh, me dimensione të të dhënave hyrëse deri në qindra. Mostrat e mëdha janë një sfidë për rrjetet e thella nervore të përmendura më sipër, të cilat janë trajnuar në GPU me shumë procesorë. Këto modele janë shumë interesante, por janë përtej fokusit të këtij artikulli habr.

3. Të dhënat e trajnimit duhet të jenë përfaqësuese.
Mostra e trajnimit duhet të përfaqësojë plotësisht dhe në mënyrë gjithëpërfshirëse fenomenin që përshkruhet dhe të përfshijë situata të ndryshme të mundshme. Është mirë të kesh shumë të dhëna, por kjo në vetvete nuk ndihmon gjithmonë. Ekziston një shaka e përhapur në qarqe të ngushta kur një gjeolog vjen te një njohës, vendos një pjesë minerali përpara tij dhe i kërkon atij të zhvillojë një sistem për njohjen e një substance të tillë duke e përdorur atë. "A mund të kem më shumë shembuj të dhënash?" - pyet njohësi. "Sigurisht!" - përgjigjet gjeologu, nxjerr një kazmë dhe e ndan pjesën e tij të mineralit në disa pjesë të tjera. Siç e kuptoni, nuk do të ketë asnjë përdorim nga një operacion i tillë - jo informacione të reja një kampion i tillë i rritur nuk mbart brenda vetes.

4. Përzieni përzgjedhjen.
Pasi të jenë mbledhur vektorët e të dhënave hyrëse dhe dalëse, nëse matjet janë të pavarura nga njëra-tjetra, ndryshoni renditjen e vektorëve në çfarëdo mënyre. Kjo është kritike për ndarjen e saktë të kampionit në Trajnim/Test/Vlerësim dhe të gjitha metodat e trajnimit mostër për mostër.

5. Normalizoni dhe përqendroni të dhënat.
Për perceptronet me shumë shtresa dhe për shumë modele të tjera, vlerat e të dhënave hyrëse duhet të jenë në intervalin [-1;1]. Para se t'i ushqeni ato në rrjetin nervor, zbritni mesataren nga të dhënat dhe ndani të gjitha vlerat me vlerën maksimale.

6. Ndani kampionin në Train, Test dhe Validation.
Gabimi kryesor i fillestarëve është të sigurojnë një gabim minimal në funksionimin e rrjetit nervor në kampionin e trajnimit, në të njëjtën kohë duke e ritrajnuar atë në mënyrë djallëzore, dhe më pas të dëshirojnë të njëjtën cilësi të mirë në të dhëna të reja reale. Kjo është veçanërisht e lehtë për t'u bërë nëse ka pak të dhëna (ose ato janë të gjitha nga një pjesë). Rezultati mund të jetë shumë zhgënjyes: rrjeti nervor do të përshtatet sa më shumë që të jetë e mundur me kampionin dhe do të humbasë funksionalitetin e tij në të dhënat reale. Për të kontrolluar aftësitë përgjithësuese të modelit tuaj, ndani të gjitha të dhënat në tre mostra në një raport 70: 20: 10. Train on Train, duke kontrolluar periodikisht cilësinë e modelit në Test. Për vlerësimin përfundimtar të paanshëm – Vërtetimi.
Teknika e verifikimit të kryqëzuar, ku Train dhe Test gjenerohen disa herë në mënyrë të rastësishme nga të njëjtat të dhëna, mund të jetë tinëzare dhe të japë një përshtypje të rreme të cilësisë së mirë të sistemit - për shembull, nëse të dhënat janë marrë nga burime të ndryshme dhe kjo është kritike. Përdorni vërtetimin e duhur!

7. Aplikoni rregullimin.
Rregullimi është një teknikë që ju lejon të shmangni mbistërvitjen e një rrjeti nervor gjatë stërvitjes, edhe nëse ka pak të dhëna. Nëse gjeni një kuti me këtë fjalë, sigurohuni që ta kontrolloni. Shenja e një rrjeti nervor të mbitrajnuar - vlera të mëdha pesha, në rendin e qindra dhe mijërave, një rrjet i tillë nervor nuk do të funksionojë normalisht në të dhëna të reja, të paparë më parë

8. Nuk ka nevojë të ritrajnoni rrjetin nervor në internet.
Ideja e ritrajnimit të përhershëm të rrjetit nervor gjatë gjithë kohës në të dhëna të reja hyrëse është e saktë në vetvete; në sistemet reale biologjike kjo është pikërisht ajo që ndodh. Ne mësojmë çdo ditë dhe rrallë çmendemi. Sidoqoftë, për rrjetet nervore artificiale konvencionale në fazën aktuale të zhvillimit teknik, kjo praktikë është e rrezikshme: rrjeti mund të stërvitet ose të përshtatet me të dhënat më të fundit të marra - dhe të humbasë aftësitë e tij të përgjithësimit. Në mënyrë që sistemi të përdoret në praktikë, rrjeti nervor duhet: 1) të trajnojë, 2) të testojë cilësinë në mostrat e testimit dhe të vërtetimit, 3) të zgjedhë një opsion të suksesshëm rrjeti, të rregullojë peshat e tij dhe 4) të përdorë sistemin nervor të trajnuar rrjet në praktikë, peshat në proces nuk e ndryshojnë përdorimin.

9. Përdorni algoritme të reja mësimore: Levenberg-Marquardt, BFGS, Gradientet e konjuguara etj.
Jam thellësisht i bindur se zbatimi i të mësuarit pas përhapjes është detyra e shenjtë e kujtdo që punon me rrjetet nervore. Kjo metodë është më e thjeshta, relativisht e lehtë për t'u programuar dhe ju lejon të studioni plotësisht procesin e të mësuarit të rrjeteve nervore. Ndërkohë, përhapja e pasme u shpik në fillim të viteve '70 dhe u bë e njohur në mesin e viteve '80 të shekullit të kaluar; që atëherë, janë shfaqur metoda më të avancuara që mund të përmirësojnë ndjeshëm cilësinë e të mësuarit. Përdorni më mirë ato.

10. Trajnoni rrjetet nervore në MATLAB dhe mjedise të ngjashme miqësore për përdoruesit.
Nëse nuk jeni një shkencëtar që zhvillon metoda të reja për trajnimin e rrjeteve nervore, por një programues praktik, nuk do të rekomandoja vetë kodimin e procedurës për trajnimin e rrjeteve nervore. ekziston nje numer i madh i paketa softuerike, kryesisht në MATLAB dhe Python, të cilat ju lejojnë të trajnoni rrjetet nervore, duke kontrolluar procesin e trajnimit dhe testimit duke përdorur mjete të përshtatshme vizualizimi dhe korrigjimi. Shijoni trashëgiminë e njerëzimit! Unë personalisht më pëlqen qasja "treni në MATLAB me një bibliotekë të mirë - zbatoni modelin e trajnuar me dorë"; është mjaft i fuqishëm dhe fleksibël. Një përjashtim është paketa STATISTICA, e cila përmban metoda të avancuara për trajnimin e rrjeteve nervore dhe ju lejon t'i gjeneroni ato në formën kodi i programit në C, i përshtatshëm për zbatim.

Në artikullin tjetër, unë planifikoj të përshkruaj në detaje ciklin e plotë industrial të përgatitjes së një rrjeti nervor të zbatuar në bazë të parimeve të përshkruara më sipër, të përdorura për detyrat e njohjes në një produkt softuerësh komercial.

Paç fat!

Letërsia

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​Vanhoucke V., Nguyen P., Sainath T. dhe Kingsbury B. Deep Neural Networks for Acoustic Modelimi në njohjen e të folurit, IEEE Signal Processing Magazine, Vol. 29, Nr. 6, 2012, fq. 82-97.
Ciresan D., Meier U., Masci J dhe Schmidhuber J. Rrjeti nervor i thellë me shumë kolona për klasifikimin e shenjave të trafikut. Neural Networks, vëll. 34, gusht 2012, f. 333 – 338
S. Osovsky. Rrjetet nervore për përpunimin e informacionit - trans. nga polonishtja. M.: Financa dhe statistika, 2002. – 344 f.
Peshkopi C.M. Njohja e modelit dhe mësimi i makinerisë. Springer, 2006 – 738 f.
S. Khaikin. Rrjetet nervore: kurs i plotë. Williams, 2006.

Pershendetje te gjitheve!

Në këtë artikull do të flas për një mënyrë të re të rehatshme programimi në Python.

Kjo është më pak si programimi dhe më shumë si krijimi i artikujve (raporte/demostrime/kërkime/shembuj): mund të futni tekst të rregullt shpjegues midis blloqeve të kodit Python. Rezultati i ekzekutimit të kodit nuk janë vetëm numrat dhe teksti (siç është rasti me konsolën kur punoni me Python), por edhe grafikë, diagrame, fotografi...

Shembuj të dokumenteve që mund të krijoni:

Duket bukur? Dëshironi të krijoni të njëjtat dokumente? Atëherë ky artikull është për ju!

Rrjetet nervore krijohen dhe trajnohen kryesisht në Gjuha Python. Prandaj, është shumë e rëndësishme të keni një kuptim bazë se si të shkruani programe në të. Në këtë artikull do të flas shkurtimisht dhe qartë për konceptet bazë të kësaj gjuhe: variablat, funksionet, klasat dhe modulet.

Materiali është i destinuar për njerëzit që nuk janë të njohur me gjuhët e programimit.

Së pari ju duhet të instaloni Python. Pastaj ju duhet të instaloni një mjedis të përshtatshëm për të shkruar programe në Python. Portali u kushtohet këtyre dy hapave.

Nëse gjithçka është instaluar dhe konfiguruar, mund të filloni.

Rrjetet nervore duhet të shkruhen në ndonjë gjuhë programimi. Ka shumë prej tyre, por unë rekomandoj (dhe përdorni në tekste dhe artikuj) gjuhën Python. Pse?

  1. Është shumë e lehtë për të mësuar
  2. Një numër i madh bibliotekash të gatshme
  3. Kur shikoni një program, menjëherë shihni algoritmin që ai zbaton
  4. Shumica e specialistëve të mësimit të makinerive përdorin Python dhe shumica e bibliotekave janë krijuar posaçërisht për këtë gjuhë programimi

Në pjesën e mëparshme, ne mësuam se si të llogarisim ndryshimet e sinjalit kur kalojmë nëpër një rrjet nervor. U njohëm me matricat, produktet e tyre dhe derivuam formula të thjeshta për llogaritjet.

Në pjesën 6 të përkthimit postoj 4 pjesë të librit njëherësh. Të gjithë ata janë të dedikuar për një nga më tema të rëndësishme në fushën e rrjeteve nervore - metoda e përhapjes së pasme. Do të mësoni të llogarisni gabimin e të gjithë neuroneve në një rrjet nervor bazuar vetëm në gabimin përfundimtar të rrjetit dhe peshat e lidhjes.

Materiali është kompleks, ndaj mos ngurroni të bëni pyetjet tuaja në forum.

Ju mund të transferoni.

Kënaquni duke lexuar!

Në pjesën 5 të përkthimit unë paraqes 3 seksione të lidhura në kuptim.

Së pari, ne do të llogarisim personalisht rezultatet e një rrjeti nervor me dy shtresa. Më pas do të njihemi me matricat dhe produktet e tyre. Duke përdorur njohuritë e marra, do të nxjerrim formula të thjeshta për llogaritjen e konvertimit të sinjalit në një rrjet nervor. Dhe në pjesën e fundit ne do të kontrollojmë formulat e marra në praktikë, duke llogaritur rezultatet e një rrjeti nervor me tre shtresa.

Ju mund të transferoni.

Kënaquni duke lexuar!

Pjesa 4 e përkthimit është gati!

Le të ndalojmë së rrahuri rreth shkurret dhe të kalojmë drejtpërdrejt në temën e librit - rrjetet nervore.

Në këtë pjesë të përkthimit, ne do të shikojmë rrjetet nervore biologjike dhe do t'i krahasojmë ato me kompjuterët tradicionalë. Më pas do të ndërtojmë një model të një neuroni artificial dhe përfundimisht do të kalojmë drejtpërdrejt në rrjetet nervore artificiale.

Ju mund të transferoni.

Kënaquni duke lexuar!

Pjesa e tretë e përkthimit!

Artikulli nuk është shumë i gjatë. Ai mbulon vetëm një pjesë të librit. Qëllimi është të tregohet se çdo metodë ka kufizimet e veta. Artikulli diskuton kufizimet e klasifikuesit linear. Konceptet janë paraqitur gjithashtu funksionet logjike dhe problemet XOR.

Ju mund të transferoni.

Kënaquni duke lexuar!

Në këtë artikull do të flas për një gjenerator interesant muzikor që funksionon në rrjetet nervore. Gjeneratori quhet Amper. Me ndihmën e saj, çdo person, madje edhe dikush që është larg kompozimit të kompozimeve, mund të krijojë në mënyrë të pavarur një melodi unike dhe ta përdorë atë për qëllimet e veta.

Këtu, për shembull, është ajo që zhvilloi rrjeti nervor për mua.

  • Python,
  • Mësimi i makinerisë,
  • Teknologjitë e kërkimit
  • Sot Yandex ka lëshuar bibliotekën e vet CatBoost, të zhvilluar duke marrë parasysh përvojën shumëvjeçare të kompanisë në fushën e mësimit të makinerive, në burim të hapur. Me ndihmën e tij, ju mund të trajnoni në mënyrë efektive modele për të dhëna heterogjene, duke përfshirë ato që janë të vështira për t'u përfaqësuar në formën e numrave (për shembull, llojet e reve ose kategoritë e produkteve). Kodi burimor, dokumentacioni, standardet dhe mjetet e nevojshme janë publikuar tashmë në GitHub nën licencën Apache 2.0.

    CatBoost është një metodë e re e mësimit të makinerive e bazuar në rritjen e gradientit. Ai po zbatohet në Yandex për të zgjidhur problemet e renditjes, parashikimit dhe ndërtimit të rekomandimeve. Për më tepër, ai tashmë po përdoret si pjesë e bashkëpunimit me Organizatën Evropiane për Kërkime Bërthamore (CERN) dhe klientët industrialë të Yandex Data Factory. Pra, si ndryshon CatBoost nga analogët e tjerë me burim të hapur? Pse rritja dhe jo metoda e rrjetit nervor? Si lidhet kjo teknologji me Matrixnet-in tashmë të njohur? Dhe çfarë lidhje kanë macet me të? Sot do t'u përgjigjemi të gjitha këtyre pyetjeve.

    Termi "mësim me makinë" u shfaq në vitet '50. Ky term i referohet një përpjekjeje për të mësuar një kompjuter për të zgjidhur probleme që janë të lehta për njerëzit, por është e vështirë të zyrtarizohet mënyra për t'i zgjidhur ato. Si rezultat i mësimit të makinerive, një kompjuter mund të shfaqë sjellje që nuk është projektuar në mënyrë eksplicite në të. Në botën moderne, ne i hasim frytet e mësimit të makinerive shumë herë çdo ditë, shumë prej nesh pa e ditur as atë. Përdoret për të ndërtuar burime në rrjetet sociale, lista të "produkteve të ngjashme" në dyqanet online, kur jepni kredi në banka dhe përcaktoni koston e sigurimit. Teknologjitë e mësimit të makinerisë përdoren për të kërkuar fytyra në fotografi ose filtra të shumtë fotografish. Për këtë të fundit, nga rruga, zakonisht përdoren rrjetet nervore, dhe për to shkruhet aq shpesh sa mund të ketë një mendim të gabuar se ky është një "plumb argjendi" për zgjidhjen e problemeve të çdo kompleksiteti. Por kjo nuk është e vërtetë.

    Rrjetet nervore ose rritja e gradientit

    Në fakt, mësimi i makinerive është shumë i ndryshëm: ka një numër të madh metodash të ndryshme dhe rrjetet nervore janë vetëm një prej tyre. Kjo ilustrohet nga rezultatet e garave në platformën Kaggle, ku metoda të ndryshme fitojnë në gara të ndryshme dhe rritja e gradientit fiton në shumë prej tyre.

    Rrjetet nervore janë të shkëlqyera në zgjidhjen e problemeve të caktuara - për shembull, ato ku duhet të punoni me të dhëna homogjene. Të dhënat homogjene përbëhen, për shembull, nga imazhe, tinguj ose tekst. Në Yandex, ata na ndihmojnë të kuptojmë më mirë pyetje kërkimi, duke kërkuar foto të ngjashme në internet, njihni zërin tuaj në Navigator dhe shumë më tepër. Por këto nuk janë të gjitha detyrat për mësimin e makinerive. Ekziston një shtresë e tërë sfidash serioze që nuk mund të zgjidhen vetëm nga rrjetet nervore - ato kanë nevojë për rritje të gradientit. Kjo metodë është e domosdoshme kur ka shumë të dhëna dhe struktura e saj është heterogjene.

    Për shembull, nëse keni nevojë për një parashikim të saktë të motit, i cili merr parasysh sasi e madhe faktorë (temperatura, lagështia, të dhënat e radarit, vëzhgimet e përdoruesve dhe shumë të tjerë). Ose nëse keni nevojë të renditni në mënyrë cilësore rezultatet e kërkimit - kjo është ajo që e shtyu Yandex të zhvillojë metodën e tij të mësimit të makinerive.

    Matrixnet

    Së pari Motorë kërkimi nuk ishin aq komplekse sa janë tani. Në fakt, në fillim ishte vetëm një kërkim fjalësh - kishte aq pak faqe sa nuk kishte shumë konkurrencë mes tyre. Pastaj kishte më shumë faqe dhe u bë e nevojshme renditja e tyre. Filluan të merren parasysh komplikime të ndryshme - frekuenca e fjalëve, tf-idf. Pastaj kishte shumë faqe për çdo temë, ndodhi përparimi i parë i rëndësishëm - ata filluan të merrnin parasysh lidhjet.

    Shumë shpejt interneti u bë i rëndësishëm komercialisht dhe u shfaqën shumë mashtrues që përpiqeshin të mashtronin algoritmet e thjeshta që ekzistonin në atë kohë. Dhe ndodhi një zbulim i dytë i rëndësishëm - motorët e kërkimit filluan të përdorin njohuritë e tyre për sjelljen e përdoruesve për të kuptuar se cilat faqe janë të mira dhe cilat jo.

    Rreth dhjetë vjet më parë, mendja njerëzore nuk ishte më e mjaftueshme për të kuptuar se si të renditeshin dokumentet. Ju ndoshta keni vënë re se numri i rezultateve të gjetura për pothuajse çdo pyetje është i madh: qindra mijëra, shpesh miliona rezultate. Shumica e tyre janë jointeresante, të padobishme, përmendin vetëm rastësisht fjalët e pyetjes, ose në përgjithësi janë të padëshiruara. Për t'iu përgjigjur kërkesës suaj, ju duhet të zgjidhni menjëherë dhjetëshen e parë nga të gjitha rezultatet e gjetura. Shkrimi i një programi që e bën këtë me cilësi të pranueshme është bërë përtej fuqisë së një programuesi njerëzor. Ka ndodhur tranzicioni tjetër - motorët e kërkimit filluan të përdorin në mënyrë aktive mësimin e makinerive.

    Në vitin 2009, Yandex prezantoi metodën e tyre Matrixnet, bazuar në rritjen e gradientit. Mund të themi se renditja ndihmohet nga inteligjenca kolektive e përdoruesve dhe "mençuria e turmës". Informacioni në lidhje me faqet dhe sjelljen e njerëzve konvertohet në shumë faktorë, secili prej të cilëve përdoret nga Matrixnet për të ndërtuar një formulë renditjeje. Në fakt, formula e renditjes tani shkruhet nga një makinë. Nga rruga, ne përdorim edhe rezultatet e rrjeteve nervore si faktorë individualë (për shembull, kështu funksionon algoritmi Palekh, për të cilin folëm vitin e kaluar).

    Një tipar i rëndësishëm i Matrixnet është se është rezistent ndaj montimit të tepërt. Kjo ju lejon të merrni parasysh shumë faktorë të renditjes dhe në të njëjtën kohë të stërviteni në një sasi relativisht të vogël të dhënash, pa frikë se makina do të gjejë modele jo-ekzistente. Metodat e tjera të mësimit të makinerive ose ju lejojnë të ndërtoni formula më të thjeshta me më pak faktorë ose kërkojnë një mostër më të madhe trajnimi.

    Një veçori tjetër e rëndësishme e Matrixnet është se formula e renditjes mund të konfigurohet veçmas për klasa mjaft të ngushta pyetjesh. Për shembull, përmirësoni cilësinë e kërkimit vetëm për pyetjet rreth muzikës. Në të njëjtën kohë, renditja për klasat e tjera të pyetjeve nuk do të përkeqësohet.

    Ishte Matrixnet dhe avantazhet e tij që formuan bazën e CatBoost. Por pse na duhej të shpiknim diçka të re?

    Pothuajse çdo metodë moderne e bazuar në rritjen e gradientit funksionon me numra. Edhe nëse të dhënat tuaja janë zhanret e muzikës, llojet e reve ose ngjyrat, këto të dhëna ende duhet të përshkruhen në gjuhën e numrave. Kjo çon në një shtrembërim të thelbit të tyre dhe një ulje të mundshme të saktësisë së modelit.

    Le ta demonstrojmë këtë duke përdorur një shembull primitiv me një katalog produktesh në një dyqan. Produktet kanë pak lidhje me njëri-tjetrin dhe nuk ka asnjë model midis tyre që do t'i lejonte ato të porositen dhe t'u caktohej një numër domethënës për secilin produkt. Prandaj, në këtë situatë, çdo produkti thjesht i caktohet një ID serike (për shembull, në përputhje me programin e kontabilitetit të dyqanit). Renditja e këtyre numrave nuk do të thotë asgjë, por algoritmi do ta përdorë këtë renditje dhe do të nxjerrë përfundime të rreme prej tij.

    Një specialist me përvojë i mësimit të makinerive mund të gjejë një mënyrë më inteligjente për t'i kthyer veçoritë kategorike në numra, por një përpunim i tillë paraprak do të çojë në humbjen e disa informacioneve dhe do të çojë në një përkeqësim të cilësisë së zgjidhjes përfundimtare.

    Kjo është arsyeja pse ishte e rëndësishme të mësojmë makinën të punojë jo vetëm me numra, por edhe me kategori drejtpërdrejt, modelet midis të cilave do të identifikojë në mënyrë të pavarur, pa "ndihmën" tonë manuale. Dhe CatBoost është projektuar nga ne që të funksionojë njësoj mirë jashtë kutisë me veçori numerike dhe kategorike. Falë kësaj, ajo tregon më shumë cilesi e larte trajnimi kur punoni me të dhëna heterogjene sesa zgjidhje alternative. Mund të përdoret në fusha të ndryshme - nga banka në industri.

    Nga rruga, emri i teknologjisë vjen nga Kategorike Boosting. Dhe asnjë mace e vetme nuk u dëmtua gjatë zhvillimit.

    Standardet

    Mund të flasim për një kohë të gjatë për ndryshimet teorike të bibliotekës, por është më mirë ta tregojmë atë në praktikë një herë. Për qartësi, ne krahasuam performancën e bibliotekës CatBoost me analogët e hapur XGBoost, LightGBM dhe H20 në një grup grupesh të dhënash publike. Dhe këtu janë rezultatet (sa më të vogla aq më mirë): https://catboost.yandex/#benchmark

    Ne nuk duam të jemi të pabazë, prandaj, së bashku me bibliotekën, një përshkrim i procesit të krahasimit, kodi për fillimin e krahasimit të metodave dhe një kontejner me versionet e përdorura të të gjitha bibliotekave janë postuar në burim të hapur. Çdo përdorues mund të përsërisë eksperimentin në shtëpi ose në të dhënat e tij.

    CatBoost në praktikë

    Metoda e re tashmë është testuar në shërbimet Yandex. Ai u përdor për të përmirësuar rezultatet e kërkimit, për të renditur furnizimin e rekomandimeve Yandex.Zen dhe për të llogaritur parashikimin e motit në teknologjinë Meteum - dhe në të gjitha rastet u tregua më i mirë se Matrixnet. Në të ardhmen, CatBoost do të punojë në shërbime të tjera. Ne nuk do të ndalemi këtu - është më mirë t'ju tregojmë menjëherë për Përplasësin e Madh të Hadronit (LHC).

    CatBoost ka gjetur aplikim edhe në kuadër të bashkëpunimit me Organizatën Evropiane për Kërkime Bërthamore. LHC operon detektorin LHCb, i cili përdoret për të studiuar asimetrinë e materies dhe antimateries në ndërveprimet e kuarkëve të rëndë të bukur. Për të gjurmuar me saktësi grimcat e ndryshme të zbuluara në një eksperiment, ka disa pjesë specifike në detektor, secila prej të cilave përcakton vetitë e veçanta të grimcave. Detyra më e vështirë në këtë rast është kombinimi i informacionit me pjesë të ndryshme detektor në njohuritë më të sakta, të grumbulluara rreth grimcave. Kjo është ajo ku mësimi i makinerisë vjen në shpëtim. Duke përdorur CatBoost për të kombinuar të dhënat, shkencëtarët arritën të përmirësojnë karakteristikat cilësore të zgjidhjes përfundimtare. Rezultatet e CatBoost ishin rezultate më të mira të marra duke përdorur metoda të tjera.

    Si të filloni të përdorni CatBoost?

    Për të punuar me CatBoost, thjesht instaloni atë në kompjuterin tuaj. Biblioteka mbështet sistemet operative Linux, Windows dhe macOS dhe është e disponueshme në gjuhë Programimi me Python dhe R. Yandex ka zhvilluar gjithashtu një program vizualizimi

    18.07.2017, e martë, 15:53, koha e Moskës, Teksti: Vladimir Bakhur

    Postuar ne akses i hapur biblioteka e makinerive Trajnim CatBoost ndryshon nga metodat tradicionale në algoritmin e rritjes së gradientit për të mësuarit fleksibël në të dhëna heterogjene, duke përfshirë ato jo numerike.

    Përdorimi fleksibël i të dhënave numerike dhe jo numerike

    Yandex prezantoi një metodë të re të mësimit të makinerive, CatBoost, dhe e bëri bibliotekën CatBoost të disponueshme publikisht për të gjithë në GitHub nën Licencën Apache 2.0. Teknika ju lejon të trajnoni në mënyrë efektive modelet në të dhëna heterogjene, si vendndodhjen e përdoruesit, historikun e transaksioneve dhe llojin e pajisjes.

    Sipas deklaratave të vetë Yandex, bibliotekat CatBoost janë një alternativë ndaj rrjeteve nervore, të cilat nuk janë të përshtatshme për të gjitha llojet e problemeve në prodhimin real. Në kushte të tilla, algoritmi CatBoost siguron performancë më të lartë dhe një rezultat më të qëndrueshëm gjatë procesit të rikualifikimit dhe parashikueshmëri të lartë për sa i përket cilësisë së rezultatit përfundimtar.

    “Yandex është përfshirë në mësimin e makinerive për shumë vite dhe CatBoost është krijuar nga specialistët më të mirë në këtë fushë. Duke e bërë të disponueshme publikisht bibliotekën CatBoost, ne duam të kontribuojmë në zhvillimin e mësimit të makinerive, "tha Mikhail Bilenko, Shef i Departamentit të Inteligjencës dhe Kërkimit të Makinerisë në Yandex. - Duhet të them që CatBoost është metoda e parë ruse e mësimit të makinerive që u bë e disponueshme në Burim i hapur. Shpresojmë që komuniteti i specialistëve ta vlerësojë dhe të ndihmojë në përmirësimin e tij.”

    Siç shpjegoi Yandex për CNews, teknika CatBoost është trashëgimtare e metodës së mësimit të makinerive Matrixnet, e cila përdoret pothuajse në të gjitha shërbimet Yandex. Për analogji me Matrixnet, CatBoost përdor një mekanizëm të rritjes së gradientit, i cili është i përshtatshëm për të punuar me të dhëna heterogjene.

    Teknika CatBoost është interesante për shkak të kohës së reduktuar të rikualifikimit për shkak të përdorimit të një algoritmi të pronarit të ndërtimit të modelit, i cili, nga ana tjetër, ndryshon nga skema standarde e rritjes së gradientit.

    Logoja e projektit CatBoost

    Ndryshe nga Matrixnet, i cili trajnon modelet mbi të dhënat numerike, CatBoost gjithashtu merr parasysh të dhënat jo numerike, për shembull, llojet e reve ose llojet e ndërtesave. Më parë, të dhëna të tilla duhej të përktheheshin në numra, të cilët mund të ndryshonin thelbin e tyre dhe të ndikonin në saktësinë e modelit.

    Tani të dhëna të tilla mund të përdoren në formën e tyre origjinale, falë të cilave CatBoost tregon cilësi më të lartë të trajnimit sesa metodat e ngjashme për të punuar me të dhëna heterogjene. Mund të përdoret në fusha të ndryshme - nga banka në industri.

    CatBoost mund të lëshohet direkt nga linja e komandës ose përdorni një API miqësore për përdoruesit për Python ose R me mjete për analizën e formulës dhe vizualizimin e të mësuarit.

    Siç shpjegoi shërbimi i shtypit Yandex për CNews, rezultati është CatBoost punë e gjatë specialistët më të mirë të kompanisë, të cilët kanë përvetësuar përvojën shumëvjeçare të kompanisë në zhvillimin e zgjidhjeve kryesore në mësimin e makinerive, si Matrixnet. Duke e vënë teknologjinë në dispozicion të publikut, Yandex synon të japë një kontribut serioz në zhvillimin e mësimit të makinerive dhe pret që komuniteti i specialistëve të vlerësojë algoritmin dhe të ndihmojë në përmirësimin e tij.

    Yandex planifikon të ofrojë mbështetje të vazhdueshme për projektin. Siç shpjegoi kompania, mbështetja do të shprehet në përmirësimin e vazhdueshëm të algoritmit, si dhe punën me reagimet nga përdoruesit e teknologjisë.

    Krahasimi i Algoritmeve të Mësimit të Makinerisë (GitHub)

    Zhvilluesit gjithashtu planifikojnë të zhvillojnë teknologjinë brenda kompanisë: një ekip i veçantë aktualisht po punon për të, duke e përmirësuar dhe zbatuar atë në sasi e madhe shërbimet. Me kalimin e kohës, biblioteka e aplikacioneve CatBoost do të rritet. Meqenëse teknologjia është e disponueshme për publikun, i gjithë përparimi do të jetë menjëherë i disponueshëm për të gjithë përdoruesit. Duke marrë parasysh sasinë dhe cilësinë e shërbimeve Yandex dhe detyra jo të parëndësishme që janë zgjidhur në to, kompania ka besim se teknologjia do të mbetet lider në klasën e saj për një kohë të gjatë.

    Sot në botë ka menyra te ndryshme duke punuar me faktorë kategorikë. Ato përbëhen nga parapërpunimi fillestar dhe kthimi i tyre në numra, shpjegoi Yandex.

    Metoda më efektive nga pikëpamja praktike është numërimi i "counters"; ajo përdoret në mënyrë aktive nga konkurrentët në Kaggle, dhe kjo metodë përdoret në zgjidhjet fituese. Në ekzistuese zgjidhje të hapura Kjo metodë nuk përdoret, por përdoren metoda më të thjeshta, si kodimi me një nxehtësi, zakonisht funksionojnë më keq. Për shembull, një parapërpunim i tillë mund të përdoret në algoritmin lightgbm.

    CatBoost përdor punë më inteligjente me faktorë kategorikë, ku statistikat mbi to llogariten jo paraprakisht, por gjatë stërvitjes, dhe më së shumti statistika të dobishme sipas të dhënave dhe kombinimeve të tyre. Natyrisht, mbështetet gjithashtu edhe kodimi i vetëm në CatBoost; për karakteristikat që kanë pak vlera, ndonjëherë kjo metodë jep një plus në cilësi, shpjegoi Yandex.

    E veçanta e bibliotekave CatBoost është se edhe tani, në epokën e zbatimit të gjerë Teknologjitë e thella Mësimi, për prodhimin real, rrjetet nervore nuk janë të përshtatshme për të gjitha llojet e detyrave, dhe në kushte të tilla, rritja e gradientit CatBoost siguron performancë, stabilitet dhe parashikueshmëri më të lartë për sa i përket cilësisë së rezultatit përfundimtar.

    Aplikime praktike

    CatBoost tashmë është testuar në shërbimet Yandex. Si pjesë e eksperimentit, ai u përdor për të përmirësuar rezultatet e kërkimit, për të renditur furnizimin e rekomandimeve të Yandex.Zen dhe për të llogaritur parashikimet e motit në teknologjinë Meteum. Në të gjitha rastet, teknologjia u tregua më e mirë se Matrixnet.

    Në të ardhmen, CatBoost do të punojë në shërbime të tjera, vëren Yandex. Ekipi Yandex Data Factory e përdor atë gjithashtu në zgjidhjet e tyre për industrinë, veçanërisht për të optimizuar konsumin e lëndëve të para dhe për të parashikuar defektet.

    CatBoost tashmë ka përvojë në përdorim ndërkombëtar: kjo metodë e mësimit të makinerive u prezantua nga Qendra Evropiane për Kërkime Bërthamore (CERN) për të kombinuar të dhënat e marra nga pjesë të ndryshme të detektorit LHCb.

    Të dhënat e mbledhura gjatë eksperimentit përpunohen për përplasje individuale duke përdorur CatBoost me një shpejtësi prej 40 milionë në sekondë.

    Disponueshmëria e CatBoost

    Për të punuar me CatBoost, thjesht instaloni atë në kompjuterin tuaj. Biblioteka mbështet sistemet operative Linux, Windows dhe macOS dhe është e disponueshme në gjuhët e programimit Python dhe R.

    Yandex ka zhvilluar gjithashtu një program vizualizimi të quajtur CatBoost Viewer, i cili ju lejon të monitoroni procesin e të mësuarit në grafikë. Mund të shkarkoni CatBoost dhe CatBoost Viewer në GitHub.

    Kruchinin Dmitry, Dolotov Evgeniy, Kustikova Valentina, Druzhkov Pavel, Kornyakov Kirill

    Prezantimi

    Aktualisht, mësimi i makinerive është një fushë në zhvillim aktiv e kërkimit shkencor. Kjo është për shkak të aftësisë për të mbledhur dhe përpunuar të dhëna më shpejt, më të lartë, më të fortë, më të lehtë dhe më lirë, dhe për zhvillimin e metodave për identifikimin nga këto të dhëna ligjet me të cilat ndodhin proceset fizike, biologjike, ekonomike dhe të tjera. Në disa probleme, kur një ligj i tillë është mjaft i vështirë për t'u përcaktuar, përdoret mësimi i thellë.

    Të mësuarit e thellë shqyrton metodat për modelimin e abstraksioneve të nivelit të lartë në të dhëna duke përdorur transformime të shumëfishta sekuenciale jolineare, të cilat zakonisht përfaqësohen si rrjete nervore artificiale. Sot, rrjetet nervore përdoren me sukses për të zgjidhur probleme të tilla si parashikimi, njohja e modelit, kompresimi i të dhënave dhe një sërë të tjerash.

    Rëndësia e temës së mësimit të makinerive dhe, në veçanti, të mësuarit e thellë konfirmohet nga shfaqja e rregullt e artikujve mbi këtë temë në Habré: Ky artikull i kushtohet analiza krahasuese disa mjete softuerike të mësimit të thellë, nga të cilat një shumëllojshmëri e madhe janë shfaqur kohët e fundit. Këto mjete përfshijnë bibliotekat e softuerit, zgjerimet e gjuhëve të programimit dhe gjuhë të pavarura, duke ju lejuar të përdorni algoritme të gatshme krijimin dhe trajnimin e modeleve të rrjeteve nervore. Mjetet ekzistuese të mësimit të thellë kanë funksione të ndryshme dhe kërkojnë nivele të ndryshme njohurish dhe aftësish nga përdoruesi. Zgjedhja e duhur përdorimi i një mjeti është një detyrë e rëndësishme që ju lejon të arrini rezultatin e dëshiruar në kohën më të vogël dhe me më pak përpjekje.

    Artikulli ofron një përmbledhje të shkurtër të mjeteve për dizajnimin dhe trajnimin e modeleve të rrjeteve nervore. Fokusi është në katër biblioteka: Caffe, Pylearn2, Torch dhe Theano. Shqyrtohen aftësitë themelore të këtyre bibliotekave dhe jepen shembuj të përdorimit të tyre. Cilësia dhe shpejtësia e bibliotekave krahasohen kur ndërtohen topologji identike të rrjetit nervor për të zgjidhur problemin e klasifikimit të shifrave të shkruara me dorë (data e të dhënave MNIST përdoret si grup trajnimi dhe testimi). Gjithashtu është bërë një përpjekje për të vlerësuar lehtësinë e përdorimit të bibliotekave në fjalë në praktikë.

    Kompleti i të dhënave MNIST

    Më pas, baza e të dhënave MNIST () e imazheve të shifrave të shkruara me dorë do të përdoret si grupi i të dhënave në studim. Imazhet në këtë bazë të dhënash kanë një rezolucion prej 28x28 dhe ruhen në formatin gri. Numrat janë të përqendruar në imazh. E gjithë baza e të dhënave është e ndarë në dy pjesë: trajnim, i përbërë nga 50,000 imazhe, dhe testim, i përbërë nga 10,000 imazhe.

    Mjete softuerike për zgjidhjen e problemeve të të mësuarit të thellë

    Ka shume software për zgjidhjen e problemeve të të nxënit të thellë. Mund të gjeni një krahasim të përgjithshëm në funksionalitetin më të famshmit, këtu ofrojmë informacione të përgjithshme për disa prej tyre (). Gjashtë bibliotekat e para të softuerit zbatojnë më së shumti gamë të gjerë metodat e mësimit të thellë. Zhvilluesit ofrojnë mundësi për të krijuar rrjete nervore plotësisht të lidhura (FC NN), rrjete nervore konvolucionale (CNN), kodues automatik (AE) dhe makina Boltzmann të kufizuar (RBM). Është e nevojshme t'i kushtohet vëmendje bibliotekave të mbetura. Edhe pse kanë më pak funksionalitet, në disa raste thjeshtësia e tyre ndihmon në arritjen e produktivitetit më të madh.

    Tabela 1. Aftësitë e softuerit të të mësuarit të thellë

    # Emri Gjuhe O.C. FC NN CNN A.E. R.B.M.
    1 DeepLearnToolbox Matlab Windows, Linux + + + +
    2 Theano Python Windows, Linux, Mac + + + +
    3 Pylearn2 Python Linux, Vagrant + + + +
    4 Deepnet Python Linux + + + +
    5 Deepmat Matlab ? + + + +
    6 Pishtari Lua, C Linux, Mac OS X, iOS, Android + + + +
    7 Darch R Windows, Linux + - + +
    8 Caff e C++, Python, Matlab Linux, OS X + + - -
    9 nnForge C++ Linux + + - -
    10 CXXNET C++ Linux + + - -
    11 Cuda-convnet C++ Linux, Windows + + - -
    12 Cuda CNN Matlab Linux, Windows + + - -

    Bazuar në informacionin e dhënë dhe rekomandimet e ekspertëve, katër biblioteka u përzgjodhën për shqyrtim të mëtejshëm: - një nga bibliotekat më të pjekura dhe funksionalisht më të kompletuara, dhe - e përdorur gjerësisht nga komuniteti. Çdo bibliotekë konsiderohet sipas planit të mëposhtëm:
    1. Informacion i shkurtër mbi sfondin.
    2. Karakteristikat teknike (OS, gjuha e programimit, varësitë).
    3. Funksionaliteti.
    4. Një shembull i formimit të një rrjeti të regresionit logjistik.
    5. Trajnimi dhe përdorimi i modelit të ndërtuar për klasifikim.
    Pas shqyrtimit të bibliotekave të listuara, ato krahasohen në një numër konfigurimesh të rrjetit testues.

    Biblioteka e kafenesë



    Caffe ka qenë në zhvillim që nga shtatori 2013. Zhvillimi filloi me Yangqing Jia gjatë studimeve të tij në Universitetin e Kalifornisë në Berkeley. Që atëherë, Caffe është mbështetur në mënyrë aktive nga Qendra e Vizionit dhe Mësimit Berkeley (BVLC) dhe komuniteti i zhvilluesve në GitHub. Biblioteka shpërndahet nën licencën BSD 2-Clause.

    Caffe zbatohet duke përdorur gjuhën e programimit C++, me mbështjellës Python dhe MATLAB në dispozicion. Sistemet operative të mbështetura zyrtarisht janë Linux dhe OS X, dhe ekziston gjithashtu një port jozyrtar për Windows. Caffe përdor bibliotekën BLAS (ATLAS, Intel MKL, OpenBLAS) për llogaritjet e vektorëve dhe matricës. Së bashku me këtë, varësitë e jashtme përfshijnë glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Për të shpejtuar llogaritjet, Caffe mund të ekzekutohet në një GPU duke përdorur aftësitë bazë Teknologjitë CUDA ose bibliotekat e primitivëve të të mësuarit të thellë cuDNN.

    Zhvilluesit e kafesë mbështesin aftësinë për të krijuar, trajnuar dhe testuar rrjete nervore plotësisht të lidhura dhe konvolucionale. Të dhënat hyrëse dhe transformimet përshkruhen nga koncepti avokat. Në varësi të formatit të ruajtjes, mund të përdoren llojet e mëposhtme të shtresave të të dhënave burimore:

    • DATA - përcakton një shtresë të dhënash në format leveldb dhe lmdb.
    • HDF5_DATA - shtresa e të dhënave në formatin hdf5.
    • IMAGE_DATA është një format i thjeshtë që supozon se skedari përmban një listë imazhesh me një etiketë klase.
    • dhe të tjerët.
    Transformimet mund të specifikohen duke përdorur shtresat:
    • INNER_PRODUCT është një shtresë plotësisht e lidhur.
    • KONVOLUCION - shtresë konvolucionale.
    • POOLING - shtresa e bashkimit hapësinor.
    • Normalizimi i Përgjigjes Lokale (LRN) - shtresa e normalizimit lokal.
    Së bashku me këtë, funksione të ndryshme aktivizimi mund të përdoren gjatë gjenerimit të transformimeve.
    • Pjesa pozitive (Njësia e korrigjuar-lineare, ReLU).
    • Funksioni sigmoid (SIGMOID).
    • Tangjente hiperbolike (TANH).
    • Vlera absolute (ABSVAL).
    • Eksponentimi (POWER).
    • Funksioni binomial normal log probabiliteti (BNLL).
    Shtresa e fundit e modelit të rrjetit nervor duhet të përmbajë një funksion gabimi. Biblioteka ka funksionet e mëposhtme:
    • Gabim mesatar katror (MSE).
    • Humbja e menteshës.
    • Funksioni i humbjes logjistike.
    • Funksioni i fitimit të informacionit.
    • Humbja e entropisë kryq sigmoide.
    • Funksioni Softmax. Përgjithëson entropinë kryq sigmoidale në rastin e më shumë se dy klasave.
    Në procesin e modeleve të trajnimit përdoren metoda të ndryshme optimizimi. Zhvilluesit e kafesë ofrojnë zbatime të një numri metodash:

    Në bibliotekën Caffe, topologjia e rrjeteve nervore, të dhënat fillestare dhe metoda e trajnimit specifikohen duke përdorur skedarët e konfigurimit në formatin prototxt. Skedari përmban një përshkrim të të dhënave hyrëse (trajnim dhe test) dhe shtresa të rrjetit nervor. Le të shqyrtojmë fazat e ndërtimit të skedarëve të tillë duke përdorur shembullin e rrjetit të "regresionit logjistik" (). Në vijim, do të supozojmë se skedari quhet linear_regression.prototxt dhe ndodhet në direktorinë shembuj/mnist.
    Oriz. 2. Struktura e rrjetit nervor

    Biblioteka Pylearn2


    Pylearn2 është një bibliotekë e zhvilluar në laboratorin LISA në Universitetin e Montrealit që nga shkurti 2011. Ka rreth 100 zhvillues në GitHub. Biblioteka shpërndahet nën licencën BSD 3-Klause.

    Pylearn2 është implementuar në Python, aktualisht mbështet sistemin operativ Linux dhe gjithashtu mund të ekzekutohet në çdo sistem operativ duke përdorur Makine virtuale, sepse zhvilluesit ofrojnë një mbështjellës të konfiguruar mjedis virtual bazuar në Vagrant. Pylearn2 është një superset i bibliotekës Theano. Kërkohet gjithashtu PyYAML, PIL. Për të shpejtuar llogaritjet, Pylearn2 dhe Theano përdorin Cuda-convnet, i cili zbatohet në C++/CUDA, i cili jep një rritje të konsiderueshme të shpejtësisë.

    Pylearn2 mbështet aftësinë për të krijuar rrjete nervore plotësisht të lidhura dhe konvolucionare, lloje të ndryshme të koduesve automatikë (Kondues automatikë kontraktues, kodifikues automatikë të denoising) dhe makina Boltzmann të kufizuar (RBM Gaussian, RBM spike-and-slab). Ofrohen disa funksione gabimi: ndër-entropia, log-gjasa. Në dispozicion metodat e mëposhtme trajnimi:

    • Zbritja e gradientit të grupit (BGD).
    • Zbritja Stokastike e Gradientit (SGD).
    • Zbritja e gradientit të konjuguar jolinear (NCG).
    Në bibliotekën Pylearn2, rrjetet nervore specifikohen duke përdorur përshkrimin e tyre në një skedar konfigurimi në formatin YAML. Skedarët YAML janë një mënyrë e përshtatshme dhe e shpejtë për të serializuar objektet pasi janë krijuar duke përdorur teknika programimi të orientuara nga objekti.

    Biblioteka Pishtari


    Torch është një bibliotekë kompjuterike shkencore me mbështetje të gjerë për algoritmet e mësimit të makinerive. Zhvilluar nga Instituti i Kërkimeve Idiap, Universiteti i Nju Jorkut dhe NEC Laboratories America, që nga viti 2000, i shpërndarë nën licencën BSD.

    Biblioteka zbatohet në Lua duke përdorur C dhe CUDA. Gjuha e shpejtë e shkrimit Lua, e kombinuar me teknologjitë SSE, OpenMP dhe CUDA, lejon Torch të tregojë shpejtësi të mirë në krahasim me bibliotekat e tjera. Aktiv ky moment Mbështeten sistemet operative Linux, FreeBSD, Mac OS X. Modulet kryesore funksionojnë edhe në Windows. Varësitë e Torch përfshijnë imagemagick, gnuplot, nodejs, npm dhe të tjera.

    Biblioteka përbëhet nga një grup modulesh, secila prej të cilave është përgjegjëse për faza të ndryshme të punës me rrjetet nervore. Kështu, për shembull, moduli nn ofron konfigurimin e rrjetit nervor (përkufizimi i shtresave dhe parametrave të tyre), moduli optimale përmban implementime metoda të ndryshme optimizimet e përdorura për trajnim, dhe gnuplot ofron mundësinë e vizualizimit të të dhënave (ndërtimi i grafikëve, shfaqja e imazheve, etj.). Instalimi i moduleve shtesë ju lejon të zgjeroni funksionalitetin e bibliotekës.

    Torch ju lejon të krijoni rrjete komplekse nervore duke përdorur një mekanizëm kontejneri. Enëështë një klasë që kombinon komponentët e deklaruar të një rrjeti nervor në një konfigurim të përbashkët, i cili më vonë mund të transferohet në procedurën e trajnimit. Një komponent i një rrjeti nervor mund të jetë jo vetëm shtresa plotësisht e lidhur ose konvolucionale, por edhe funksione aktivizimi ose gabimi, si dhe kontejnerë të gatshëm. Pishtari ju lejon të krijoni shtresat e mëposhtme:

    • Shtresa plotësisht e lidhur (lineare).
    • Funksionet e aktivizimit: tangjenta hiperbolike (Tanh), zgjedhja e minimumit (Min) ose maksimal (Max), funksioni softmax (SoftMax) dhe të tjera.
    • Shtresat konvolucionale: konvolucioni (Convolution), rrallimi (SubSampling), bashkimi hapësinor (MaxPooling, AveragePooling, LPPooling), normalizimi i diferencës (SubtractiveNormalization).
    Funksionet e gabimit: Gabim mesatar katror (MSE), CrossEntropy, etj.

    Gjatë trajnimit mund të përdoren metodat e mëposhtme të optimizimit:

    Le të shohim procesin e konfigurimit të një rrjeti nervor në Torch. Së pari ju duhet të deklaroni një enë, pastaj shtoni shtresa në të. Rendi në të cilin shtoni shtresat është i rëndësishëm sepse... dalja e shtresës (n-1) do të jetë hyrja e n-së.
    regresioni = nn. Regresioni vijues():add(nn.Linear(784,10)) regresioni:add(nn.SoftMax()) humbja = nn.ClassNLLCriterion()
    Përdorimi dhe trajnimi i një rrjeti nervor:

    1. Ngarkimi i të dhënave hyrëse X. Funksioni torch.load(path_to_ready_dset) ju lejon të ngarkoni një grup të dhënash të përgatitur paraprakisht në tekst ose format binar. Në mënyrë tipike, kjo është një tabelë Lua e përbërë nga tre fusha: madhësia, të dhënat dhe etiketat. Nëse nuk ka të dhëna të gatshme, mund të përdorni funksione standarde gjuha Lua(p.sh. io.open(emri i skedarit [, modaliteti])) ose funksionet nga paketat e bibliotekës Torch (p.sh. image.loadJPG (emri i skedarit)).
    2. Përcaktimi i përgjigjes së rrjetit për të dhënat hyrëse X:
      Y = regresion:përpara(X)
    3. Llogaritja e funksionit të gabimit E = humbja(Y,T), në rastin tonë ky është funksioni i gjasave.
      E = humbje: përpara (Y, T)
    4. Llogaritja e gradientëve sipas algoritmit të përhapjes së pasme.
      dE_dY = humbje: prapa(Y,T) regresion:prapa(X,dE_dY)
    Tani le t'i bashkojmë të gjitha. Për të trajnuar një rrjet nervor në bibliotekën Torch, duhet të shkruani ciklin tuaj të trajnimit. Në të, deklaroni një funksion të veçantë (mbyllje) që do të llogarisë përgjigjen e rrjetit, do të përcaktojë vlerën e gabimit dhe do të rillogarisë gradientët dhe do t'ia kalojë këtë mbyllje funksionit të zbritjes së gradientit për të përditësuar peshat e rrjetit.
    -- Krijo variabla speciale: peshat e rrjetit nervor dhe gradientet e tyre w, dE_dw = regresion:getParameters() local eval_E = funksion(w) dE_dw:zero() -- Përditëso gradientët lokal Y = regresion:përpara(X) lokal E = humbje : përpara(Y,T) lokal dE_dY = humbje: prapa(Y,T) regresion: prapa(X,dE_dY) kthim E, dE_dw fund -- Më pas në ciklin e trajnimit quajmë optim.sgd(eval_E, w, optimState)
    ku OptimState janë parametrat e zbritjes së gradientit (Shkalla e mësimit, momenti, peshaDecay, etj.). Ju mund të shikoni të gjithë ciklin e trajnimit.

    Është e lehtë të shihet se procedura e deklarimit, si procedura e trajnimit, merr më pak se 10 rreshta kodi, gjë që tregon lehtësinë e përdorimit të bibliotekës. Në të njëjtën kohë, biblioteka ju lejon të punoni me rrjete nervore në një nivel mjaft të ulët.

    Ruajtja dhe ngarkimi i rrjetit të trajnuar kryhet duke përdorur funksione të veçanta:
    torch.save (rrugë, regresion) net = pishtar.ngarkoj (rrugë)
    Pasi të jetë ngarkuar, rrjeti mund të përdoret për klasifikim ose trajnim shtesë. Nëse duhet të zbuloni se cilës klasë i përket elementi i mostrës, atëherë thjesht duhet të përshkoni rrjetin dhe të llogarisni daljen:
    rezultat = neto:përpara (shembull)
    Më shumë shembuj kompleks mund të gjenden në materialet e trajnimit të bibliotekës.

    Biblioteka Theano


    Theano është një zgjerim i gjuhës Python që ju lejon të llogaritni në mënyrë efikase shprehjet matematikore, që përmban vargje shumëdimensionale. Biblioteka mori emrin e saj për nder të gruas së filozofit dhe matematikanit të lashtë Grek Pitagora - Theano (ose Theano). Theano u zhvillua në laboratorin LISA për të mbështetur zhvillimin e shpejtë të algoritmeve të mësimit të makinerive.

    Biblioteka është implementuar në Python dhe mbështetet në sistemet operative Sistemet Windows, Linux dhe Mac OS. Theano përfshin një përpilues që përkthen shprehjet matematikore të shkruara në Python në kod efikas C ose CUDA.

    Theano ofron një grup bazë mjetesh për konfigurimin e rrjeteve nervore dhe trajnimin e tyre. Është e mundur të implementohen rrjete të lidhura plotësisht me shumë shtresa (Perceptron me shumë shtresa), rrjete neurale konvolucionale (CNN), rrjete nervore të përsëritura (RNN), autoenkoderë dhe makina Boltzmann të kufizuar. Ofrohen gjithashtu funksione të ndryshme aktivizimi, në veçanti, funksioni sigmoid, softmax, ndër-entropia. Gjatë trajnimit, përdoret zbritja e gradientit të grupit (Batch SGD).

    Le të shohim konfigurimin e një rrjeti nervor në Theano. Për lehtësi, ne do të implementojmë klasën LogisticRegression(), e cila do të përmbajë variabla - parametra të trajnueshëm W, b dhe funksione për të punuar me ta - llogaritjen e përgjigjes së rrjetit (y = softmax(Wx + b)) dhe funksionin e gabimit. Më pas, për të trajnuar rrjetin nervor, ne krijojmë funksionin train_model. Për të, është e nevojshme të përshkruhen metodat që përcaktojnë funksionin e gabimit, rregulli për llogaritjen e gradientëve, metodën e ndryshimit të peshave të rrjetit nervor, madhësinë dhe vendndodhjen e kampionit mini-grua (vetë imazhet dhe përgjigjet për ata). Pasi të jenë përcaktuar të gjithë parametrat, funksioni kompilohet dhe kalohet në ciklin e trajnimit.


    Oriz. 3. Diagrami i klasës për zbatimin e një rrjeti nervor në Theano

    Implementimi i softuerit të klasës

    klasa LogisticRegression(object): def __init__(vetë, input, n_in, n_out): # y = W * x + b # deklaroni variablat, përcaktoni llojin, numrin e hyrjeve dhe daljeve vetë.W = theano.shared(# inicializoni peshat fillestare në vlerën zero=numpy.zeros((n_in, n_out), dtype=theano.config.floatX), name="W", borrow=True) self.b = theano.shared(value=numpy.zeros(( n_out,), dtype=theano.config.floatX), name="b", huazim=True) # shtoni funksionin e aktivizimit softmax, dalja e rrjetit është e ndryshueshme y_pred self.p_y_given_x = T.nnet.softmax(T.dot(input, vetë.W) + vet.b) vetë.y_pred = T.argmax(self.p_y_given_x, boshti=1) vetë.params = # përkufizo funksionin e gabimit def negative_log_mundësi(vetë, y): kthen -T.mean (T. log(self.p_y_given_x )) # x - futet në hyrjen e rrjetit # një grup imazhesh (minibatch) është rregulluar në rreshta në matricën x # y - përgjigja e rrjetit për çdo mostër x = T.matrix ("x") y = T.ivector("y") # krijoni një model regresioni logjistik secila imazh MNIST ka një madhësi 28*28 klasifikues = LogisticRegression(input=x, n_in=28 * 28, n_out=10) # vlera e funksionit të gabimit që jemi duke u përpjekur të minimizoni gjatë trajnimit koston = classifier.negative_log_likelihood(y) # për të llogaritur gradientët, duhet të telefononi funksionin Theano - grad g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost =cost, wrt=classifier.b) # define rregullat për përditësimin e përditësimeve të peshave të rrjetit nervor = [(classifier.W, classifier.W - Learning_rate * g_W), (classifier.b, classifier.b - Learning_ rate * g_b)] # përpiloni funksionin e trajnimit, në të ardhmen do të thirret në ciklin e trajnimit train_model = theano.function(inputs =, outputs=cost, updates=updates, datas=( x: train_set_x, y: train_set_y ))


    Për kursim i shpejtë dhe duke ngarkuar parametrat e rrjetit nervor, mund të përdorni funksione nga paketa cPickle:
    importo cPickle save_file = open("rruga", "wb") cPickle.dump(classifier.W.get_value(borrow=True), save_file, -1) cPickle.dump(classifier.b.get_value(borrow=True), save_file , -1) save_file.close() file = open("rruga") klasifikues.W.set_value(cPickle.load(save_file), borrow=True) classifier.b.set_value(cPickle.load(save_file), borrow=E vërtetë )
    Është e lehtë të shihet se procesi i krijimit të një modeli dhe përcaktimi i parametrave të tij kërkon shkrimin e një kodi voluminoz dhe të zhurmshëm. Biblioteka është e nivelit të ulët. Është e pamundur të mos vihet re fleksibiliteti i tij, si dhe aftësia për të zbatuar dhe përdorur përbërësit tuaj. Faqja zyrtare e bibliotekës ka një numër të madh materialesh edukative për tema të ndryshme.

    Krahasimi i bibliotekave duke përdorur shembullin e detyrës së klasifikimit të shifrave të shkruara me dorë

    Infrastruktura e testimit

    Gjatë eksperimenteve për të vlerësuar performancën e bibliotekave, u përdor infrastruktura e mëposhtme e testimit:
    1. Ubuntu 12.04, Intel Core i5-3210M @ 2.5 GHz (eksperimente CPU).
    2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4 GHz + NVIDIA GeForce GT 540M (eksperimente GPU).
    3. GCC 4.8, NVCC 6.5.

    Topologjitë e rrjetit dhe parametrat e trajnimit

    Eksperimentet llogaritëse u kryen në rrjete nervore plotësisht të lidhura dhe konvolucionale të strukturës së mëposhtme:

    Të gjitha peshat u inicializuan rastësisht sipas një ligji uniform të shpërndarjes në rangun (−6/(n_in + n_out), 6/(n_in + n_out)), ku n_in, n_out janë numri i neuroneve në hyrje dhe dalje të shtresës , respektivisht. Parametrat e zbritjes së gradientit stokastik (SGD) zgjidhen të barabartë me vlerat e mëposhtme: shkalla e të mësuarit - 0,01, momenti - 0,9, zbërthimi i peshës - 5e-4, madhësia e grupit - 128, numri maksimal përsëritje - 150.

    Rezultatet eksperimentale

    Koha e trajnimit të rrjeteve nervore të përshkruara më herët ( , ) duke përdorur katër bibliotekat e konsideruara është paraqitur më poshtë (

    Artikujt më të mirë mbi këtë temë