Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Perceptronlag | Neuralt Netværk fra Bunden
Introduktion til neurale netværk

bookPerceptronlag

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:

  1. Inputlag: modtager inputdata;
  2. Skjulte lag: behandler dataene og udtrækker meningsfulde mønstre;
  3. 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 33 input og 22 neuroner, vil dets vægtninger blive gemt i en 2×32 \times 3 matrix WW og dets bias vil blive gemt i en 2×12 \times 1 vektor bb, som ser således ud:

W=[W11W12W13W21W22W23]b=[b1b2]W = \begin{bmatrix} W_{11} & W_{12} & W_{13}\\ W_{21} & W_{22} & W_{23} \end{bmatrix} \qquad b = \begin{bmatrix} b_1\\ b_2 \end{bmatrix}

Her repræsenterer elementet WijW_{ij} vægtningen af et jj-te input til den ii-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 bib_i repræsenterer bias for den ii-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)a = activation(Wx + b)

hvor aa 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_inputs er antallet af input);
  • outputs: en vektor af rå outputværdier (før aktiveringsfunktionen anvendes) for neuronerne (n_neurons er 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.

Note
Bemærk

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 ...
Note
Bemærk

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?

question mark

Hvad gør et multilagsperceptron (MLP) mere kraftfuldt end et simpelt perceptron?

Select the correct answer

question mark

Hvorfor er det nødvendigt at anvende denne kode, før inputs multipliceres med vægtmatricen?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

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

bookPerceptronlag

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:

  1. Inputlag: modtager inputdata;
  2. Skjulte lag: behandler dataene og udtrækker meningsfulde mønstre;
  3. 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 33 input og 22 neuroner, vil dets vægtninger blive gemt i en 2×32 \times 3 matrix WW og dets bias vil blive gemt i en 2×12 \times 1 vektor bb, som ser således ud:

W=[W11W12W13W21W22W23]b=[b1b2]W = \begin{bmatrix} W_{11} & W_{12} & W_{13}\\ W_{21} & W_{22} & W_{23} \end{bmatrix} \qquad b = \begin{bmatrix} b_1\\ b_2 \end{bmatrix}

Her repræsenterer elementet WijW_{ij} vægtningen af et jj-te input til den ii-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 bib_i repræsenterer bias for den ii-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)a = activation(Wx + b)

hvor aa 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_inputs er antallet af input);
  • outputs: en vektor af rå outputværdier (før aktiveringsfunktionen anvendes) for neuronerne (n_neurons er 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.

Note
Bemærk

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 ...
Note
Bemærk

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?

question mark

Hvad gør et multilagsperceptron (MLP) mere kraftfuldt end et simpelt perceptron?

Select the correct answer

question mark

Hvorfor er det nødvendigt at anvende denne kode, før inputs multipliceres med vægtmatricen?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 3
some-alt