Implementering af Enkelt Neuron
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:
- Hver input bliver ganget med en tilsvarende vægt. Vægtene er lærbare parametre, der bestemmer betydningen af hvert input;
- Alle de vægtede input bliver lagt sammen;
- 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;
- 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).
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å.
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 z repræsenterer den vægtede sum af input med bias tilføjet (rå outputværdi) for denne specifikke neuron:
σ(z)=1+e−z1Ved 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 z, hvis det er positivt, og 0 ellers:
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?
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
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
Implementering af Enkelt Neuron
Stryg for at vise menuen
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:
- Hver input bliver ganget med en tilsvarende vægt. Vægtene er lærbare parametre, der bestemmer betydningen af hvert input;
- Alle de vægtede input bliver lagt sammen;
- 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;
- 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).
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å.
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 z repræsenterer den vægtede sum af input med bias tilføjet (rå outputværdi) for denne specifikke neuron:
σ(z)=1+e−z1Ved 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 z, hvis det er positivt, og 0 ellers:
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?
Tak for dine kommentarer!