ასოების ამომცნობი ნერვული ქსელები გ. ტექსტის ამოცნობის სწრაფი გზა

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

მაგალითი 3.11.ასოების ამოცნობა. MatLab სისტემა უზრუნველყოფს სპეციალურ ფუნქციას

>> = prprob;

ეს ფუნქცია აბრუნებს ორ ბინარულ მატრიცას: ანბანის მატრიცაში (35x26) თითოეული სვეტი შიფრავს ერთ ასოს, ხოლო სამიზნეების მატრიცა (26x26) დიაგონალურია და ემსახურება სვეტის იდენტიფიკაციას.

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

შემდეგი ფუნქცია აჩვენებს ყველა ანბანის სვეტს ასოების სახით (ფუნქცია უნდა განთავსდეს MatLab სამუშაო დირექტორიაში):

ფუნქცია plotletters (ანბანი)

fprintf("plotters აწყობს პირველ 25 ასოს\n");

ზომა (ანბანი);

შეცდომა ("პლოტერებს სჭირდებათ 35 ნომრიანი სვეტები");

MM=ფერადი რუკა(ნაცრისფერი);

MM=MM(დასრულება:-1:1,:);

imagesc(გადაკეთება(ანბანი(:,j),5,7)");

ფუნქციის შესრულების შედეგი ნაჩვენებია ნახ. 3.12:

>> ნახაზები (ანბანი);

სურათი 3.12.ანბანის ორობითი კოდირება.

სამიზნეების მატრიცის სტრუქტურიდან გამომდინარე, ნერვულ ქსელს უნდა ჰქონდეს 26 გამომავალი ნეირონი. ფარული ფენის ნეირონების რაოდენობა დაყენებულია 10-მდე.

>> net = newff(minmax(ანბანი),,("logsig" "logsig"),"traingdx");

>> P = ანბანი; T = სამიზნეები;

დააყენეთ ეპოქების რაოდენობა და დაიწყეთ სასწავლო პროცესი:

>> net.trainParam.epochs = 1000;

>> = მატარებელი (net,P,T);

სწავლის მრუდი ნაჩვენებია ნახ. 3.13.

სურათი 3.13.შეცდომის შეცვლა სასწავლო პროცესში

გაწვრთნილი ქსელის ხარისხის შესამოწმებლად, განიხილეთ ასოების ხმაურიანი გამოსახულებები (ნახ. 3.14):

>> noisyP = ანბანი+randn(ზომა(ანბანი)) * 0.2;

>> plotletters(noisyP);

შემდეგი ბრძანება იწყებს ქსელს ხმაურიანი შეყვანის ნაკრებისთვის:

>>A2 = sim(net, noisyP);

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

სურათი 3.14.ასოების გამოსახულებები ხმაურის არსებობისას

>> j=1:26-ისთვის

A3 = შეჯიბრი(A2(:,j));

პასუხი(j) = პოვნა(შეჯიბრება(A3) == 1);

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

>> NetLetters=ანბანი(:,პასუხი);

>> plotletters (NetLetters);

ნახ. 3.15 გვიჩვენებს ამოცნობის საბოლოო შედეგს.

სურათი 3.15.ნერვული ქსელის მიერ ამოცნობის შესრულების შედეგი

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

მოდით გვქონდეს ეკრანი დაყოფილი თორმეტ უჯრედად, 4 x 3. უჯრედები წარმოადგენს გამოსახულების ელემენტების დისკრეტულობას. როდესაც გამოსახულება ფოკუსირებულია, უჯრედი ან განათებულია ან არა. "ილუმინაცია" განსაზღვრავს მისი აგზნების მნიშვნელობის ერთეულ მნიშვნელობას, "არა განათება" - ნულს. ამრიგად, ასო O განსაზღვრავს უჯრედების განათებას, რაც განისაზღვრება ნახ. 2.1-ში. ასო A ანათებს ეკრანს, როგორც ეს ნაჩვენებია სურათზე 2.2.

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

ცხადია, აუცილებელია O ასოთი განათებული ეკრანის უჯრედების ყველა აგზნების სიგნალის გამოყენება იმ კონიუნქტორზე, რომელიც ახორციელებს I სქემას. ასო O. ერთი სიგნალის არსებობა კონიუნქტორის გამოსავალზე განსაზღვრავს პასუხს: " ეს არის ასო O."


ბრინჯი. 2.1.ასო "O"-ს სწავლა


ბრინჯი. 2.2.ასო "ა"-ს სწავლა

იგივე უნდა გაკეთდეს ასო A-სთვისაც.

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

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

ამ შემთხვევაში, ასოები არ "ერევიან" ერთმანეთს, რადგან მათ შესაბამისი ეკრანის უჯრედების განათება ნაწილობრივ არ ემთხვევა და კავშირის ერთეულის ღირებულება განისაზღვრება მხოლოდ ერთი მათგანისთვის.

და თუ დადებ ასო K ეკრანზე? მაშინ არცერთი ორი კონიუნქტორი არ გამოიმუშავებს ერთ მნიშვნელობას, რადგან არ იქნება მათ შესაბამისი ეკრანის უჯრედების განათების სრული დამთხვევა. იმისათვის, რომ სისტემა „ასწავლო“ ასო K-ს, საჭიროა შემოვიტანოთ კიდევ ერთი კონიუნქტორი და გავაკეთოთ იგივე კონსტრუქციები, როგორც ზემოთ.

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

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

განვიხილოთ ასო O-ს ამოცნობის შესაძლებლობა, უჯრედების (1.1), (1.3), (4.1), (4.3) განათების შესაძლებლობის გათვალისწინებით. შემდეგ ადრე აშენებული პრედიკატი მიიღებს ფორმას:

ანალოგიურად, ასო A-სთვის დავუშვათ უჯრედების (4,1) და (4,3) გამოვლენა:


ბრინჯი. 2.3.ასოების "O" და "A" ერთობლივი სწავლა

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

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

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

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

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

ეს ნიშნავს, რომ აუცილებელია კარგად განსაზღვრული ლოგიკური ცვლადებიდან (0, 1, „დიახ – არა“, „თეთრი – შავი“ და ა.შ.) გადავიდეთ გაურკვევლობის, სანდოობის ან ინფორმაციის სხვა შეფასებებისკენ – რეალურ ცვლადებზე.

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

გადავიყვანოთ მიღებული გაწვრთნილი წრე ნერვულ ქსელად (ნახ. 2.4).

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

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


ბრინჯი. 2.4.ნერვული ქსელი ასოების "O" და "A" ამოცნობისთვის

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

თავდაპირველად ვპოულობთ

შემდეგ დავდებთ

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

ბრინჯი. 2.22. სიმბოლოს წარმოდგენა

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

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

მაგალითი. განსაზღვრეთ თარგი ასო A-სთვის (პროგრამა შაბლონი_A.m).

% შაბლონი ასო A-სთვის

პრპრობ;

i=1; ასო A-ს % რაოდენობა

v=ანბანი(:,i); A ასოს შესაბამისი % ვექტორი

შაბლონი=გადაფორმება(v, 5,7)";

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

ბრინჯი. 2.23. ჩამოყალიბდა ასო ნიმუში

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



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

განიხილეთ პროგრამა ლათინური ანბანის ასოების ამოცნობისთვის ჩარ_აღიარება.მ

% ლათინური ანბანის ამოცნობის პროგრამა

პრპრობ; % შეყვანისა და სამიზნე ვექტორების ფორმირება

ზომა (ანბანი);

ზომა (მიზნები);

% ქსელის შექმნა

მატარებელი (net,P,T);

% ტრენინგი ხმაურის არსებობისას

P = ;

მატარებელი (netn,P,T);

მატარებელი (netn,P,T);

% ქსელის ტესტი

ხმაური_გაბრაზება=0:0.05:0.5; % ხმაურის დონეების მასივი (ხმაურის სტანდარტული გადახრები

noiselevel=noise_rage-ისთვის

i=1: max_test-ისთვის

% ტესტი ქსელისთვის 1

% ტესტი ქსელისთვის 2

title ("ქსელის შეცდომა");

xlabel ("ხმაურის დონე");

ylabel ("შეცდომის პროცენტი");

ოპერატორი = პრპრობ; ქმნიან შეყვანის ვექტორების მასივს ანბანიზომა ანბანის სიმბოლოების შაბლონებით და სამიზნე ვექტორების მასივით სამიზნეები.

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

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

% ქსელური ტრენინგი ხმაურის არარსებობის შემთხვევაში

მატარებელი (net,P,T);

disp("ქსელის ტრენინგი ხმაურის არარსებობის შემთხვევაში დასრულებულია. დააჭირეთ Enter");

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

% ტრენინგი ხმაურის არსებობისას

netn = ბადე; გაწვრთნილი ქსელის % შეკავება

T = ;

P = ;

მატარებელი (netn,P,T);

disp("ქსელის სწავლება ხმაურის არსებობისას დასრულებულია. დააჭირეთ Enter");

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

% გადამზადება ხმაურის არარსებობის შემთხვევაში

მატარებელი (netn,P,T);

disp("ქსელის გადამზადება ხმაურის არარსებობის შემთხვევაში დასრულებულია. დააჭირეთ Enter");

ქსელი შემოწმდა ორი ქსელის სტრუქტურისთვის: ქსელი 1 მომზადებული იდეალურ ვექტორებზე და ქსელი 2 გაწვრთნილი ხმაურიან მიმდევრობებზე. ხმაური საშუალო მნიშვნელობით 0 და სტანდარტული გადახრები 0-დან 0.5-მდე 0.05 ნაბიჯით დაემატა შეყვანის ვექტორებს. თითოეული ხმაურის დონისთვის, თითოეული სიმბოლოსთვის ჩამოყალიბდა 10 ხმაურიანი ვექტორი და გამოითვალა ქსელის გამომავალი (სასურველია გაიზარდოს ხმაურიანი ვექტორების რაოდენობა, მაგრამ ეს მნიშვნელოვნად გაზრდის პროგრამის გაშვების დროს). ქსელი გაწვრთნილია იმისათვის, რომ შექმნას ერთი გამომავალი ვექტორის ერთადერთ ელემენტში, რომლის პოზიცია შეესაბამება ამოცნობილი ასოს რაოდენობას და შეავსოს ვექტორის დარჩენილი ნაწილი ნულებით. ქსელის გამომავალი არასოდეს წარმოქმნის გამომავალ ვექტორს, რომელიც შედგება ზუსტად 1-ისა და 0-ისგან. ამიტომ, ხმაურის პირობებში, გამომავალი ვექტორი მუშავდება ფუნქციით. კონკურენცია, რომელიც გარდაქმნის გამომავალ ვექტორს ისე, რომ ყველაზე დიდი გამოსავალი დაყენებულია 1-ზე და ყველა სხვა გამოსავალი დაყენებულია 0-ზე.

პროგრამის შესაბამისი ფრაგმენტი ასე გამოიყურება:

% შეასრულეთ ტესტი ხმაურის თითოეული დონისთვის

noiselevel=noise_rage-ისთვის

i=1: max_test-ისთვის

P=ანბანი+randn(35, 26)*ხმაურის დონე;

% ტესტი ქსელისთვის 1

შეცდომები1=შეცდომები1+ჯამობა(ჯამ(აბს(AA-T)))/2;

% ტესტი ქსელისთვის 2

შეცდომები2=შეცდომები2+ჯამობა(ჯამ(აბს(AAn-T)))/2;

% შეცდომის საშუალო მნიშვნელობები (26 სამიზნე ვექტორის მაქსიმალური_ტესტის თანმიმდევრობა)

ქსელი1=;

ქსელი2=;

ნაკვეთი(ხმაური_გაბრაზება, ქსელი1*100, ხმაური_გაბრაზება, ქსელი2*100);

title ("ქსელის შეცდომა");

xlabel ("ხმაურის დონე");

ylabel ("შეცდომის პროცენტი");

ლეგენდა ("იდეალური შეყვანის ვექტორები", "ხმაურიანი შეყვანის ვექტორები");

disp ("ტესტი დასრულებულია");

ამოცნობის შეცდომის გამოთვლისას, მაგალითად, errors1=errors1+sum(sum(abs(AA-T)))/2, მხედველობაში მიიღება, რომ არასწორი ამოცნობის შემთხვევაში გამომავალი ვექტორის ორი ელემენტი და სამიზნე ვექტორი. არ ემთხვევა, მაშასადამე, შეცდომის გამოთვლისას ხდება 2-ზე გაყოფა ჯამი ჯამი(abs(AA-T)) ითვლის შეუსაბამო ელემენტების რაოდენობას ერთი მაგალითისთვის. sum(sum(abs(AA-T))) ითვლის შეუსაბამო ელემენტების რაოდენობას ყველა მაგალითში.

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

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

შევამოწმოთ გაწვრთნილი ქსელის მუშაობა (გაწვრთნილი ქსელი უნდა იყოს წარმოდგენილი MATLAB-ის სამუშაო სივრცეში). პროგრამა აღიარება_ჯ.მწარმოქმნის ხმაურიან ვექტორს J ასოსთვის და ამოიცნობს ასოს. ფუნქცია რანდნიწარმოქმნის ფსევდო შემთხვევით რიცხვს, რომელიც განაწილებულია ნორმალური კანონის მიხედვით ნულოვანი მათემატიკური მოლოდინით და ერთეული სტანდარტული გადახრით. შემთხვევითი რიცხვი მათემატიკური მოლოდინით და სტანდარტული გადახრა მიღებული ფორმულით m+randn*d(პროგრამაში m=0, d=0.2).

noisyJ = ანბანი(:,10)+randn(35,1) * 0.2;

plotchar (ხმაურიანიJ);

disp("ხმაურიანი სიმბოლო. დააჭირეთ Enter");

A2 = netn(ხმაურიანიJ);

A2 = შეჯიბრი (A2);

ns = პოვნა (A2 == 1);

disp ("სიმბოლო აღიარებულია");

plotchar(ანბანი(:,ns));

პროგრამა გამოაქვს ამოცნობილი ასოს, ხმაურიანი ასო შაბლონის (ნახ. 2.25) და ამოცნობილი ასოს შაბლონის (2.26) რიცხვს.

ბრინჯი. 2.25. ხმაურიანი ასოების შაბლონი

ბრინჯი. 2.26. აღიარებული ასო ნიმუში

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

Დავალებები

1. გააკეთე ყველა მოყვანილი მაგალითი.

2. განიცადეთ სხვადასხვა ასოების ამოცნობა

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

ფუნქციის მიახლოება

მაიკლ ნილსონის წიგნები "ნერვული ქსელები და ღრმა სწავლება".


თარგმანი დავყავი რამდენიმე სტატიად ჰაბრეზე, რათა გაადვილებულიყო წაკითხვა:
ნაწილი 1) შესავალი ნერვულ ქსელებში
ნაწილი 2) ნაკვეთი და გრადიენტური დაღმართი
ნაწილი 3) ციფრული ამოცნობის ქსელის დანერგვა
ნაწილი 4) ცოტა ღრმა სწავლის შესახებ

შესავალი

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

მარტივი ინტუიცია - "9-ს აქვს მარყუჟი ზევით, ხოლო ვერტიკალური კუდი ქვედაზე" არც ისე ადვილია ალგორითმულად განხორციელება. ნერვული ქსელები იყენებენ მაგალითებს, გამოიტანენ რამდენიმე წესს და სწავლობენ მათგან. უფრო მეტიც, რაც უფრო მეტ მაგალითს ვაჩვენებთ ქსელს, მით უფრო მეტს სწავლობს ის ხელნაწერი რიცხვების შესახებ და, შესაბამისად, უფრო დიდი სიზუსტით კლასიფიცირებს მათ. ჩვენ დავწერთ პროგრამას კოდის 74 სტრიქონში, რომელიც აღმოაჩენს ხელნაწერ ციფრებს >99% სიზუსტით. ასე რომ წავიდეთ!

პერცეპტრონი

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



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



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



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


სწავლის პრობლემა

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



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

სიგმოიდური ნეირონი

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



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


ნერვული ქსელის არქიტექტურა

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


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


ასე რომ, დღეისთვის სულ ეს არის, შემდეგ სტატიაში მე ვისაუბრებ გრადიენტულ დაღმართზე და ჩვენი მომავალი ქსელის მომზადებაზე. Გმადლობთ ყურადღებისთვის!

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