Perceptronlager
Perceptron är det enklaste neurala nätverket—endast en neuron. För mer komplexa uppgifter används ett multilagerperceptron (MLP), som innehåller en eller flera dolda lager som gör det möjligt för nätverket att lära sig mer avancerade mönster.
Ett MLP består av:
- Ingångslager — tar emot data;
- Dolda lager — extraherar mönster;
- Utgångslager — genererar prediktioner.
Varje lager har flera neuroner; utgången från ett lager blir ingången till nästa.
Lagerns vikter och bias
Tidigare lagrade en neuron sina vikter som en vektor och bias som en skalär. Ett lager innehåller dock många neuroner, så dess vikter blir en matris, där varje rad lagrar vikterna för en neuron. Bias för alla neuroner bildar en vektor.
För ett lager med 3 ingångar och 2 neuroner:
W=[W11W21W12W22W13W23],b=[b1b2]Här är Wij vikten från den j:e ingången till den i:e neuronen; bi är bias för neuron i.
Framåtriktad propagiering
Framåtriktad propagiering aktiverar varje neuron genom att beräkna en viktad summa, addera bias och tillämpa aktiveringsfunktionen.
Tidigare använde en enskild neuron:
[ z = W \cdot x + b ]
Nu, eftersom varje rad i (W) är en neurons viktvektor, beräknar matrismultiplikation mellan viktmatrisen och ingångsvektorn automatiskt alla neuronernas viktade summor samtidigt.
För att lägga till bias till utgångarna från respektive neuron, ska en bias-vektor också adderas:
Slutligen appliceras aktiveringsfunktionen på resultatet — sigmoid eller ReLU i vårt fall. Den resulterande formeln för framåtriktad propagiering i lagret är följande:
a=activation(Wx+b)där a är vektorn av neuronaktiveringar (utgångar).
Lagerklass
Eftersom MLP:er byggs upp av lager definieras en dedikerad Layer-klass. Dess attribut:
inputs: indata-vektor (n_inputselement);outputs: råa neuronutgångar (n_neuronselement);weights: viktmatris;biases: bias-vektor;activation_function: aktiveringsfunktion som används i lagret.
Vikter och bias initieras med slumpmässiga värden från en uniform fördelning i ([-1, 1]). inputs och outputs initieras som nollfyllda NumPy-arrayer för att säkerställa konsekventa former för senare backpropagering.
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
Att initiera inputs och outputs med nollor förhindrar formfel och säkerställer att lagren förblir konsekventa under både framåt- och bakåtriktade pass.
Forward-metod
Framåtriktad propagiering för ett lager beräknar råa utdata och applicerar aktiveringsfunktionen:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
Omformning av indata till en kolumnvektor säkerställer korrekt multiplikation med viktmatrisen och att dimensionerna matchar genom hela nätverket.
Om så önskas kan jag även förkorta detta ytterligare, skapa ett diagram över lagerstrukturen eller generera den fullständiga fungerande koden för Layer-klassen.
1. Vad gör ett flerskiktsperceptron (MLP) mer kraftfullt än ett enkelt perceptron?
2. Varför är det nödvändigt att använda denna kod innan inputs multipliceras med viktmatrisen?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you explain how the weights and biases are initialized in the Layer class?
What activation functions can I use in the Layer class?
Can you walk me through how forward propagation works step by step?
Awesome!
Completion rate improved to 4
Perceptronlager
Svep för att visa menyn
Perceptron är det enklaste neurala nätverket—endast en neuron. För mer komplexa uppgifter används ett multilagerperceptron (MLP), som innehåller en eller flera dolda lager som gör det möjligt för nätverket att lära sig mer avancerade mönster.
Ett MLP består av:
- Ingångslager — tar emot data;
- Dolda lager — extraherar mönster;
- Utgångslager — genererar prediktioner.
Varje lager har flera neuroner; utgången från ett lager blir ingången till nästa.
Lagerns vikter och bias
Tidigare lagrade en neuron sina vikter som en vektor och bias som en skalär. Ett lager innehåller dock många neuroner, så dess vikter blir en matris, där varje rad lagrar vikterna för en neuron. Bias för alla neuroner bildar en vektor.
För ett lager med 3 ingångar och 2 neuroner:
W=[W11W21W12W22W13W23],b=[b1b2]Här är Wij vikten från den j:e ingången till den i:e neuronen; bi är bias för neuron i.
Framåtriktad propagiering
Framåtriktad propagiering aktiverar varje neuron genom att beräkna en viktad summa, addera bias och tillämpa aktiveringsfunktionen.
Tidigare använde en enskild neuron:
[ z = W \cdot x + b ]
Nu, eftersom varje rad i (W) är en neurons viktvektor, beräknar matrismultiplikation mellan viktmatrisen och ingångsvektorn automatiskt alla neuronernas viktade summor samtidigt.
För att lägga till bias till utgångarna från respektive neuron, ska en bias-vektor också adderas:
Slutligen appliceras aktiveringsfunktionen på resultatet — sigmoid eller ReLU i vårt fall. Den resulterande formeln för framåtriktad propagiering i lagret är följande:
a=activation(Wx+b)där a är vektorn av neuronaktiveringar (utgångar).
Lagerklass
Eftersom MLP:er byggs upp av lager definieras en dedikerad Layer-klass. Dess attribut:
inputs: indata-vektor (n_inputselement);outputs: råa neuronutgångar (n_neuronselement);weights: viktmatris;biases: bias-vektor;activation_function: aktiveringsfunktion som används i lagret.
Vikter och bias initieras med slumpmässiga värden från en uniform fördelning i ([-1, 1]). inputs och outputs initieras som nollfyllda NumPy-arrayer för att säkerställa konsekventa former för senare backpropagering.
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
Att initiera inputs och outputs med nollor förhindrar formfel och säkerställer att lagren förblir konsekventa under både framåt- och bakåtriktade pass.
Forward-metod
Framåtriktad propagiering för ett lager beräknar råa utdata och applicerar aktiveringsfunktionen:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs: weighted sum + bias
self.outputs = ...
# Apply activation
return ...
Omformning av indata till en kolumnvektor säkerställer korrekt multiplikation med viktmatrisen och att dimensionerna matchar genom hela nätverket.
Om så önskas kan jag även förkorta detta ytterligare, skapa ett diagram över lagerstrukturen eller generera den fullständiga fungerande koden för Layer-klassen.
1. Vad gör ett flerskiktsperceptron (MLP) mer kraftfullt än ett enkelt perceptron?
2. Varför är det nödvändigt att använda denna kod innan inputs multipliceras med viktmatrisen?
Tack för dina kommentarer!