Perceptronlag
Perceptron henviser til den simpleste type af neuralt netværk, som kun består af én neuron. For at håndtere mere komplekse problemer anvendes en model kendt som en multilags-perceptron (MLP). En multilags-perceptron indeholder et eller flere skjulte lag, der gør det muligt for netværket at lære indviklede mønstre i data.
Strukturen af en multilags-perceptron omfatter:
- Inputlag: modtager inputdata;
- Skjulte lag: behandler dataene og udtrækker meningsfulde mønstre;
- Outputlag: producerer den endelige forudsigelse eller klassifikation.
Hvert lag består af flere neuroner, og outputtet fra ét lag fungerer som input til det næste lag.
Lagvægtninger og bias
Før implementering af et lag er det vigtigt at forstå, hvordan man gemmer vægtninger og bias for hver neuron i laget. I det forrige kapitel lærte du, hvordan vægtningerne for en enkelt neuron kan gemmes som en vektor, og dens bias som en skalar (enkelt tal).
Da et lag består af flere neuroner, er det naturligt at repræsentere vægtningerne som en matrix, hvor hver række svarer til vægtningerne for en specifik neuron. Bias kan derfor repræsenteres som en vektor, hvis længde svarer til antallet af neuroner.
Givet et lag med 3 input og 2 neuroner, vil dets vægtninger blive gemt i en 2×3 matrix W og dets bias vil blive gemt i en 2×1 vektor b, som ser således ud:
W=[W11W21W12W22W13W23]b=[b1b2]Her repræsenterer elementet Wij vægtningen af et j-te input til den i-te neuron, så den første række indeholder vægtningerne for den første neuron, og den anden række indeholder vægtningerne for den anden neuron. Elementet bi repræsenterer bias for den i-te neuron (to neuroner – to biasværdier).
Fremadrettet Propagering
At udføre fremadrettet propagering for hvert lag betyder at aktivere hver af dets neuroner ved at beregne den vægtede sum af inputtene, tilføje bias, og anvende aktiveringsfunktionen.
Tidligere, for en enkelt neuron, implementerede du den vægtede sum af inputtene ved at beregne et prikprodukt mellem inputvektoren og vægtvektoren og tilføje bias.
Da hver række i vægtmatricen indeholder vægtvektoren for en bestemt neuron, skal du nu blot udføre et prikprodukt mellem hver række i matricen og inputvektoren. Heldigvis er det præcis, hvad matrixmultiplikation gør:
For at tilføje bias til outputtene fra de respektive neuroner, skal en vektor af bias også tilføjes:
Endelig anvendes aktiveringsfunktionen på resultatet — sigmoid eller ReLU i dette tilfælde. Den resulterende formel for fremadrettet propagering i laget er som følger:
a=activation(Wx+b)hvor a er vektoren af neuronaktiveringer (output).
Lagklasse
Perceptronets grundlæggende byggesten er dets lag, derfor giver det mening at oprette en separat Layer-klasse. Dens attributter omfatter:
inputs: en vektor af input (n_inputser antallet af input);outputs: en vektor af rå outputværdier (før aktiveringsfunktionen anvendes) for neuronerne (n_neuronser antallet af neuroner);weights: en vægtmatrix;biases: en bias-vektor;activation_function: aktiveringsfunktionen, der bruges i laget.
Ligesom i implementeringen af en enkelt neuron vil weights og biases blive initialiseret med tilfældige værdier mellem -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
Attributterne inputs og outputs vil blive brugt senere i backpropagation, så det giver mening at initialisere dem som NumPy-arrays fyldt med nuller.
Initialisering af inputs og outputs som nul-fyldte NumPy-arrays forhindrer fejl ved beregninger i fremad- og bagudpropagering. Det sikrer også konsistens på tværs af lagene, hvilket muliggør glatte matrixoperationer uden behov for yderligere kontrol.
Fremadpropagering kan implementeres i forward()-metoden, hvor outputs beregnes ud fra inputs-vektoren ved hjælp af NumPy, efter formlen ovenfor:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Omformning af inputs til en kolonnevektor sikrer korrekt matrixmultiplikation med vægtmatricen under fremadpropagering. Dette forhindrer formfejl og muliggør problemfri beregninger på tværs af alle lag.
1. Hvad gør et multilagsperceptron (MLP) mere kraftfuldt end et simpelt perceptron?
2. Hvorfor er det nødvendigt at anvende denne kode, før inputs multipliceres med vægtmatricen?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 4
Perceptronlag
Stryg for at vise menuen
Perceptron henviser til den simpleste type af neuralt netværk, som kun består af én neuron. For at håndtere mere komplekse problemer anvendes en model kendt som en multilags-perceptron (MLP). En multilags-perceptron indeholder et eller flere skjulte lag, der gør det muligt for netværket at lære indviklede mønstre i data.
Strukturen af en multilags-perceptron omfatter:
- Inputlag: modtager inputdata;
- Skjulte lag: behandler dataene og udtrækker meningsfulde mønstre;
- Outputlag: producerer den endelige forudsigelse eller klassifikation.
Hvert lag består af flere neuroner, og outputtet fra ét lag fungerer som input til det næste lag.
Lagvægtninger og bias
Før implementering af et lag er det vigtigt at forstå, hvordan man gemmer vægtninger og bias for hver neuron i laget. I det forrige kapitel lærte du, hvordan vægtningerne for en enkelt neuron kan gemmes som en vektor, og dens bias som en skalar (enkelt tal).
Da et lag består af flere neuroner, er det naturligt at repræsentere vægtningerne som en matrix, hvor hver række svarer til vægtningerne for en specifik neuron. Bias kan derfor repræsenteres som en vektor, hvis længde svarer til antallet af neuroner.
Givet et lag med 3 input og 2 neuroner, vil dets vægtninger blive gemt i en 2×3 matrix W og dets bias vil blive gemt i en 2×1 vektor b, som ser således ud:
W=[W11W21W12W22W13W23]b=[b1b2]Her repræsenterer elementet Wij vægtningen af et j-te input til den i-te neuron, så den første række indeholder vægtningerne for den første neuron, og den anden række indeholder vægtningerne for den anden neuron. Elementet bi repræsenterer bias for den i-te neuron (to neuroner – to biasværdier).
Fremadrettet Propagering
At udføre fremadrettet propagering for hvert lag betyder at aktivere hver af dets neuroner ved at beregne den vægtede sum af inputtene, tilføje bias, og anvende aktiveringsfunktionen.
Tidligere, for en enkelt neuron, implementerede du den vægtede sum af inputtene ved at beregne et prikprodukt mellem inputvektoren og vægtvektoren og tilføje bias.
Da hver række i vægtmatricen indeholder vægtvektoren for en bestemt neuron, skal du nu blot udføre et prikprodukt mellem hver række i matricen og inputvektoren. Heldigvis er det præcis, hvad matrixmultiplikation gør:
For at tilføje bias til outputtene fra de respektive neuroner, skal en vektor af bias også tilføjes:
Endelig anvendes aktiveringsfunktionen på resultatet — sigmoid eller ReLU i dette tilfælde. Den resulterende formel for fremadrettet propagering i laget er som følger:
a=activation(Wx+b)hvor a er vektoren af neuronaktiveringer (output).
Lagklasse
Perceptronets grundlæggende byggesten er dets lag, derfor giver det mening at oprette en separat Layer-klasse. Dens attributter omfatter:
inputs: en vektor af input (n_inputser antallet af input);outputs: en vektor af rå outputværdier (før aktiveringsfunktionen anvendes) for neuronerne (n_neuronser antallet af neuroner);weights: en vægtmatrix;biases: en bias-vektor;activation_function: aktiveringsfunktionen, der bruges i laget.
Ligesom i implementeringen af en enkelt neuron vil weights og biases blive initialiseret med tilfældige værdier mellem -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
Attributterne inputs og outputs vil blive brugt senere i backpropagation, så det giver mening at initialisere dem som NumPy-arrays fyldt med nuller.
Initialisering af inputs og outputs som nul-fyldte NumPy-arrays forhindrer fejl ved beregninger i fremad- og bagudpropagering. Det sikrer også konsistens på tværs af lagene, hvilket muliggør glatte matrixoperationer uden behov for yderligere kontrol.
Fremadpropagering kan implementeres i forward()-metoden, hvor outputs beregnes ud fra inputs-vektoren ved hjælp af NumPy, efter formlen ovenfor:
def forward(self, inputs):
self.inputs = np.array(inputs).reshape(-1, 1)
# Raw outputs
self.outputs = ...
# Applying the activation function
return ...
Omformning af inputs til en kolonnevektor sikrer korrekt matrixmultiplikation med vægtmatricen under fremadpropagering. Dette forhindrer formfejl og muliggør problemfri beregninger på tværs af alle lag.
1. Hvad gør et multilagsperceptron (MLP) mere kraftfuldt end et simpelt perceptron?
2. Hvorfor er det nødvendigt at anvende denne kode, før inputs multipliceres med vægtmatricen?
Tak for dine kommentarer!