Perceptron: byggestein for kunstig nevrale nettverk

Kilde node: 1216283

Hvis du er en maskinlærings- og AI-entusiast, må du ha kommet over ordet perceptron. Perceptron undervises i det første kapittelet av mange dyplæringskurs. Så hva er det egentlig? Hva er inspirasjonen bak? Hvordan løser det klassifiseringsproblemet? I denne artikkelen skal vi starte med den biologiske inspirasjonen bak perseptronet og deretter fordype oss i dets matematiske tekniske egenskaper, og til slutt bygge en binær klassifiserer fra bunnen av ved hjelp av en perceptronenhet.

Biologisk inspirasjon av nevrale nettverk

En nevron (nervecelle) er den grunnleggende byggesteinen i nervesystemet. En menneskelig hjerne består av milliarder av nevroner som er forbundet med hverandre. De er ansvarlige for å motta og sende signaler fra hjernen. Som vist i diagrammet nedenfor, består et typisk nevron av de tre hoveddelene - dendritter, et akson og cellekropp eller soma. Dendritter er trelignende grener som stammer fra cellekroppen. De mottar informasjon fra de andre nevronene. Soma er kjernen i et nevron. Den er ansvarlig for å behandle informasjonen mottatt fra dendritter. Axon er som en kabel som nevronene sender informasjonen gjennom. Mot slutten deler aksonet seg opp i mange grener som danner forbindelser med de andre nevronene gjennom dendrittene deres. De forbindelsen mellom aksonet og andre nevrondendritter kalles synapser.

1: Biologisk nevron versus kunstig nevrale nettverk

Image Source: Willems, K. (2017, 2. mai). Keras Tutorial: Deep Learning i Python.

Siden ANN er inspirert av hjernens funksjon, la oss se hvordan hjernen fungerer. Hjernen består av et nettverk av milliarder av nevroner. De kommuniserer ved hjelp av elektriske og kjemiske signaler gjennom en synapse, der informasjonen fra ett nevron overføres til andre nevroner. Overføringsprosessen involverer en elektrisk impuls kalt "aksjonspotensial". For at informasjonen skal overføres, bør inngangssignalene (impulsen) være sterke nok til å krysse en viss terskelbarriere, så aktiverer bare et nevron og sender signalet videre (output).

Inspirert av den biologiske funksjonen til et nevron, kom en amerikansk vitenskapsmann Franck Rosenblatt opp med konseptet perceptron ved Cornell Aeronautical Laboratory i 1957.

  • Et nevron mottar informasjon fra andre nevroner i form av elektriske impulser med varierende styrke.
  • Nevron integrerer alle impulsene den mottar fra de andre nevronene.
  • Hvis den resulterende summeringen er større enn en viss terskelverdi, "tenner" nevronet, og utløser et aksjonspotensial som overføres til de andre tilkoblede nevronene.

Hovedkomponenter i Perceptron

Rosenblatts perceptron er i utgangspunktet en binær klassifikator. Perceptronen består av 3 hoveddeler:

  • Inndatanoder eller inputlag: Inndatalaget tar de første dataene inn i systemet for videre behandling. Hver inngangsnode er assosiert med en numerisk verdi. Det kan ta hvilken som helst reell verdi.
  • Vekter og skjevheter: Vektparametere representerer styrken til forbindelsen mellom enheter. Høyere er vekten, sterkere er påvirkningen fra det tilknyttede inngangsneuronet for å bestemme utgangen. Bias spiller det samme som skjæringspunktet i en lineær ligning.
  • Aktiveringsfunksjon: Aktiveringsfunksjonen bestemmer om nevronet skal avfyres eller ikke. På sitt enkleste er aktiveringsfunksjonen en trinnfunksjon, men basert på scenariet kan ulike aktiveringsfunksjoner brukes.

Vi skal se mer om disse i neste avsnitt.

Arbeid av en Perceptron

I det første trinnet multipliseres alle inngangsverdiene med deres respektive vekter og legges sammen. Resultatet som oppnås kalles vektet sum ∑wi*xi, eller sagt annerledes,  x1*w1 + x2*w2 +…wn*xn. Denne summen gir en passende representasjon av innspillene basert på deres betydning. I tillegg et skjevhetsbegrep b legges til denne summen ∑wi*xi + b. Bias fungerer som en annen modellparameter (i tillegg til vekter) som kan justeres for å forbedre modellens ytelse.

I det andre trinnet, en aktiveringsfunksjon f påføres over ovennevnte sum ∑wi*xi + b for å få utgang Y = f(∑wi*xi + b). Avhengig av scenariet og aktiveringsfunksjonen som brukes Produksjon er enten binære {1, 0} eller en kontinuerlig verdi. 

Arbeid av en Perceptron

(Ofte er begge disse trinnene representert som et enkelt trinn i flerlags perseptroner, her har jeg vist dem som to forskjellige trinn for bedre forståelse)

Aktiveringsfunksjoner

Et biologisk nevron avfyres bare når en viss terskel overskrides. Tilsvarende vil det kunstige nevronet også bare avfyres når summen av inngangene (vektet sum) overstiger en viss terskelverdi, la oss si 0. Intuitivt kan vi tenke oss en regelbasert tilnærming som denne –

Hvis ∑wi*xi + b > 0: utgang = 1 annet: utgang = 0

Grafen vil være noe slikt:

Aktiveringsfunksjoner

Dette er faktisk Unit Step (Threshold) aktiveringsfunksjonen som opprinnelig ble brukt av Rosenblatt. Men som du kan se, er denne funksjonen diskontinuerlig ved 0, så den forårsaker problemer i matematiske beregninger. En jevnere versjon av funksjonen ovenfor er sigmoid-funksjonen. Den gir ut mellom 0 og 1. En annen er den hyperbolske tangenten(tanh) funksjon, som produserer utdata mellom -1 og 1. Både sigmoid- og tanh-funksjoner lider av problemer med forsvinnende gradienter. I dag er ReLU og Leaky ReLU de mest populære aktiveringsfunksjonene. De er relativt stabile over dype nettverk.

Perceptron som en binær klassifikator

Så langt har vi sett den biologiske inspirasjonen og matematikken til perceptronen. I denne delen skal vi se hvordan en perceptron løser et lineært klassifiseringsproblem.

Importere noen biblioteker –

fra sklearn.datasets importer make_blobs importer matplotlib.pyplot som plt importer numpy som np %matplotlib inline

Generering av et dummy-datasett ved hjelp av lage_klatter funksjonalitet levert av scikit learn –

# Generer datasett X, Y = make_blobs(n_features = 2, centers = 2, n_samples = 1000, random_state = 12)
# Visualiser datasettet plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground truth', fontsize = 18) plt.show()
Perceptron som en binær klassifikator

La oss si at de blå prikkene er 1-er og de grønne prikkene er 0-er. Ved å bruke perceptronlogikk kan vi lage en beslutningsgrense (hyperplan) for klassifisering som skiller ulike datapunkter på grafen.

Før vi går videre, la oss legge til et skjevhetsledd (enere) til inngangsvektoren –

# Legg til en bias til inngangsvektoren X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Datasettet vil se omtrent slik ut

datasett

Her representerer hver rad i datasettet ovenfor inngangsvektoren (et datapunkt). For å lage en beslutningsgrense må vi finne ut passende vekter. Vektene "læres" fra treningen ved å bruke regelen nedenfor -

w = w + (forventet — spådd) * x

Perceptron w

Det betyr at man trekker det estimerte utfallet fra grunnsannheten og deretter multipliserer dette med den gjeldende inngangsvektoren og legger til gamle vekter for å få den nye verdien av vektene. Hvis produksjonen vår er den samme som den faktiske klassen, endres ikke vektene. Men hvis estimeringen vår er forskjellig fra grunnsannheten, øker eller reduseres vektene tilsvarende. Slik justeres vektene gradvis i hver iterasjon.

Vi starter med å tilordne vilkårlige verdier til vektvektoren, deretter justerer vi dem gradvis i hver iterasjon ved å bruke feilen og dataene –

# initialiser vekter med tilfeldige verdier w = np.random.rand(3, 1) print(w)

Utgang:

[[0.37547448] [0.00239401] [0.18640939]]

Definer aktiveringsfunksjonen til perceptron –

def activation_func(z): hvis z >= 1: returner 1 annet: returner 0

Deretter bruker vi perseptronlæringsregelen -

for _ i området(100): for i i området(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Oppdater vekter w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Det er ikke garantert at vektene vil konvergere i en omgang, så vi mater alle treningsdata inn i perceptronalgoritmen 100 ganger mens vi hele tiden bruker læringsregelen slik at vi til slutt klarer å oppnå de optimale vektene.

Nå, som vi har fått de optimale vektene, har vi forutsi klassen for hvert datapunkt ved å bruke Y = f(∑wi*xi + b) eller Y = wT.x i vektorform.

# forutsi klassen til datapunktene resultatklasse = [activation_func(w.transpose().dot(x)) for x i X_bias]

Visualiser beslutningsgrensen og de forutsagte klasseetikettene –

# konverter til enhetsvektor w = w/np.sqrt(w.transpose().dot(w))
# Visualiser resultater plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hyperplane ([-10, -1], w), lw = 3, c = 'rød') plt.title('Perseptronklassifisering med beslutningsgrense') plt.show()
Perceptronklassifisering med beslutningsgrense

Du kan sammenligne grunnsannhetsbildet med det forutsagte utfallsbildet og se noen punkter som er feilklassifisert. Hvis vi regner ut nøyaktigheten, kommer den på ca 98 % (jeg overlater dette som en øvelse til leserne).

Hvis du ser, her var de opprinnelige dataene våre ganske atskilt, så vi er i stand til å få så god nøyaktighet. Men dette er ikke tilfellet med data fra den virkelige verden. Ved å bruke en enkelt perceptron kan vi bare konstruere en lineær beslutningsgrense, så hvis dataene er blandet vil perceptronalgoritmen fungere dårlig. Dette er en av begrensningene til enkeltperseptronmodellen.

sluttnoter

Vi startet med å forstå den biologiske inspirasjonen bak Rosenblatts perceptron. Så gikk vi videre til matematikken til perceptron og aktiveringsfunksjonene. Til slutt ved å bruke et leketøysdatasett, så vi hvordan perceptron kan utføre grunnleggende klassifisering ved å bygge en lineær beslutningsgrense som skiller datapunktene som tilhører forskjellige klasser.

om forfatteren

Pratik Nabriya er en dyktig dataforsker som for tiden er ansatt i et analyse- og kunstig intelligens-firma basert på Noida. Han er dyktig i maskinlæring, dyp læring, NLP, tidsserieanalyse, datamanipulering, SQL, Python, og er kjent med å jobbe i et skymiljø. På fritiden elsker han å konkurrere i Hackathons, og skrive tekniske artikler.

Mediene vist i denne artikkelen eies ikke av Analytics Vidhya og brukes etter forfatterens skjønn.

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

Tidstempel:

Mer fra Analytics Vidhya