Perceptron: Byggsten i artificiellt neuralt nätverk

Källnod: 1216283

Om du är en maskininlärnings- och AI-entusiast måste du ha stött på ordet perceptron. Perceptron lärs ut i det första kapitlet i många djupinlärningskurser. Så vad exakt är det? Vad är inspirationen bakom? Hur exakt löser det klassificeringsproblemet? I den här artikeln ska vi börja med den biologiska inspirationen bakom perceptronen och sedan fördjupa oss i dess matematiska tekniska egenskaper, och slutligen bygga en binär klassificerare från grunden med hjälp av en perceptronenhet.

Biologisk inspiration av neurala nätverk

En neuron (nervcell) är den grundläggande byggstenen i nervsystemet. En mänsklig hjärna består av miljarder neuroner som är sammankopplade med varandra. De är ansvariga för att ta emot och skicka signaler från hjärnan. Som framgår av diagrammet nedan består en typisk neuron av de tre huvuddelarna - dendriter, ett axon och cellkropp eller soma. Dendriter är trädliknande grenar som kommer från cellkroppen. De får information från de andra nervcellerna. Soma är kärnan i en neuron. Det är ansvarigt för att behandla informationen från dendriter. Axon är som en kabel genom vilken neuronerna skickar informationen. Mot slutet delas axonet upp i många grenar som gör förbindelser med de andra neuronerna genom deras dendriter. De sambandet mellan axonet och andra neurondendriter kallas synapser.

1: Biologisk neuron kontra artificiell neuronnätverk

Bild Källa: Willems, K. (2017, 2 maj). Keras Tutorial: Deep Learning i Python.

Eftersom ANN är inspirerad av hjärnans funktion, låt oss se hur hjärnan fungerar. Hjärnan består av ett nätverk av miljarder neuroner. De kommunicerar med hjälp av elektriska och kemiska signaler genom en synaps, där informationen från en neuron överförs till andra neuroner. Överföringsprocessen involverar en elektrisk impuls som kallas "aktionspotential". För att informationen ska överföras bör ingångssignalerna (impulsen) vara tillräckligt starka för att passera en viss tröskelbarriär, sedan aktiveras bara en neuron och sänder signalen vidare (output).

Inspirerad av en neurons biologiska funktion kom en amerikansk forskare Franck Rosenblatt med begreppet perceptron vid Cornell Aeronautical Laboratory 1957.

  • En neuron tar emot information från andra neuroner i form av elektriska impulser av varierande styrka.
  • Neuron integrerar alla impulser den tar emot från de andra neuronerna.
  • Om den resulterande summeringen är större än ett visst tröskelvärde "avfyras" neuronen, vilket utlöser en aktionspotential som överförs till de andra anslutna neuronerna.

Huvudkomponenter i Perceptron

Rosenblatts perceptron är i grunden en binär klassificerare. Perceptronen består av tre huvuddelar:

  • Ingångsnoder eller ingångsskikt: Inmatningsskiktet tar in initialdata i systemet för vidare bearbetning. Varje ingångsnod är associerad med ett numeriskt värde. Det kan ta vilket verkligt värde som helst.
  • Vikter och bias: Viktparametrar representerar styrkan i sambandet mellan enheter. Högre är vikten, starkare är påverkan av den associerade ingångsneuronen för att bestämma utmatningen. Bias spelar samma sak som skärningspunkten i en linjär ekvation.
  • Aktiveringsfunktion: Aktiveringsfunktionen avgör om neuronen ska avfyras eller inte. Som enklast är aktiveringsfunktionen en stegfunktion, men utifrån scenariot kan olika aktiveringsfunktioner användas.

Vi kommer att se mer om dessa i nästa avsnitt.

Bearbetning av en Perceptron

I det första steget multipliceras alla ingångsvärden med sina respektive vikter och adderas. Det erhållna resultatet kallas viktad summa ∑wi*xi, eller sagt annorlunda,  x1*w1 + x2*w2 +…wn*xn. Denna summa ger en lämplig representation av insatserna baserat på deras betydelse. Dessutom en bias term b läggs till denna summa ∑wi*xi + b. Bias fungerar som en annan modellparameter (utöver vikter) som kan ställas in för att förbättra modellens prestanda.

I det andra steget en aktiveringsfunktion f tillämpas över ovanstående summa ∑wi*xi + b för att erhålla utgång Y = f(∑wi*xi + b). Beroende på scenariot och aktiveringsfunktionen som används, Produktion är antingen binär {1, 0} eller ett kontinuerligt värde. 

Bearbetning av en Perceptron

(Ofta representeras båda dessa steg som ett enda steg i flerskiktsperceptroner, här har jag visat dem som två olika steg för bättre förståelse)

Aktiveringsfunktioner

En biologisk neuron avfyras bara när en viss tröskel överskrids. På samma sätt kommer den artificiella neuronen bara att avfyras när summan av ingångarna (vägd summa) överstiger ett visst tröskelvärde, låt oss säga 0. Intuitivt kan vi tänka oss ett regelbaserat tillvägagångssätt som detta –

Om ∑wi*xi + b > 0: output = 1 annars: output = 0

Dess graf kommer att vara ungefär så här:

Aktiveringsfunktioner

Detta är i själva verket Unit Step (Threshold) aktiveringsfunktionen som ursprungligen användes av Rosenblatt. Men som du kan se är denna funktion diskontinuerlig vid 0, så den orsakar problem i matematiska beräkningar. En smidigare version av ovanstående funktion är sigmoidfunktionen. Den matar ut mellan 0 och 1. En annan är den hyperboliska tangenten(tanh) funktion, som producerar utdata mellan -1 och 1. Både sigmoid- och tanh-funktioner lider av problem med försvinnande gradienter. Nuförtiden är ReLU och Leaky ReLU de mest populära aktiveringsfunktionerna. De är jämförelsevis stabila över djupa nätverk.

Perceptron som binär klassificerare

Hittills har vi sett perceptronens biologiska inspiration och matematik. I detta avsnitt ska vi se hur en perceptron löser ett linjärt klassificeringsproblem.

Importera vissa bibliotek –

från sklearn.datasets importera make_blobs importera matplotlib.pyplot som plt importera numpy som np %matplotlib inline

Genererar en dummy-datauppsättning med hjälp av make_blobs funktionalitet som tillhandahålls av scikit learn –

# Generera dataset X, Y = make_blobs(n_features = 2, centers = 2, n_samples = 1000, random_state = 12)
# Visualisera dataset plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Ground truth', fontsize = 18) plt.show()
Perceptron som binär klassificerare

Låt oss säga att de blå prickarna är 1:or och de gröna prickarna är 0:or. Med hjälp av perceptronlogik kan vi skapa en beslutsgräns (hyperplan) för klassificering som separerar olika datapunkter på grafen.

Innan vi går vidare, låt oss lägga till en biasterm (ettor) till indatavektorn –

# Lägg till en bias till ingångsvektorn X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

Datauppsättningen kommer att se ut ungefär så här

dataset

Här representerar varje rad i ovanstående dataset ingångsvektorn (en datapunkt). För att skapa en beslutsgräns måste vi ta reda på lämpliga vikter. Vikterna "lärs" från träningen med hjälp av regeln nedan -

w = w + (förväntat — förutspått) * x

Perceptron w

Det innebär att subtrahera det uppskattade resultatet från grundsanningen och sedan multiplicera detta med den aktuella invektorn och lägga till gamla vikter till den för att erhålla det nya värdet av vikterna. Om vår produktion är densamma som den faktiska klassen, så ändras inte vikterna. Men om vår uppskattning skiljer sig från grundsanningen, så ökar eller minskar vikterna i enlighet med detta. Så här justeras vikterna successivt i varje iteration.

Vi börjar med att tilldela godtyckliga värden till viktvektorn, sedan justerar vi dem successivt i varje iteration med hjälp av felet och data till hands –

# initiera vikter med slumpmässiga värden w = np.random.rand(3, 1) print(w)

Produktion:

[[0.37547448] [0.00239401] [0.18640939]]

Definiera aktiveringsfunktionen för perceptron –

def activation_func(z): om z >= 1: returnera 1 annat: returnera 0

Därefter tillämpar vi perceptroninlärningsregeln -

för _ i intervallet(100): för i i intervallet(X_bias.shape[0]): y = activation_func(w.transpose().dot(X_bias[i, :])) # Uppdatera vikter w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

Det är inte garanterat att vikterna kommer att konvergera i ett pass, så vi matar in all träningsdata i perceptronalgoritmen 100 gånger samtidigt som vi ständigt tillämpar inlärningsregeln så att vi till slut lyckas få de optimala vikterna.

Nu när vi har fått de optimala vikterna har vi förutsäga klassen för varje datapunkt med hjälp av Y = f(∑wi*xi + b) eller Y = wT.x i vektorform.

# förutsäga klassen för datapunkterna result_class = [activation_func(w.transpose().dot(x)) för x i X_bias]

Visualisera beslutsgränsen och de förutsagda klassetiketterna –

# konvertera till enhetsvektor w = w/np.sqrt(w.transpose().dot(w))
# Visualisera resultat 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 beslutsgräns') plt.show()
Perceptronklassificering med beslutsgräns

Du kan jämföra sanningsbilden med den förutsagda utfallsbilden och se några punkter som är felklassificerade. Om vi ​​räknar på träffsäkerheten så kommer den upp i ca 98% (jag lämnar detta som en övning till läsarna).

Om du ser, här var vår ursprungliga data ganska separerad, så vi kan få så bra noggrannhet. Men detta är inte fallet med verkliga data. Med en enda perceptron kan vi bara konstruera en linjär beslutsgräns, så om data blandas kommer perceptronalgoritmen att fungera dåligt. Detta är en av begränsningarna för singelperceptronmodellen.

Slutnoter

Vi började med att förstå den biologiska inspirationen bakom Rosenblatts perceptron. Sedan gick vi vidare till matematiken för perceptron och aktiveringsfunktionerna. Slutligen med hjälp av en leksaksdatauppsättning såg vi hur perceptron kan utföra grundläggande klassificering genom att bygga en linjär beslutsgräns som separerar datapunkterna som tillhör olika klasser.

Om författaren

Pratik Nabriya är en skicklig dataforskare som för närvarande är anställd på ett analys- och AI-företag baserat på Noida. Han är skicklig inom maskininlärning, djupinlärning, NLP, tidsserieanalys, datamanipulation, SQL, Python och är bekant med att arbeta i molnmiljö. På fritiden älskar han att tävla i Hackathons, och skriva tekniska artiklar.

Medierna som visas i den här artikeln ägs inte av Analytics Vidhya och används efter författarens gottfinnande.

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

Tidsstämpel:

Mer från Analys Vidhya