Implementering av Enkeltnevron
Sveip for å vise menyen
En nevron er den grunnleggende beregningsenheten i et nevralt nettverk. Den behandler flere innganger og genererer en enkel utgang, noe som gjør det mulig for nettverket å lære og gjøre prediksjoner.
I dette eksemplet bygger vi et nevralt nettverk med én nevron for en binær klassifiseringsoppgave (f.eks. spamdeteksjon). Nevronen mottar numeriske egenskaper og gir en verdi mellom 0 og 1, som representerer sannsynligheten for at en e-post er spam (1) eller ham (0).
Trinnvis:
- Multipliser hver input med sin vekt;
- Summer alle vektede input;
- Legg til en bias for å forskyve utdataen;
- Send resultatet gjennom en sigmoid-aktivering, som konverterer det til området ((0,1)) for sannsynlighetsutdata.
Bias til nevronet er også en trenbar parameter.
Nevronklasse
En nevron må lagre sine vekter og bias, noe som gjør en klasse til en naturlig måte å gruppere disse relaterte egenskapene på.
Selv om denne klassen ikke vil være en del av den endelige implementasjonen av nevrale nettverk, illustrerer den effektivt viktige prinsipper.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: tilfeldig initierte verdier (én per input);bias: én tilfeldig verdi. Begge trekkes fra en uniform fordeling i ([-1, 1]) ved bruk avnp.random.uniform()for å bryte symmetri.
Fremoverpropagering
Neuronets activate()-metode beregner vektet sum og anvender sigmoid.
Den vektede summen bruker prikkproduktet av vektene og inputene:
input_sum_with_bias = np.dot(self.weights, inputs) + self.bias
Deretter anvendes aktiveringsfunksjonen for å få neuronets endelige output.
Bruk av np.dot() unngår løkker og beregner hele den vektede summen på én linje.
Sigmoid-funksjonen omformer deretter denne råverdien til en sannsynlighet:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Sigmoid-aktivering
Gitt råutgang (z), er sigmoid:
σ(z)=1+e−z1Den kartlegger ethvert tall til ((0,1)), noe som gjør den ideell for binær klassifisering, der nevronets utgang må representere en sannsynlighet.
Ved å bruke denne formelen kan sigmoid implementeres som en enkel funksjon i Python:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Formelen for ReLU-funksjonen er som følger, som i hovedsak setter utgangen lik z hvis den er positiv og 0 ellers:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Hva er rollen til bias-termen i et enkelt nevron?
2. Hvorfor initialiserer vi vekter med små tilfeldige verdier i stedet for null?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår