AI və Maşın Təlimi: Onları Vizual olaraq necə öyrənmək olar

Bu təlimatı süni intellektə giriş kimi yaratdım.

Hər yeni fənn öyrənənin bilik səviyyəsinə uyğun bir dildə təklif olunmalıdır. Buna görə hələ dəli matematik formullarını gözləməyin.

Xüsusilə, dərin öyrənmə olaraq da bilinən maşın öyrənməyə nəzər salırıq.

Sinir şəbəkəsinin dərinliyi giriş səviyyələrinin sayı ilə müəyyən edilir.

Maşın öyrənmə alqoritmləri müəyyən bir məlumat dəsti ehtimalını müəyyən bir nümunəyə qarşı çəkir.

Sahələr baxımından düşünün

Beyninizdəki neyronlar qətiliklə rəqəmsal deyil, ancaq ikili məntiqə açıq və ya qapalı bir vəziyyətə bənzəyirlər. Proqramda bunun əvəzinə bir sıra dəyərlərdən istifadə edirik.

AI əməliyyatında bir hesablama dövrünün nəticəsi 0,0 ilə 1,0 aralığında bir dəqiq qiymətləndirmədir. Nəticədə, giriş məlumatlarının verilmiş bir nümunəyə nə dərəcədə uyğun gəldiyinə əsasən bir çıxış dəyəri yaradılır, burada 1.0% 100 ilə uyğun gəlir (bunu nadir hallarda alırsınız, ancaq 0.95-0.97 yaxşıdır).

Bu model ümumiyyətlə hər hansı bir mənalı nəticə əldə olunmadan əvvəl öyrədilir. Daha sonra bu təlimatda. Ancaq əvvəlcə ML ən əsas formada.

Hər şey sinir şəbəkələrindən başlayır - beyindəki neyronların fiziki quruluşunun proqram təqlidi.

Sadə sinir şəbəkəsi quruluşu

Ən sadə formada maşın öyrənmə - çox sadə bir sinir şəbəkəsi.

Bu minimalist nümunədə 3 giriş qovşağından ibarət 1 giriş qatı göstərilir.

Bir qayda olaraq, hər səviyyə üçün bir neçə giriş verilir. Hər giriş bir mənbə növü ilə əhatə olunur. Məsələn / və ya digər məlumatlar üçün üz tanıma üçün istifadə edilən bir görüntüdən bir sıra piksel kimi. Bu, süni zəka alqoritminizlə əldə etmək istədiyiniz hədəfə bağlıdır.

Həm giriş, həm də çıxış dəyərləri üzəndir. 0.0 və 1.0 arasındakı rəqəmlər.

Şəbəkə işində məlumatlar lojistik olaraq soldan sağa verilir. Lakin ... Retransmission bəzən sinir şəbəkəsini optimallaşdırmaq üçün istifadə olunur. Sonra şəbəkədən geriyə doğru hərəkət edirik. Ancaq indi bundan narahat olmağımız lazım deyil.

ümumi

Çoxsaylı giriş qovşaqlarının cəmi tam olaraq necə səslənsə, elədir. Əvvəlki giriş səviyyəsindən hər bir düyünün ağırlıqlarının ümumi cəmidir. Cəmi hesablandıqdan sonra işlənmə üçün aktivasiya funksiyasına köçürülür.

Aktivləşdirmə funksiyası

Aktivləşdirmə funksiyası giriş dəyərlərinin cəmini çıxış dəyərinə çevirir.

Bəs tam olaraq necə işləyir?

Maşın öyrənməsinin başqa bir aspektinə baxmalıyıq.

Liseydən riyaziyyat tənliklərini xatırlayırsınız? Məsəllər - hər kəs?

Şəkil mənbəyi: https://pl.wikipedia.org/wiki/Plik:Catenary-pm.svg

Aktivləşdirmə funksiyası sözün əsl mənasında yalnız bir riyaziyyat tənliyidir. Riyaziyyat keçmişi olanlar üçün bunu anlamaq biraz daha asan ola bilər. Əgər yoxsa - vizual qrafikləri və bu təlimatın qalan hissəsini oxumağa davam edin, beləliklə yavaşca batır!

Sadə xətti tənliklərdən istifadə edə bilməməyimizin səbəbi məhdudiyyətlərdir.

Faydalı sinir şəbəkələri qurmaq üçün kifayət deyil.

Sinir şəbəkələri daha mürəkkəb tənliklərə əsaslanır. Məsələn, sigmoid funksiyası (lojistik funksiyası olaraq da bilinir) geniş istifadə olunur. (Aşağıdakı hissədə bir neçə fərqli olanı nəzərdən keçirəcəyik.)

Hamısı f (x) = ... şəklini alır və sonra x-dəyəri həmin funksiyaya xas olan şəkildə parçalayırlar. Bunun niyə vacib olduğu və fərqli AF funksiyalarımızın bir az sonra göstəriləcəkdir.

Nəticəmiz varsa?

AF hesablanan dəyəri növbəti düyünə ötürür və mahiyyət etibarilə növbəti giriş dəstindəki bir düyündəki aktivasiya funksiyalarından birinə qismən giriş kimi.

Bunu birdən çox giriş etmək kimi düşünə bilərsiniz. Və hesablanmış dəyəri növbəti düyünə ötürün. Giriş cümlələri arasındakı dəyər qapısıdır.

Fərqli aktivasiya funksiyaları

Fərqli riyaziyyat tənlikləri olduğu kimi, müxtəlif növ aktivasiya funksiyaları da mövcuddur.

Son çıxış dəyərinə çatmaq üçün rəqəmləri necə dəqiq bir şəkildə pozduğunuz, mövcud bir şəbəkənin təhsili ilə sıx bağlıdır. Beləliklə, sistem ümumilikdə ədədi bir nəticəni hesablamaq və qaytarmaq kimi bir şeyə əsaslanmadığı üçün mövzunu bu qədər dərindən araşdıra bilmərik.

Ancaq indiyə qədər anlayışımızı dərinləşdirmək üçün edə biləcəyimiz şey, müxtəlif aktivasiya funksiyalarının arxasındakı hər bir riyazi tənliyin əyani şəkildə göstərilməsidir!

Bu əyani təlimdir. Burada nə ilə məşğul olacağınıza dair əsas fikir vermək üçün bir çox klassik aktivasiya funksiyasının əsas götürülə biləcəyi klassik riyaziyyat tənliklərinin cədvəli var.

Ən əsas AF f (x) = x və ya şəxsiyyət funksiyası ilə təmsil olunur.

Bəzi əsas tanınmış riyaziyyat formulları.

Digər bir neçəsi var. Ancaq bir az daha mürəkkəbdirlər.

Əslində, bu funksiyalar ortaya çıxan düyün dəyərini təyin etmək üçün istifadə olunur.

Aktivləşdirmə funksiyası onun dəyərini necə dəqiq müəyyənləşdirir?

Yaxşı bir AF. Ədəd şəklində giriş alır və 0.0 ilə 1.0 arasında bir dönüş dəyəri (bəzən +/- sonsuzluq aralığı) meydana gətirir. Həqiqi düsturlar yuxarıda təsvir edilmişdir. Bu tənlikləri Python, JavaScript və ya başqa bir proqramlaşdırma dilində funksiya olaraq yenidən yaza bilərsiniz.

Riyaziyyatla məşğul olsanız və çox vaxtınız varsa, bu funksiyaları kodla yazmağı sevəcəksiniz! Ancaq çox vaxt buna ehtiyac yoxdur. Əvvəlcədən mövcud AI kitabxanalarının bunu sizin üçün etdiyinə görə. Beləliklə, sinir şəbəkənizi qurmağa və müəyyən bir məqsəd üçün öyrətməyə yönəldə bilərsiniz.

Hər düyün hesablanmış bir ağırlığa malikdir

Beləliklə, bu aktivasiya funksiyaları bir dəyər yaradır.

Bu nöqtədə ən vacib şey - hər nöqtə bir ağırlıqdır.

Bu çəki müəyyən bir nümunənin tapılma ehtimalını ölçür.

Bununla birlikdə, növbəti nümunədə göstərildiyi kimi çox səviyyəli giriş cümlələri mümkündür.

Bir-birinə bağlı olan bir az daha inkişaf etmiş bir sinir şəbəkəsindəki qovşaqlar.

Hər bir fərdi qovşaq bu geniş rabitə magistralını təşkil edən növbəti giriş qatındakı hər bir fərdi qovşaq ilə əlaqə qurur.

Hər səviyyədəki elementlərin sayı ixtiyari olur. Yuxarıdakı şəkildəki ilə eyni sayda olması lazım deyil. Hansı problemi həll etmək istədiyindən asılı olaraq.

Hər səviyyədə istifadə etmək istədiyiniz giriş qovşaqlarının sayını müəyyən etmək üçün bir az nəzakət və yaradıcılıq lazımdır. Ancaq eyni problemin həllinə fərqli sinir şəbəkə quruluşları vasitəsi ilə də nail olmaq olar.

Hesablamaların qeyri-xətti olması səbəbindən bu proses birmənalı deyil.

Gizli səviyyələr

Yalnız bir sinir şəbəkəsinin çox qatlı girişə sahib olmasını müzakirə etdik. Bunları şaquli sıra qovşaqları kimi düşünmək olar.

İlk giriş xətti ilə çıxış düyünü arasındakı bütün daxili təbəqələrə tez-tez gizli təbəqələr deyilir. Bunun mənası var, çünki süni zəkanın işlənməsi işinin çox hissəsi burada aparılır. Əsasən, bu AI sirr qutusudur.

Fərqli sinir şəbəkəsi nümunələri

Bəzi hallarda, ML nümunələrə uyğun bir şəbəkə nümunəsi yaratmağa bənzəyir.

Sinir şəbəkələri müxtəlif forma və formalarda olur.

Fərqli sinir şəbəkəsi quruluşları, strukturları ilə əlaqəli müəyyən problemləri həll etmək qabiliyyətinə sahibdirlər.

OK - amma kodu necə yazırıq?

Bu bir çox nəzəriyyə idi.

Bəs onu şifrə necə çevirə bilərik?

Başlamaq üçün Tensorflow.js kimi bir kitabxanadan istifadə edə bilərsiniz.

Ancaq bunun faydası yoxdur, çünki hesabat vermək üçün hələ çox şey var.

OK - amma mənalı nəticələrə necə gətirib çıxarır?

İndiyə qədər bir sinir şəbəkəsinin quruluşunu müzakirə etdik.

Aktivləşdirmə funksiyaları, məlumat girişi və gizli qatlar haqqında danışdıq.

Süni əlaqələrə köçürülən və ötürülən ağırlıqlardan da danışdıq.

Qeyri-xətti bir maşın öyrənmə alqoritminin mənalı bir nəticə əldə etməsi üçün əvvəlcə mövcud olan məlumatlar dəsti üzərində öyrədilməlidir.

Hər zaman AI alqoritminizi öyrətmək üçün məlumat seçimi ilə başlayırsınız.

Hansı problemi həll etmək istədiyindən asılıdır.

Bir şəkildəki nömrələri tanımaq istəyirsinizsə, rəqəmlərin şəkillərindən başlayın.

Ekran görüntüsünü istifadə edərək nömrələri tanıyın

Klassik AI nümunəsi bir sinir şəbəkəsinə 0 ilə 9 arasındakı rəqəmləri tanımağı öyrətməkdir. Fotoşəkildə bir göz və ya bir ağızdan AZ və ya hətta insan üzünün hərflərini tanımaq üçün bir maşın alqoritmini necə öyrədə biləcəyiniz kimi, fotoşəkil də bütün insanlar üçün ümumi, lakin bir qədər fərqli olan müəyyən bir forma və ya naxış növünü təmsil edir. kimi görünə bilər.

Unutmayın, burada yalnız nümunələrlə məşğul oluruq.

Alqoritm bir naxışı aşkar etdikdə heç vaxt 100% uyğun gəlmir. Lakin 1.0-a (100%) yaxınlaşdıqda, axtardığımız formanın tanıdığını əks etdirməsi ehtimalı bir o qədər yüksəkdir.

Standart bir şrift istifadə etsəydik, süni zəka işi də etməli olmazdıq. Hər rəqəmi dəqiq bir piksel nümunəsi üçün axtara bilərik. Bununla birlikdə, AI-nin əsas nöqtəsi qaranlıqda bir nümunəni tanımaqdır.

Birincisi, təlim məlumatları olaraq istifadə edilə bilən bir növ mühitə ehtiyacımız var. Hər bir rəqəm bir şəkil ilə təmsil edilə bilər:

Dəfələrlə yazılmış eyni rəqəmlər bir az fərqli bir nümunə yaradır. Http://myselph.de/neuralNet.html saytındakı JavaScript AI demosundan şəkil

Hər rəqəmi görmə ilə asanlıqla tanıya bilərsiniz. Bununla birlikdə, bir oxşar zəka alqoritmi oxşar nümunələri tanımaq üçün öyrədilməlidir, çünki oxşar olduqları halda, onlar 100% eyni deyillər.

Bunu etmək üçün, əsas nümunəni daha kiçik bloklara ayıra və xüsusiyyət çıxarış adlı bir şey tətbiq edə bilərik.

Xüsusiyyət çıxarılması

Rəqəmin müəyyənləşdirilməsi üçün alqoritm ümumi naxışların tam rəqəm / simvol / hərf / s konstruksiyası ilə əlaqəli həmkarlarına bölünən bir xüsusiyyət çıxarma sistemini həyata keçirir.

Bir naxışın mahiyyəti eyni qalır. Məsələn, 0 əsasən bir dairədir - hər tərəfində bir yay ilə daha kiçik nümunələrə bölmək olar:

Yalnız bu 4 bənzərsiz nümunəni tanımaq üçün alqoritmimizi öyrədə bilsək və bir görüntünün lokallaşdırılmış yerində mövcudluğunu yoxlaya bilsək, bunun sıfır ola biləcəyini söyləmək üçün etibar səviyyəsini hesablaya bilərik.

Bu, digər rəqəmlərə də aiddir. Məsələn, 1 rəqəmi tək bir şaquli çubuqdur. Və ya bəlkə də üstündə bir az açı ilə daha kiçik bir xətt var.

2 rəqəmi yuxarıdakı yarım dairə, diaqonal bir xətt və üfüqi bir xəttdir.

3 nömrəsi iki yarımdairəvi naxışlara bölünə bilər.

4 rəqəmi 3 xətt kimi qəbul edilə bilər: şaquli, üfüqi və çarpaz.

... və s.

Əlyazma rəqəmdirsə nə olar? Hələ də bu rəqəmin eyni xüsusiyyətlərinə malikdir: eyni kənarları, eyni döngələri.

Rəqəm, yolda dolayı bir açıdan bir fotoşəkildə göstərilən sürət həddində göstərilirsə nə olar? Öz görmə qabiliyyətimizə bənzər AI bir növ səhv konsepsiyasını nəzərə ala bilməlidir.

Bu beş, üç, ya səkkizdir?

Ekranda bir şey çəkəcək və əvvəlcədən hazırlanmış alqoritmin yeni çəkdiyiniz şeyi sizə izah etməsinə imkan verəcək bu AI JavaScript demosuna baxın.

Alqoritm, çəkdiyiniz şey əslində bir rəqəm olmasa da, ən yaxşı uyğunluğu əldə etməyə çalışır. Buna baxmayaraq, işdə mümkün olan ən yaxın təxmini əldə etməyə çalışan süni zəkanı müşahidə etmək olar.

Təlim edilmiş dəst necə görünür?

Alqoritmin təlim məlumatlarından bir hissə. Bu, yalnız çox uzun bir massivdə saxlanılan ağırlıqların siyahısıdır (minlərlə dəyər):

// Sinir şəbəkəsinin ağırlıqları (vahid-vahid-ağırlıqlar və vahid-təhriflər) // MNIST məlumat dəsti ilə Matlabda öyrədilmişdir. // Bu məlumatlar məntiqi xətti olmayan bir 784-200-10 vahidinə // gizli və softmax-da çıxış səviyyəsindədir. Giriş bir // [-1; 1] boz rəngli şəkil, fon == 1, 28x28 piksel xətti düzəldilmişdir // sütun sırası ilə (yəni Sütun1 (:); Sütun2 (:); ...) i-ci çıxış // maksimum olmaq şəbəkənin düşündüyü deməkdir giriş şifrələnmişdir // (i-1) Aşağıdakı çəkilər testdə // məlumat dəstində% 1.92 bir səhv dərəcəsi göstərmişdir (9808/10000 rəqəm düzgün tanınmışdır).
qoyun w12 = [[-0.00718674, 0.00941102, -0.0310175, -0.00121102, -0.00978546, -4.65943e-05, 0.0150367, 0.0101846, 0.0482145, 0.00291535, -0.00172736, 0.03101034746, 0.0410, 0.0410, 0.0468, 0.0410, 0.0468, 0.0416, 0.0468, 0.0416, 0.0468, 0.0416, 0.0416, 0.0468, 0.0416, 0.0468, 0.0416, 0.0416, 0.0416, 0.0416, 0.0468, 0.0410. 0.0393167, 0.0668207, 0.0232665, 0.031598, 0.0143047, 0.0156885, -0.0269579, -0.00777022, 0.0397823, -0.00825727, 0.0212889, -0.00755215, 0.035389
/ * ... Minlərlə çəki izləyəcək ... * /

Tam mənbə kodu bu məqaləyə sığmazdı. Ancaq dəstlər, ümumiyyətlə, çox az görünən testlər üçün də olduqca uzundur.

Sinir şəbəkəsinə görüntü girişinin rənglənməsi

Bu kod kodu JavaScript-də yazılmış detect () funksiyasından gəlir.

Http://myselph.de saytındakı demodan götürülmüşdür

Bütün mənbə kodlarını burada nəzərdən keçirə bilərsiniz.

// Vizuallaşdırma / ayıklama üçün: Girişi sinir şəbəkəsində çəkin. əgər (document.getElementById ('əvvəlcədən işləmə'). yoxlanıldı == doğru) {ctx.clearRect (0, 0, canvas.width, canvas.height); ctx.drawImage (copyCtx.canvas, 0, 0); üçün (var y = 0; y <28; y ++) {üçün (var x = 0; x <28; x ++) {var blok = ctx.getImageData (x * 10, y * 10, 10, 10 ); var newVal = 255 * (0.5 - nnInput [x * 28 + y] / 2); üçün (var i = 0; i <4 * 10 * 10; i + = 4) {block.data [i] = newVal; block.data [i + 1] = newVal; block.data [i + 2] = newVal; block.data [i + 3] = 255; } ctx.putImageData (blok, x * 10, y * 10); }}}

Kodun bu hissəsi əvvəllər görüntünün həmin sahəsi üçün orta rəng ölçüsü dəyərlərini saxlayan 10 x 10 bloklara bölünmüş şəkil girişini (sərbəst bir rəsm) əlavə edir.

Sonra öyrədilmiş cümlə ilə yoxlanılır və cəmlər / və ortalama müqayisələr hesablandıqdan sonra nəticənin ehtimalı, HTML iş panelinizin müəyyən bir rəqəmlə nə dərəcədə uyğun olduğu geri qaytarılır.

son sözlər

Süni intellekt böyük bir mövzudur. Hər gün ortaya çıxan müxtəlif növ maşın öyrənmə nümunələri və dərsləri var. Bu təlimat yalnız yeni başlayanlar üçün giriş rolunu oynamalıdır!

Pulsuz kitab hədiyyələri üçün məni Twitter-də izləyin

Bütün CSS xüsusiyyətlərinin diaqramları daxil olmaqla CSS Vizual Lüğətinin surətini alın.

Twitter-də idal Tidal Wave kitablarımı pulsuz olaraq verə biləcəyim hesabdır.

Freemium üçün JavaScript dərsliklərini göndərdiyim me‍ @ js_tut məni izləyin.