AI in strojno učenje: Kako se jih vizualno naučiti

To vadnico sem ustvaril kot prispevek o umetni inteligenci.

Vsak nov predmet mora biti predstavljen v jeziku, ki ustreza učenčevi ravni znanja v tistem času. Zato še ne pričakujte nore matematične formule.

Zlasti si bomo ogledali strojno učenje aka poglobljeno učenje.

Globina nevronske mreže je določena s številom vhodnih slojev.

Algoritmi strojnega učenja tehtajo verjetnost določenega niza podatkov v skladu z določenim vzorcem.

Razmišljanje v obsegu

Nevroni v vaših možganih zagotovo niso digitalni, vendar spominjajo na binarno logiko, bodisi v stanju ali izklopu. Toda v programski opremi namesto tega uporabljamo vrsto vrednosti.

Rezultat obračunskega cikla v operaciji AI je ocena natančnosti v območju med 0,0 - 1,0. Konec koncev - izhodna vrednost nastane na podlagi tega, kako dobro se vhodni podatki ujemajo z določenim vzorcem, 1,0 pa se 100-odstotno ujema (to le redko dosežete, vendar je 0,95 - 0,97 dobro.)

Ta vzorec se običajno usposobi, preden lahko dosežemo pomembne rezultate. Več o tem nekoliko kasneje v tej vadnici. Najprej je tu ML najbolj osnovno.

Vse se začne z nevronskimi mrežami - programsko imitacijo fizične strukture nevronov v možganih.

Preprosta struktura nevronske mreže

Strojno učenje v svoji najosnovnejši obliki - zelo enostavna nevronska mreža.

V tem minimalističnem primeru je prikazana 1 vhodna plast, sestavljena iz 3 vhodnih vozlišč.

Običajno je na voljo več vnosov na plast. Vsak vhod je zbran iz neke vrste vira. Tako kot niz slikovnih pik s slike, ki se uporablja za prepoznavanje obrazov, na primer / ali kateri koli drugi podatki. Odvisno je od namena, kaj poskušate doseči z algoritmom AI.

Vhodne in izhodne vrednosti so plavajoče ptice. številke med 0,0 in 1,0.

Logistično je, da se med delovanjem omrežja podatki napajajo od leve proti desni. Vendar ... Včasih se širjenje hrbta uporablja za optimizacijo nevronske mreže. To je takrat, ko omrežje potujemo vzvratno. Toda za zdaj se nam ni treba ukvarjati s tem.

Vsota

Vsota več vhodnih vozlišč je le tisto, kar zveni. To je skupna vsota uteži za vsako vozlišče iz prejšnjega vhodnega sloja. Po izračunu vsote se ta prenese v funkcijo aktiviranja za obdelavo.

Funkcija aktiviranja

Aktivacijska funkcija pretvori vsoto vhodnih vrednosti v izhodno vrednost.

Toda kako natančno deluje?

Pozanimati se moramo o drugem vidiku strojnega učenja.

Se spomnite tistih matematičnih enačb iz srednje šole? Parabola - kdo?

Vir slik: https://pl.wikipedia.org/wiki/Plik:Catenary-pm.svg

Aktivacijska funkcija je dobesedno le matematična enačba. Za tiste z matematičnim ozadjem je to morda nekoliko lažje razumeti. Če ne - preberite naprej na vizualne diagrame in preostanek te vadnice, da bo začel toneti!

Razlog, da ne moremo uporabljati preprostih linearnih enačb, je posledica njihovih omejitev.

Ne zadostujejo za ustvarjanje uporabnih nevronskih mrež.

Nevronske mreže so zasnovane okoli bolj zapletenih enačb. Na primer, funkcija Sigmoid (znana tudi kot Logistic) je precej pogosta. (Ogledali si bomo nekaj različnih v spodnjem razdelku.)

Vsi dobijo obliko f (x) =… in nato krčijo vrednost x na način, ki je značilen za to funkcijo. Zakaj je to pomembno in zakaj imamo različne funkcije AF, bo postalo bolj očitno nekoliko kasneje.

Kaj se zgodi, ko dobimo rezultat?

AF posreduje izračunano vrednost na naslednje vozlišče in v bistvu kot delni vhod v eno od aktivacijskih funkcij v vozlišču v naslednjem vhodnem nizu.

Lahko si omislite, da jemljete več vhodov. In prenos izračunane vrednosti na naslednje vozlišče. To je prehod vrednosti med vhodnimi množicami.

Različne vrste funkcij za aktiviranje

Tako kot obstajajo različne vrste matematičnih enačb ... obstajajo različne vrste aktivacijskih funkcij.

Točno, kako zdrobijo številke, da dosežejo končno izhodno vrednost, je tesno povezano s predhodnim usposabljanjem obstoječega omrežja. Torej še ne smemo poglobiti teme, saj sistem na splošno ne temelji na tako preprostem, kot je izračunavanje in vračanje numeričnih rezultatov.

Kar pa lahko storimo - za poglobitev dosedanjega razumevanja - je ogled vizualne predstavitve vsake matematične enačbe za različnimi aktivacijskimi funkcijami!

To je vizualna vadnica. Osnovna ideja o tem, s čim se boste spopadali, je tabela klasičnega nabora matematičnih enačb, na katerih lahko temeljijo številne klasične aktivacijske funkcije.

Najosnovnejši AF je predstavljen s f (x) = x ali s funkcijo identitete.

Nekaj ​​osnovnih dobro poznanih matematičnih formul.

Obstaja več drugih. So pa nekoliko bolj zapleteni.

Te funkcije se v bistvu uporabljajo za določanje vrednosti vozlišča.

Kako natančno funkcija aktiviranja določa njeno vrednost?

No, to je tisto, kar je AF. Vnese vnos števila in ustvari povratno vrednost med 0,0–1,0 (včasih je razpon +/– neskončnost). Dejanske formule so opisane zgoraj. Te enačbe lahko ponovno napišete kot funkcije v Pythonu, JavaScriptu ali katerem koli drugem programskem jeziku.

Če se ukvarjate z matematiko in imate veliko časa na rokah, boste radi napisali te funkcije v kodi! Toda pogosto vam ni treba. In to zato, ker že obstoječi A.I. knjižnice skrbijo za vas. Tako se lahko osredotočite na gradnjo svoje Nevronske mreže in jo usposobite za določen namen.

Vsako vozlišče ima izračunano maso

Tako te funkcije aktiviranja ustvarijo vrednost.

Najpomembnejša stvar, ki jo v tem času opazimo - vsaka točka je teža.

Ta teža meri verjetnost, da je bil določen vzorec usklajen.

Možno je več slojev vhodnih nizov, kot je prikazano v naslednjem primeru.

Vozlišča v nekoliko bolj naprednem Nevronskem omrežju, povezana med seboj.

Vsako posamezno vozlišče komunicira z vsakim posameznim vozliščem v naslednjem vhodnem sloju, ki tvori to medsebojno povezano komunikacijsko avtocesto.

Število elementov v vsaki plasti je poljubno. Ni nujno, da je ista številka, kot je prikazano na zgornjem diagramu. Odvisno od problema, ki ga želite rešiti.

Potrebna bo nekaj intuicije in ustvarjalnosti, da določite število vhodnih vozlišč, ki jih želite uporabiti v vsaki plasti. Toda celo reševanje istega problema lahko dosežejo različne strukture nevronske mreže.

Ta postopek je zaradi nelinearne narave nejasen.

Skriti plasti

Pravkar smo razpravljali o tem, kako lahko nevronska mreža ima več vhodnih slojev. Lahko jih predstavljamo kot navpične vrstice vozlišč.

Vse notranje plasti med prvo vhodno vrstico in izhodnim vozliščem pogosto imenujemo skrite plasti. To je smiselno, ker tu poteka večina obdelave AIT obdelave. V bistvu je to skrivnostno polje AI.

Različne vrste vzorcev nevronskih mrež

Včasih se ML morda zdi veliko kot oblikovanje mrežnega vzorca, da se ujema z vzorci.

Nevronske mreže so različnih oblik in oblik.

Različne vrste struktur nevronskih mrež so bolj primerne za reševanje določenih vrst problemov, povezanih z njihovo strukturo.

V redu - Toda kako napišemo kodo?

To je bilo veliko teorije.

Toda kako ga dejansko implementiramo v kodo?

Za začetek lahko uporabite knjižnico, kot je Tensorflow.js.

Toda to ne bo prineslo nič dobrega, ker je še veliko toliko za pokriti.

V redu - Toda kako prinaša smiselne rezultate?

Do zdaj smo razpravljali o strukturi nevronske mreže.

Govorili smo o funkcijah za aktiviranje, vnos podatkov in skrite plasti.

Govorili smo tudi o utežih, ki so jih prenašale in nadgradile simulirane povezave.

Da bi nelinearni algoritem strojnega učenja ustvaril kakršen koli smiseln rezultat, ga je treba najprej usposobiti na podlagi že obstoječih podatkov.

Vedno začnete z izbiro podatkov za treniranje algoritma AI.

To je odvisno od problema, ki ga želite rešiti.

Če želite prepoznati številke na sliki, začnete s slikami števk.

Prepoznavanje številk iz posnetka zaslona

Klasični primer AI je, da nevronsko mrežo naučite prepoznati številke med 0 - 9. Na enak način, kot lahko trenirate strojni algoritem za prepoznavanje črk A-Z ali celo delov človeškega obraza - oči ali ust na fotografija predstavlja tudi določeno obliko ali vzorec, ki je skupna vsem ljudem, vendar se lahko zdi nekoliko drugačna.

Ne pozabite, da imamo tukaj vse vzorce.

Ko algoritem prepozna vzorec, se nikoli ne ujema 100%. Toda bližje kot smo 1.0 (100%) večja je verjetnost, da oblika, ki jo iščemo, predstavlja tisto, za kar smo bili usposobljeni.

Če bi uporabili standardno pisavo, nam sploh ne bi bilo treba delati AI. Vsako številko lahko preprosto skeniramo za natančen vzorec slikovnih pik. Ključna točka AI je prepoznati vzorec v nejasnosti.

Najprej moramo imeti neko vrsto medija, ki bo uporabljen kot del podatkov o vadbi. Vsako številko lahko predstavimo s sliko:

Iste številke, napisane večkrat, dajejo nekoliko drugačen vzorec. Slika, posneta iz predstavitvenega programa JavaScript AI, ki se nahaja na naslovu http://myselph.de/neuralNet.html

Vsako številko zlahka prepoznate po vidiku. Toda algoritem AI je treba usposobiti za prepoznavanje podobnih vzorcev, ker čeprav so podobni, še vedno niso 100% enaki.

Da bi to dosegli, lahko razvrstimo primarni vzorec na manjše bloke in izvedemo nekaj, kar imenujemo ekstrakcija funkcij.

Izvleček lastnosti

Za prepoznavanje števke algoritem uporablja sistem za ekstrakcijo lastnosti, ki razdeli skupne vzorce na sorodne elemente, pomembne za konstruiranje celotne števke / simbola / črke / itd.

Bistvo vzorca ostaja enako. Na primer 0 je večinoma krog - razčlenite ga lahko na manjše vzorce z lokom na vsaki od strani:

Če lahko samo algoritem usposobimo za prepoznavanje teh štirih edinstvenih vzorcev in preverimo njihovo prisotnost znotraj lokaliziranega območja slike, lahko izračunamo znesek gotovosti, za katerega lahko rečemo, da je lahko nič.

Isto velja za druge števke. Številka 1 je na primer ena navpična vrstica. Ali pa morda z manjšo črto pod rahlim kotom na vrhu.

Številka 2 je pol kroga na vrhu, diagonalna črta in vodoravna črta.

Število 3 lahko razdelimo na dva vzorca pol-loka.

Številko 4 lahko predstavljamo kot 3 vrstice: navpične, vodoravne in diagonalne.

…in tako naprej.

Kaj pa, če je to ročno napisana številka? Še vedno ima enake lastnosti te številke: enake robove, iste zanke.

Kaj pa, če se številka na posnetku omejitve hitrosti na ulici ukaže iz posrednega kota fotografije? Tako kot naša lastna vizija bi moral biti AI sposoben sprejeti nekatere vrste napak.

Je to pet, tri ali osem?

Preizkusite ta AI JavaScript demonstracijo, ki vam omogoča, da nekaj narišete na zaslon in vnaprej izurjen algoritem vam pove, kaj ste pravkar narisali.

Algoritem vam bo skušal zagotoviti najboljše ujemanje, tudi če tisto, kar narišete, v resnici ni število. Še vedno pa lahko opazite umetni intelekt pri delu, ki poskuša zagotoviti čim večji približek.

Kako izgleda usposobljeni komplet?

Tu je delček podatkov o vadbi iz algoritma. To je le seznam uteži, shranjenih v zelo dolgi matriki (na tisoče vrednosti):

// Uteži nevronske mreže (uteži na enoto in pristranskost enote) // vadba je bila izvedena v Matlabu z naborom podatkov MNIST.
// ti podatki so za enoto 784-200-10 z logistično nelinearnostjo
// v skriti in softmax v izhodni plasti. Vhod je a
// [-1; 1] siva slika na ravni, ozadje == 1, 28x28 slikovnih pik, linearna
// v vrstnem redu stolpca (tj. stolpec1 (:); stolpec2 (:); ...) i-ti izhod
// ker je največ, pomeni, da mreža misli, da vhod kodira
// (i-1) so spodnje uteži na testu pokazale 1,92% stopnjo napake
// podatkovni niz (9808/10000 števk pravilno prepoznanih).
pustimo 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.0234746, 0.0416268, 0.03150501, 0,00315077, 0,031505, 0,031505, 0,031505,,, 0,0315085,, 0,0315077, -0, 09315077, -0, 09315077, -0, 09315077, -0, 09315077, -0, 0,0031,, , 0,00692898, 0,0215552, 0,0540464, 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,035386, ...
/ * ... Na tisoče uteži sledi več ... * /

Celotna izvorna koda se ne bi ujemala s tem člankom. Toda nabori so ponavadi precej dolgi, čeprav se zdijo trivialni testi.

Slikanje vnosa slike v nevronsko mrežo

Ta del kode je bil vzet iz funkcije prepoznavanja (), napisane v JavaScript.

Vzeta je bila iz predstavitvene strani na http://myselph.de

Celotno izvorno kodo si lahko ogledate tukaj.

// za vizualizacijo / odpravljanje napak: pobarvajte vhod v nevronsko mrežo. če (document.getElementById ('predobdelava'). preveri == res)
{
    ctx.clearRect (0, 0, canvas.width, canvas.height);
    ctx.drawImage (copyCtx.canvas, 0, 0);
    za (var y = 0; y <28; y ++) {
        za (var x = 0; x <28; x ++) {
           var block = ctx.getImageData (x * 10, y * 10, 10, 10);
           var newVal = 255 * (0,5 - nnInput [x * 28 + y] / 2);
           za (var i = 0; i <4 * 10 * 10; i + = 4) {
               block.data [i] = newVal;
               block.data [i + 1] = newVal;
               block.data [i + 2] = newVal;
               blok.podatki [i + 3] = 255;
           }
       ctx.putImageData (blok, x * 10, y * 10);
       }
   }
}

Ta delni del kode "prilepi" vhod slike (risba proste roke), ki je bil prej razdeljen na 10 x 10 blokov, v katerih so shranjene povprečne vrednosti sive lestvice za to območje slike.

Nato ga bo preveril glede na usposobljeni niz in po krčenju zneskov / in povprečnih primerjav z njim bo vrnil verjetnost rezultata v smislu, kako tesno se vaše risanje platna HTML ujema z določeno številko.

Zaključne besede

Umetna inteligenca je velika tema. Vsak dan izhajajo različne vrste vzorcev in vaj za strojno učenje. Ta vadnica naj služi le kot uvod za nekoga, ki se šele začenja!

Sledite mi na Twitterju za brezplačne darilne knjige

Zgrabite svojo kopijo CSS Visual Dictionary, vključno diagrami vseh lastnosti CSS.

Na Twitterju Tidal Wave je račun, ki brezplačno podarja moje knjige.

Sledite mi na @ js_tut, kjer objavljam freemium JavaScript vadnice.