Binuksan ng Yandex ang teknolohiya sa pag-aaral ng makina ng CatBoost. Paghahambing ng malalim na pag-aaral na mga aklatan gamit ang halimbawa ng problema sa pag-uuri ng sulat-kamay na digit

Sa kasaysayan, ang mga artipisyal na neural network, sa kanilang mahigit kalahating siglong kasaysayan, ay nakaranas ng parehong panahon ng mabilis na pagtaas at pagtaas ng atensyon ng publiko, pati na rin ang mga panahon ng pag-aalinlangan at kawalang-interes na sumunod sa kanila. Kapag maganda ang panahon, tila sa mga siyentipiko at inhinyero ay nakahanap na sila ng unibersal na teknolohiya na maaaring palitan ang mga tao sa anumang gawaing nagbibigay-malay. Tulad ng mga kabute pagkatapos ng ulan, lumilitaw ang iba't ibang mga bagong modelo ng mga neural network, at mayroong matinding debate sa pagitan ng kanilang mga may-akda, mga propesyonal na mathematician, tungkol sa mas malaki o mas mababang antas ng biologicality ng mga modelo na kanilang iminumungkahi. Ang mga propesyonal na biologist ay nagmamasid sa mga talakayang ito mula sa gilid, na pana-panahong sumisira at sumisigaw ng "Oo, hindi ito nangyayari sa totoong kalikasan!" – at walang gaanong epekto, dahil ang mga neural network mathematician ay nakikinig sa mga biologist, bilang panuntunan, kapag ang mga katotohanan ng mga biologist ay naaayon sa kanilang sariling mga teorya. Gayunpaman, sa paglipas ng panahon, unti-unting naipon ang isang grupo ng mga gawain kung saan ang mga neural network ay tahasang hindi maganda ang pagganap at ang sigla ng mga tao ay lumalamig.

Sa mga araw na ito, ang mga neural network ay bumalik sa tugatog ng kanilang katanyagan salamat sa pag-imbento ng "unsupervised" na paraan ng pre-training batay sa Restricted Bolzmann Machines (RBM), na ginagawang posible upang sanayin ang mga malalalim na neural network (ibig sabihin, sa sobrang laki. , sa pagkakasunud-sunod ng sampu-sampung libo, bilang ng mga neuron) at ang tagumpay ng malalim na mga neural network sa mga praktikal na problema ng pagsasalita at pagkilala sa imahe. Halimbawa, ipinapatupad ang speech recognition sa Android gamit ang mga deep neural network. Gaano ito katagal at kung gaano kalalim ang mga neural network ay mabubuhay sa mga inaasahan na ibinibigay sa kanila ay hindi alam.
Samantala, kasabay ng lahat ng siyentipikong hindi pagkakaunawaan, agos at uso, malinaw na namumukod-tangi ang isang komunidad ng mga gumagamit ng neural network - nagsasanay ng mga software engineer na interesado sa inilapat na aspeto ng mga neural network, ang kanilang kakayahang matuto mula sa nakolektang data at lutasin ang mga problema sa pagkilala. Maraming praktikal na problema sa pag-uuri at paghula ang mahusay na pinangangasiwaan ng mahusay na binuo, medyo maliit na mga modelo ng Multilayer Perceptron (MLP) at Radial Basis Function network (RBF). Ang mga neural network na ito ay inilarawan nang maraming beses, inirerekumenda ko ang mga sumusunod na libro, sa pagkakasunud-sunod ng aking personal na pakikiramay para sa kanila: Osovsky, Bishop, Khaikin; Mayroon ding magagandang kurso sa Coursera at mga katulad na mapagkukunan.

Gayunpaman, patungkol sa pangkalahatang diskarte sa paggamit ng mga neural network sa pagsasanay, ito ay sa panimula ay naiiba mula sa karaniwang deterministikong diskarte sa pag-unlad na "naka-program, gumagana ito, nangangahulugan ito na palaging gumagana." Ang mga neural network ay likas na mga probabilistikong modelo, at ang diskarte sa kanila ay dapat na ganap na naiiba. Sa kasamaang palad, maraming mga bagong programmer ng mga teknolohiya sa pag-aaral ng machine sa pangkalahatan at sa mga neural network sa partikular ang gumagawa ng mga error sa system kapag nagtatrabaho sa kanila, nadidismaya at umaalis sa bagay na ito. Ang ideya ng pagsulat ng treatise na ito sa Habr ay lumitaw pagkatapos makipag-usap sa mga nabigo na gumagamit ng mga neural network - mahusay, may karanasan, may tiwala sa sarili na mga programmer.

Narito ang aking listahan ng mga panuntunan at karaniwang pagkakamali kapag gumagamit ng mga neural network.

1. Kung posible na huwag gumamit ng mga neural network, huwag gamitin ang mga ito.
Binibigyang-daan ka ng mga neural network na lutasin ang isang problema kung imposibleng magmungkahi ng algorithm sa pamamagitan ng paulit-ulit (o paulit-ulit) na pagtingin sa data gamit ang iyong mga mata. Halimbawa, kung maraming data, ito ay nonlinear, maingay at/o malaki ang laki.

2. Ang pagiging kumplikado ng mga neural network ay dapat na sapat sa pagiging kumplikado ng gawain.
Ginagawang posible ng mga modernong personal na computer (halimbawa, Core i5, 8 GB RAM) na sanayin ang mga neural network sa komportableng oras gamit ang mga sample ng sampu-sampung libong mga halimbawa, na may mga sukat ng data ng input na hanggang daan-daan. Ang malalaking sample ay isang hamon para sa malalalim na neural network na binanggit sa itaas, na sinanay sa mga multi-processor na GPU. Ang mga modelong ito ay lubhang kawili-wili, ngunit lampas sa pokus ng artikulong ito ng Habr.

3. Ang data ng pagsasanay ay dapat na kinatawan.
Ang sample ng pagsasanay ay dapat na ganap at komprehensibong kumakatawan sa kababalaghang inilalarawan at kasama ang iba't ibang posibleng sitwasyon. Mabuti na magkaroon ng maraming data, ngunit iyon mismo ay hindi palaging nakakatulong. Mayroong malawak na biro sa makitid na mga bilog kapag ang isang geologist ay dumating sa isang kinikilala, naglalagay ng isang piraso ng mineral sa harap niya at hiniling sa kanya na bumuo ng isang sistema para sa pagkilala sa naturang sangkap gamit ito. "Maaari ba akong magkaroon ng higit pang mga halimbawa ng data?" - tanong ng kinikilala. "Talaga!" - sagot ng geologist, kumuha ng piko at hinati ang kanyang piraso ng mineral sa ilan pang piraso. Tulad ng naiintindihan mo, ang naturang operasyon ay walang silbi - ang nasabing tumaas na sample ay hindi naglalaman ng anumang bagong impormasyon.

4. Paghaluin ang seleksyon.
Matapos makolekta ang input at output data vectors, kung ang mga sukat ay independiyente sa isa't isa, baguhin ang pagkakasunud-sunod ng mga vector sa anumang paraan. Ito ay kritikal para sa tamang paghahati ng sample sa Train/Test/Validation at lahat ng sample-by-sample na paraan ng pagsasanay.

5. I-normalize at igitna ang data.
Para sa mga multilayer na perceptron, at para sa maraming iba pang mga modelo, ang mga halaga ng data ng input ay dapat nasa saklaw [-1;1]. Bago ang pagpapakain sa kanila sa neural network, ibawas ang average mula sa data at hatiin ang lahat ng mga halaga sa pinakamataas na halaga.

6. Hatiin ang sample sa Train, Test at Validation.
Ang pangunahing pagkakamali ng mga nagsisimula ay upang matiyak ang isang minimal na error sa pagpapatakbo ng neural network sa sample ng pagsasanay, sa parehong oras hellishly retraining ito, at pagkatapos ay naisin para sa parehong magandang kalidad sa bagong tunay na data. Ito ay lalong madaling gawin kung mayroong maliit na data (o lahat sila ay mula sa isang piraso). Ang resulta ay maaaring maging lubhang nakakabigo: ang neural network ay iaangkop hangga't maaari sa sample at mawawala ang pag-andar nito sa totoong data. Upang makontrol ang pangkalahatang kakayahan ng iyong modelo, hatiin ang lahat ng data sa tatlong sample sa ratio na 70: 20: 10. Magsanay sa Tren, pana-panahong sinusuri ang kalidad ng modelo sa Pagsubok. Para sa panghuling walang pinapanigan na pagtatasa – Pagpapatunay.
Ang diskarteng cross-validation, kapag ang Train at Test ay nabuo ng ilang beses sa random na paraan mula sa parehong data, ay maaaring maging mapanlinlang at magbigay ng maling impresyon sa magandang kalidad ng system - halimbawa, kung ang data ay kinuha mula sa iba't ibang mapagkukunan at ito ay kritikal. Gamitin ang tamang Pagpapatunay!

7. Ilapat ang regularisasyon.
Ang regularization ay isang pamamaraan na nagbibigay-daan sa iyo upang maiwasan ang overtraining ng isang neural network sa panahon ng pagsasanay, kahit na may kaunting data. Kung makakita ka ng checkbox na may salitang ito, tiyaking suriin ito. Ang isang tanda ng isang overtrained neural network ay malalaking halaga ng mga timbang, sa pagkakasunud-sunod ng daan-daang at libu-libo;

8. Hindi na kailangang sanayin muli ang neural network online.
Ang ideya ng muling pagsasanay sa neural network sa lahat ng oras sa mga bagong papasok na data ay tama sa kanyang sarili sa mga tunay na biological system ito mismo ang nangyayari. Natututo tayo araw-araw at bihirang mabaliw. Gayunpaman, para sa maginoo na mga artipisyal na neural network sa kasalukuyang yugto ng teknikal na pag-unlad, ang ganitong kasanayan ay peligroso: ang network ay maaaring mag-overtrain o umangkop sa pinakabagong data na natanggap - at mawala ang mga kakayahan sa pangkalahatan. Upang magamit ang system sa pagsasanay, kailangan ng neural network na: 1) sanayin, 2) subukan ang kalidad sa mga sample ng pagsubok at pagpapatunay, 3) pumili ng matagumpay na opsyon sa network, ayusin ang mga timbang nito at 4) gamitin ang sinanay na neural network sa pagsasanay, ang mga timbang sa proseso ay hindi nagbabago sa paggamit.

9. Gumamit ng mga bagong algorithm sa pag-aaral: Levenberg-Marquardt, BFGS, Conjugate Gradients, atbp.
Lubos akong kumbinsido na ang pagpapatupad ng backpropagation na pag-aaral ay ang sagradong tungkulin ng lahat na nagtatrabaho sa mga neural network. Ang pamamaraang ito ay ang pinakasimpleng, medyo madaling i-program at nagbibigay-daan sa iyong pag-aralan nang mabuti ang proseso ng pag-aaral ng mga neural network. Samantala, ang backpropagation ay naimbento noong unang bahagi ng dekada 70 at naging tanyag noong kalagitnaan ng dekada 80 ng huling siglo, lumitaw ang mga mas advanced na pamamaraan na maaaring makabuluhang mapabuti ang kalidad ng pag-aaral. Mas mahusay na gamitin ang mga ito.

10. Sanayin ang mga neural network sa MATLAB at mga katulad na user-friendly na kapaligiran.
Kung ikaw ay hindi isang scientist na bumubuo ng mga bagong pamamaraan para sa pagsasanay ng mga neural network, ngunit isang nagsasanay na programmer, hindi ko irerekomenda ang pag-cod ng pamamaraan para sa pagsasanay ng mga neural network sa iyong sarili. Mayroong isang malaking bilang ng mga pakete ng software, pangunahin sa MATLAB at Python, na nagbibigay-daan sa iyong sanayin ang mga neural network, habang kinokontrol ang proseso ng pagsasanay at pagsubok gamit ang maginhawang visualization at mga tool sa pag-debug. Tangkilikin ang pamana ng sangkatauhan! Personal kong gusto ang "train sa MATLAB na may magandang library - ipatupad ang sinanay na modelo sa pamamagitan ng kamay" na diskarte ito; Ang isang pagbubukod ay ang STATISTICA package, na naglalaman ng mga advanced na pamamaraan para sa pagsasanay ng mga neural network at pinapayagan kang bumuo ng mga ito sa anyo ng program code sa C, na maginhawa para sa pagpapatupad.

Sa susunod na artikulo, plano kong ilarawan nang detalyado ang buong siklo ng industriya ng paghahanda ng isang neural network na ipinatupad batay sa mga prinsipyong inilarawan sa itaas, na ginagamit para sa mga gawain sa pagkilala sa isang komersyal na produkto ng software.

Sana good luck!

Panitikan

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​​​Vanhoucke V., Nguyen P., Sainath T. at Kingsbury B. Deep Neural Networks para sa Acoustic Pagmomodelo sa Speech Recognition, IEEE Signal Processing Magazine, Vol. 29, Hindi. 6, 2012, pp. 82 – 97.
Ciresan D., Meier U., Masci J at Schmidhuber J. Multi-column Deep Neural Network para sa Traffic Sign Classification. Mga Neural Network, Vol. 34, Agosto 2012, pp. 333 – 338
S. Osovsky. Mga neural network para sa pagproseso ng impormasyon - trans. mula sa Polish. M.: Pananalapi at Istatistika, 2002. – 344 p.
Bishop C.M. Pattern Recognition at Machine Learning. Springer, 2006 – 738 p.
S. Khaikin. Mga neural network: isang kumpletong kurso. Williams, 2006.

Sa pagkakataong ito, nagpasya akong mag-aral ng mga neural network. Nakuha ko ang mga pangunahing kasanayan sa bagay na ito sa tag-araw at taglagas ng 2015. Sa pamamagitan ng mga pangunahing kasanayan, ang ibig kong sabihin ay maaari akong lumikha ng isang simpleng neural network sa aking sarili mula sa simula. Makakahanap ka ng mga halimbawa sa aking GitHub repository. Sa artikulong ito, magbibigay ako ng ilang mga paliwanag at magbabahagi ng mga mapagkukunan na maaari mong makitang kapaki-pakinabang sa iyong pag-aaral.

Hakbang 1. Mga neuron at paraan ng feedforward

Kaya ano ang isang "neural network"? Hintayin natin ito at harapin muna ang isang neuron.

Ang isang neuron ay tulad ng isang function: ito ay tumatagal ng ilang mga halaga bilang input at nagbabalik ng isa.

Ang bilog sa ibaba ay kumakatawan sa isang artipisyal na neuron. Tumatanggap ito ng 5 at nagbabalik ng 1. Ang input ay ang kabuuan ng tatlong synapses na konektado sa neuron (tatlong arrow sa kaliwa).

Sa kaliwang bahagi ng larawan nakikita namin ang 2 mga halaga ng input (sa berde) at isang offset (sa kayumanggi).

Ang input data ay maaaring mga numerical na representasyon ng dalawang magkaibang katangian. Halimbawa, kapag gumagawa ng spam filter, maaaring mangahulugan ang mga ito ng pagkakaroon ng higit sa isang salita na nakasulat sa CAPITAL LETTERS at ang pagkakaroon ng salitang "Viagra".

Ang mga halaga ng input ay pinarami ng kanilang tinatawag na "mga timbang", 7 at 3 (naka-highlight sa asul).

Ngayon ay idinagdag namin ang mga nagresultang halaga sa offset at kumuha ng isang numero, sa aming kaso 5 (naka-highlight sa pula). Ito ang input ng ating artificial neuron.

Pagkatapos ang neuron ay nagsasagawa ng ilang pagkalkula at gumagawa ng isang halaga ng output. Nakakuha kami ng 1 dahil ang rounded value ng sigmoid sa point 5 ay 1 (pag-uusapan natin ang function na ito nang mas detalyado mamaya).

Kung ito ay isang spam filter, ang katotohanan na ang output 1 ay nangangahulugan na ang teksto ay minarkahan bilang spam ng neuron.

Ilustrasyon ng isang neural network mula sa Wikipedia.

Kung pagsasamahin mo ang mga neuron na ito, makakakuha ka ng isang direktang nagpapalaganap na neural network - ang proseso ay napupunta mula sa input hanggang sa output, sa pamamagitan ng mga neuron na konektado ng mga synapses, tulad ng sa larawan sa kaliwa.

Hakbang 2. Sigmoid

Pagkatapos mong mapanood ang mga aralin ng Welch Labs, magandang ideya na tingnan ang Linggo 4 ng kurso sa machine learning ng Coursera sa mga neural network upang matulungan kang maunawaan kung paano gumagana ang mga ito. Ang kurso ay napakalalim sa matematika at nakabatay sa Octave, habang mas gusto ko ang Python. Dahil dito, nilaktawan ko ang mga pagsasanay at nakuha ko ang lahat ng kinakailangang kaalaman mula sa video.

Ang isang sigmoid ay nagmamapa lamang ng iyong halaga (sa pahalang na axis) sa isang hanay mula 0 hanggang 1.

Ang una kong priyoridad ay ang pag-aralan ang sigmoid, dahil ito ay may korte sa maraming aspeto ng neural network. May alam na ako tungkol dito mula sa ikatlong linggo ng nabanggit na kurso, kaya pinanood ko ang video mula doon.

Ngunit hindi ka makakarating sa mga video lamang. Para sa kumpletong pag-unawa, nagpasya akong i-code ito sa aking sarili. Kaya nagsimula akong magsulat ng isang pagpapatupad ng isang logistic regression algorithm (na gumagamit ng isang sigmoid).

Tumagal ito ng isang buong araw, at ang resulta ay halos hindi kasiya-siya. Ngunit hindi mahalaga, dahil naisip ko kung paano gumagana ang lahat. Makikita ang code.

Hindi mo kailangang gawin ito sa iyong sarili, dahil nangangailangan ito ng espesyal na kaalaman - ang pangunahing bagay ay naiintindihan mo kung paano gumagana ang sigmoid.

Hakbang 3. Paraan ng backpropagation

Ang pag-unawa kung paano gumagana ang isang neural network mula sa input hanggang sa output ay hindi ganoon kahirap. Mas mahirap maunawaan kung paano natututo ang isang neural network mula sa mga set ng data. Ang prinsipyong ginamit ko ay tinatawag

Hi sa lahat!

Sa artikulong ito ay magsasalita ako tungkol sa isang bagong komportableng paraan upang magprograma sa Python.

Ito ay hindi katulad ng programming at higit pa tulad ng paglikha ng mga artikulo (mga ulat/demonstrasyon/pananaliksik/mga halimbawa): maaari kang magpasok ng regular na tekstong paliwanag sa mga bloke ng Python code. Ang resulta ng pagpapatupad ng code ay hindi lamang mga numero at teksto (tulad ng kaso sa console kapag nagtatrabaho sa Python), kundi pati na rin ang mga graph, diagram, larawan...

Mga halimbawa ng mga dokumento na maaari mong gawin:

Mukhang cool? Gusto mo bang gumawa ng parehong mga dokumento? Kung gayon ang artikulong ito ay para sa iyo!

Ang mga neural network ay nilikha at sinanay pangunahin sa Python. Samakatuwid, napakahalaga na magkaroon ng pangunahing pag-unawa kung paano magsulat ng mga programa dito. Sa artikulong ito, maikli at malinaw kong pag-uusapan ang mga pangunahing konsepto ng wikang ito: mga variable, function, klase at module.

Ang materyal ay inilaan para sa mga taong hindi pamilyar sa mga programming language.

Una kailangan mong i-install ang Python. Pagkatapos ay kailangan mong mag-install ng isang maginhawang kapaligiran para sa pagsusulat ng mga programa sa Python. Ang portal ay nakatuon sa dalawang hakbang na ito.

Kung ang lahat ay naka-install at na-configure, maaari kang magsimula.

Ang mga neural network ay dapat na nakasulat sa ilang programming language. Napakarami sa kanila, ngunit inirerekumenda ko (at ginagamit sa aklat-aralin at mga artikulo) ang wikang Python. bakit naman

  1. Napakadaling matutunan
  2. Ang isang malaking bilang ng mga yari na aklatan
  3. Kapag tumingin ka sa isang programa, makikita mo kaagad ang algorithm na ipinapatupad nito
  4. Karamihan sa mga espesyalista sa pag-aaral ng makina ay gumagamit ng Python at karamihan sa mga aklatan ay partikular ding nilikha para sa programming language na ito

Sa nakaraang bahagi, natutunan namin kung paano kalkulahin ang mga pagbabago sa signal kapag dumadaan sa isang neural network. Nakilala namin ang mga matrice, ang kanilang mga produkto at nagmula sa mga simpleng formula para sa mga kalkulasyon.

Sa part 6 ng translation, sabay-sabay akong nagpo-post ng 4 na sections ng libro. Ang lahat ng mga ito ay nakatuon sa isa sa pinakamahalagang paksa sa larangan ng mga neural network - ang paraan ng backpropagation. Matututuhan mong kalkulahin ang error ng lahat ng neuron sa isang neural network batay lamang sa huling error sa network at mga timbang ng koneksyon.

Ang materyal ay kumplikado, kaya huwag mag-atubiling itanong ang iyong mga katanungan sa forum.

Maaari kang maglipat.

Maligayang pagbabasa!

Sa Bahagi 5 ng pagsasalin ay nagpapakita ako ng 3 seksyong may kaugnayan sa kahulugan.

Una, personal naming kalkulahin ang mga output ng isang dalawang-layer na neural network. Pagkatapos ay makikilala natin ang mga matrice at ang kanilang mga produkto. Gamit ang kaalaman na nakuha, kukuha kami ng mga simpleng formula para sa pagkalkula ng conversion ng signal sa isang neural network. At sa huling seksyon ay susuriin natin ang nakuha na mga formula sa pagsasanay, pagkalkula ng mga output ng isang tatlong-layer na neural network.

Maaari kang maglipat.

Maligayang pagbabasa!

Ang ika-4 na bahagi ng pagsasalin ay handa na!

Huminto tayo sa pag-ikot sa bush at direktang lumipat sa paksa ng libro - mga neural network.

Sa bahaging ito ng pagsasalin, titingnan natin ang mga biological neural network at ihahambing ang mga ito sa mga tradisyonal na computer. Pagkatapos ay bubuo kami ng isang modelo ng isang artipisyal na neuron at sa kalaunan ay direktang lilipat sa mga artipisyal na neural network.

Maaari kang maglipat.

Maligayang pagbabasa!

Ang ikatlong bahagi ng pagsasalin!

Ang artikulo ay hindi masyadong mahaba. Ito ay sumasaklaw lamang sa isang seksyon ng aklat. Ang layunin ay ipakita na ang bawat pamamaraan ay may mga limitasyon. Tinatalakay ng artikulo ang mga limitasyon ng linear classifier. Ang mga konsepto ng mga lohikal na pag-andar at mga problema sa XOR ay ipinakilala din.

Maaari kang maglipat.

Maligayang pagbabasa!

Sa artikulong ito ay magsasalita ako tungkol sa isang kawili-wiling generator ng musika na gumagana sa mga neural network. Ang generator ay tinatawag na Amper. Sa tulong nito, ang sinumang tao, kahit na isang taong malayo sa pagbuo ng mga komposisyon, ay maaaring nakapag-iisa na lumikha ng isang natatanging himig at gamitin ito para sa kanilang sariling mga layunin.

Narito, halimbawa, ang binuo ng neural network para sa akin.

Ipinakilala ng Yandex ang isang bagong algorithm sa paghahanap batay sa mga neural network. Ayon sa mga eksperto, dapat itong makatulong sa kumpanya na mapataas ang pangunguna nito sa merkado ng Russia mula sa pangunahing katunggali nito - ang Google

Ang Russian Internet na may hawak na Yandex ay nagpakilala ng isang bagong algorithm sa paghahanap batay sa mga neural network. Ito ay inihayag ng pinuno ng serbisyo ng kaugnayan ng serbisyo, si Alexander Safronov. Ang bagong algorithm, na tinatawag na "Korolyov," ay naghahanap hindi lamang sa pamamagitan ng mga keyword, kundi pati na rin sa kahulugan, at mas tumpak na mga sagot ang ibinibigay sa mga kumplikadong tanong, ipinaliwanag ng isang kinatawan ng Yandex.

Noong 2016, ipinakilala ng Yandex ang Palekh algorithm, na sa totoong oras ay inihahambing ang kahulugan ng isang bihirang at natatanging kahilingan at ang pamagat ng isang web page, kahit na wala silang karaniwang mga keyword. Halimbawa, kapag nagtatanong ng "isang painting kung saan umiikot ang langit," maibabalik ng isang search engine ang "Starry Night" ni Van Gogh. Hindi tulad ng Palekh, nasusuri ni Korolev ang buong pahina, pati na rin ang kahulugan ng mga query na humahantong sa ibang mga gumagamit dito.

Ang pinuno ng departamento ng paghahanap ng Yandex, Andrei Styskin, ay nagbigay ng isa pang halimbawa ng isang kumplikadong kahilingan: "isang pelikula tungkol sa espasyo kung saan ang isang ama ay nakikipag-usap sa kanyang anak na babae sa pamamagitan ng mga pangalawang kamay." Sa kasong ito, hindi naglalaman ng mga keyword ang kahilingan, ngunit naiintindihan ng algorithm ng paghahanap na pinag-uusapan natin ang pelikulang "Interstellar," sabi ni Styskin.

Ayon sa mga kinatawan ng serbisyo, ang neural network ay may kakayahang mag-self-learning, kaya kapag mas maraming gumagamit ang naghahanap sa isang search engine, mas tumpak ang mga resulta. Ang open crowdsourcing platform na Yandex.Toloka, na inilunsad noong 2014, ay gagamitin para sa pagsubok. Mahalaga, ito ay isang serbisyo kung saan maaaring lumahok ang sinuman sa pagsubok ng mga produkto ng Yandex, bigyan sila ng mga rating at mag-iwan ng mga komento. Nagbibigay-daan ito sa kumpanya na pahusayin ang mga serbisyo nito, at makatanggap ang mga user ng mga gantimpala para dito. Sa kasalukuyan, higit sa 1 milyong user ang nakarehistro sa Yandex.Toloka.

"Ang problema sa mga neural network ay ang mga ito ay napakabagal at hindi magagamit upang gumana sa malaking halaga ng teksto sa real time," sabi ni Igor Ashmanov, tagapagtatag at managing partner ng Ashmanov and Partners. "Kung talagang nagawa ng Yandex na isali ang mga neural network sa pag-index ng buong volume ng Runet, ito ay kawili-wili, ito ay isang seryosong tagumpay mula sa isang teknolohikal na pananaw." Gaano kalaki ang mapapabuti ng bagong algorithm sa kalidad ng paghahanap at kung mapapabuti nito ito sa prinsipyo ay nananatiling pag-aralan, sinabi ni Ashmanov.

Ang pangunahing katunggali ng Yandex, ang Google, ayon sa pinuno ng Ashmanov and Partners, ay hindi pa opisyal na inihayag ang pagpapakilala ng mga neural network sa mga algorithm ng paghahanap nito. "Kayang-kaya ng Google na mag-set up ng mga salik sa pagraranggo sa ibang paraan at mag-eksperimento nang mas matagal sa lugar na ito nang hindi nagpapakilala ng mga bagong teknolohiya sa paghahanap, dahil lang sa mas maraming programmer at mapagkukunan ang kumpanya," sabi ng eksperto.​


Habulin at lampasan

Ayon sa analyst ng VTB Capital na si Vladimir Bespalov, ang bagong bersyon ng Russian search engine ay isang hakbang upang mapanatili ang bahagi ng Yandex sa merkado. "Ang na-update na Search mobile application, ang bagong search engine algorithm - lahat ng ito ay dapat makatulong sa Yandex na patatagin at pataasin ang bahagi nito sa search market," sabi ng eksperto. — Hindi agad mararamdaman ang epekto, ngunit ang pagbaba sa mga query sa paghahanap sa mahabang panahon ay maaaring magkaroon ng hindi gaanong kanais-nais na epekto sa pagganap sa hinaharap. Ang paghahanap ay ang pangunahing produkto ng Yandex ang pangunahing kita ng kumpanya, na nakatali sa paghahanap.

Ang desisyon ng FAS ay makakatulong sa Yandex na mapanatili ang posisyon nito sa paghahanap sa mobile, paggunita ni Bespalov. Noong Abril ng taong ito, pumasok ang departamento sa isang kasunduan sa pag-areglo sa pangunahing katunggali ng kumpanyang Ruso sa merkado ng paghahanap, ang Google. Ayon dito, muling isasaalang-alang ng American Internet giant ang mga kasunduan sa mga tagagawa ng mga Android smartphone sa Russia at pahihintulutan ang mga user na pumili ng mga alternatibong serbisyo sa paghahanap ng Google bilang mga pangunahing sa kanilang mga device.

Sa pagtatapos ng ikalawang quarter ng taong ito, ang bahagi ng Yandex sa market ng paghahanap sa Russia ay umabot sa 54.3%, gaya ng iniulat ng Yandex N.V. (ang pangunahing kumpanya ng Yandex) sa ulat ng pananalapi nito na may kaugnayan sa sarili nitong serbisyo sa analytics na Yandex.Radar. Noong Hulyo 31, ayon sa Yandex.Radar, sinakop ng Google ang 40.36% sa mga search engine sa Russia. Ayon sa LiveInternet, sa average sa nakalipas na tatlong buwan sa mga search engine, ang Yandex ay nangunguna na may bahaging 51.1%, ang Google ay may 43.9%. Yandex N.V. ay hindi nagbubunyag ng kita mula sa paghahanap, ngunit ang direksyon ng "paghahanap at portal" ay nagdala sa kumpanya ng 20.135 bilyong rubles, na 22% na higit pa kaysa sa parehong panahon noong 2016.

"Ang nakaraang rebolusyonaryong bersyon ng paghahanap sa Matrixnet ay nagbigay-daan sa Yandex na humiwalay sa Google at dagdagan ang bahagi nito ng halos 10 puntos na porsyento. sa anim na buwan. Ito ay isang malinaw na halimbawa kung paano humahantong ang paggamit ng mga teknolohiyang pambihirang tagumpay sa mga halatang resulta ng negosyo kahit na sa isang kumplikadong merkado gaya ng market ng paghahanap," sabi ni Alexander Laryanovsky, managing partner ng Skyeng online na paaralan at dating direktor ng internasyonal na pag-unlad sa Yandex.

Ayon kay Tatyana Danielyan, representante na direktor para sa pananaliksik at pagpapaunlad ng pangkat ng mga kumpanya ng ABBYY, ang pagpapakilala ng mga bagong algorithm sa paghahanap ay maaari ring baguhin ang ranggo (ang pagkakasunud-sunod kung saan ipinapakita ang mga site sa mga resulta ng paghahanap). Gayunpaman, ito ay magiging isang plus para sa mga site mismo, sabi niya: "Ang mga gumagamit ay mas malamang na bisitahin ang mga pahina na aktwal na nakakatugon sa kanilang mga pangangailangan, at ang mga conversion ng site ay maaaring tumaas nang malaki."

  • sawa,
  • machine learning,
  • Mga teknolohiya sa paghahanap
  • Ngayon ang Yandex ay naglabas ng sarili nitong CatBoost library, na binuo na isinasaalang-alang ang maraming taon ng karanasan ng kumpanya sa larangan ng machine learning, sa open source. Sa tulong nito, maaari mong epektibong sanayin ang mga modelo sa magkakaibang data, kabilang ang mga mahirap katawanin sa anyo ng mga numero (halimbawa, mga uri ng ulap o mga kategorya ng produkto). Ang source code, dokumentasyon, mga benchmark at mga kinakailangang tool ay nai-publish na sa GitHub sa ilalim ng lisensya ng Apache 2.0.

    Ang CatBoost ay isang bagong paraan ng machine learning batay sa gradient boosting. Ito ay ipinapatupad sa Yandex upang malutas ang mga problema sa pagraranggo, hula at mga rekomendasyon sa pagbuo. Bukod dito, ginagamit na ito bilang bahagi ng pakikipagtulungan sa European Organization for Nuclear Research (CERN) at mga pang-industriya na kliyente ng Yandex Data Factory. Kaya paano naiiba ang CatBoost sa iba pang mga open-source analogues? Bakit pinapalakas at hindi ang paraan ng neural network? Paano nauugnay ang teknolohiyang ito sa kilalang Matrixnet? At ano ang kinalaman ng mga pusa dito? Ngayon ay sasagutin natin ang lahat ng mga tanong na ito.

    Ang terminong "pag-aaral ng makina" ay lumitaw noong 50s. Ang terminong ito ay tumutukoy sa isang pagtatangka na turuan ang isang computer na lutasin ang mga problema na madali para sa mga tao, ngunit mahirap gawing pormal ang paraan upang malutas ang mga ito. Bilang resulta ng machine learning, maaaring magpakita ang isang computer ng gawi na hindi tahasang idinisenyo dito. Sa modernong mundo, nakatagpo tayo ng mga bunga ng machine learning nang maraming beses araw-araw, marami sa atin na hindi man lang alam. Ginagamit ito upang bumuo ng mga feed sa mga social network, mga listahan ng "katulad na mga produkto" sa mga online na tindahan, kapag nag-isyu ng mga pautang sa mga bangko at tinutukoy ang halaga ng seguro. Ginagamit ang mga teknolohiya ng machine learning para maghanap ng mga mukha sa mga litrato o maraming filter ng larawan. Para sa huli, sa pamamagitan ng paraan, ang mga neural network ay karaniwang ginagamit, at ang mga ito ay isinulat nang napakadalas na maaaring may maling opinyon na ito ay isang "silver bullet" para sa paglutas ng mga problema ng anumang kumplikado. Ngunit hindi iyon totoo.

    Mga neural network o gradient boosting

    Sa katunayan, ibang-iba ang machine learning: maraming iba't ibang pamamaraan, at isa lang sa mga ito ang mga neural network. Ang isang paglalarawan nito ay ang mga resulta ng mga kumpetisyon sa Kaggle platform, kung saan ang iba't ibang paraan ay nanalo sa iba't ibang mga kumpetisyon, at ang gradient boosting ay nanalo sa marami.

    Ang mga neural network ay mahusay sa paglutas ng ilang partikular na problema – halimbawa, ang mga kung saan kailangan mong magtrabaho sa homogenous na data. Ang homogenous na data ay binubuo ng, halimbawa, mga larawan, tunog o teksto. Sa Yandex, tinutulungan nila kaming mas maunawaan ang mga query sa paghahanap, maghanap ng mga katulad na larawan sa Internet, makilala ang iyong boses sa Navigator, at marami pa. Ngunit hindi ito lahat ng mga gawain para sa machine learning. Mayroong isang buong layer ng mga seryosong hamon na hindi malulutas ng mga neural network lamang - kailangan nila ng gradient boosting. Ang pamamaraang ito ay kailangang-kailangan kung saan maraming data at ang istraktura nito ay magkakaiba.

    Halimbawa, kung kailangan mo ng isang tumpak na pagtataya ng panahon, kung saan ang isang malaking bilang ng mga kadahilanan ay isinasaalang-alang (temperatura, halumigmig, data ng radar, mga obserbasyon ng gumagamit at marami pang iba). O kung kailangan mong i-rank nang husay ang mga resulta ng paghahanap - ito ang nag-udyok sa Yandex na bumuo ng sarili nitong paraan ng pag-aaral ng makina.

    Matrixnet

    Ang mga unang search engine ay hindi kasing sopistikadong ngayon. Sa katunayan, sa una ito ay isang paghahanap lamang ng salita - napakakaunting mga site na walang gaanong kompetisyon sa pagitan nila. Pagkatapos ay mayroong higit pang mga pahina, at ito ay naging kinakailangan upang i-ranggo ang mga ito. Nagsimulang isaalang-alang ang iba't ibang komplikasyon - dalas ng salita, tf-idf. Pagkatapos ay napakaraming mga pahina sa anumang paksa, ang unang mahalagang tagumpay ay naganap - sinimulan nilang isaalang-alang ang mga link.

    Sa lalong madaling panahon ang Internet ay naging mahalaga sa komersyo, at maraming mga scammer ang lumitaw na sinusubukang lokohin ang mga simpleng algorithm na umiiral noong panahong iyon. At naganap ang pangalawang mahalagang tagumpay - nagsimulang gamitin ng mga search engine ang kanilang kaalaman sa pag-uugali ng gumagamit upang maunawaan kung aling mga pahina ang mabuti at alin ang hindi.

    Mga sampung taon na ang nakalilipas, ang isip ng tao ay hindi na sapat upang malaman kung paano iranggo ang mga dokumento. Malamang na napansin mo na ang bilang ng mga resultang nahanap para sa halos anumang query ay napakalaki: daan-daang libo, madalas milyon-milyong mga resulta. Karamihan sa mga ito ay hindi kawili-wili, walang silbi, random na binabanggit lamang ang mga query na salita, o sa pangkalahatan ay spam. Upang masagot ang iyong kahilingan, kailangan mong agad na piliin ang nangungunang sampung mula sa lahat ng mga resultang natagpuan. Ang pagsulat ng isang programa na gumagawa nito nang may katanggap-tanggap na kalidad ay naging lampas sa kapangyarihan ng isang programmer ng tao. Ang susunod na paglipat ay naganap - ang mga search engine ay nagsimulang aktibong gumamit ng machine learning.

    Noong 2009, ipinakilala ng Yandex ang kanilang sariling pamamaraan ng Matrixnet, batay sa gradient boosting. Masasabi nating ang pagraranggo ay tinutulungan ng sama-samang katalinuhan ng mga gumagamit at ng "karunungan ng karamihan." Ang impormasyon tungkol sa mga site at pag-uugali ng mga tao ay na-convert sa maraming mga kadahilanan, ang bawat isa ay ginagamit ng Matrixnet upang bumuo ng isang formula ng pagraranggo. Sa katunayan, ang formula ng pagraranggo ay isinulat na ngayon ng isang makina. Sa pamamagitan ng paraan, ginagamit din namin ang mga resulta ng mga neural network bilang mga indibidwal na kadahilanan (halimbawa, ito ay kung paano gumagana ang algorithm ng Palekh, na pinag-usapan namin noong nakaraang taon).

    Ang isang mahalagang tampok ng Matrixnet ay na ito ay lumalaban sa overfitting. Pinapayagan ka nitong isaalang-alang ang maraming mga kadahilanan sa pagraranggo at sa parehong oras ay magsanay sa isang medyo maliit na halaga ng data, nang walang takot na ang makina ay makakahanap ng mga hindi umiiral na mga pattern. Ang iba pang paraan ng pag-aaral ng makina ay nagbibigay-daan sa iyo na bumuo ng mas simpleng mga formula na may mas kaunting mga kadahilanan o nangangailangan ng mas malaking sample ng pagsasanay.

    Ang isa pang mahalagang tampok ng Matrixnet ay ang formula ng pagraranggo ay maaaring i-configure nang hiwalay para sa medyo makitid na mga klase ng mga query. Halimbawa, pagbutihin ang kalidad ng paghahanap para lamang sa mga query tungkol sa musika. Kasabay nito, ang pagraranggo para sa iba pang mga klase ng mga query ay hindi lalala.

    Ang Matrixnet at ang mga pakinabang nito ang naging batayan ng CatBoost. Ngunit bakit kailangan nating mag-imbento ng bago?

    Halos anumang modernong paraan batay sa gradient boosting ay gumagana sa mga numero. Kahit na ang iyong input ay mga genre ng musika, mga uri ng ulap o mga kulay, ang data na ito ay kailangan pa ring ilarawan sa wika ng mga numero. Ito ay humahantong sa isang pagbaluktot ng kanilang kakanyahan at isang potensyal na pagbaba sa katumpakan ng modelo.

    Ipakita natin ito gamit ang isang primitive na halimbawa sa isang katalogo ng produkto sa isang tindahan. Ang mga produkto ay may maliit na kaugnayan sa isa't isa, at walang ganoong pattern sa pagitan ng mga ito na magpapahintulot sa kanila na mag-order at magtalaga ng isang makabuluhang numero sa bawat produkto. Samakatuwid, sa sitwasyong ito, ang bawat produkto ay itinalaga lamang ng isang serial id (halimbawa, alinsunod sa programa ng accounting ng tindahan). Ang pagkakasunud-sunod ng mga numerong ito ay walang ibig sabihin, ngunit gagamitin ng algorithm ang pagkakasunud-sunod na ito at gagawa ng mga maling konklusyon mula dito.

    Ang isang may karanasan na propesyonal sa pag-aaral ng makina ay maaaring makabuo ng isang mas matalinong paraan upang gawing mga numero ang mga tampok na kategorya, ngunit ang naturang paunang pagproseso ay magreresulta sa pagkawala ng ilang impormasyon at hahantong sa pagkasira sa kalidad ng panghuling solusyon.

    Iyon ang dahilan kung bakit mahalagang turuan ang makina na gumana hindi lamang sa mga numero, kundi pati na rin sa mga kategorya nang direkta, ang mga pattern sa pagitan ng kung saan ito ay makikilala nang nakapag-iisa, nang wala ang aming manu-manong "tulong". At ang CatBoost ay idinisenyo namin upang gumana nang pantay-pantay sa labas ng kahon na may parehong mga numerical at kategoryang tampok. Dahil dito, nagpapakita ito ng mas mahusay na pagganap sa pag-aaral kapag nagtatrabaho sa magkakaibang data kaysa sa mga alternatibong solusyon. Maaari itong magamit sa iba't ibang lugar - mula sa pagbabangko hanggang sa industriya.

    Sa pamamagitan ng paraan, ang pangalan ng teknolohiya ay nagmula sa Categorical Boosting. At walang isang pusa ang nasaktan sa panahon ng pag-unlad.

    Mga benchmark

    Maaari naming pag-usapan nang mahabang panahon ang tungkol sa mga teoretikal na pagkakaiba ng library, ngunit mas mahusay na ipakita ito sa pagsasanay nang isang beses. Para sa kalinawan, inihambing namin ang pagganap ng library ng CatBoost sa mga bukas na analogue na XGBoost, LightGBM at H20 sa isang hanay ng mga pampublikong dataset. At narito ang mga resulta (mas maliit ang mas mahusay): https://catboost.yandex/#benchmark

    Hindi namin nais na maging walang batayan, samakatuwid, kasama ang library, isang paglalarawan ng proseso ng paghahambing, code para sa paglulunsad ng paghahambing ng mga pamamaraan, at isang lalagyan na may mga ginamit na bersyon ng lahat ng mga aklatan ay nai-post sa open source. Maaaring ulitin ng sinumang user ang eksperimento sa bahay o sa sarili nilang data.

    CatBoost sa pagsasanay

    Ang bagong pamamaraan ay nasubok na sa mga serbisyo ng Yandex. Ginamit ito upang pahusayin ang mga resulta ng paghahanap, pagraranggo sa feed ng rekomendasyon ng Yandex.Zen, at para kalkulahin ang pagtataya ng panahon sa teknolohiya ng Meteum - at sa lahat ng kaso, ipinakita nito ang sarili nito na mas mahusay kaysa sa Matrixnet. Sa hinaharap, gagana ang CatBoost sa iba pang mga serbisyo. Hindi kami titigil dito - mas mabuting sabihin sa iyo kaagad ang tungkol sa Large Hadron Collider (LHC).

    Nakahanap din ang CatBoost ng aplikasyon sa loob ng balangkas ng pakikipagtulungan sa European Organization for Nuclear Research. Ang LHC ay nagpapatakbo ng LHCb detector, na ginagamit upang pag-aralan ang asymmetry ng matter at antimatter sa mga interaksyon ng mabibigat na magagandang quark. Upang tumpak na masubaybayan ang iba't ibang mga particle na nakita sa isang eksperimento, mayroong ilang partikular na bahagi sa detector, na ang bawat isa ay tumutukoy sa mga espesyal na katangian ng mga particle. Ang pinakamahirap na gawain sa kasong ito ay ang pagsasama-sama ng impormasyon mula sa iba't ibang bahagi ng detector sa pinakatumpak, pinagsama-samang kaalaman tungkol sa particle. Dito nagliligtas ang machine learning. Gamit ang CatBoost upang pagsamahin ang data, nagawang pahusayin ng mga siyentipiko ang mga katangian ng kalidad ng panghuling solusyon. Ang mga resulta ng CatBoost ay higit na mataas sa mga nakuha gamit ang iba pang mga pamamaraan.

    Paano simulan ang paggamit ng CatBoost?

    Upang gumana sa CatBoost, i-install lang ito sa iyong computer. Sinusuportahan ng library ang mga operating system ng Linux, Windows at macOS at available sa Python at R programming language ang Yandex ay nakabuo din ng visualization program