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 dette eksempel er målet at opbygge et neuralt netværk med en enkelt neuron. Det skal bruges til en binær klassifikationsopgave, såsom spam-detektion, hvor 0 svarer til en ham (ikke-spam) e-mail og 1 svarer til en spam-e-mail.
Neuronen modtager numeriske egenskaber udtrukket fra e-mails som input og producerer et output mellem 0 og 1, der repræsenterer sandsynligheden for, at en given 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 vigtigheden af hvert input;
- Alle vægtede input bliver lagt sammen;
- Et bias-led bliver lagt til input-summen, hvilket gør det muligt for neuronen at flytte sit output og giver modellen ekstra fleksibilitet;
- Summen sendes gennem en aktiveringsfunktion. Fordi en enkelt neuron direkte producerer det endelige output (en sandsynlighed), bruges sigmoid-funktionen til at komprimere værdier til intervallet (0,1).
Bias for neuronet er også en trænelig parameter.
Neuron-klasse
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_inputser 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
Neuron-klassen bør inkludere en activate()-metode, der beregner den vægtede sum af inputtene og derefter anvender aktiveringsfunktionen (sigmoidfunktionen i dette tilfælde).
Når to vektorer af samme længde — weights og inputs — er tilgængelige, kan den vægtede sum effektivt beregnes ved hjælp af dotproduktet af disse vektorer.
Dette gør det muligt at beregne den vægtede sum i én linje kode ved hjælp af funktionen numpy.dot(), hvilket eliminerer behovet for en løkke. Bias kan derefter tilføjes 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 the random initialization?
How do I use the activate method with some example inputs?
What is the difference between using sigmoid and ReLU in this context?
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 dette eksempel er målet at opbygge et neuralt netværk med en enkelt neuron. Det skal bruges til en binær klassifikationsopgave, såsom spam-detektion, hvor 0 svarer til en ham (ikke-spam) e-mail og 1 svarer til en spam-e-mail.
Neuronen modtager numeriske egenskaber udtrukket fra e-mails som input og producerer et output mellem 0 og 1, der repræsenterer sandsynligheden for, at en given 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 vigtigheden af hvert input;
- Alle vægtede input bliver lagt sammen;
- Et bias-led bliver lagt til input-summen, hvilket gør det muligt for neuronen at flytte sit output og giver modellen ekstra fleksibilitet;
- Summen sendes gennem en aktiveringsfunktion. Fordi en enkelt neuron direkte producerer det endelige output (en sandsynlighed), bruges sigmoid-funktionen til at komprimere værdier til intervallet (0,1).
Bias for neuronet er også en trænelig parameter.
Neuron-klasse
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_inputser 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
Neuron-klassen bør inkludere en activate()-metode, der beregner den vægtede sum af inputtene og derefter anvender aktiveringsfunktionen (sigmoidfunktionen i dette tilfælde).
Når to vektorer af samme længde — weights og inputs — er tilgængelige, kan den vægtede sum effektivt beregnes ved hjælp af dotproduktet af disse vektorer.
Dette gør det muligt at beregne den vægtede sum i én linje kode ved hjælp af funktionen numpy.dot(), hvilket eliminerer behovet for en løkke. Bias kan derefter tilføjes 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!