Implementering av Enkeltnevron
En nevron er den grunnleggende beregningsenheten i et nevralt nettverk. Den behandler flere innganger og genererer én utgang, noe som gjør det mulig for nettverket å lære og gjøre prediksjoner.
I dette eksemplet er målet å bygge et nevralt nettverk med én enkelt nevron. Det skal brukes til en binær klassifiseringsoppgave, som for eksempel spamdeteksjon, der 0 tilsvarer en ham (ikke-spam) e-post og 1 tilsvarer en spam-e-post.
Nevronet vil motta numeriske egenskaper hentet fra e-poster som innganger og produsere en utgang mellom 0 og 1, som representerer sannsynligheten for at en gitt e-post er spam.
Dette skjer trinn for trinn:
- Hver inngang blir multiplisert med en tilsvarende vekt; vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
- Alle vektede innganger summeres;
- Et bias-ledd legges til summen av inngangene, noe som gjør det mulig for nevronet å forskyve utgangen og gir modellen ekstra fleksibilitet;
- Summen sendes gjennom en aktiveringsfunksjon. Fordi en enkelt nevron direkte produserer den endelige utgangen (en sannsynlighet), brukes sigmoid-funksjonen for å komprimere verdiene til området (0,1).
Bias til nevronet er også en trenbar parameter.
Nevron-klasse
Et 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 sentrale prinsipper.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: en liste med tilfeldig initierte verdier som bestemmer hvor viktig hver input (n_inputser antall input) er for nevronet;bias: en tilfeldig initert verdi som hjelper nevronet å ta fleksible avgjørelser.
Weights og bias bør være tilfeldig initiert med små verdier mellom -1 og 1, trukket fra en uniform fordeling, for å bryte symmetri og sikre at ulike nevroner lærer ulike egenskaper.
For å oppsummere, NumPy tilbyr funksjonen random.uniform() for å generere et tilfeldig tall eller en matrise (ved å spesifisere argumentet size) av tilfeldige tall fra en uniform fordeling innenfor intervallet [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Fremoverpropagering
Neuron-klassen bør inkludere en activate()-metode som beregner den vektede summen av inputene og deretter anvender aktiveringsfunksjonen (sigmoid-funksjonen i dette tilfellet).
Når to vektorer av lik lengde — weights og inputs — er tilgjengelige, kan den vektede summen effektivt beregnes ved hjelp av skalarproduktet av disse vektorene.
Dette gjør det mulig å beregne den vektede summen i én kodelinje ved å bruke funksjonen numpy.dot(), slik at man slipper å bruke en løkke. Bias kan deretter legges direkte til resultatet for å få input_sum_with_bias. Utdata beregnes så ved å anvende sigmoid aktiveringsfunksjon:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktiveringsfunksjoner
Formelen for sigmoid-funksjonen er som følger, der z representerer den vektede summen av input med bias lagt til (rå utgangsverdi) for denne nevronen:
σ(z)=1+e−z1Ved å 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
Awesome!
Completion rate improved to 4
Implementering av Enkeltnevron
Sveip for å vise menyen
En nevron er den grunnleggende beregningsenheten i et nevralt nettverk. Den behandler flere innganger og genererer én utgang, noe som gjør det mulig for nettverket å lære og gjøre prediksjoner.
I dette eksemplet er målet å bygge et nevralt nettverk med én enkelt nevron. Det skal brukes til en binær klassifiseringsoppgave, som for eksempel spamdeteksjon, der 0 tilsvarer en ham (ikke-spam) e-post og 1 tilsvarer en spam-e-post.
Nevronet vil motta numeriske egenskaper hentet fra e-poster som innganger og produsere en utgang mellom 0 og 1, som representerer sannsynligheten for at en gitt e-post er spam.
Dette skjer trinn for trinn:
- Hver inngang blir multiplisert med en tilsvarende vekt; vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
- Alle vektede innganger summeres;
- Et bias-ledd legges til summen av inngangene, noe som gjør det mulig for nevronet å forskyve utgangen og gir modellen ekstra fleksibilitet;
- Summen sendes gjennom en aktiveringsfunksjon. Fordi en enkelt nevron direkte produserer den endelige utgangen (en sannsynlighet), brukes sigmoid-funksjonen for å komprimere verdiene til området (0,1).
Bias til nevronet er også en trenbar parameter.
Nevron-klasse
Et 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 sentrale prinsipper.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: en liste med tilfeldig initierte verdier som bestemmer hvor viktig hver input (n_inputser antall input) er for nevronet;bias: en tilfeldig initert verdi som hjelper nevronet å ta fleksible avgjørelser.
Weights og bias bør være tilfeldig initiert med små verdier mellom -1 og 1, trukket fra en uniform fordeling, for å bryte symmetri og sikre at ulike nevroner lærer ulike egenskaper.
For å oppsummere, NumPy tilbyr funksjonen random.uniform() for å generere et tilfeldig tall eller en matrise (ved å spesifisere argumentet size) av tilfeldige tall fra en uniform fordeling innenfor intervallet [low, high).
import numpy as np
np.random.uniform(low, high, size=...)
Fremoverpropagering
Neuron-klassen bør inkludere en activate()-metode som beregner den vektede summen av inputene og deretter anvender aktiveringsfunksjonen (sigmoid-funksjonen i dette tilfellet).
Når to vektorer av lik lengde — weights og inputs — er tilgjengelige, kan den vektede summen effektivt beregnes ved hjelp av skalarproduktet av disse vektorene.
Dette gjør det mulig å beregne den vektede summen i én kodelinje ved å bruke funksjonen numpy.dot(), slik at man slipper å bruke en løkke. Bias kan deretter legges direkte til resultatet for å få input_sum_with_bias. Utdata beregnes så ved å anvende sigmoid aktiveringsfunksjon:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktiveringsfunksjoner
Formelen for sigmoid-funksjonen er som følger, der z representerer den vektede summen av input med bias lagt til (rå utgangsverdi) for denne nevronen:
σ(z)=1+e−z1Ved å 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!