კომპიუტერული ხედვა 6 წთ კითხვა

ღრმა სწავლის ტრენინგის ხრიკები

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

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

Keeping values in reasonable interval

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

აქტივაციის ფუნქციების უმეტესობას აქვს არაწრფივი მნიშვნელობები [-1..1]-ის გარშემო და, შესაბამისად, აზრი აქვს ყველა შეყვანის მონაცემის მასშტაბირებას [-1..1] ან [0..1] ინტერვალზე.

საწყისი წონის ინიციალიზაცია

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

Normal distribution N(0,1) is not a good idea, because if we have n inputs, the standard deviation of output would be n, and values are likely to jump out of [0..1] interval.

ხშირად გამოიყენება შემდეგი ინიციალიზაცია:

  • ერთიანი განაწილება --CODE_0_
  • N(0,1/n) -- gaussian
  • N(0,1/√n_in) იძლევა გარანტიას, რომ ნულოვანი საშუალო და 1 სტანდარტული გადახრის მქონე შენატანებისთვის იგივე საშუალო/სტანდარტული გადახრა დარჩება
  • N(0,√2/(n_in+n_out)) -- ეგრეთ წოდებული Xavier ინიციალიზაცია (glorot), ის ეხმარება სიგნალების დიაპაზონში შენარჩუნებას როგორც წინ, ისე უკან გავრცელების დროს

სერიის ნორმალიზაცია

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

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

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

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

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

ეს ეფექტი შეიძლება აიხსნას რამდენიმე გზით:

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

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

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

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

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

ზედმეტი მორგების თავიდან ასაცილებლად რამდენიმე გზა არსებობს:

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

ოპტიმიზატორები / ტრენინგის ალგორითმები

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

ღრმა სწავლებისას, ჩვენ ვიყენებთ Stochastic Gradient Descent (SGD), რომელიც არის გრადიენტური დაღმართი, რომელიც გამოიყენება მინი პატჩებზე, შემთხვევით შერჩეული სასწავლო ნაკრებიდან. წონა რეგულირდება ამ ფორმულით:

wt+1 = wt - η∇ℒ

იმპულსი

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

  • vt+1 = &გამა; vt - η∇ℒ
  • wt+1 = wt+vt+1

აქ პარამეტრი &გამა; მიუთითებს რამდენად ვითვალისწინებთ ინერციას: &გამა;=0 შეესაბამება კლასიკურ SGD-ს; &გამა;=1 არის სუფთა მოძრაობის განტოლება.

ადამი, ადაგრადი და ა.შ.

ვინაიდან თითოეულ ფენაში ჩვენ ვამრავლებთ სიგნალებს Wi მატრიცით, დამოკიდებულია ||Wi||-ზე, გრადიენტი შეიძლება შემცირდეს და მიუახლოვდეს 0-ს, ან გაიზარდოს განუსაზღვრელი ვადით. ეს არის Exploding/Vanishing Gradients პრობლემის არსი.

ამ პრობლემის ერთ-ერთი გამოსავალი არის განტოლებაში მხოლოდ გრადიენტის მიმართულების გამოყენება და აბსოლუტური მნიშვნელობის იგნორირება, ე.ი.

wt+1 = wt - η(∇ℒ/||∇ℒ||), სადაც ||∇ℒ|| = &რადიკული;&ჯამ;(∇ℒ)2

ამ ალგორითმს Adagrad ჰქვია. სხვა ალგორითმები, რომლებიც იმავე იდეას იყენებს, არის: RMSProp, Adam

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

გრადიენტური ამოკვეთა

გრადიენტური ამოკვეთა არის ზემოთ მოყვანილი იდეის გაფართოება. როდესაც ||∇ℒ|| ≤ θ, ჩვენ ვითვალისწინებთ საწყის გრადიენტს წონის ოპტიმიზაციისთვის, ხოლო როდესაც ||∇ℒ|| > θ, გრადიენტს ვყოფთ მის ნორმაზე. აქ θ არის პარამეტრი, უმეტეს შემთხვევაში შეგვიძლია ავიღოთ θ=1 ან θ=10.

სწავლის სიჩქარის დაქვეითება

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

ეს შეიძლება გაკეთდეს გამრავლებით η ტრენინგის ყოველი ეპოქის შემდეგ გარკვეული რაოდენობით (მაგ. 0.98) ან უფრო რთული სწავლის ტემპის გრაფიკის გამოყენებით.

სხვადასხვა ქსელის არქიტექტურა

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

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

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

ეს გაკვეთილი არის Microsoft “AI for Beginners” კურსის ქართული თარგმანი, გავრცელებული MIT ლიცენზიით.