ნერვული ქსელების სწავლა ოთხ ნაბიჯში. ნერვული ქსელები, "ცუდი" რჩევა

განვიხილოთ იმპულსური ნერვული ქსელები: მახასიათებლები, პერსპექტივები და უპირატესობები, რომელთა წყალობითაც მე-2 თაობა წარმატებით გადალახულია.

ყველას, ვინც მიჰყვება მონაცემთა ანალიზის მიმდინარე პროგრესს, სმენია მეორე თაობის ხელოვნური ნერვული ქსელების მანქანურ სწავლებაში გამოყენების შესახებ. ეს ქსელები, როგორც წესი, სრულად არის დაკავშირებული, იღებენ და ასხივებენ მუდმივად ცვალებად მნიშვნელობებს. მიუხედავად იმისა, რომ ნერვულმა ქსელებმა მიაღწიეს გარღვევას, ბიოლოგიურად ისინი სრულიად არ ემთხვევა რეალური ნეირონების სტრუქტურას და ინფორმაციის დამუშავების მექანიზმებს ადამიანის ტვინში.

პულსური ნერვული ქსელები: როგორ მუშაობს

Spiking ნერვული ქსელები (SNN) უფრო ახლოს არის ბუნებრივ ფიზიოლოგიასთან. პულსირებული ნერვული ქსელები ახდენენ უფსკრული ნეირომეცნიერებასა და მანქანათმცოდნეობას შორის ნეირონების ბიოლოგიურად რეალისტური მოდელების გამოყენებით ინფორმაციის დასამუშავებლად.

იმპულსური ნერვული ქსელი ფუნდამენტურად განსხვავდება მეორე თაობის ნერვული ქსელებისგან, რომლებსაც იყენებენ მონაცემთა ანალიტიკოსები. ასეთი ქსელი, იმის ნაცვლად, რომ ღირებულებები მუდმივად შეიცვალოს დროში, მოქმედებს დისკრეტული მოვლენებით, რომლებიც ხდება დროის გარკვეულ მომენტებში. ქსელი იღებს იმპულსების სერიას შესასვლელებში და აწარმოებს პულსებს გამოსავალზე.


იმპულსური ნერვული ქსელის სამ ნეირონზე სიგნალების მაგალითი

რეალურ ნეირონში იმპულსების გადაცემა განისაზღვრება დიფერენციალური განტოლებით, რომლებიც შეესაბამება ნეირონების მემბრანაზე პოტენციალის ფორმირების ბიოფიზიკურ პროცესებს. როგორც კი პოტენციალი გარკვეულ მნიშვნელობას მიაღწევს, ნეირონი ამაზე რეაგირებს იმპულსის გადაცემით და მემბრანა იძენს საწყის პოტენციალს.


პოტენციალი ნეირონის მემბრანაზე სიგნალის გადაცემის დროს

პროცესის აღწერისთვის გამოიყენება სხვადასხვა მოდელები. პულსირებული ნერვული ქსელები ასევე განსხვავდება მეორე თაობის ქსელებისგან მათი ნაკლებად დაკავშირებული და უფრო სპეციფიკური ტოპოლოგიით.

პულსის ნერვული ქსელები: მანძილი და დრო

ერთი შეხედვით, SNN-ის მიდგომა შეიძლება ჩანდეს უკან გადადგმული ნაბიჯი - უწყვეტი, ერთგვარი ანალოგური სურათიდან იმპულსურ, ორობით სურათამდე. ამასთან, SNN-ის უპირატესობა ის არის, რომ იმპულსური მიდგომა საშუალებას გაძლევთ იმუშაოთ მონაცემებზე, ნეირონებს შორის მანძილისა და სიგნალის გავრცელების ხანგრძლივობის გათვალისწინებით, ანუ სივრცისა და დროის კონტექსტში. ამის გამო, SNN ქსელები ბევრად უფრო შესაფერისია რეალური სენსორების მონაცემების დასამუშავებლად.

სივრცითი ასპექტი ასახავს იმ ფაქტს, რომ ნეირონები ძირითადად დაკავშირებულია უახლოეს მეზობლებთან და, შესაბამისად, შეყვანის ფრაგმენტები დამუშავებულია ცალკე.

დროითი ასპექტი შეესაბამება იმ ფაქტს, რომ სავარჯიშო პულსები მოდის სხვადასხვა შეფერხებით და ინფორმაცია, რომელსაც ჩვენ „ვიკარგავთ“ უწყვეტი სიგნალიდან პულსირებულ სიგნალზე გადასვლისას, რეალურად ინახება ინფორმაციაში პულსების ერთმანეთთან შედარებით დაყოვნების შესახებ. ეს საშუალებას გაძლევთ დაამუშავოთ დროითი მონაცემები ბუნებრივი გზით დამატებითი სირთულის გარეშე. დადასტურებულია, რომ სროლის ნეირონები უფრო ძლიერი გამოთვლითი ერთეულებია, ვიდრე ტრადიციული ხელოვნური ნეირონები.

პრობლემები პრაქტიკული გამოყენებისთვის

იმის გათვალისწინებით, რომ SNN-ები თეორიულად უფრო მძლავრი ნერვული ქსელებია, ვიდრე მეორე თაობის ქსელები, გასაკვირია, რატომ ვერ ვხედავთ მათ ფართო გამოყენებას. SNN-ების პრაქტიკული გამოყენების მთავარი პრობლემა ტრენინგია. მიუხედავად ბიოლოგიური უზედამხედველო (უკონტროლო) სწავლის მეთოდების არსებობისა, როგორიცაა Hebbian და STDP, SNN-ის სწავლის ეფექტური მეთოდები ჯერ არ არის ცნობილი, რომლებიც უკეთეს შესრულებას უზრუნველყოფენ, ვიდრე მეორე თაობის ქსელები.

იმპულსის დიფერენციაციის პრობლემების გამო, შეუძლებელია SNN-ის მომზადება გრადიენტური დაღმართის გამოყენებით ზუსტი იმპულსის ინფორმაციის დაკარგვის გარეშე. ამიტომ, რეალურ სამყაროში არსებული პრობლემებისთვის SNN-ის ეფექტიანად გამოსაყენებლად აუცილებელია ზედამხედველობითი სწავლის შესაბამისი მეთოდების შემუშავება. ეს რთული ამოცანაა - ამ ქსელების ბიოლოგიური რეალიზმის გათვალისწინებით, საჭიროა იმის ზუსტი გაგება, თუ როგორ სწავლობს ადამიანის ტვინი.

კიდევ ერთი, გადაწყვეტასთან უფრო ახლოს, პრობლემა მდგომარეობს ტექნიკის კომპონენტში. SNN-ების სიმულაცია სტანდარტულ აპარატურაზე შრომატევადი ამოცანაა, რადგან ის მოითხოვს დიფერენციალური განტოლებების მოდელირებას. ნეირომორფული აპარატურა, როგორიცაა IBM TrueNorth, მიზნად ისახავს ამ პრობლემის გადაჭრას ნეირონების სიმულაციის გზით სპეციალიზებული ტექნიკის გამოყენებით, რომელიც შეესაბამება ბიოლოგიური ნერვული ქსელების დისკრეტულობას და სიმცირეს.

განვითარების პერსპექტივები

SNN-ის მომავალი გაურკვეველი რჩება. ერთის მხრივ, ისინი თანამედროვე ნერვული ქსელების ბუნებრივი მემკვიდრეები არიან. მეორეს მხრივ, SNN–ები ჯერ კიდევ შორს არიან ამოცანების უმეტესობის პრაქტიკული ინსტრუმენტებისგან. უკვე არსებობს SNN-ების რეალური აპლიკაციები რეალურ დროში გამოსახულების და აუდიო დამუშავებისთვის, მაგრამ პრაქტიკული აპლიკაციების შესახებ ლიტერატურა მწირია.

SNN-ზე გამოქვეყნებული პუბლიკაციების უმეტესობა ან თეორიულია ან აჩვენებს არადამაკმაყოფილებელ შესრულებას თანამედროვე ამოცანებისთვის. ამ მიმართულების უკიდურესი პერსპექტივის გათვალისწინებით, მრავალი სამეცნიერო ჯგუფი მუშაობს ამ პრობლემების გადაჭრაზე.

Სალამი ყველას!

ამ სტატიაში ვისაუბრებ პითონში დაპროგრამების ახალ კომფორტულ გზაზე.

ეს უფრო ჰგავს სტატიების წერას (ანგარიშები/დემონსტრაციები/კვლევები/მაგალითები) და არა პროგრამირება: შეგიძლიათ ჩასვათ მარტივი განმარტებითი ტექსტი პითონის კოდის ბლოკებს შორის. კოდის შესრულების შედეგი არის არა მხოლოდ რიცხვები და ტექსტი (როგორც ეს არის პითონთან სტანდარტული მუშაობის დროს კონსოლის შემთხვევაში), არამედ გრაფიკები, სქემები, სურათები ...

დოკუმენტების მაგალითები, რომლებიც შეგიძლიათ შექმნათ:

მშვენივრად გამოიყურება? გსურთ იგივე დოკუმენტების შექმნა? მაშინ ეს სტატია თქვენთვისაა!

ნერვული ქსელები იქმნება და წვრთნიან ძირითადად პითონში. აქედან გამომდინარე, ძალიან მნიშვნელოვანია გქონდეთ ძირითადი გაგება, თუ როგორ უნდა დაწეროთ მასზე პროგრამები. ამ სტატიაში მოკლედ და გარკვევით ვისაუბრებ ამ ენის ძირითად ცნებებზე: ცვლადებზე, ფუნქციებზე, კლასებსა და მოდულებზე.

მასალა განკუთვნილია მათთვის, ვინც არ იცნობს პროგრამირების ენებს.

ჯერ უნდა დააინსტალიროთ Python. შემდეგ თქვენ უნდა დააყენოთ მოსახერხებელი გარემო პროგრამების დასაწერად პითონში. ეს ორი ნაბიჯი ეძღვნება პორტალს.

თუ ყველაფერი დაინსტალირებული და კონფიგურირებულია, შეგიძლიათ დაიწყოთ.

ნერვული ქსელები უნდა იყოს დაწერილი პროგრამირების რომელიმე ენაზე. ბევრი მათგანია, მაგრამ მე გირჩევთ (და გამოიყენოთ გაკვეთილებსა და სტატიებში) პითონის ენა. რატომ?

  1. ძალიან ადვილია სწავლა
  2. მზა ბიბლიოთეკების დიდი რაოდენობა
  3. როდესაც უყურებთ პროგრამას, მაშინვე ხედავთ ალგორითმს, რომელსაც იგი ახორციელებს.
  4. მანქანათმცოდნეობის სპეციალისტების უმეტესობა იყენებს პითონს და ბიბლიოთეკების უმეტესობა ასევე შექმნილია სპეციალურად ამ პროგრამირების ენისთვის.

წინა ნაწილში ვისწავლეთ როგორ გამოვთვალოთ სიგნალის ცვლილებები ნერვულ ქსელში გავლისას. გავეცანით მატრიცებს, მათ ნამრავლს და გამოვთვალეთ მარტივი ფორმულები.

თარგმანის მე-6 ნაწილში ვდებ წიგნის ერთდროულად 4 ნაწილს. ყველა მათგანი ეძღვნება ნერვული ქსელების სფეროში ერთ-ერთ ყველაზე მნიშვნელოვან თემას - შეცდომების უკან გავრცელების მეთოდს. თქვენ შეისწავლით თუ როგორ გამოვთვალოთ ყველა ნეირონის შეცდომა ნერვულ ქსელში მხოლოდ ქსელის საბოლოო შეცდომისა და კავშირების წონების საფუძველზე.

მასალა კომპლექსურია, ამიტომ თავისუფლად დასვით თქვენი შეკითხვები ფორუმზე.

შეგიძლიათ თარგმნოთ.

ისიამოვნეთ კითხვით!

თარგმანის მე-5 ნაწილში მაშინვე მოვიყვან მნიშვნელობით დაკავშირებული 3 განყოფილებას.

პირველ რიგში, ჩვენ ხელით გამოვთვლით ორ ფენიანი ნერვული ქსელის გამოსავალს. შემდეგ გავეცნობით მატრიცებს და მათ პროდუქტს. მიღებული ცოდნის დახმარებით გამოვიყვანთ ნერვულ ქსელში სიგნალების კონვერტაციის გამოსათვლელ მარტივ ფორმულებს. და ბოლო განყოფილებაში ჩვენ პრაქტიკაში შევამოწმებთ მიღებულ ფორმულებს, ვითვლით სამი ფენის ნერვული ქსელის გამოსავალს.

შეგიძლიათ თარგმნოთ.

ისიამოვნეთ კითხვით!

თარგმანის მე-4 ნაწილი მზადაა!

ჩვენ ვამთავრებთ ბუჩქის გარშემო ცემას და პირდაპირ გადავდივართ წიგნის თემაზე - ნერვული ქსელები.

თარგმანის ამ ნაწილში ჩვენ გადავხედავთ ბიოლოგიურ ნერვულ ქსელებს და შევადარებთ მათ ტრადიციულ კომპიუტერებს. შემდეგ ჩვენ ავაშენებთ ხელოვნური ნეირონის მოდელს და საბოლოოდ გადავალთ პირდაპირ ხელოვნურ ნერვულ ქსელებზე.

შეგიძლიათ თარგმნოთ.

ისიამოვნეთ კითხვით!

თარგმანის მესამე ნაწილი!

სტატია არ არის ძალიან დიდი. იგი მოიცავს წიგნის მხოლოდ ერთ ნაწილს. მიზანია აჩვენოს, რომ თითოეულ მეთოდს აქვს თავისი შეზღუდვები. სტატიაში განხილულია ხაზოვანი კლასიფიკატორის შეზღუდვები. ასევე წარმოდგენილია ლოგიკური ფუნქციების ცნებები და XOR პრობლემა.

შეგიძლიათ თარგმნოთ.

ისიამოვნეთ კითხვით!

ამ სტატიაში მე ვისაუბრებ საინტერესო მუსიკის გენერატორზე, რომელიც მუშაობს ნერვულ ქსელებზე. გენერატორს ჰქვია ამპერი. მისი დახმარებით ნებისმიერ ადამიანს, თუნდაც ძალიან შორს კომპოზიციების შედგენისგან, შეუძლია დამოუკიდებლად შექმნას უნიკალური მელოდია და გამოიყენოს იგი საკუთარი მიზნებისთვის.

აი, მაგალითად, რა განვითარდა ჩემთვის ნერვული ქსელი.

კრუჩინინი დიმიტრი, დოლოტოვი ევგენი, კუსტიკოვა ვალენტინა, დრუჟკოვი პაველი, კორნიაკოვი კირილი

შესავალი

ამჟამად, მანქანათმცოდნეობა არის სამეცნიერო კვლევის აქტიურად განვითარებადი სფერო. ეს განპირობებულია როგორც მონაცემთა უფრო სწრაფად, უფრო მაღალი, უფრო ძლიერი, მარტივი და იაფი შეგროვებისა და დამუშავების უნარით, ასევე ამ მონაცემებიდან კანონების იდენტიფიცირების მეთოდების შემუშავებით, რომლის მიხედვითაც მიმდინარეობს ფიზიკური, ბიოლოგიური, ეკონომიკური და სხვა პროცესები. ზოგიერთ დავალებაში, როდესაც საკმაოდ რთულია ასეთი კანონის დადგენა, გამოიყენება ღრმა სწავლება.

Ღრმა სწავლება განიხილავს მონაცემებში მაღალი დონის აბსტრაქციების მოდელირების მეთოდებს თანმიმდევრული არაწრფივი ტრანსფორმაციების გამოყენებით, რომლებიც, როგორც წესი, წარმოდგენილია ხელოვნური ნერვული ქსელების სახით. დღემდე, ნერვული ქსელები წარმატებით გამოიყენება ისეთი პრობლემების გადასაჭრელად, როგორიცაა პროგნოზირება, ნიმუშის ამოცნობა, მონაცემთა შეკუმშვა და მრავალი სხვა.

მანქანათმცოდნეობის თემის აქტუალობა და, კერძოდ, ღრმა სწავლა დასტურდება Habré-ზე ამ თემაზე სტატიების რეგულარული გამოჩენით: ეს სტატია ეძღვნება ღრმა სწავლების ზოგიერთი პროგრამული ხელსაწყოს შედარებით ანალიზს, რომელთაგან ბევრს აქვს ცოტა ხნის წინ გამოჩნდა. ეს ინსტრუმენტები მოიცავს პროგრამული ბიბლიოთეკებს, პროგრამირების ენების გაფართოებებს, ასევე დამოუკიდებელ ენებს, რომლებიც საშუალებას გაძლევთ გამოიყენოთ მზა ალგორითმები ნერვული ქსელის მოდელების შესაქმნელად და ტრენინგისთვის. ღრმა სწავლების არსებულ ინსტრუმენტებს განსხვავებული ფუნქციონირება აქვთ და მომხმარებლისგან ცოდნისა და უნარების განსხვავებულ დონეს მოითხოვს. ხელსაწყოს სწორი არჩევანი მნიშვნელოვანი ამოცანაა, რომელიც საშუალებას გაძლევთ მიაღწიოთ სასურველ შედეგს უმოკლეს დროში და ნაკლები ძალისხმევით.

სტატიაში მოცემულია ნერვული ქსელის მოდელების დიზაინისა და ტრენინგის ინსტრუმენტების მოკლე მიმოხილვა. ყურადღება გამახვილებულია ოთხ ბიბლიოთეკაზე: Caffe, Pylearn2, Torch და Theano. განხილულია ამ ბიბლიოთეკების ძირითადი შესაძლებლობები, მოცემულია მათი გამოყენების მაგალითები. ბიბლიოთეკების ხარისხი და სიჩქარე შედარებულია ნეირონული ქსელების იგივე ტოპოლოგიების აგებისას ხელნაწერი ციფრების კლასიფიკაციის პრობლემის გადასაჭრელად (MNIST მონაცემთა ნაკრები გამოიყენება როგორც სასწავლო და ტესტირების ნაკრები). ასევე მცდელობაა შეფასდეს განხილული ბიბლიოთეკების პრაქტიკაში გამოყენების მოხერხებულობა.

MNIST მონაცემთა ნაკრები

გარდა ამისა, MNIST () ხელნაწერი ციფრული სურათების მონაცემთა ბაზა გამოყენებული იქნება, როგორც შესასწავლი მონაცემთა ნაკრები. ამ მონაცემთა ბაზაში გამოსახულებებს აქვს 28x28 გარჩევადობა და ინახება ნაცრისფერი მასშტაბის ფორმატში. რიცხვები ორიენტირებულია სურათზე. მთელი მონაცემთა ბაზა დაყოფილია ორ ნაწილად: სასწავლო, რომელიც შედგება 50,000 სურათისგან და სატესტო, რომელიც შედგება 10,000 სურათისგან.

პროგრამული ინსტრუმენტები ღრმა სწავლის პრობლემების გადასაჭრელად

არსებობს მრავალი პროგრამული ინსტრუმენტი ღრმა სწავლის პრობლემების გადასაჭრელად. თქვენ შეგიძლიათ იპოვოთ ყველაზე ცნობილი ფუნქციების ზოგადი შედარება, აქ ჩვენ გთავაზობთ ზოგად ინფორმაციას ზოგიერთი მათგანის შესახებ (). პირველი ექვსი პროგრამული ბიბლიოთეკა ახორციელებს ღრმა სწავლის მეთოდების ფართო სპექტრს. დეველოპერები იძლევა შესაძლებლობას შექმნან სრულად დაკავშირებული ნერვული ქსელები (სრულად დაკავშირებული ნერვული ქსელი, FC NN), კონვოლუციური ნერვული ქსელები (კონვოლუციური ნერვული ქსელი, CNN), ავტოენკოდერები (ავტოენკოდერი, AE) და შეზღუდული Boltzmann მანქანები (შეზღუდული Boltzmann მანქანა, RBM). აუცილებელია ყურადღება მიაქციოთ დარჩენილ ბიბლიოთეკებს. მიუხედავად იმისა, რომ მათ აქვთ ნაკლები ფუნქციონირება, ზოგიერთ შემთხვევაში მათი სიმარტივე ხელს უწყობს უკეთესი შესრულების მიღწევას.

ცხრილი 1. ღრმა სწავლის პროგრამული ინსტრუმენტების შესაძლებლობები

# სახელი Ენა OC FC NN CNN AE RBM
1 DeepLearnToolbox მატლაბი Windows, Linux + + + +
2 თეანო პითონი Windows, Linux, Mac + + + +
3 pylearn2 პითონი Linux, Vagrant + + + +
4 ღრმა ქსელი პითონი ლინუქსი + + + +
5 დიპმატ მატლაბი ? + + + +
6 ჩირაღდანი ლუა, ჩ Linux, Mac OS X, iOS, Android + + + +
7 დარქ Windows, Linux + - + +
8 კაფ ე C++, Python, Matlab Linux, OSX + + - -
9 nnForge C++ ლინუქსი + + - -
10 CXXNET C++ ლინუქსი + + - -
11 cuda-convnet C++ Linux, Windows + + - -
12 Cuda CNN მატლაბი Linux, Windows + + - -

მოწოდებული ინფორმაციისა და ექსპერტების რეკომენდაციების საფუძველზე, შემდგომი განხილვისთვის შეირჩა ოთხი ბიბლიოთეკა: - ერთ-ერთი ყველაზე მომწიფებული და ფუნქციურად სრულყოფილი ბიბლიოთეკა და - ფართოდ გამოყენებული საზოგადოების მიერ. თითოეული ბიბლიოთეკა განიხილება შემდეგი გეგმის მიხედვით:
  1. მოკლე ფონური ინფორმაცია.
  2. ტექნიკური მახასიათებლები (OS, პროგრამირების ენა, დამოკიდებულებები).
  3. ფუნქციონალობა.
  4. ლოგისტიკური რეგრესიის ტიპის ქსელის ფორმირების მაგალითი.
  5. აგებული მოდელის სწავლება და გამოყენება კლასიფიკაციისთვის.
ჩამოთვლილი ბიბლიოთეკების განხილვის შემდეგ, ისინი შედარებულია ქსელის სატესტო რამდენიმე კონფიგურაციაზე.

კაფე ბიბლიოთეკა



Caffe დამუშავების პროცესშია 2013 წლის სექტემბრიდან. Yangqing Jia-მ განვითარება დაიწყო ბერკლის კალიფორნიის უნივერსიტეტში სწავლის დროს. მას შემდეგ, Caffe-ს აქტიურად უჭერს მხარს The Berkeley Vision and Learning Center (BVLC) და დეველოპერთა საზოგადოება GitHub-ზე. ბიბლიოთეკა განაწილებულია BSD 2-clause ლიცენზიით.

Caffe ხორციელდება C++ პროგრამირების ენის გამოყენებით, არის wrapper-ები Python-სა და MATLAB-ში. ოფიციალურად მხარდაჭერილი ოპერაციული სისტემებია Linux და OS X, ასევე არის Windows-ის არაოფიციალური პორტი. Caffe იყენებს BLAS ბიბლიოთეკას (ATLAS, Intel MKL, OpenBLAS) ვექტორული და მატრიცული გამოთვლებისთვის. ამასთან, გარე დამოკიდებულებებში შედის glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. გამოთვლების დასაჩქარებლად, Caffe შეიძლება გაშვებული იყოს GPU-ზე CUDA ტექნოლოგიის ძირითადი შესაძლებლობების ან cuDNN ღრმა სწავლის პრიმიტიული ბიბლიოთეკის გამოყენებით.

კაფეს დეველოპერები მხარს უჭერენ სრულად დაკავშირებული და კონვოლუციური ნერვული ქსელების შექმნას, მომზადებას და ტესტირებას. შეყვანის მონაცემები და გარდაქმნები აღწერილია კონცეფციით ფენა. შენახვის ფორმატიდან გამომდინარე, შეიძლება გამოყენებულ იქნას წყაროს მონაცემთა ფენების შემდეგი ტიპები:

  • DATA - განსაზღვრავს მონაცემთა ფენას leveldb და lmdb ფორმატში.
  • HDF5_DATA - მონაცემთა ფენა hdf5 ფორმატში.
  • IMAGE_DATA არის მარტივი ფორმატი, რომელიც ვარაუდობს, რომ ფაილი შეიცავს სურათების სიას კლასის ეტიკეტით.
  • და სხვა.
ტრანსფორმაციები შეიძლება განისაზღვროს ფენების გამოყენებით:
  • INNER_PRODUCT - სრულად დაკავშირებული შრე.
  • CONVOLUTION - კონვოლუციური ფენა.
  • POOLING - სივრცითი გაერთიანების ფენა.
  • ლოკალური პასუხის ნორმალიზება (LRN) - ლოკალური ნორმალიზების ფენა.
ამასთან, გარდაქმნების ფორმირებისას შეიძლება გამოყენებულ იქნას სხვადასხვა აქტივაციის ფუნქციები.
  • დადებითი ნაწილი (რექტიფიცირებული-ხაზოვანი ერთეული, ReLU).
  • სიგმოიდური ფუნქცია (SIGMOID).
  • ჰიპერბოლური ტანგენსი (TANH).
  • აბსოლუტური მნიშვნელობა (ABSVAL).
  • ექსპონენტაცია (POWER).
  • ორობითი ნორმალური ჟურნალის ალბათობის (BNLL) ფუნქცია.
ნერვული ქსელის მოდელის ბოლო ფენა უნდა შეიცავდეს შეცდომის ფუნქციას. ბიბლიოთეკას აქვს შემდეგი ფუნქციები:
  • საშუალო კვადრატული შეცდომა (MSE).
  • კიდის შეცდომა (ჰინგის დაკარგვა).
  • ლოგისტიკური შეცდომის ფუნქცია (ლოგისტიკური დაკარგვა).
  • ინფორმაციის მიღების ფუნქცია (Info gain loss).
  • სიგმოიდური ჯვარედინი ენტროპიის დაკარგვა.
  • Softmax ფუნქცია. აზოგადებს სიგმოიდურ ჯვარედინი ენტროპიას ორ კლასზე მეტს.
ტრენინგის მოდელების პროცესში გამოიყენება ოპტიმიზაციის სხვადასხვა მეთოდი. კაფე დეველოპერები უზრუნველყოფენ რამდენიმე მეთოდის განხორციელებას:

Caffe-ის ბიბლიოთეკაში ნერვული ქსელების ტოპოლოგია, საწყისი მონაცემები და ტრენინგის მეთოდი მითითებულია კონფიგურაციის ფაილების გამოყენებით prototxt ფორმატში. ფაილი შეიცავს შეყვანის მონაცემების (ტრენინგი და ტესტირება) და ნერვული ქსელის ფენების აღწერას. მოდით განვიხილოთ ასეთი ფაილების აგების ეტაპები ქსელის "ლოგისტიკური რეგრესიის" მაგალითზე (). შემდეგში, ჩვენ ვივარაუდებთ, რომ ფაილს ჰქვია linear_regression.prototxt და ის მდებარეობს examples/mnist დირექტორიაში.
ბრინჯი. 2. ნერვული ქსელის სტრუქტურა

Pylearn2 ბიბლიოთეკა


Pylearn2 არის ბიბლიოთეკა, რომელიც შემუშავებულია მონრეალის უნივერსიტეტის LISA ლაბორატორიაში 2011 წლის თებერვლიდან. ჰყავს დაახლოებით 100 დეველოპერი GitHub-ზე. ბიბლიოთეკა განაწილებულია BSD 3-clause ლიცენზიით.

Pylearn2 დანერგილია პითონში, ამჟამად მხარდაჭერილია Linux ოპერაციული სისტემა, ასევე შესაძლებელია ნებისმიერ ოპერაციულ სისტემაზე გაშვება ვირტუალური მანქანის გამოყენებით, რადგან დეველოპერები უზრუნველყოფენ კონფიგურირებულ Vagrant-ზე დაფუძნებულ ვირტუალურ გარემოს. Pylearn2 აგებულია Theano ბიბლიოთეკის თავზე. გარდა ამისა, საჭიროა PyYAML, PIL. გამოთვლების დასაჩქარებლად Pylearn2 და Theano იყენებენ Cuda-convnet, რომელიც დანერგილია C ++ / CUDA-ში, რაც იძლევა სიჩქარის მნიშვნელოვან ზრდას.

Pylearn2 მხარს უჭერს სრულად დაკავშირებული და კონვოლუციური ნერვული ქსელების, სხვადასხვა ტიპის ავტომატური შიფრირების (კონტრაქტიული ავტომატური ენკოდერები, ამოღების ავტოკოდერები) და შეზღუდული Boltzmann მანქანების (Gaussian RBM, spike-and-slab RBM) შექმნას. გათვალისწინებულია შეცდომის რამდენიმე ფუნქცია: ჯვარედინი ენტროპია (ჯვარედინი ენტროპია), ლოგ-ალბათობა (ლოგის ალბათობა). სწავლების შემდეგი მეთოდები ხელმისაწვდომია:

  • Batch Gradient Descent (BGD).
  • სტოქასტური გრადიენტური დაღმართი (SGD).
  • არაწრფივი კონიუგატური გრადიენტული წარმოშობა (NCG).
Pylearn2 ბიბლიოთეკაში ნერვული ქსელები განისაზღვრება მათი აღწერილობის გამოყენებით კონფიგურაციის ფაილში YAML ფორმატში. YAML ფაილები მოსახერხებელი და სწრაფი გზაა ობიექტების სერიალიზაციისთვის, რადგან ის შექმნილია ობიექტზე ორიენტირებული პროგრამირების ტექნიკის გამოყენებით.

ჩირაღდნის ბიბლიოთეკა


Torch არის სამეცნიერო გამოთვლითი ბიბლიოთეკა მანქანური სწავლების ალგორითმების ფართო მხარდაჭერით. შექმნილია Idiap Research Institute-ის, New York University-ისა და NEC Laboratories America-ს მიერ 2000 წლიდან, განაწილებულია BSD ლიცენზიით.

ბიბლიოთეკა დანერგილია ლუაში C და CUDA-ს გამოყენებით. სწრაფი Lua სკრიპტირების ენა, SSE, OpenMP, CUDA ტექნოლოგიებთან ერთად, საშუალებას აძლევს Torch-ს აჩვენოს კარგი სიჩქარე სხვა ბიბლიოთეკებთან შედარებით. ამჟამად მხარდაჭერილი ოპერაციული სისტემებია Linux, FreeBSD, Mac OS X. ძირითადი მოდულები ასევე მუშაობს Windows-ზე. ჩირაღდნის დამოკიდებულებები მოიცავს imagemagick, gnuplot, nodejs, npm და სხვა.

ბიბლიოთეკა შედგება მოდულების ნაკრებისგან, რომელთაგან თითოეული პასუხისმგებელია ნერვულ ქსელებთან მუშაობის სხვადასხვა ეტაპებზე. ასე, მაგალითად, მოდული nnუზრუნველყოფს ნერვული ქსელის კონფიგურაციას (ფენების და მათი პარამეტრების განსაზღვრა), მოდული ოპტიმალურიშეიცავს სხვადასხვა ოპტიმიზაციის მეთოდების დანერგვას, რომლებიც გამოიყენება ტრენინგისთვის და gnuplotიძლევა მონაცემების ვიზუალიზაციის შესაძლებლობას (გრაფების შედგენა, სურათების ჩვენება და ა.შ.). დამატებითი მოდულების დაყენება საშუალებას გაძლევთ გააფართოვოთ ბიბლიოთეკის ფუნქციონირება.

ჩირაღდანი საშუალებას გაძლევთ შექმნათ რთული ნერვული ქსელები კონტეინერის მექანიზმის გამოყენებით. კონტეინერი- ეს არის კლასი, რომელიც აერთიანებს ნერვული ქსელის დეკლარირებულ კომპონენტებს ერთ საერთო კონფიგურაციაში, რომელიც მოგვიანებით შეიძლება გადავიდეს სასწავლო პროცედურაზე. ნერვული ქსელის კომპონენტი შეიძლება იყოს არა მხოლოდ სრულად დაკავშირებული ან კონვოლუციური ფენები, არამედ აქტივაციის ან შეცდომის ფუნქციები, ასევე მზა კონტეინერები. ჩირაღდანი საშუალებას გაძლევთ შექმნათ შემდეგი ფენები:

  • სრულად დაკავშირებული ფენა (ხაზოვანი).
  • აქტივაციის ფუნქციები: ჰიპერბოლური ტანგენსი (Tanh), მინიმალური (Min) ან მაქსიმალური (Max) არჩევანი, softmax ფუნქცია (SoftMax) და სხვა.
  • კონვოლუციური ფენები: კონვოლუცია (Convolution), გათხელება (SubSampling), სივრცითი გაერთიანება (MaxPooling, AveragePooling, LPPooling), სხვაობის ნორმალიზება (SubtractiveNormalization).
შეცდომის ფუნქციები: საშუალო კვადრატული შეცდომა (MSE), ჯვარედინი ენტროპია (CrossEntropy) და ა.შ.

ტრენინგის დროს შეიძლება გამოყენებულ იქნას ოპტიმიზაციის შემდეგი მეთოდები:

განვიხილოთ ტორჩში ნერვული ქსელის კონფიგურაციის პროცესი. ჯერ უნდა გამოაცხადოთ კონტეინერი, შემდეგ დაამატეთ მას ფენები. ფენების დამატების თანმიმდევრობა მნიშვნელოვანია, რადგან (n-1) ფენის გამომავალი იქნება n-ის შეყვანა.
რეგრესია = nn. თანმიმდევრული() რეგრესია:add(nn.წრფივი(784,10)) რეგრესია:add(nn.SoftMax()) დაკარგვა = nn.ClassNLLCriterion()
ნერვული ქსელის გამოყენება და სწავლება:

  1. შეყვანის მონაცემების ჩატვირთვა X. torch.load(path_to_ready_dset) ფუნქცია საშუალებას გაძლევთ ჩატვირთოთ წინასწარ მომზადებული მონაცემთა ნაკრები ტექსტში ან ორობით ფორმატში. როგორც წესი, ეს არის ლუას ცხრილი, რომელიც შედგება სამი ველისგან: ზომა, მონაცემები და ეტიკეტები. თუ მზა მონაცემთა ნაკრები არ არის, შეგიძლიათ გამოიყენოთ Lua ენის სტანდარტული ფუნქციები (მაგალითად, io.open(ფაილის სახელი [, რეჟიმი])) ან ფუნქციები Torch ბიბლიოთეკის პაკეტებიდან (მაგალითად, image.loadJPG (ფაილის სახელი )).
  2. ქსელის პასუხის განსაზღვრა შეყვანისთვის X:
    Y = რეგრესია: წინ (X)
  3. შეცდომის ფუნქციის გამოთვლა E = დაკარგვა (Y, T), ჩვენს შემთხვევაში ეს არის ალბათობის ფუნქცია.
    E = დაკარგვა: წინ (Y, T)
  4. გრადიენტების გამოთვლა უკანა გავრცელების ალგორითმის მიხედვით.
    dE_dY = დაკარგვა:უკან(Y,T) რეგრესია:უკან(X,dE_dY)
ახლა ყველაფერი ერთად გავაერთიანოთ. იმისათვის, რომ მოამზადოთ ნერვული ქსელი Torch ბიბლიოთეკაში, თქვენ უნდა დაწეროთ საკუთარი სასწავლო ციკლი. მასში გამოაცხადეთ სპეციალური ფუნქცია (დახურვა), რომელიც გამოთვლის ქსელის პასუხს, განსაზღვრავს შეცდომის მნიშვნელობას და ხელახლა გამოთვლის გრადიენტებს და გადასცემს ამ დახურვას გრადიენტული დაღმართის ფუნქციას, რათა განაახლოს ქსელის წონა.
-- შექმენით სპეციალური ცვლადები: ნერვული ქსელის წონა და მათი გრადიენტები w, dE_dw = რეგრესია:getParameters() ლოკალური eval_E = ფუნქცია(w) dE_dw:zero() -- განაახლეთ გრადიენტები ლოკალური Y = რეგრესია: წინ (X) ლოკალური E = დაკარგვა : forward(Y,T) local dE_dY = დაკარგვა:backward(Y,T) რეგრესია:backward(X,dE_dY) დაბრუნება E, dE_dw დასასრული -- შემდეგ გამოიძახეთ optim.sgd(eval_E, w, optimState) სასწავლო ციკლში
სადაც optimState არის გრადიენტური წარმოშობის პარამეტრები (სწავლის სიჩქარე, იმპულსი, წონადაშლა და ა.შ.). თქვენ შეგიძლიათ ნახოთ ტრენინგის სრული ციკლი.

ადვილი მისახვედრია, რომ დეკლარაციის პროცედურა, ისევე როგორც ტრენინგის პროცედურა, იღებს 10 სტრიქონზე ნაკლებ კოდს, რაც მიუთითებს ბიბლიოთეკის მარტივად გამოყენების შესახებ. ამავე დროს, ბიბლიოთეკა საშუალებას გაძლევთ იმუშაოთ ნერვულ ქსელებთან საკმაოდ დაბალ დონეზე.

გაწვრთნილი ქსელის შენახვა და ჩატვირთვა ხორციელდება სპეციალური ფუნქციების გამოყენებით:
torch.save (ბილიკი, რეგრესია) net = torch.load (ბილიკი)
ჩატვირთვის შემდეგ, ქსელი შეიძლება გამოყენებულ იქნას კლასიფიკაციისთვის ან დამატებითი ტრენინგისთვის. თუ თქვენ უნდა იცოდეთ რომელ კლასს ეკუთვნის ნიმუშის ელემენტი, მაშინ საკმარისია ქსელში გავლა და გამომავალი გამოთვლა:
შედეგი = წმინდა: წინ (ნიმუში)
უფრო მოწინავე მაგალითები შეგიძლიათ იხილოთ ბიბლიოთეკის სახელმძღვანელოებში.

თეანოს ბიბლიოთეკა


Theano არის პითონის ენის გაფართოება, რომელიც საშუალებას გაძლევთ ეფექტურად შეაფასოთ მრავალგანზომილებიანი მასივების შემცველი მათემატიკური გამონათქვამები. ბიბლიოთეკამ მიიღო სახელი ძველი ბერძენი ფილოსოფოსისა და მათემატიკოსის პითაგორას მეუღლის - თეანოს (ან თეანოს) პატივსაცემად. Theano შეიქმნა LISA ლაბორატორიაში მანქანური სწავლების ალგორითმების სწრაფი განვითარების მხარდასაჭერად.

ბიბლიოთეკა დანერგილია პითონში და მხარდაჭერილია Windows, Linux და Mac OS ოპერაციულ სისტემებზე. Theano მოიცავს შემდგენელს, რომელიც თარგმნის პითონში დაწერილ მათემატიკურ გამონათქვამებს ეფექტურ C ან CUDA კოდში.

Theano უზრუნველყოფს ინსტრუმენტების ძირითად კომპლექტს ნერვული ქსელის კონფიგურაციისა და ტრენინგისთვის. შესაძლებელია მრავალშრიანი სრულად დაკავშირებული ქსელების დანერგვა (მულტი-ფენიანი პერცეპტრონი), კონვოლუციური ნერვული ქსელები (CNN), განმეორებადი ნერვული ქსელები (რეკურენტული ნერვული ქსელები, RNN), ავტოენკოდერები და შეზღუდული Boltzmann მანქანები. ასევე გათვალისწინებულია სხვადასხვა გააქტიურების ფუნქციები, კერძოდ, სიგმოიდური, softmax-ფუნქცია, ჯვარედინი ენტროპია. ტრენინგი იყენებს პარტიული გრადიენტული დაღმართს (Batch SGD).

განვიხილოთ ნერვული ქსელის კონფიგურაცია Theano-ში. მოხერხებულობისთვის ვახორციელებთ LogisticRegression () კლასს, რომელიც შეიცავს ცვლადებს - სასწავლო პარამეტრებს W, b და მათთან მუშაობის ფუნქციებს - ქსელის პასუხის დათვლას (y = softmax(Wx + b)) და შეცდომის ფუნქციას. შემდეგ, ნერვული ქსელის მოსამზადებლად, ჩვენ ვქმნით train_model ფუნქციას. ამისათვის აუცილებელია შეცდომის ფუნქციის განმსაზღვრელი მეთოდები, გრადიენტების გამოთვლის წესი, ნერვული ქსელის წონის შეცვლის მეთოდი, მინი პარტიული ნიმუშის ზომა და მდებარეობა (თავად სურათები და პასუხები) მათთვის). ყველა პარამეტრის განსაზღვრის შემდეგ, ფუნქცია კომპილირებულია და გადადის სასწავლო ციკლში.


ბრინჯი. 3. თეანოში ნერვული ქსელის განხორციელების კლასის დიაგრამა

კლასის პროგრამული განხორციელება

კლასი LogisticRegression(object): def __init__(self, input, n_in, n_out): # y = W * x + b # გამოაცხადეთ ცვლადები, განსაზღვრეთ ტიპი, შეყვანის და გამომავალი რაოდენობა self.W = theano.shared(# ინიციალიზაცია საწყისი წონა ნულამდე მნიშვნელობა=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", borrow=True) # დაამატეთ softmax აქტივაციის ფუნქცია, ქსელის გამომავალი არის ცვლადი y_pred self.p_y_given_x = T.nnet.softmax(T.dot(input, self. ვ) + თვით.ბ) self.y_pred = T.argmax(self.p_y_given_x, axis=1) self.params = # განსაზღვრავს შეცდომის ფუნქციას def negative_log_likelihood(self, y): return -T.mean(T.log( self.p_y_given_x )) # x - მიეწოდება ქსელის შეყვანას # სურათების ნაკრები (მინი პარტია) განლაგებულია რიგებად მატრიცაში x # y - ქსელის პასუხი თითოეულ ნიმუშზე x = T.matrix("x") y = T.ivector("y") # შექმენით ლოგისტიკური რეგრესიის მოდელი თითოეულ MNIST სურათს აქვს ზომა 28*28 კლასიფიკატორი = LogisticRegression(input=x, n_in=28 * 28, n_out=10) # შეცდომის ფუნქციის მნიშვნელობა, რომლის მინიმიზაციას ვცდილობთ დროს ტრენინგის ღირებულება = classifier.negative_log_likelihood(y) # გრადიენტების გამოსათვლელად, თქვენ უნდა გამოძახოთ Theano ფუნქცია - grad g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost=cost, wrt=classifier.b) # განსაზღვრავს ნერვული ქსელის განახლებების წონების განახლების წესებს = [(classifier.W, classifier.W - Learn_rate * g_W), (classifier.b, classifier.b - Learning_rate * g_b)] # შეადგინეთ ტრენინგის ფუნქცია, მოგვიანებით იგი გამოიძახება ტრენინგის მარყუჟში train_model = theano.function(inputs =, outputs=cost, updates=updates, მოცემული=( x: train_set_x, y: train_set_y ))


ნერვული ქსელის პარამეტრების სწრაფად შესანახად და ჩატვირთვისთვის, შეგიძლიათ გამოიყენოთ ფუნქციები cPickle პაკეტიდან:
იმპორტი cPickle save_file = open("გზა", "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() ფაილი = open("გზა") კლასიფიკატორი.W.set_value(cPickle.load(save_file), borrow=True) classifier.b.set_value(cPickle.load(save_file), borrow=True )
ადვილი მისახვედრია, რომ მოდელის შექმნის პროცესი და მისი პარამეტრების განსაზღვრა მოითხოვს დიდი და ხმაურიანი კოდის დაწერას. ბიბლიოთეკა დაბალი დონისაა. უნდა აღინიშნოს მისი მოქნილობა, ასევე საკუთარი კომპონენტების დანერგვისა და გამოყენების შესაძლებლობა. ბიბლიოთეკის ოფიციალურ ვებსაიტზე განთავსებულია დიდი რაოდენობით სასწავლო მასალა სხვადასხვა თემაზე.

ბიბლიოთეკების შედარება ხელნაწერი ციფრების კლასიფიკაციის ამოცანის მაგალითზე

სატესტო ინფრასტრუქტურა

ბიბლიოთეკების მუშაობის შესაფასებლად ექსპერიმენტების დროს გამოყენებული იქნა შემდეგი სატესტო ინფრასტრუქტურა:
  1. Ubuntu 12.04, Intel Core i5-3210M @ 2.5GHz (CPU ექსპერიმენტები).
  2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4GHz + NVIDIA GeForce GT 540M (GPU ექსპერიმენტები).
  3. GCC 4.8, NVCC 6.5.

ქსელის ტოპოლოგიები და ტრენინგის პარამეტრები

გამოთვლითი ექსპერიმენტები ჩატარდა შემდეგი სტრუქტურის სრულად დაკავშირებულ და კონვოლუციურ ნერვულ ქსელებზე:

ყველა წონა შემთხვევითი ინიციალიზაცია მოხდა ერთიანი განაწილების კანონის მიხედვით დიაპაზონში (−6/(n_in + n_out), 6/(n_in + n_out)), სადაც n_in, n_out არის ნეირონების რაოდენობა ფენის შემავალ და გამომავალზე. , შესაბამისად. სტოქასტური გრადიენტული დაღმართის (SGD) პარამეტრები არჩეულია შემდეგი მნიშვნელობების ტოლი: სწავლის სიჩქარე - 0,01, იმპულსი - 0,9, წონის დაშლა - 5e-4, ჯგუფის ზომა - 128, გამეორებების მაქსიმალური რაოდენობა - 150.

ექსპერიმენტული შედეგები

ზემოთ აღწერილი ნერვული ქსელების ტრენინგის დრო ( , ) ოთხი განხილული ბიბლიოთეკის გამოყენებით წარმოდგენილია ქვემოთ (
  • პითონი,
  • მანქანათმცოდნეობა,
  • საძიებო ტექნოლოგიები
  • დღეს Yandex-მა გამოუშვა საკუთარი CatBoost ბიბლიოთეკა ღია წყაროზე, რომელიც შეიქმნა მანქანური სწავლების სფეროში კომპანიის მრავალწლიანი გამოცდილების საფუძველზე. მისი დახმარებით თქვენ შეგიძლიათ ეფექტურად მოამზადოთ მოდელები ჰეტეროგენულ მონაცემებზე, მათ შორის ისეთებიც, რომელთა წარმოდგენა ძნელია რიცხვების სახით (მაგალითად, ღრუბლების ტიპები ან საქონლის კატეგორიები). წყაროს კოდი, დოკუმენტაცია, საორიენტაციო ნიშნები და საჭირო ინსტრუმენტები უკვე გამოქვეყნებულია GitHub-ზე Apache 2.0 ლიცენზიით.

    CatBoost არის მანქანური სწავლების ახალი მეთოდი, რომელიც დაფუძნებულია გრადიენტის გაძლიერებაზე. ის დანერგილია Yandex-ში რანგის, პროგნოზირების და რეკომენდაციების აგების პრობლემების გადასაჭრელად. უფრო მეტიც, ის უკვე გამოიყენება ბირთვული კვლევების ევროპულ ორგანიზაციასთან (CERN) და Yandex Data Factory სამრეწველო კლიენტებთან თანამშრომლობით. მაშ, როგორ განსხვავდება CatBoost სხვა ღია ანალოგებისგან? რატომ გაძლიერება და არა ნერვული ქსელის მეთოდი? როგორ უკავშირდება ეს ტექნოლოგია უკვე ცნობილ Matrixnet-ს? და რაც შეეხება კატებს? დღეს ჩვენ ვუპასუხებთ ყველა ამ კითხვას.

    ტერმინი „მანქანური სწავლება“ 1950 წლიდან არსებობს. ეს ტერმინი აღნიშნავს მცდელობას, ასწავლოს კომპიუტერს პრობლემების გადაჭრა, რომლებიც მარტივია ადამიანისთვის, მაგრამ ძნელია მათი გადაჭრის გზის ფორმალიზება. მანქანათმცოდნეობის შედეგად კომპიუტერს შეუძლია გამოავლინოს ქცევა, რომელიც მასში აშკარად არ იყო ჩაშენებული. დღევანდელ სამყაროში, მანქანური სწავლის ნაყოფს დღეში ბევრჯერ ვხვდებით, ბევრმა ჩვენგანმა ამის შესახებ არ იცის. იგი გამოიყენება სოციალურ ქსელებში არხების, ონლაინ მაღაზიებში „მსგავსი პროდუქტების“ სიების შესაქმნელად, ბანკებიდან სესხების გაცემის და დაზღვევის ღირებულების განსაზღვრისას. მანქანათმცოდნეობის ტექნოლოგიები გამოიყენება ფოტოების ან მრავალრიცხოვანი ფოტო ფილტრების სახეების მოსაძებნად. ამ უკანასკნელისთვის, სხვათა შორის, ჩვეულებრივ გამოიყენება ნერვული ქსელები და მათზე ისე ხშირად წერენ, რომ შეიძლება იყოს მცდარი მოსაზრება, რომ ეს არის "ვერცხლის ტყვია" ნებისმიერი სირთულის პრობლემების გადასაჭრელად. მაგრამ ეს არ არის.

    ნერვული ქსელები ან გრადიენტის გაძლიერება

    სინამდვილეში, მანქანათმცოდნეობა ძალიან განსხვავებულია: არსებობს მრავალი განსხვავებული მეთოდი და ნერვული ქსელები მხოლოდ ერთი მათგანია. ამის ილუსტრაციაა Kaggle-ის პლატფორმაზე ჩატარებული შეჯიბრებების შედეგები, სადაც სხვადასხვა შეჯიბრებებში იმარჯვებს სხვადასხვა მეთოდი, ბევრ მათგანში კი გრადიენტული გაძლიერება.

    ნერვული ქსელები შესანიშნავად წყვეტენ გარკვეულ ამოცანებს - მაგალითად, ისეთებს, სადაც საჭიროა ერთგვაროვან მონაცემებთან მუშაობა. ჰომოგენური მონაცემები შედგება, მაგალითად, სურათებისგან, ხმისგან ან ტექსტისგან. Yandex-ში ისინი გვეხმარებიან უკეთ გავიგოთ საძიებო მოთხოვნები, მოვძებნოთ მსგავსი სურათები ინტერნეტში, ამოვიცნოთ თქვენი ხმა Navigator-ში და მრავალი სხვა. მაგრამ ეს არ არის ყველა ამოცანა მანქანური სწავლისთვის. არსებობს სერიოზული გამოწვევების მთელი ფენა, რომელთა გადაჭრა მხოლოდ ნერვული ქსელებით შეუძლებელია – მათ სჭირდებათ გრადიენტური გაძლიერება. ეს მეთოდი შეუცვლელია იქ, სადაც ბევრი მონაცემია და მათი სტრუქტურა არაერთგვაროვანია.

    მაგალითად, თუ გჭირდებათ ამინდის ზუსტი პროგნოზი, რომელიც ითვალისწინებს უამრავ ფაქტორს (ტემპერატურა, ტენიანობა, რადარის მონაცემები, მომხმარებლის დაკვირვებები და მრავალი სხვა). ან თუ გჭირდებათ მაღალი ხარისხის ძიების შედეგების რანჟირება - ეს არის ზუსტად ის, რაც აიძულა Yandex-ს შეემუშავებინა მანქანათმცოდნეობის საკუთარი მეთოდი.

    მატრიქსნეტი

    პირველი საძიებო სისტემები არ იყო ისეთი რთული, როგორც ახლა. სინამდვილეში, თავიდან ეს მხოლოდ სიტყვების ძიება იყო – იმდენად ცოტა საიტი იყო, რომ მათ შორის დიდი კონკურენცია არ იყო. შემდეგ იყო მეტი გვერდი, საჭირო იყო მათი რანჟირება. დაიწყო სხვადასხვა გართულებების გათვალისწინება - სიტყვების სიხშირე, tf-idf . შემდეგ ძალიან ბევრი გვერდი იყო ნებისმიერ თემაზე, პირველი მნიშვნელოვანი მიღწევა მოხდა - მათ დაიწყეს ბმულების დათვლა.

    მალე ინტერნეტი გახდა კომერციულად მნიშვნელოვანი და ბევრი თაღლითი ცდილობდა მოეტყუებინა იმ დროს არსებული მარტივი ალგორითმები. და იყო მეორე მნიშვნელოვანი მიღწევა - საძიებო სისტემებმა დაიწყეს მომხმარებლის ქცევის ცოდნის გამოყენება იმის გასაგებად, თუ რომელი გვერდებია კარგი და რომელი არა.

    დაახლოებით ათი წლის წინ, ადამიანის გონება აღარ იყო საკმარისი იმისათვის, რომ გაერკვია დოკუმენტების რანჟირება. თქვენ ალბათ შენიშნეთ, რომ თითქმის ნებისმიერი მოთხოვნისთვის ნაპოვნი შედეგების რაოდენობა უზარმაზარია: ასობით ათასი, ხშირად მილიონობით შედეგი. მათი უმრავლესობა უინტერესო, უსარგებლოა, მხოლოდ შემთხვევით ახსენებს მოთხოვნის სიტყვებს ან ზოგადად სპამია. თქვენს მოთხოვნაზე პასუხის გასაცემად, თქვენ დაუყოვნებლივ უნდა აირჩიოთ საუკეთესო ათეული ყველა ნაპოვნი შედეგიდან. პროგრამის დაწერა, რომელიც ამას მისაღები ხარისხით აკეთებს, ადამიანური პროგრამისტის ძალებს აღემატება. შემდეგი გადასვლა მოხდა - საძიებო სისტემებმა დაიწყეს მანქანათმცოდნეობის აქტიური გამოყენება.

    ჯერ კიდევ 2009 წელს Yandex-მა შემოიტანა საკუთარი Matrixnet მეთოდი, რომელიც ეფუძნება გრადიენტის გაძლიერებას. შეიძლება ითქვას, რომ მომხმარებლების კოლექტიური ინტელექტი და „ბრბოს სიბრძნე“ ეხმარება რეიტინგს. ინფორმაცია ვებსაიტებისა და ადამიანების ქცევის შესახებ გარდაიქმნება მრავალ ფაქტორად, რომელთაგან თითოეულს Matrixnet იყენებს რეიტინგის ფორმულის შესაქმნელად. სინამდვილეში, რეიტინგის ფორმულა ახლა იწერება მანქანით. სხვათა შორის, ცალკე ფაქტორებად ნერვული ქსელების შედეგებსაც ვიყენებთ (მაგალითად, ასე მუშაობს პალეხის ალგორითმი, რომლის შესახებაც გასულ წელს).

    Matrixnet-ის მნიშვნელოვანი მახასიათებელია ის, რომ ის მდგრადია ზედმეტი მორგების მიმართ. ეს საშუალებას გაძლევთ გაითვალისწინოთ მრავალი რანგის ფაქტორი და ამავე დროს ივარჯიშოთ შედარებით მცირე რაოდენობით მონაცემებზე, იმის შიშის გარეშე, რომ მანქანა აღმოაჩენს არარსებულ ნიმუშებს. მანქანური სწავლების სხვა მეთოდები ან ქმნიან მარტივ ფორმულებს ნაკლები ფაქტორებით, ან საჭიროებს უფრო დიდ სასწავლო კომპლექტს.

    Matrixnet-ის კიდევ ერთი მნიშვნელოვანი მახასიათებელია ის, რომ რეიტინგის ფორმულა შეიძლება ცალკე კონფიგურირებული იყოს საკმაოდ ვიწრო შეკითხვის კლასებისთვის. მაგალითად, ძიების ხარისხის გასაუმჯობესებლად მხოლოდ მუსიკის შესახებ კითხვებისთვის. ამავდროულად, დანარჩენი შეკითხვის კლასების რეიტინგი არ გაუარესდება.

    სწორედ Matrixnet-ი და მისი უპირატესობები დაედო საფუძვლად CatBoost-ს. მაგრამ რატომ გვჭირდება რაიმე ახლის გამოგონება?

    გრადიენტის გაძლიერების თითქმის ყველა თანამედროვე მეთოდი მუშაობს რიცხვებთან. მაშინაც კი, თუ თქვენ გაქვთ მუსიკალური ჟანრები, ღრუბლების ტიპები ან ფერები, როგორც შეყვანის სახით, ეს მონაცემები მაინც უნდა იყოს აღწერილი ციფრების ენაზე. ეს იწვევს მათი არსის დამახინჯებას და მოდელის სიზუსტის პოტენციურ შემცირებას.

    მოდით ვაჩვენოთ ეს პრიმიტიული მაგალითის გამოყენებით მაღაზიაში პროდუქციის კატალოგით. პროდუქტები ნაკლებად არის დაკავშირებული ერთმანეთთან და მათ შორის არ არსებობს ისეთი კანონზომიერება, რომელიც საშუალებას მისცემს მათ შეკვეთა და თითოეული პროდუქტისთვის მნიშვნელოვანი ნომრის მინიჭება. ამიტომ, ამ სიტუაციაში, თითოეულ პროდუქტს უბრალოდ ენიჭება რიგითი ID (მაგალითად, მაღაზიაში არსებული სააღრიცხვო პროგრამის შესაბამისად). ამ რიცხვების თანმიმდევრობა არაფერს ნიშნავს, მაგრამ ალგორითმი გამოიყენებს ამ წესრიგს და მისგან ცრუ დასკვნებს გამოიტანს.

    მანქანათმცოდნეობის გამოცდილ სპეციალისტს შეუძლია მოიფიქროს უფრო გონივრული გზა კატეგორიული მახასიათებლების რიცხვებად გადაქცევისთვის, მაგრამ ასეთი წინასწარი დამუშავება გამოიწვევს გარკვეული ინფორმაციის დაკარგვას და გამოიწვევს საბოლოო გადაწყვეტის ხარისხის გაუარესებას.

    სწორედ ამიტომ, მნიშვნელოვანი იყო მანქანას ესწავლებინა მუშაობა არა მხოლოდ ციფრებთან, არამედ პირდაპირ კატეგორიებთან, შაბლონებთან, რომელთა შორის ის დამოუკიდებლად ამოიცნობს, ჩვენი ხელით „დახმარების“ გარეშე. და CatBoost შექმნილია ჩვენ მიერ ისე, რომ ერთნაირად კარგად იმუშაოს როგორც ციფრული, ისე კატეგორიული მახასიათებლებით. ამის გამო, ის აჩვენებს ტრენინგის უფრო მაღალ ხარისხს ჰეტეროგენულ მონაცემებთან მუშაობისას, ვიდრე ალტერნატიული გადაწყვეტილებები. მისი გამოყენება შესაძლებელია სხვადასხვა სფეროში – საბანკო საქმიდან დაწყებული ინდუსტრიამდე.

    სხვათა შორის, ტექნოლოგიის სახელი მოდის მხოლოდ კატეგორიული გაძლიერებიდან (კატეგორიული გაძლიერება). განვითარების დროს არც ერთი კატა არ დაშავებულა.

    ნიშნული

    ბიბლიოთეკის თეორიულ განსხვავებებზე დიდხანს შეიძლება ისაუბრო, მაგრამ პრაქტიკაში ერთხელ ჩვენება სჯობს. სიცხადისთვის, ჩვენ შევადარეთ CatBoost ბიბლიოთეკის მუშაობა ღია ანალოგებს XGBoost, LightGBM და H20 საჯარო მონაცემთა ნაკრების მიხედვით. და აი შედეგები (რაც უფრო პატარაა მით უკეთესი): https://catboost.yandex/#benchmark

    ჩვენ არ გვინდა ვიყოთ უსაფუძვლო, ამიტომ ბიბლიოთეკასთან ერთად ღია წყაროში განთავსებულია შედარების პროცესის აღწერა, მეთოდების შედარების დაწყების კოდი და კონტეინერი ყველა ბიბლიოთეკის გამოყენებული ვერსიით. ნებისმიერ მომხმარებელს შეუძლია გაიმეოროს ექსპერიმენტი საკუთარი ან საკუთარი მონაცემებით.

    CatBoost პრაქტიკაში

    ახალი მეთოდი უკვე გამოცდილია Yandex სერვისებზე. იგი გამოიყენებოდა ძიების შედეგების გასაუმჯობესებლად, Yandex.Zen-ის რეკომენდაციების არხის დათვლისა და ამინდის პროგნოზის გამოსათვლელად Meteum ტექნოლოგიაში - და ყველა შემთხვევაში აღმოჩნდა უკეთესი ვიდრე Matrixnet. სამომავლოდ CatBoost იმუშავებს სხვა სერვისებზე. აქ არ გავჩერდეთ – სჯობს, დაუყოვნებლივ ვისაუბროთ დიდ ადრონულ კოლაიდერის (LHC) შესახებ.

    CatBoost-მა მოახერხა მისი აპლიკაციის მოძიება ევროპის ბირთვული კვლევების ორგანიზაციასთან თანამშრომლობის ფარგლებში. LHC მუშაობს LHCb დეტექტორზე, რომელიც გამოიყენება მატერიისა და ანტიმატერიის ასიმეტრიის შესასწავლად მძიმე სილამაზის კვარკების ურთიერთქმედებისას. ექსპერიმენტში რეგისტრირებული სხვადასხვა ნაწილაკების ზუსტად თვალყურის დევნებისთვის, დეტექტორში არის რამდენიმე კონკრეტული ნაწილი, რომელთაგან თითოეული განსაზღვრავს ნაწილაკების განსაკუთრებულ თვისებებს. ამ შემთხვევაში ყველაზე რთული ამოცანაა დეტექტორის სხვადასხვა ნაწილიდან ინფორმაციის გაერთიანება ნაწილაკების შესახებ ყველაზე ზუსტ, აგრეგირებულ ცოდნაში. სწორედ აქ მოდის მანქანური სწავლება. CatBoost-ის გამოყენებით მონაცემების გაერთიანებისთვის, მეცნიერებმა შეძლეს საბოლოო გადაწყვეტის ხარისხის მახასიათებლების გაუმჯობესება. CatBoost-ის შედეგები უკეთესი იყო, ვიდრე სხვა მეთოდებით მიღებული შედეგები.

    როგორ დავიწყოთ CatBoost-ის გამოყენება?

    CatBoost-თან მუშაობისთვის, თქვენ უბრალოდ უნდა დააინსტალიროთ იგი თქვენს კომპიუტერში. ბიბლიოთეკა მხარს უჭერს Linux, Windows და macOS ოპერაციულ სისტემებს და ხელმისაწვდომია Python და R პროგრამირების ენებზე. Yandex-მა ასევე შეიმუშავა ვიზუალიზაციის პროგრამა.

    ამჯერად გადავწყვიტე შემესწავლა ნერვული ქსელები. ამ საკითხში საბაზისო უნარები 2015 წლის ზაფხულში და შემოდგომაზე შევძელი. საბაზისო უნარებში ვგულისხმობ იმას, რომ მე შემიძლია შევქმნა მარტივი ნერვული ქსელი ნულიდან. თქვენ შეგიძლიათ იპოვოთ მაგალითები ჩემს GitHub საცავებში. ამ სტატიაში მე მოგცემთ რამდენიმე განმარტებას და გაგიზიარებთ რესურსებს, რომლებიც შეიძლება თქვენთვის სასარგებლო იყოს თქვენი შესწავლისთვის.

    ნაბიჯი 1: ნეირონები და წინსვლის გავრცელება

    რა არის "ნერვული ქსელი"? მოდი დაველოდოთ ამას და ჯერ ერთ ნეირონს გავუმკლავდეთ.

    ნეირონი ფუნქციას ჰგავს: ის იღებს რამდენიმე შეყვანას და აბრუნებს ერთს.

    ქვემოთ მოცემული წრე წარმოადგენს ხელოვნურ ნეირონს. ის იღებს 5-ს და აბრუნებს 1-ს. შეყვანა არის ნეირონთან დაკავშირებული სამი სინაფსის ჯამი (მარცხნივ სამი ისარი).

    სურათის მარცხენა მხარეს ჩვენ ვხედავთ 2 შეყვანის მნიშვნელობას (მწვანეში) და ოფსეტს (მონიშნული ყავისფერით).

    შეყვანის მონაცემები შეიძლება იყოს ორი განსხვავებული თვისების რიცხვითი წარმოდგენა. მაგალითად, სპამის ფილტრის შექმნისას შეიძლება ნიშნავდეს ერთზე მეტ სიტყვას დაწერილი დიდი ასოებით და აქვს სიტყვა „ვიაგრა“.

    შეყვანის მნიშვნელობები მრავლდება მათი ეგრეთ წოდებული "წონით", 7 და 3 (მონიშნული ლურჯით).

    ახლა ჩვენ ვამატებთ მიღებულ მნიშვნელობებს ოფსეტურით და ვიღებთ რიცხვს, ჩვენს შემთხვევაში 5 (მონიშნულია წითლად). ეს არის ჩვენი ხელოვნური ნეირონის შეყვანა.

    შემდეგ ნეირონი ასრულებს რაიმე სახის გამოთვლას და აწარმოებს გამომავალ მნიშვნელობას. ჩვენ მივიღეთ 1 იმიტომ სიგმოიდის მომრგვალებული მნიშვნელობა მე-5 წერტილში არის 1 (ამ ფუნქციის შესახებ მოგვიანებით).

    ეს რომ იყოს სპამის ფილტრი, ის ფაქტი, რომ გამომავალი არის 1, ნიშნავს, რომ ტექსტი მონიშნული იყო როგორც სპამი ნეირონის მიერ.

    ნერვული ქსელის ილუსტრაცია ვიკიპედიიდან.

    თუ ამ ნეირონებს გააერთიანებთ, მიიღებთ წინ გამავრცელებელ ნერვულ ქსელს - პროცესი მიდის შეყვანიდან გამოსავალზე, სინაფსებით დაკავშირებული ნეირონების მეშვეობით, როგორც სურათზე მარცხნივ.

    ნაბიჯი 2. სიგმოიდი

    მას შემდეგ, რაც უყურეთ Welch Labs-ის გაკვეთილებს, კარგი იდეაა, გაეცნოთ Coursera-ს მანქანური სწავლების კურსის მეოთხე კვირას ნერვულ ქსელებზე, რათა დაგეხმაროთ გაიგოთ, როგორ მუშაობენ ისინი. კურსი ღრმად შედის მათემატიკაში და ეფუძნება ოქტავას, ხოლო ჩემი უპირატესობა არის პითონი. ამის გამო სავარჯიშოები გამოვტოვე და ვიდეოდან ყველა საჭირო ცოდნა მივიღე.

    Sigmoid უბრალოდ ასახავს თქვენს მნიშვნელობას (ჰორიზონტალურ ღერძზე) სეგმენტზე 0-დან 1-მდე.

    ჩემთვის პირველი პრიორიტეტი იყო სიგმოიდის შესწავლა, რადგან ის ფიგურირებდა ნერვული ქსელების ბევრ ასპექტში. მე უკვე ვიცოდი მის შესახებ ზემოაღნიშნული კურსის მესამე კვირიდან, ამიტომ გადავხედე ვიდეო იქიდან.

    მაგრამ მარტო ვიდეოები შორს არ წაგიყვანთ. სრული გაგებისთვის, მე გადავწყვიტე მისი კოდირება. ამიტომ დავიწყე ლოგისტიკური რეგრესიის ალგორითმის განხორციელების წერა (რომელიც იყენებს სიგმოიდს).

    მთელი დღე დასჭირდა და შედეგი ნაკლებად სავარაუდოა, რომ დამაკმაყოფილებელი იყოს. მაგრამ ამას არ აქვს მნიშვნელობა, რადგან მივხვდი, როგორ მუშაობს ყველაფერი. კოდის ნახვა შესაძლებელია.

    თქვენ არ გჭირდებათ ამის გაკეთება, რადგან ეს მოითხოვს სპეციალურ ცოდნას - მთავარია, გაიგოთ, როგორ მუშაობს სიგმოიდი.

    ნაბიჯი 3 უკან გამრავლების მეთოდი

    იმის გაგება, თუ როგორ მუშაობს ნერვული ქსელი შეყვანიდან გამოსავალამდე, არც ისე რთულია. გაცილებით რთულია იმის გაგება, თუ როგორ ხდება ნერვული ქსელის ტრენინგი მონაცემთა ნაკრებებზე. პრინციპი მე გამოვიყენე ე.წ



    გაქვთ შეკითხვები?

    შეატყობინეთ შეცდომას

    ტექსტი უნდა გაიგზავნოს ჩვენს რედაქტორებს: