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

bookPerceptron-lag

Perceptron er navnet på det simpleste neurale netværk, som kun består af én neuron. For at kunne løse mere komplekse problemer opretter vi dog en model kaldet multilags perceptron (MLP). En multilags perceptron består af et eller flere skjulte lag. Strukturen af en multilags perceptron ser således ud:

  1. Et inputlag: modtager inputdata;
  2. Skjulte lag: disse lag behandler dataene og udtrækker mønstre.
  3. Outputlag: producerer den endelige forudsigelse eller klassifikation.

Generelt består hvert lag af flere neuroner, og outputtet fra ét lag bliver input til det næste lag.

Lagets vægte og bias

Før implementering af et lag er det vigtigt at forstå, hvordan man gemmer vægtene og bias for hver neuron i laget. I det forrige kapitel lærte du, hvordan vægtene 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ægtene som en matrix, hvor hver række svarer til vægtene for en bestemt neuron. Bias kan derfor repræsenteres som en vektor, hvis længde er lig med antallet af neuroner.

Givet et lag med 33 input og 22 neuroner, gemmes vægtene i en 2×32 \times 3 matrix WW og bias gemmes 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ægten af et jj-te input til den ii-te neuron, så den første række indeholder vægtene for den første neuron, og den anden række indeholder vægtene for den anden neuron. Elementet bib_i repræsenterer bias for den ii-te neuron (to neuroner – to bias).

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

Perceptronens grundlæggende byggesten er dens 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 under 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, i henhold til ovenstående formel:

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 uoverensstemmelser i dimensioner og muliggør problemfri beregninger på tværs af alle lag.

1. Hvad gør et multilags-perceptron (MLP) mere kraftfuldt end et simpelt perceptron?

2. Hvorfor anvender vi denne kode, før vi multiplicerer inputs med vægtmatricen?

question mark

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

Select the correct answer

question mark

Hvorfor anvender vi denne kode, før vi multiplicerer inputs 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

bookPerceptron-lag

Stryg for at vise menuen

Perceptron er navnet på det simpleste neurale netværk, som kun består af én neuron. For at kunne løse mere komplekse problemer opretter vi dog en model kaldet multilags perceptron (MLP). En multilags perceptron består af et eller flere skjulte lag. Strukturen af en multilags perceptron ser således ud:

  1. Et inputlag: modtager inputdata;
  2. Skjulte lag: disse lag behandler dataene og udtrækker mønstre.
  3. Outputlag: producerer den endelige forudsigelse eller klassifikation.

Generelt består hvert lag af flere neuroner, og outputtet fra ét lag bliver input til det næste lag.

Lagets vægte og bias

Før implementering af et lag er det vigtigt at forstå, hvordan man gemmer vægtene og bias for hver neuron i laget. I det forrige kapitel lærte du, hvordan vægtene 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ægtene som en matrix, hvor hver række svarer til vægtene for en bestemt neuron. Bias kan derfor repræsenteres som en vektor, hvis længde er lig med antallet af neuroner.

Givet et lag med 33 input og 22 neuroner, gemmes vægtene i en 2×32 \times 3 matrix WW og bias gemmes 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ægten af et jj-te input til den ii-te neuron, så den første række indeholder vægtene for den første neuron, og den anden række indeholder vægtene for den anden neuron. Elementet bib_i repræsenterer bias for den ii-te neuron (to neuroner – to bias).

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

Perceptronens grundlæggende byggesten er dens 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 under 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, i henhold til ovenstående formel:

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 uoverensstemmelser i dimensioner og muliggør problemfri beregninger på tværs af alle lag.

1. Hvad gør et multilags-perceptron (MLP) mere kraftfuldt end et simpelt perceptron?

2. Hvorfor anvender vi denne kode, før vi multiplicerer inputs med vægtmatricen?

question mark

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

Select the correct answer

question mark

Hvorfor anvender vi denne kode, før vi multiplicerer inputs 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