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

bookImplementering af Enkelt Neuron

Note
Definition

En neuron er den grundlæggende beregningsenhed i et neuralt netværk. Den behandler flere input og genererer et enkelt output, hvilket gør det muligt for netværket at lære og lave forudsigelser.

I første omgang ønsker vi at opbygge et neuralt netværk med en enkelt neuron. Som eksempel kan vi bruge det til en binær klassifikationsopgave, såsom spam-detektion, hvor 0 repræsenterer en ham (ikke-spam) e-mail og 1 repræsenterer en spam-e-mail.

Neuronen vil tage numeriske egenskaber relateret til e-mails som input og producere et output mellem 0 og 1, hvilket repræsenterer sandsynligheden for, at en e-mail er spam.

Her er, hvad der sker trin for trin:

  1. Hver input bliver ganget med en tilsvarende vægt. Vægtene er lærbare parametre, der bestemmer betydningen af hvert input;
  2. Alle de vægtede input bliver lagt sammen;
  3. En yderligere parameter kaldet bias bliver lagt til inputsummen. Bias gør det muligt for neuronen at flytte sit output op eller ned og giver fleksibilitet til modellen;
  4. Inputsummen sendes derefter gennem en aktiveringsfunktion. Da vi kun har en enkelt neuron, som direkte producerer det endelige output (en sandsynlighed), bruger vi sigmoid-funktionen, som komprimerer værdier til intervallet (0,1)(0, 1).
Note
Bemærk

Bias for neuronet er også en trænelig parameter.

Neuronklasse

En neuron skal gemme sine vægte og bias, hvilket gør en klasse til en naturlig måde at gruppere disse relaterede egenskaber på.

Note
Bemærk

Selvom denne klasse ikke vil indgå i den endelige neurale netværksimplementering, illustrerer den effektivt centrale principper.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: en liste af tilfældigt initialiserede værdier, der bestemmer, hvor vigtig hver input (n_inputs er antallet af inputs) er for neuronet;
  • bias: en tilfældig initialiseret værdi, der hjælper neuronet med at træffe fleksible beslutninger.

Vægte og bias skal tilfældigvis initialiseres med små værdier mellem -1 og 1, trukket fra en uniform fordeling, for at bryde symmetri og sikre, at forskellige neuroner lærer forskellige egenskaber.

Til opsummering tilbyder NumPy funktionen random.uniform() til at generere et tilfældigt tal eller et array (ved at angive argumentet size) af tilfældige tal fra en uniform fordeling inden for intervallet [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Fremadrettet Propagering

Derudover bør Neuron-klassen inkludere en activate()-metode, som beregner den vægtede sum af inputtene og anvender aktiveringsfunktionen (sigmoid i dette tilfælde).

Hvis vi har to vektorer af samme længde (weights og inputs), kan den vægtede sum beregnes ved hjælp af dot-produktet af disse vektorer:

Dette gør det muligt at beregne den vægtede sum i én linje kode ved at bruge funktionen numpy.dot(), hvilket eliminerer behovet for en løkke. Bias kan derefter lægges direkte til resultatet for at få input_sum_with_bias. Outputtet beregnes derefter ved at anvende sigmoid aktiveringsfunktionen:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktiveringsfunktioner

Formlen for sigmoid-funktionen er som følger, hvor zz repræsenterer den vægtede sum af input med bias tilføjet (rå outputværdi) for denne specifikke neuron:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Ved brug af denne formel kan sigmoid implementeres som en simpel funktion i Python:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

Formlen for ReLU-funktionen er som følger, hvilket grundlæggende sætter output lig med zz, hvis det er positivt, og 0 ellers:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Hvad er bias-termens rolle i en enkelt neuron?

2. Hvorfor initialiserer vi vægte med små tilfældige værdier i stedet for nuller?

question mark

Hvad er bias-termens rolle i en enkelt neuron?

Select the correct answer

question mark

Hvorfor initialiserer vi vægte med små tilfældige værdier i stedet for nuller?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 1

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

Suggested prompts:

Can you show me how to complete the Neuron class with random initialization?

How does the activate method work in practice?

Can you explain why we use the sigmoid function for binary classification?

Awesome!

Completion rate improved to 4

bookImplementering af Enkelt Neuron

Stryg for at vise menuen

Note
Definition

En neuron er den grundlæggende beregningsenhed i et neuralt netværk. Den behandler flere input og genererer et enkelt output, hvilket gør det muligt for netværket at lære og lave forudsigelser.

I første omgang ønsker vi at opbygge et neuralt netværk med en enkelt neuron. Som eksempel kan vi bruge det til en binær klassifikationsopgave, såsom spam-detektion, hvor 0 repræsenterer en ham (ikke-spam) e-mail og 1 repræsenterer en spam-e-mail.

Neuronen vil tage numeriske egenskaber relateret til e-mails som input og producere et output mellem 0 og 1, hvilket repræsenterer sandsynligheden for, at en e-mail er spam.

Her er, hvad der sker trin for trin:

  1. Hver input bliver ganget med en tilsvarende vægt. Vægtene er lærbare parametre, der bestemmer betydningen af hvert input;
  2. Alle de vægtede input bliver lagt sammen;
  3. En yderligere parameter kaldet bias bliver lagt til inputsummen. Bias gør det muligt for neuronen at flytte sit output op eller ned og giver fleksibilitet til modellen;
  4. Inputsummen sendes derefter gennem en aktiveringsfunktion. Da vi kun har en enkelt neuron, som direkte producerer det endelige output (en sandsynlighed), bruger vi sigmoid-funktionen, som komprimerer værdier til intervallet (0,1)(0, 1).
Note
Bemærk

Bias for neuronet er også en trænelig parameter.

Neuronklasse

En neuron skal gemme sine vægte og bias, hvilket gør en klasse til en naturlig måde at gruppere disse relaterede egenskaber på.

Note
Bemærk

Selvom denne klasse ikke vil indgå i den endelige neurale netværksimplementering, illustrerer den effektivt centrale principper.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: en liste af tilfældigt initialiserede værdier, der bestemmer, hvor vigtig hver input (n_inputs er antallet af inputs) er for neuronet;
  • bias: en tilfældig initialiseret værdi, der hjælper neuronet med at træffe fleksible beslutninger.

Vægte og bias skal tilfældigvis initialiseres med små værdier mellem -1 og 1, trukket fra en uniform fordeling, for at bryde symmetri og sikre, at forskellige neuroner lærer forskellige egenskaber.

Til opsummering tilbyder NumPy funktionen random.uniform() til at generere et tilfældigt tal eller et array (ved at angive argumentet size) af tilfældige tal fra en uniform fordeling inden for intervallet [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Fremadrettet Propagering

Derudover bør Neuron-klassen inkludere en activate()-metode, som beregner den vægtede sum af inputtene og anvender aktiveringsfunktionen (sigmoid i dette tilfælde).

Hvis vi har to vektorer af samme længde (weights og inputs), kan den vægtede sum beregnes ved hjælp af dot-produktet af disse vektorer:

Dette gør det muligt at beregne den vægtede sum i én linje kode ved at bruge funktionen numpy.dot(), hvilket eliminerer behovet for en løkke. Bias kan derefter lægges direkte til resultatet for at få input_sum_with_bias. Outputtet beregnes derefter ved at anvende sigmoid aktiveringsfunktionen:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktiveringsfunktioner

Formlen for sigmoid-funktionen er som følger, hvor zz repræsenterer den vægtede sum af input med bias tilføjet (rå outputværdi) for denne specifikke neuron:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Ved brug af denne formel kan sigmoid implementeres som en simpel funktion i Python:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

Formlen for ReLU-funktionen er som følger, hvilket grundlæggende sætter output lig med zz, hvis det er positivt, og 0 ellers:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Hvad er bias-termens rolle i en enkelt neuron?

2. Hvorfor initialiserer vi vægte med små tilfældige værdier i stedet for nuller?

question mark

Hvad er bias-termens rolle i en enkelt neuron?

Select the correct answer

question mark

Hvorfor initialiserer vi vægte med små tilfældige værdier i stedet for nuller?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 2. Kapitel 1
some-alt