AI i strojno učenje: kako ih vizualno naučiti

Ovaj sam udžbenik stvorio kao početno djelo o umjetnoj inteligenciji.

Svaki novi predmet mora biti predstavljen na jeziku koji odgovara tadašnjoj razini učenika. Dakle, nemojte još očekivati ​​lude matematičke formule.

Konkretno ćemo pogledati Strojno učenje aka Deep Learning.

Dubina neuronske mreže određena je brojem ulaznih slojeva.

Algoritmi strojnog učenja vagaju vjerojatnost određenog skupa podataka prema određenom uzorku.

Razmišljanje u rasponima

Neuroni u vašem mozgu definitivno nisu digitalni, ali nalikuju binarnoj logici ili u stanju uključenosti ili isključenog. Ali mi u softveru koristimo raspon vrijednosti.

Rezultat ciklusa izračuna u AI operaciji je procjena preciznosti u rasponu između 0,0 - 1,0. U konačnici - izlazna vrijednost dobiva se na temelju toga koliko se ulazni podaci podudaraju s određenim uzorkom, pri čemu 1.0 odgovara 100% (rijetko to postignete, ali je 0,95 - 0,97 dobro.)

Ovaj se obrazac obično osposobljava prije nego što se mogu dobiti značajni rezultati. Više o tome malo kasnije u ovom udžbeniku. Prvo, evo ML-a najosnovnije.

Sve započinje s neuronskim mrežama - softverskom imitacijom fizičke strukture neurona u mozgu.

Jednostavna struktura neuronske mreže

Strojno učenje u svom najosnovnijem obliku - vrlo jednostavna neuronska mreža.

U ovom minimalističkom primjeru prikazan je 1 ulazni sloj koji se sastoji od 3 ulazna čvora.

Obično se daje više skupova ulaza po sloju. Svaki se unos prikuplja iz neke vrste izvora. Poput niza piksela sa slike koja se koristi za prepoznavanje lica, na primjer / ili bilo koji drugi podatak. To ovisi o svrsi onoga što pokušavate postići pomoću AI algoritma.

Ulazne i izlazne vrijednosti su plutajuće ptice. brojevi između 0,0 i 1,0.

Logično je da se tijekom rada mreže podaci unose s lijeva na desno. No, širenje leđa ponekad se koristi za optimizaciju neuronske mreže. To je kada putujemo mrežom obrnuto. Ali zasad se ne trebamo baviti time.

Iznos

Zbroj nekoliko ulaznih čvorova upravo je kako zvuči. To je ukupni zbroj utega iz svakog čvora iz prethodnog ulaznog sloja. Nakon izračuna zbroja, tada se prosljeđuje u Aktivacijsku funkciju za obradu.

Funkcija aktivacije

Aktivacijska funkcija pretvara zbroj ulaznih vrijednosti u izlaznu vrijednost.

Ali kako točno to radi?

Moramo pogledati još jedan aspekt strojnog učenja.

Sjećate se matematičkih jednadžbi iz srednje škole? Parabola - bilo tko?

Izvor slike: https://pl.wikipedia.org/wiki/Plik:Catenary-pm.svg

Aktivacijska funkcija je doslovno samo matematička jednadžba. Pa onima koji imaju matematičku pozadinu ovo bi moglo biti malo lakše shvatiti. Ako ne, pročitajte naprijed prema vizualnim dijagramima i ostatku ovog vodiča kako bi počeo upadati!

Razlog zbog kojeg ne možemo koristiti jednostavne linearne jednadžbe je zbog njihovih ograničenja.

Nisu dovoljni za stvaranje korisnih neuronskih mreža.

Neuronske mreže su dizajnirane oko složenijih jednadžbi. Na primjer, Sigmoid (poznata i kao Logistic) funkcija je prilično česta. (U nastavku ćemo pogledati nekoliko različitih odjeljaka.)

Svi oni poprimaju oblik f (x) =…, a zatim crtaju vrijednost x na način jedinstven za tu funkciju. Zašto je to važno i zašto imamo različite funkcije AF-a, postat će vidljivo malo kasnije.

Što se događa nakon što postignemo svoj rezultat?

AF prosljeđuje izračunatu vrijednost na sljedeći čvor i u biti kao djelomični ulaz u jednu od funkcija aktiviranja u čvoru u sljedećem ulaznom skupu.

Možete to smatrati kao uzimajući skup više ulaza. I prosljeđivanje izračunate vrijednosti na sljedeći čvor. To je pristup vrijednosti između ulaznih skupova.

Različite vrste funkcija aktiviranja

Baš kao što postoje različite vrste matematičkih jednadžbi ... postoje i različite vrste aktivacijskih funkcija.

Točno kako oni drobe brojeve da bi došli do krajnje izlazne vrijednosti usko je povezano s osposobljavanjem postojeće mreže prije. Dakle, ne možemo još duboko ući u temu, jer se općenito sustav ne temelji na nečem tako jednostavnom kao što su izračunavanje i vraćanje numeričkog rezultata.

Ali ono što možemo učiniti - da produbimo dosadašnje razumijevanje - je pogledati vizualni prikaz svake matematičke jednadžbe iza različitih funkcija aktivacije!

Ovo je vizualni vodič. A kako bi vam dali osnovnu ideju o tome s čime ćete se ovdje baviti je tablica klasičnog skupa matematičkih jednadžbi na kojima se mogu temeljiti mnoge klasične funkcije aktiviranja.

Najosnovniji AF predstavljen je f (x) = x ili funkcijom identiteta.

Nekoliko osnovnih poznatih matematičkih formula.

Postoji još nekoliko. Ali oni su malo složeniji.

Ove se funkcije u osnovi koriste za određivanje rezultirajuće vrijednosti čvora.

Koliko točno funkcija aktiviranja određuje njezinu vrijednost?

Eto, to je AF. Ulazi u obliku broja i stvara povratnu vrijednost između 0,0-1,0 (ponekad je raspon +/- beskonačnost). Stvarne formule su gore opisane. Ove jednadžbe možete ponovo napisati kao funkcije na Python-u, JavaScript-u ili bilo kojem drugom programskom jeziku.

Ako se bavite matematikom i imate puno vremena na rukama, rado ćete pisati ove funkcije u kodu! Ali često ne morate. I to zato što već postojeći A.I. knjižnice se brinu za to umjesto vas. Na ovaj način možete se usredotočiti na izgradnju svoje neuronske mreže i osposobljavanje je za specifične svrhe.

Svaki čvor nosi izračunatu težinu

Tako ove Aktivacijske funkcije proizvode vrijednost.

Najvažnije što u ovom trenutku primijetiti - svaka točka je težina.

Ova težina mjeri vjerojatnost podudaranja određenog uzorka.

Ali moguće su više slojeva ulaznih skupova, kao što je prikazano u sljedećem primjeru.

Čvorovi u nešto naprednijoj Neuronskoj mreži povezani međusobno.

Svaki pojedinačni čvor komunicira sa svakim čvorom u sljedećem ulaznom sloju, čineći ovaj umreženi komunikacijski magistralni put.

Broj stavki u svakom sloju je proizvoljan. Ne mora biti isti broj kao što je prikazano na gornjem dijagramu. Ovisno o tome koji problem pokušavate riješiti.

Trebat će vam malo intuicije i kreativnosti da biste odredili broj ulaznih čvorova koje želite koristiti u svakom sloju. Ali čak i rješenje istog problema može se postići različitim strukturama neuronske mreže.

Zbog nelinearne prirode izračuna ovaj je postupak dvosmislen.

Skriveni slojevi

Upravo smo raspravljali o tome kako Neuronska mreža može imati više ulaznih slojeva. Mogu se smatrati vertikalnim redovima čvorova.

Svi unutarnji slojevi između prvog ulaza i izlaznog čvora često se nazivaju skrivenim slojevima. To ima smisla, jer se tu obavlja većina zahuktalih AI obrada. To je zapravo AI misteriozno polje.

Različite vrste obrazaca neuronske mreže

Ponekad ML može izgledati puno poput izrade mrežnog uzorka prema obrascima.

Neuronske mreže dolaze u različitim oblicima i oblicima.

Različite vrste neuronskih mrežnih struktura pogodnije su za rješavanje pojedinih vrsta problema povezanih s njihovom strukturom.

OK - Ali kako napisati kod?

To je bilo puno teorije.

Ali kako to zapravo implementirati u kod?

Za početak možete koristiti biblioteku poput Tensorflow.js.

Ali, to neće imati nikakve koristi, jer ima još toliko toga da se pokrije.

U redu - ali kako to daje smislene rezultate?

Do sada smo razgovarali o strukturi neuronske mreže.

Razgovarali smo o aktivacijskim funkcijama, ulazima podataka i skrivenim slojevima.

Također smo razgovarali o utezima koji su simulirani i priješli na simulacije.

Da bi nelinearni algoritam strojnog učenja proizveo bilo kakav razuman rezultat, prvo ga treba osposobiti za skup prethodno postojećih podataka.

Uvijek započinjete s odabirom podataka za trening vašeg AI algoritma.

To ovisi o tome koji problem pokušavate riješiti.

Ako želite prepoznati brojeve na slici započinjete s slikama znamenki.

Prepoznavanje brojeva iz snimke zaslona

Klasični AI primjer je naučiti neuronsku mrežu da prepoznaje brojeve između 0 - 9. Na isti način kao što možete trenirati algoritam stroja da prepoznaje slova A-Z ili čak dijelove ljudskog lica - oko ili usta na fotografija također predstavlja određenu vrstu oblika ili obrasca koji su zajednički svim ljudima, ali mogu se pojaviti malo drugačije.

Sjetite se svega što ovdje imamo posla.

Kad algoritam prepozna model, nikad se ne podudara sa 100%. Ali što se više možemo približiti 1,0 (100%) to je vjerojatnije da oblik koji tražimo predstavlja ono što je obučeno prepoznati.

Da smo koristili standardni font, ne bismo morali raditi ni AI posao. Jednostavno bismo mogli skenirati svaku znamenku za točan uzorak piksela. No, ključna točka AI je prepoznati obrazac u nesvjesnosti.

Prvo moramo imati određenu vrstu medija koji će se koristiti kao dio podataka o treningu. Svaka znamenka može biti predstavljena slikom:

Iste znamenke napisane više puta daju nešto drugačiji uzorak. Slika preuzeta iz AI demo demonstracije JavaScript nalazi se na http://myselph.de/neuralNet.html

Svaku znamenku možete lako prepoznati po viđenju. Ali AI algoritam treba biti osposobljen za prepoznavanje sličnih obrazaca, iako su slični, oni još uvijek nisu 100% identični.

Da bismo to postigli možemo razbiti primarni uzorak na manje blokove i implementirati nešto što se naziva ekstrakcija značajki.

Izdvajanje značajki

Za prepoznavanje znamenke algoritam implementira sustav ekstrakcije značajki koji rastavlja uobičajene uzorke na slične dijelove koji su relevantni za izgradnju cjelovite znamenke / simbola / slova / itd.

Suština uzorka ostaje ista. Na primjer, 0 je uglavnom krug - možete ga raščlaniti na manje uzorke s lukom na svakoj od strana:

Ako samo budemo mogli trenirati naš algoritam kako prepoznati ova 4 jedinstvena obrasca i provjeriti njihovu prisutnost unutar lokaliziranog područja slike, možemo izračunati količinu sigurnosti s kojom se može reći da bi mogla biti jednaka nuli.

Isto je i za ostale znamenke. Na primjer, broj 1 je jedna okomita traka. Ili možda s manjom linijom pod malim kutom na vrhu.

Broj 2 je pola kruga na vrhu, dijagonalna linija i vodoravna linija.

Broj 3 može se raščlaniti na dva polu-luka.

Broj 4 može se zamisliti kao 3 retka: okomiti, vodoravni i dijagonalni.

…i tako dalje.

Što ako je to rukom napisana znamenka? I dalje ima ista svojstva te znamenke: iste rubove, iste petlje.

Što ako se znamenka pojavi na znak za ograničenje brzine na ulici s neizravnog kuta na fotografiji? Kao i naša vizija, AI bi trebao biti prilagođen za neku vrstu pojma pogreške.

Je li ovo pet, tri ili osam?

Isprobajte ovaj AI JavaScript demo prikaz koji vam omogućuje da crtate nešto na ekranu, a unaprijed obučeni algoritam govori o tome što ste upravo nacrtali.

Algoritam će vam pokušati dati najbolje podudaranje čak i ako ono što nacrtate nije zaista broj. Ipak možete vidjeti umjetni intelekt na djelu pokušavajući mu pružiti najbližu aproksimaciju.

Kako izgleda trenirani set?

Ovdje je isječak podataka s treninga iz algoritma. Ovo je samo popis utega koji je pohranjen u vrlo dugom nizu (tisuće vrijednosti):

// Težine neuronske mreže (utezi jedinica i jednostruka odstupanja) // trening je odrađen u Matlabu s podacima MNIST.
// ovi se podaci odnose na jedinicu 784-200-10, s logističkom nelinearnošću
// u skrivenom i softmaxu u izlaznom sloju. Ulaz je a
// [-1; 1] siva slika na razini, pozadina == 1, linearna piksela 28x28 piksela
// u redoslijedu stupaca (tj. stupac1 (:); stupac2 (:); ...) i-ti izlaz
// biti maksimalno znači da mreža misli da ulaz šifrira
// (i-1) dolje ponderirani pokazali su 1,92% stopu pogreške na testu
// skup podataka (9808/10000 znamenki se ispravno prepoznaju).
neka 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,0315077, -0,005, 511, 590, 590, 090, 301, 090, 3031,, , 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, ...
/ * ... Tisuće utega teže ih prate ... * /

Cjelokupni izvorni kôd ne bi se uklapao u ovaj članak. Ali setovi su obično prilično dugački čak i za ono što se čini trivijalnim testovima.

Slikanje ulaza slike u neuronsku mrežu

Ovaj malo koda preuzet je iz funkcije prepoznavanja () napisane u JavaScript-u.

Preuzeto je iz demonstracije na http://myselph.de

Cijeli izvorni kod možete provjeriti ovdje.

// za vizualizaciju / uklanjanje pogrešaka: obojite ulaz u neuronsku mrežu. if (document.getElementById ('predobrada'). označeno == istina)
{
    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) {
               blok.data [i] = newVal;
               blok.data [i + 1] = newVal;
               blok.data [i + 2] = newVal;
               blok.data [i + 3] = 255;
           }
       ctx.putImageData (blok, x * 10, y * 10);
       }
   }
}

Ovaj djelomični dio koda "zalijepi" ulaz slike (crtež slobodnom rukom) koji je prethodno podijeljen u 10 x 10 blokova pohranjujući prosječne vrijednosti sive veličine za to područje slike.

Potom će ga provjeriti u odnosu na obučeni skup i nakon što je suzbio / zbrojio prosječne usporedbe s njim vratit će vjerojatnost rezultata s obzirom na to koliko usko vaše crtanje HTML-a odgovara određenoj cifri.

Završne riječi

Umjetna inteligencija ogromna je tema. Postoje različite vrste obrazaca i tutorijala strojnog učenja koji izlaze svaki dan. Ovaj će udžbenik služiti samo kao uvod za nekoga tko tek počinje!

Slijedite me na Twitteru za besplatno davanje knjiga

Uzmite svoju kopiju CSS vizualnog rječnika, uklj. dijagrami svih CSS svojstava.

Na Twitteru Tidal Wave račun je koji besplatno daruje moje knjige.

Slijedite me na @ js_tut gdje objavljujem freemium JavaScript tutorijale.