Perseptronlag
Sveip for å vise menyen
Perceptron er det enkleste nevrale nettverket—kun én nevron. For mer komplekse oppgaver bruker vi et flernivå-perceptron (MLP), som inneholder ett eller flere skjulte lag som gjør det mulig for nettverket å lære mer komplekse mønstre.
En MLP består av:
- Inndata-lag — mottar data;
- Skjulte lag — trekker ut mønstre;
- Utdata-lag — produserer prediksjoner.
Hvert lag har flere nevroner; utdata fra ett lag blir inndata til det neste.
Lagets vekter og bias
Tidligere lagret et nevron sine vekter som en vektor og bias som en skalar. Et lag inneholder imidlertid mange nevroner, så vektene blir en matrise, der hver rad lagrer vektene til ett nevron. Bias for alle nevronene danner en vektor.
For et lag med 3 inndata og 2 nevroner:
W=[W11W21W12W22W13W23],b=[b1b2]Her er Wij vekten fra den j-te inndataen til det i-te nevronet; bi er bias for nevron i.
Fremoverpropagering
Fremoverpropagering aktiverer hvert nevron ved å beregne en vektet sum, legge til bias og bruke aktiveringsfunksjonen.
Tidligere brukte et enkelt nevron:
[ z = W \cdot x + b ]
Nå, siden hver rad i (W) er en nevron-vektor for vekter, vil matrise-multiplikasjon mellom vektmatrisen og inndatavektoren automatisk beregne alle nevronenes vektede summer samtidig.
For å legge til biasene til utgangene fra de respektive nevronene, må en vektor av biaser også legges til:
Til slutt brukes aktiveringsfunksjonen på resultatet — sigmoid eller ReLU i vårt tilfelle. Den resulterende formelen for fremoverpropagering i laget er som følger:
a=activation(Wx+b)hvor a er vektoren av nevronaktiveringer (utganger).
Layer-klasse
Siden MLP-er er bygget opp av lag, definerer vi en dedikert Layer-klasse. Dens attributter:
inputs: input-vektor (n_inputselementer);outputs: rå nevronutganger (n_neuronselementer);weights: vektmatrise;biases: bias-vektor;activation_function: aktiveringsfunksjon brukt i laget.
Vekter og biaser initialiseres med tilfeldige verdier fra en uniform fordeling i ([-1, 1]). inputs og outputs initialiseres som nullfylte NumPy-arrays for å sikre konsistente former for senere tilbakepropagering.
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
Initialisering av inputs og outputs med nullverdier forhindrer formfeil og sikrer at lagene forblir konsistente under både fremover- og bakoverpasseringer.
Forward-metode
Fremoverpropagering for et lag beregner rå utdata og anvender aktiveringsfunksjonen:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
Omforming av input til en kolonnevektor sikrer korrekt multiplikasjon med vektmatrisen og at dimensjonene samsvarer gjennom hele nettverket.
Om ønskelig kan jeg også forkorte dette ytterligere, lage et diagram over lagstrukturen eller generere fullstendig fungerende kode for Layer-klassen.
1. Hva gjør et flerlags 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