Perceptron: Keinotekoisen hermoverkon rakennuspalikka

Lähdesolmu: 1216283

Jos olet koneoppimisen ja tekoälyn innostaja, olet varmasti törmännyt sanaan perceptron. Perceptron opetetaan monien syväoppimiskurssien ensimmäisessä luvussa. Joten mikä se tarkalleen on? Mikä on inspiraatio sen takana? Miten se tarkalleen ratkaisee luokitteluongelman? Tässä artikkelissa aiomme aloittaa perceptronin takana olevasta biologisesta inspiraatiosta ja sitten syventyä sen matemaattisiin teknisiin piirteisiin ja lopuksi rakentaa binäärinen luokitin tyhjästä käyttämällä perceptroniyksikköä.

Hermoverkkojen biologinen inspiraatio

Hermosolu (hermosolu) on hermoston perusrakennusaine. Ihmisen aivot koostuvat miljardeista neuroneista, jotka ovat yhteydessä toisiinsa. He ovat vastuussa signaalien vastaanottamisesta ja lähettämisestä aivoista. Kuten alla olevasta kaaviosta nähdään, tyypillinen neuroni koostuu kolmesta pääosasta – dendriiteistä, aksonista ja solurungosta tai somasta. Dendriitit ovat puumaisia ​​oksia, jotka ovat peräisin solurungosta. He saavat tietoa muilta hermosoluilta. Soma on neuronin ydin. Se vastaa dendriiteiltä saatujen tietojen käsittelystä. Axon on kuin kaapeli, jonka kautta neuronit lähettävät tietoa. Loppua kohden aksoni hajoaa moniin haaroihin, jotka muodostavat yhteyden muihin hermosoluihin dendriittiensä kautta. The aksonin ja muiden hermosolujen dendriittien välistä yhteyttä kutsutaan synapseiksi.

1: Biologinen neuroni vs. keinotekoinen hermoverkko

Image Source: Willems, K. (2017, 2. toukokuuta). Keras-opetusohjelma: Syväoppiminen Pythonissa.

Koska ANN on inspiroitunut aivojen toiminnasta, katsotaan kuinka aivot toimivat. Aivot koostuvat miljardien neuronien verkostosta. Ne kommunikoivat sähköisten ja kemiallisten signaalien avulla synapsin kautta, jossa informaatio siirtyy yhdestä hermosolusta muihin hermosoluihin. Siirtoprosessi sisältää sähköisen impulssin, jota kutsutaan "toimintapotentiaaliksi". Siirrettävää tietoa varten tulosignaalien (impulssin) tulee olla riittävän vahvoja ylittääkseen tietyn rajaesteen, jolloin vain hermosolu aktivoituu ja lähettää signaalin eteenpäin (lähtö).

Amerikkalainen tiedemies Franck Rosenblatt keksi neuronin biologisen toiminnan inspiroima perceptronin konseptin Cornellin ilmailulaboratoriossa vuonna 1957.

  • Neuroni vastaanottaa tietoa muilta hermosoluilta vaihtelevan voimakkuuden sähköimpulsseina.
  • Neuron integroi kaikki impulssit, jotka se vastaanottaa muilta neuroneilta.
  • Jos tuloksena saatu summa on suurempi kuin tietty kynnysarvo, hermosolu "sytyttää", laukaisee toimintapotentiaalin, joka välittyy muille yhdistettyihin hermosoluihin.

Perceptronin pääkomponentit

Rosenblatin perceptroni on pohjimmiltaan binäärinen luokitin. Perceptron koostuu kolmesta pääosasta:

  • Syöttösolmut tai syöttökerros: Syöttökerros vie alkutiedot järjestelmään jatkokäsittelyä varten. Jokainen tulosolmu liittyy numeeriseen arvoon. Se voi ottaa minkä tahansa todellisen arvon.
  • Painot ja poikkeama: Painoparametrit edustavat yksiköiden välisen yhteyden vahvuutta. Mitä suurempi on paino, sitä voimakkaampi on siihen liittyvän syöttöhermosolun vaikutus päättämään ulostulosta. Bias toistaa samaa kuin leikkauspiste lineaarisessa yhtälössä.
  • Aktivointitoiminto: Aktivointitoiminto määrittää, laukeaako hermosolu vai ei. Aktivointitoiminto on yksinkertaisimmillaan askeltoiminto, mutta skenaarion mukaan voidaan käyttää erilaisia ​​aktivointitoimintoja.

Näemme niistä lisää seuraavassa osiossa.

Perceptronin toiminta

Ensimmäisessä vaiheessa kaikki syötetyt arvot kerrotaan vastaavilla painoilla ja lasketaan yhteen. Saatua tulosta kutsutaan painotetuksi summaksi ∑wi*xi, tai toisin sanottu,  x1*w1 + x2*w2 +…wn*xn. Tämä summa antaa asianmukaisen esityksen syötteistä niiden tärkeyden perusteella. Lisäksi puolueellinen termi b lisätään tähän summaan ∑wi*xi + b. Bias toimii toisena malliparametrina (painojen lisäksi), jota voidaan säätää parantamaan mallin suorituskykyä.

Toisessa vaiheessa aktivointitoiminto f sovelletaan yllä olevaan summaan ∑wi*xi + b saadaksesi tulos Y = f(∑wi*xi + b). Skenaariosta ja käytetystä aktivointitoiminnosta riippuen, ulostulo on joko binaarinen {1, 0} tai jatkuva arvo. 

Perceptronin toiminta

(Usein molemmat vaiheet esitetään yhtenä vaiheena monikerroksisissa perceptroneissa, tässä olen näyttänyt ne kahtena eri vaiheena ymmärtääkseni paremmin)

Aktivointitoiminnot

Biologinen neuroni laukeaa vain, kun tietty kynnys ylittyy. Samoin keinotekoinen neuroni laukaisee myös vain, kun tulojen summa (painotettu summa) ylittää tietyn kynnysarvon, oletetaan 0. Intuitiivisesti voimme ajatella sääntöpohjaista lähestymistapaa näin:

Jos ∑wi*xi + b > 0: lähtö = 1 muuten: lähtö = 0

Sen kaavio tulee olemaan jotain tällaista:

Aktivointitoiminnot

Tämä on itse asiassa Unit Step (Threshold) -aktivointitoiminto, jota Rosenblatt käytti alun perin. Mutta kuten näet, tämä funktio on epäjatkuva 0:ssa, joten se aiheuttaa ongelmia matemaattisissa laskelmissa. Tasaisempi versio yllä olevasta funktiosta on sigmoidifunktio. Se tulostaa välillä 0 ja 1. Toinen on hyperbolinen tangentti(tanh) -funktio, joka tuottaa tulosteen välillä -1 ja 1. Sekä sigmoid- että tanh-funktiot kärsivät katoavien gradienttien ongelmista. Nykyään ReLU ja Leaky ReLU ovat suosituimpia aktivointitoimintoja. Ne ovat suhteellisen vakaita syvien verkkojen yli.

Perceptron binäärisenä luokittelijana

Toistaiseksi olemme nähneet perceptronin biologisen inspiraation ja matematiikan. Tässä osiossa näemme kuinka perceptron ratkaisee lineaarisen luokittelutehtävän.

Joidenkin kirjastojen tuonti -

kohteesta sklearn.datasets import make_blobs tuonti matplotlib.pyplot as plt tuonti numpy as np %matplotlib inline

Luodaan valetietojoukko käyttämällä make_blobs scikit learningin tarjoamat toiminnot –

# Luo tietojoukko X, Y = make_blobs (n_ominaisuuksia = 2, keskustat = 2, n_näytteet = 1000, satunnainen_tila = 12)
# Visualisoi tietojoukko plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Perustotuus', fontsize = 18) plt.show()
Perceptron binäärisenä luokittelijana

Oletetaan, että siniset pisteet ovat ykkösiä ja vihreät pisteet nollia. Perceptron-logiikkaa käyttämällä voimme luoda päätösrajan(hypertaso) luokittelua varten, joka erottaa kaavion eri datapisteet.

Ennen kuin jatkamme eteenpäin, lisätään bias-termi (ykkösiä) syöttövektoriin -

# Lisää bias syöttövektoriin X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Tietojoukko näyttää suunnilleen tältä

aineisto

Tässä jokainen yllä olevan tietojoukon rivi edustaa syöttövektoria (tietopistettä). Päätösrajan luomiseksi meidän on selvitettävä sopivat painot. Painot 'opetetaan' harjoittelusta alla olevan säännön mukaisesti:

w = w + (odotettu — ennustettu) * x

Perceptron w

Se tarkoittaa, että estimoitu tulos vähennetään pohjatotuudesta ja kerrotaan sitten nykyisellä tulovektorilla ja lisätään siihen vanhat painot, jotta saadaan painojen uusi arvo. Jos tulos on sama kuin todellinen luokka, painot eivät muutu. Mutta jos arviomme eroaa pohjatotuudesta, painot kasvavat tai laskevat vastaavasti. Näin painoja säädetään asteittain jokaisessa iteraatiossa.

Aloitamme antamalla mielivaltaisia ​​arvoja painovektorille, sitten säädämme niitä asteittain jokaisessa iteraatiossa käyttämällä virhettä ja käsillä olevia tietoja -

# alusta painot satunnaisilla arvoilla w = np.random.rand(3, 1) print(w)

lähtö:

[[0.37547448] [0.00239401] [0.18640939]]

Määritä perceptronin aktivointitoiminto -

def activation_func(z): jos z >= 1: palauta 1 else: palauta 0

Seuraavaksi sovellamme perceptron-oppimissääntöä -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Päivitä painot w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Ei ole taattua, että painot lähentyvät yhdessä ajossa, joten syötämme kaikki harjoitustiedot perceptron-algoritmiin 100 kertaa samalla kun noudatamme jatkuvasti oppimissääntöä, jotta lopulta onnistumme saamaan optimaaliset painot.

Nyt kun olemme saaneet optimaaliset painot, me ennustaa kunkin tietopisteen luokka käyttämällä Y =:ta f(∑wi*xi + b) tai Y = wT.x vektorimuodossa.

# datapisteiden luokan ennustaminen result_class = [activation_func(w.transpose().dot(x)) x:lle X_biasissa]

Visualisoi päätösraja ja ennustetut luokkatunnisteet –

# muuntaa yksikkövektoriksi w = w/np.sqrt(w.transpose().dot(w))
# Visualisoi tulokset plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = tulos_luokka) plt.plot([-10, -1], hypertaso ([-10, -1], w), lw = 3, c = 'punainen') plt.title('Perceptron-luokitus päätösrajalla') plt.show()
Perceptronin luokitus päätösrajalla

Voit verrata pohjatotuuskuvaa ennustettuun lopputulokseen ja nähdä joitain kohtia, jotka on luokiteltu väärin. Jos laskemme tarkkuuden, se on noin 98% (jätän tämän harjoitukseksi lukijoille).

Jos näet, tässä alkuperäiset tietomme olivat melko erillään, joten voimme saada niin hyvän tarkkuuden. Mutta näin ei ole tosielämän datan tapauksessa. Yhtä perceptronia käyttämällä voimme rakentaa vain lineaarisen päätösrajan, joten jos tiedot sekoitetaan, perceptronialgoritmi toimii huonosti. Tämä on yksi yhden perceptronin mallin rajoituksista.

loppuviitteet

Aloitimme ymmärtämällä Rosenblattin perceptronin takana olevan biologisen inspiraation. Sitten etenimme perceptronin matematiikkaan ja aktivointifunktioihin. Lopuksi lelutietojoukon avulla näimme kuinka perceptron voi suorittaa perusluokituksen rakentamalla lineaarisen päätösrajan, joka erottaa eri luokkiin kuuluvat tietopisteet.

kirjailijasta

Pratik Nabriya on ammattitaitoinen tietotutkija, joka työskentelee tällä hetkellä Noidasta peräisin olevassa Analytics- ja tekoälyyrityksessä. Hän hallitsee koneoppimisen, syväoppimisen, NLP:n, aikasarja-analyysin, tiedonkäsittelyn, SQL:n, Pythonin ja tuntee työskentelyn pilviympäristössä. Vapaa-ajallaan hän tykkää kilpailla Hackathoneissa ja kirjoittaa teknisiä artikkeleita.

Tässä artikkelissa näkyvät mediat eivät ole Analytics Vidhyan omistuksessa, ja niitä käytetään tekijän harkinnan mukaan.

Lähde: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Aikaleima:

Lisää aiheesta Analyysi Vidhya