Perceptron: byggesten i kunstigt neuralt netværk

Kildeknude: 1216283

Hvis du er maskinlærings- og AI-entusiast, skal du være stødt på ordet perceptron. Perceptron undervises i det første kapitel af mange deep learning-kurser. Så hvad er det helt præcist? Hvad er inspirationen bag? Hvordan løser det præcist klassifikationsproblemet? I denne artikel skal vi starte med den biologiske inspiration bag perceptronen og derefter dykke ned i dens matematiske teknikaliteter og til sidst bygge en binær klassifikator fra bunden ved hjælp af en perceptronenhed.

Biologisk inspiration af neurale netværk

En neuron (nervecelle) er den grundlæggende byggesten i nervesystemet. En menneskelig hjerne består af milliarder af neuroner, der er forbundet med hinanden. De er ansvarlige for at modtage og sende signaler fra hjernen. Som det ses i nedenstående diagram, består en typisk neuron af de tre hoveddele - dendritter, en axon og cellekrop eller soma. Dendritter er trælignende grene, der stammer fra cellekroppen. De modtager information fra de andre neuroner. Soma er kernen i en neuron. Den er ansvarlig for at behandle de oplysninger, der modtages fra dendritter. Axon er som et kabel, hvorigennem neuronerne sender informationen. Mod sin slutning splittes axonet op i mange grene, der danner forbindelser med de andre neuroner gennem deres dendritter. Det forbindelse mellem axon og andre neuron dendritter kaldes synapser.

1: Biologisk neuron versus kunstigt neuralt netværk

Billede Kilde: Willems, K. (2017, 2. maj). Keras Tutorial: Deep Learning i Python.

Da ANN er inspireret af hjernens funktion, så lad os se, hvordan hjernen fungerer. Hjernen består af et netværk af milliarder af neuroner. De kommunikerer ved hjælp af elektriske og kemiske signaler gennem en synapse, hvor informationen fra en neuron overføres til andre neuroner. Transmissionsprocessen involverer en elektrisk impuls kaldet 'aktionspotentiale'. For at informationen skal transmitteres, skal inputsignalerne (impulsen) være stærke nok til at krydse en vis tærskelbarriere, så aktiverer kun en neuron og transmitterer signalet videre (output).

Inspireret af en neurons biologiske funktion kom en amerikansk videnskabsmand Franck Rosenblatt op med begrebet perceptron på Cornell Aeronautical Laboratory i 1957.

  • En neuron modtager information fra andre neuroner i form af elektriske impulser af varierende styrke.
  • Neuron integrerer alle de impulser, den modtager fra de andre neuroner.
  • Hvis den resulterende summering er større end en bestemt tærskelværdi, "fyrer" neuronen, hvilket udløser et aktionspotentiale, der overføres til de andre forbundne neuroner.

Hovedkomponenter i Perceptron

Rosenblatts perceptron er grundlæggende en binær klassifikator. Perceptronen består af 3 hoveddele:

  • Inputnoder eller inputlag: Inputlaget tager de indledende data ind i systemet til videre behandling. Hver inputnode er forbundet med en numerisk værdi. Det kan tage enhver reel værdi.
  • Vægte og bias: Vægtparametre repræsenterer styrken af ​​forbindelsen mellem enheder. Højere er vægten, stærkere er indflydelsen fra den tilknyttede inputneuron til at bestemme outputtet. Bias spiller det samme som skæringspunktet i en lineær ligning.
  • Aktiveringsfunktion: Aktiveringsfunktionen bestemmer, om neuronen vil affyre eller ej. Aktiveringsfunktionen er på sin enkleste måde en trinfunktion, men baseret på scenariet kan forskellige aktiveringsfunktioner bruges.

Vi vil se mere om disse i det efterfølgende afsnit.

En Perceptrons arbejde

I det første trin multipliceres alle inputværdierne med deres respektive vægte og lægges sammen. Det opnåede resultat kaldes vægtet sum ∑wi*xi, eller sagt anderledes,  x1*w1 + x2*w2 +…wn*xn. Denne sum giver en passende repræsentation af inputs baseret på deres betydning. Derudover en bias term b lægges til denne sum ∑wi*xi + b. Bias fungerer som en anden modelparameter (udover vægte), der kan justeres for at forbedre modellens ydeevne.

I andet trin en aktiveringsfunktion f anvendes over ovenstående beløb ∑wi*xi + b for at opnå output Y = f(∑wi*xi + b). Afhængigt af scenariet og den anvendte aktiveringsfunktion vil Produktion er enten binær {1, 0} eller en kontinuerlig værdi. 

En Perceptrons arbejde

(Ofte er begge disse trin repræsenteret som et enkelt trin i flerlagsperceptroner, her har jeg vist dem som to forskellige trin for bedre forståelse)

Aktiveringsfunktioner

En biologisk neuron udløses kun, når en vis tærskelværdi overskrides. På samme måde vil den kunstige neuron også kun affyres, når summen af ​​inputs (vægtet sum) overstiger en vis tærskelværdi, lad os sige 0. Intuitivt kan vi tænke på en regelbaseret tilgang som denne –

Hvis ∑wi*xi + b > 0: output = 1 andet: output = 0

Dens graf vil være sådan her:

Aktiveringsfunktioner

Dette er faktisk Unit Step (Threshold) aktiveringsfunktionen, som oprindeligt blev brugt af Rosenblatt. Men som du kan se, er denne funktion diskontinuerlig ved 0, så den giver problemer i matematiske beregninger. En glattere version af ovenstående funktion er sigmoid-funktionen. Den udsender mellem 0 og 1. En anden er den hyperbolske tangent(tanh) funktion, som producerer output mellem -1 og 1. Både sigmoid- og tanh-funktioner lider af problemer med forsvindende gradienter. I dag er ReLU og Leaky ReLU de mest populært anvendte aktiveringsfunktioner. De er forholdsvis stabile over dybe netværk.

Perceptron som en binær klassifikator

Indtil videre har vi set perceptronens biologiske inspiration og matematikken. I dette afsnit skal vi se, hvordan en perceptron løser et lineært klassifikationsproblem.

Import af nogle biblioteker –

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

Generering af et dummy-datasæt vha lave_klatter funktionalitet leveret af scikit learn –

# Generer datasæt X, Y = make_blobs(n_features = 2, centre = 2, n_samples = 1000, random_state = 12)
# Visualiser datasæt 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

Lad os sige, at de blå prikker er 1'ere, og de grønne prikker er 0'ere. Ved at bruge perceptronlogik kan vi skabe en beslutningsgrænse (hyperplan) til klassificering, som adskiller forskellige datapunkter på grafen.

Før vi går videre, lad os tilføje et bias-led (enere) til inputvektoren –

# Tilføj en bias til inputvektoren X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Datasættet vil se nogenlunde sådan ud

datasæt

Her repræsenterer hver række i ovenstående datasæt inputvektoren (et datapunkt). For at skabe en beslutningsgrænse skal vi finde ud af de passende vægte. Vægtene 'læres' fra træningen ved hjælp af nedenstående regel –

w = w + (forventet — forudsagt) * x

Perceptron w

Det betyder, at man trækker det estimerede udfald fra grundsandheden og derefter multiplicerer dette med den aktuelle inputvektor og lægger gamle vægte til det for at opnå den nye værdi af vægtene. Hvis vores output er det samme som den faktiske klasse, så ændres vægtene ikke. Men hvis vores vurdering er forskellig fra sandheden, så stiger eller falder vægtene tilsvarende. Sådan justeres vægtene gradvist i hver iteration.

Vi starter med at tildele vilkårlige værdier til vægtvektoren, derefter justerer vi dem gradvist i hver iteration ved hjælp af fejlen og dataene ved hånden -

# initialiser vægte med tilfældige værdier w = np.random.rand(3, 1) print(w)

Output:

[[0.37547448] [0.00239401] [0.18640939]]

Definer aktiveringsfunktionen af ​​perceptron –

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

Dernæst anvender vi perceptronindlæringsreglen -

for _ in range(100): for i in range(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Opdater vægte w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Det er ikke garanteret, at vægtene vil konvergere i én omgang, så vi føder alle træningsdata ind i perceptronalgoritmen 100 gange, mens vi konstant anvender indlæringsreglen, så vi til sidst formår at opnå de optimale vægte.

Nu, hvor vi har opnået de optimale vægte, har vi forudsige klassen for hvert datapunkt ved hjælp af Y = f(∑wi*xi + b) eller Y = wT.x i vektorform.

# forudsiger klassen for datapunkterne result_class = [activation_func(w.transpose().dot(x)) for x i X_bias]

Visualiser beslutningsgrænsen og de forudsagte klassebetegnelser –

# konverter til enhedsvektor 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('Perceptronklassificering med beslutningsgrænse') plt.show()
Perceptron klassificering med beslutningsgrænse

Du kan sammenligne grundsandhedens billede med det forudsagte resultatbillede og se nogle punkter, der er forkert klassificeret. Hvis vi beregner nøjagtigheden, kommer den til omkring 98% (det overlader jeg som en øvelse til læserne).

Hvis du kan se, her var vores oprindelige data ret adskilt, så vi er i stand til at få så god nøjagtighed. Men dette er ikke tilfældet med data fra den virkelige verden. Ved at bruge en enkelt perceptron kan vi kun konstruere en lineær beslutningsgrænse, så hvis dataene er blandet, vil perceptronalgoritmen fungere dårligt. Dette er en af ​​begrænsningerne ved single perceptron-modellen.

slutnoter

Vi startede med at forstå den biologiske inspiration bag Rosenblatts perceptron. Derefter gik vi videre til matematikken om perceptron og aktiveringsfunktionerne. Til sidst ved hjælp af et legetøjsdatasæt så vi, hvordan perceptron kan udføre grundlæggende klassificering ved at bygge en lineær beslutningsgrænse, der adskiller datapunkterne, der tilhører forskellige klasser.

Om forfatteren

Pratik Nabriya er en dygtig dataforsker, der i øjeblikket er ansat i et analyse- og kunstig intelligens-firma baseret på Noida. Han er dygtig til maskinlæring, dyb læring, NLP, tidsserieanalyse, datamanipulation, SQL, Python og er fortrolig med at arbejde i et cloudmiljø. I sin fritid elsker han at konkurrere i Hackathons og skrive tekniske artikler.

Medierne vist i denne artikel ejes ikke af Analytics Vidhya og bruges efter forfatterens skøn.

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

Tidsstempel:

Mere fra Analyse Vidhya