Perseptronlag
Perceptron refererer til den enkleste typen nevralt nettverk, som består av kun én nevron. For å håndtere mer komplekse problemer benyttes en modell kjent som multilagsperseptron (MLP). Et multilagsperseptron inneholder ett eller flere skjulte lag som gjør det mulig for nettverket å lære komplekse mønstre i dataene.
Strukturen til et multilagsperseptron inkluderer:
- Inndatalag: mottar inndataene;
- Skjulte lag: behandler dataene og trekker ut meningsfulle mønstre;
- Utgangslag: produserer den endelige prediksjonen eller klassifiseringen.
Hvert lag består av flere nevroner, og utdataene fra ett lag fungerer som inndata til neste lag.
Lagvekter og bias
Før implementering av et lag er det viktig å forstå hvordan man lagrer vektene og biasene til hver nevron i laget. I forrige kapittel lærte du hvordan vektene til én nevron kan lagres som en vektor og biasen som en skalar (enkelt tall).
Siden et lag består av flere nevroner, er det naturlig å representere vektene som en matrise, der hver rad tilsvarer vektene til en spesifikk nevron. Biasene kan følgelig representeres som en vektor, hvor lengden er lik antall nevroner.
Gitt et lag med 3 inndata og 2 nevroner, vil vektene lagres i en 2×3 matrise W og biasene lagres i en 2×1 vektor b, som ser slik ut:
W=[W11W21W12W22W13W23]b=[b1b2]Her representerer elementet Wij vekten fra j.-input til i.-nevron, så første rad inneholder vektene til første nevron, og andre rad inneholder vektene til andre nevron. Elementet bi representerer biasen til i.-nevron (to nevroner – to biaser).
Fremoverpropagasjon
Å utføre fremoverpropagasjon for hvert lag innebærer å aktivere hver av dets nevroner ved å beregne vektet sum av inngangene, legge til bias, og anvende aktiveringsfunksjonen.
Tidligere, for et enkelt nevron, implementerte du vektet sum av inngangene ved å beregne et prikkprodukt mellom inngangsvektoren og vektvektoren og legge til bias.
Siden hver rad i vektmatrisen inneholder vektvektoren for et bestemt nevron, trenger du nå bare å utføre et prikkprodukt mellom hver rad i matrisen og inngangsvektoren. Heldigvis er dette nøyaktig det matrisemultiplikasjon gjør:
For å legge til biasene til utgangene fra de respektive nevronene, skal en vektor av biaser også legges til:
Til slutt anvendes aktiveringsfunksjonen på resultatet — sigmoid eller ReLU, i vårt tilfelle. Den resulterende formelen for fremoverpropagasjon i laget er som følger:
a=activation(Wx+b)hvor a er vektoren av nevronaktiveringer (utganger).
Lagklasse
Perceptronens grunnleggende byggeklosser er lagene, derfor er det hensiktsmessig å opprette en egen Layer-klasse. Dens attributter inkluderer:
inputs: en vektor med innganger (n_inputser antall innganger);outputs: en vektor med rå utgangsverdier (før aktiveringsfunksjonen brukes) for nevronene (n_neuronser antall nevroner);weights: en vektmatrise;biases: en bias-vektor;activation_function: aktiveringsfunksjonen som brukes i laget.
Som i implementasjonen av et enkelt nevron, vil weights og biases bli initialisert med tilfeldige verdier mellom -1 og 1 trukket fra en uniform fordeling.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
Attributtene inputs og outputs vil bli brukt senere i tilbakepropagering, så det er hensiktsmessig å initialisere dem som NumPy-arrays fylt med nuller.
Initialisering av inputs og outputs som nullfylte NumPy-arrays forhindrer feil ved beregninger i forover- og bakoverpropagering. Det sikrer også konsistens mellom lagene, slik at matriseoperasjoner kan utføres uten behov for ekstra kontroller.
Foroverpropagering kan implementeres i forward()-metoden, der outputs beregnes basert på inputs-vektoren ved bruk av NumPy, i henhold til formelen ovenfor:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Å omforme inputs til en kolonnevektor sikrer korrekt matrise-multiplikasjon med vektmatrisen under fremoverpropagering. Dette forhindrer formfeil og muliggjør sømløse beregninger gjennom alle lag.
1. Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?
2. Hvorfor er det nødvendig å bruke denne koden før inputs multipliseres med vektmatrisen?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 4
Perseptronlag
Sveip for å vise menyen
Perceptron refererer til den enkleste typen nevralt nettverk, som består av kun én nevron. For å håndtere mer komplekse problemer benyttes en modell kjent som multilagsperseptron (MLP). Et multilagsperseptron inneholder ett eller flere skjulte lag som gjør det mulig for nettverket å lære komplekse mønstre i dataene.
Strukturen til et multilagsperseptron inkluderer:
- Inndatalag: mottar inndataene;
- Skjulte lag: behandler dataene og trekker ut meningsfulle mønstre;
- Utgangslag: produserer den endelige prediksjonen eller klassifiseringen.
Hvert lag består av flere nevroner, og utdataene fra ett lag fungerer som inndata til neste lag.
Lagvekter og bias
Før implementering av et lag er det viktig å forstå hvordan man lagrer vektene og biasene til hver nevron i laget. I forrige kapittel lærte du hvordan vektene til én nevron kan lagres som en vektor og biasen som en skalar (enkelt tall).
Siden et lag består av flere nevroner, er det naturlig å representere vektene som en matrise, der hver rad tilsvarer vektene til en spesifikk nevron. Biasene kan følgelig representeres som en vektor, hvor lengden er lik antall nevroner.
Gitt et lag med 3 inndata og 2 nevroner, vil vektene lagres i en 2×3 matrise W og biasene lagres i en 2×1 vektor b, som ser slik ut:
W=[W11W21W12W22W13W23]b=[b1b2]Her representerer elementet Wij vekten fra j.-input til i.-nevron, så første rad inneholder vektene til første nevron, og andre rad inneholder vektene til andre nevron. Elementet bi representerer biasen til i.-nevron (to nevroner – to biaser).
Fremoverpropagasjon
Å utføre fremoverpropagasjon for hvert lag innebærer å aktivere hver av dets nevroner ved å beregne vektet sum av inngangene, legge til bias, og anvende aktiveringsfunksjonen.
Tidligere, for et enkelt nevron, implementerte du vektet sum av inngangene ved å beregne et prikkprodukt mellom inngangsvektoren og vektvektoren og legge til bias.
Siden hver rad i vektmatrisen inneholder vektvektoren for et bestemt nevron, trenger du nå bare å utføre et prikkprodukt mellom hver rad i matrisen og inngangsvektoren. Heldigvis er dette nøyaktig det matrisemultiplikasjon gjør:
For å legge til biasene til utgangene fra de respektive nevronene, skal en vektor av biaser også legges til:
Til slutt anvendes aktiveringsfunksjonen på resultatet — sigmoid eller ReLU, i vårt tilfelle. Den resulterende formelen for fremoverpropagasjon i laget er som følger:
a=activation(Wx+b)hvor a er vektoren av nevronaktiveringer (utganger).
Lagklasse
Perceptronens grunnleggende byggeklosser er lagene, derfor er det hensiktsmessig å opprette en egen Layer-klasse. Dens attributter inkluderer:
inputs: en vektor med innganger (n_inputser antall innganger);outputs: en vektor med rå utgangsverdier (før aktiveringsfunksjonen brukes) for nevronene (n_neuronser antall nevroner);weights: en vektmatrise;biases: en bias-vektor;activation_function: aktiveringsfunksjonen som brukes i laget.
Som i implementasjonen av et enkelt nevron, vil weights og biases bli initialisert med tilfeldige verdier mellom -1 og 1 trukket fra en uniform fordeling.
class Layer:
def __init__(self, n_inputs, n_neurons, activation_function):
self.inputs = np.zeros((n_inputs, 1))
self.outputs = np.zeros((n_neurons, 1))
self.weights = ...
self.biases = ...
self.activation = activation_function
Attributtene inputs og outputs vil bli brukt senere i tilbakepropagering, så det er hensiktsmessig å initialisere dem som NumPy-arrays fylt med nuller.
Initialisering av inputs og outputs som nullfylte NumPy-arrays forhindrer feil ved beregninger i forover- og bakoverpropagering. Det sikrer også konsistens mellom lagene, slik at matriseoperasjoner kan utføres uten behov for ekstra kontroller.
Foroverpropagering kan implementeres i forward()-metoden, der outputs beregnes basert på inputs-vektoren ved bruk av NumPy, i henhold til formelen ovenfor:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Å omforme inputs til en kolonnevektor sikrer korrekt matrise-multiplikasjon med vektmatrisen under fremoverpropagering. Dette forhindrer formfeil og muliggjør sømløse beregninger gjennom alle lag.
1. Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?
2. Hvorfor er det nødvendig å bruke denne koden før inputs multipliseres med vektmatrisen?
Takk for tilbakemeldingene dine!