Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Perseptronlag | Nevralt Nettverk fra Bunnen Av
Introduksjon til nevrale nettverk

bookPerseptronlag

Perceptron er navnet på det enkleste nevrale nettverket, som består av kun én nevron. For å kunne løse mer komplekse problemer, lager vi en modell kalt multilags perceptron (MLP). Et multilags perceptron består av ett eller flere skjulte lag. Strukturen til et multilags perceptron ser slik ut:

  1. Et inndata-lag: mottar inndataene;
  2. Skjulte lag: disse lagene behandler dataene og trekker ut mønstre.
  3. Utdata-lag: produserer den endelige prediksjonen eller klassifiseringen.

Generelt består hvert lag av flere nevroner, og utdata fra ett lag blir inndata til neste lag.

Lagets vekter og bias

Før implementering av et lag er det viktig å forstå hvordan man lagrer vektene og biasene til hver nevron i laget. I forrige kapittel lærte du hvordan du lagrer vektene til én nevron som en vektor og biasen som en skalar (enkelt tall).

Siden et lag består av flere nevroner, er det naturlig å representere vektene som en matrise, der hver rad tilsvarer vektene til en spesifikk nevron. Biasene kan følgelig representeres som en vektor, hvor lengden er lik antall nevroner.

Gitt et lag med 33 inndata og 22 nevroner, lagres vektene i en 2×32 \times 3 matrise WW og biasene lagres i en 2×12 \times 1 vektor bb, som ser slik ut:

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 representerer elementet WijW_{ij} vekten fra jj.-input til ii.-nevron, så første rad inneholder vektene til første nevron, og andre rad inneholder vektene til andre nevron. Elementet bib_i representerer biasen til ii.-nevron (to nevroner – to biaser).

Fremoverpropagasjon

Å utføre fremoverpropagasjon for hvert lag innebærer å aktivere hver av dets nevroner ved å beregne vektet sum av inngangene, legge til bias, og anvende aktiveringsfunksjonen.

Tidligere, for et enkelt nevron, implementerte du vektet sum av inngangene ved å beregne et prikkprodukt mellom inngangsvektoren og vektvektoren og legge til bias.

Siden hver rad i vektmatrisen inneholder vektvektoren for et bestemt nevron, trenger du nå bare å utføre et prikkprodukt mellom hver rad i matrisen og inngangsvektoren. Heldigvis er dette nøyaktig det matrisemultiplikasjon gjør:

For å legge til biasene til utgangene fra de respektive nevronene, skal en vektor av biaser også legges til:

Til slutt anvendes aktiveringsfunksjonen på resultatet — sigmoid eller ReLU, i vårt tilfelle. Den resulterende formelen for fremoverpropagasjon i laget er som følger:

a=activation(Wx+b)a = activation(Wx + b)

hvor aa er vektoren av nevronaktiveringer (utganger).

Lagklasse

Perceptronens grunnleggende byggeklosser er lagene, derfor er det hensiktsmessig å opprette en egen Layer-klasse. Dens attributter inkluderer:

  • inputs: en vektor med innganger (n_inputs er antall innganger);
  • outputs: en vektor med rå utgangsverdier (før aktiveringsfunksjonen brukes) til nevronene (n_neurons er antall nevroner);
  • weights: en vektmatrise;
  • biases: en bias-vektor;
  • activation_function: aktiveringsfunksjonen som brukes i laget.

Som i implementasjonen av et enkelt nevron, vil weights og biases bli initialisert med tilfeldige verdier mellom -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

Attributtene inputs og outputs vil bli brukt senere i tilbakepropagering, så det er hensiktsmessig å initialisere dem som NumPy-arrays fylt med nuller.

Note
Merk

Initialisering av inputs og outputs som nullfylte NumPy-arrays forhindrer feil ved beregninger i forover- og bakoverpropagering. Det sikrer også konsistens mellom lagene, slik at matriseoperasjoner kan utføres uten ekstra kontroller.

Foroverpropagering kan implementeres i forward()-metoden, der outputs beregnes basert på inputs-vektoren ved bruk av NumPy, i henhold til formelen ovenfor:

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs
    self.outputs = ...
    # Applying the activation function
    return ...
Note
Merk

Omforming av inputs til en kolonnevektor sikrer korrekt matrise-multiplikasjon med vektmatrisen under fremoverpropagering. Dette forhindrer formfeil og muliggjør sømløse beregninger gjennom alle lag.

1. Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?

2. Hvorfor bruker vi denne koden før vi multipliserer inputs med vektmatrisen?

question mark

Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?

Select the correct answer

question mark

Hvorfor bruker vi denne koden før vi multipliserer inputs med vektmatrisen?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how the weights and biases are initialized in the Layer class?

What is the purpose of the activation function in the forward propagation?

Could you show an example of how to use the Layer class for a simple input?

Awesome!

Completion rate improved to 4

bookPerseptronlag

Sveip for å vise menyen

Perceptron er navnet på det enkleste nevrale nettverket, som består av kun én nevron. For å kunne løse mer komplekse problemer, lager vi en modell kalt multilags perceptron (MLP). Et multilags perceptron består av ett eller flere skjulte lag. Strukturen til et multilags perceptron ser slik ut:

  1. Et inndata-lag: mottar inndataene;
  2. Skjulte lag: disse lagene behandler dataene og trekker ut mønstre.
  3. Utdata-lag: produserer den endelige prediksjonen eller klassifiseringen.

Generelt består hvert lag av flere nevroner, og utdata fra ett lag blir inndata til neste lag.

Lagets vekter og bias

Før implementering av et lag er det viktig å forstå hvordan man lagrer vektene og biasene til hver nevron i laget. I forrige kapittel lærte du hvordan du lagrer vektene til én nevron som en vektor og biasen som en skalar (enkelt tall).

Siden et lag består av flere nevroner, er det naturlig å representere vektene som en matrise, der hver rad tilsvarer vektene til en spesifikk nevron. Biasene kan følgelig representeres som en vektor, hvor lengden er lik antall nevroner.

Gitt et lag med 33 inndata og 22 nevroner, lagres vektene i en 2×32 \times 3 matrise WW og biasene lagres i en 2×12 \times 1 vektor bb, som ser slik ut:

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 representerer elementet WijW_{ij} vekten fra jj.-input til ii.-nevron, så første rad inneholder vektene til første nevron, og andre rad inneholder vektene til andre nevron. Elementet bib_i representerer biasen til ii.-nevron (to nevroner – to biaser).

Fremoverpropagasjon

Å utføre fremoverpropagasjon for hvert lag innebærer å aktivere hver av dets nevroner ved å beregne vektet sum av inngangene, legge til bias, og anvende aktiveringsfunksjonen.

Tidligere, for et enkelt nevron, implementerte du vektet sum av inngangene ved å beregne et prikkprodukt mellom inngangsvektoren og vektvektoren og legge til bias.

Siden hver rad i vektmatrisen inneholder vektvektoren for et bestemt nevron, trenger du nå bare å utføre et prikkprodukt mellom hver rad i matrisen og inngangsvektoren. Heldigvis er dette nøyaktig det matrisemultiplikasjon gjør:

For å legge til biasene til utgangene fra de respektive nevronene, skal en vektor av biaser også legges til:

Til slutt anvendes aktiveringsfunksjonen på resultatet — sigmoid eller ReLU, i vårt tilfelle. Den resulterende formelen for fremoverpropagasjon i laget er som følger:

a=activation(Wx+b)a = activation(Wx + b)

hvor aa er vektoren av nevronaktiveringer (utganger).

Lagklasse

Perceptronens grunnleggende byggeklosser er lagene, derfor er det hensiktsmessig å opprette en egen Layer-klasse. Dens attributter inkluderer:

  • inputs: en vektor med innganger (n_inputs er antall innganger);
  • outputs: en vektor med rå utgangsverdier (før aktiveringsfunksjonen brukes) til nevronene (n_neurons er antall nevroner);
  • weights: en vektmatrise;
  • biases: en bias-vektor;
  • activation_function: aktiveringsfunksjonen som brukes i laget.

Som i implementasjonen av et enkelt nevron, vil weights og biases bli initialisert med tilfeldige verdier mellom -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

Attributtene inputs og outputs vil bli brukt senere i tilbakepropagering, så det er hensiktsmessig å initialisere dem som NumPy-arrays fylt med nuller.

Note
Merk

Initialisering av inputs og outputs som nullfylte NumPy-arrays forhindrer feil ved beregninger i forover- og bakoverpropagering. Det sikrer også konsistens mellom lagene, slik at matriseoperasjoner kan utføres uten ekstra kontroller.

Foroverpropagering kan implementeres i forward()-metoden, der outputs beregnes basert på inputs-vektoren ved bruk av NumPy, i henhold til formelen ovenfor:

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs
    self.outputs = ...
    # Applying the activation function
    return ...
Note
Merk

Omforming av inputs til en kolonnevektor sikrer korrekt matrise-multiplikasjon med vektmatrisen under fremoverpropagering. Dette forhindrer formfeil og muliggjør sømløse beregninger gjennom alle lag.

1. Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?

2. Hvorfor bruker vi denne koden før vi multipliserer inputs med vektmatrisen?

question mark

Hva gjør et multilags perceptron (MLP) mer kraftfullt enn et enkelt perceptron?

Select the correct answer

question mark

Hvorfor bruker vi denne koden før vi multipliserer inputs med vektmatrisen?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3
some-alt