Implementering av Enkeltnevron
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.
Vi ønsker nå å bygge et nevralt nettverk med én enkelt nevron. Som et eksempel kan vi bruke det til en binær klassifiseringsoppgave, som for eksempel spamdeteksjon, der 0 representerer en ham (ikke-spam) e-post og 1 representerer en spam-e-post.
Nevronen vil ta numeriske egenskaper knyttet til e-poster som innganger og produsere en utgang mellom 0 og 1, som representerer sannsynligheten for at en e-post er spam.
Dette skjer steg for steg:
- Hver inngang blir multiplisert med en tilhørende vekt. Vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
- Alle de vektede inngangene blir summert sammen;
- En ekstra parameter kalt bias blir lagt til inngangssummen. Bias gjør det mulig for nevronen å skifte utgangen opp eller ned, og gir modellen fleksibilitet;
- Inngangssummen sendes deretter gjennom en aktiveringsfunksjon. Siden vi kun har én enkelt nevron som direkte produserer den endelige utgangen (en sannsynlighet), bruker vi sigmoid-funksjonen, som komprimerer verdier 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_inputs
er antall input) er for nevronet;bias
: en tilfeldig initiert verdi som hjelper nevronet å ta fleksible avgjørelser.
Vekter og bias skal tilfeldig initieres 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
I tillegg bør Neuron
-klassen inkludere en activate()
-metode, som beregner den vektede summen av inputene og anvender aktiveringsfunksjonen (sigmoid i vårt tilfelle).
Hvis vi har to vektorer av lik lengde (weights
og inputs
), kan den vektede summen beregnes ved hjelp av prikkproduktet 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 aktiveringsfunksjonen:
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
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 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.
Vi ønsker nå å bygge et nevralt nettverk med én enkelt nevron. Som et eksempel kan vi bruke det til en binær klassifiseringsoppgave, som for eksempel spamdeteksjon, der 0 representerer en ham (ikke-spam) e-post og 1 representerer en spam-e-post.
Nevronen vil ta numeriske egenskaper knyttet til e-poster som innganger og produsere en utgang mellom 0 og 1, som representerer sannsynligheten for at en e-post er spam.
Dette skjer steg for steg:
- Hver inngang blir multiplisert med en tilhørende vekt. Vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
- Alle de vektede inngangene blir summert sammen;
- En ekstra parameter kalt bias blir lagt til inngangssummen. Bias gjør det mulig for nevronen å skifte utgangen opp eller ned, og gir modellen fleksibilitet;
- Inngangssummen sendes deretter gjennom en aktiveringsfunksjon. Siden vi kun har én enkelt nevron som direkte produserer den endelige utgangen (en sannsynlighet), bruker vi sigmoid-funksjonen, som komprimerer verdier 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_inputs
er antall input) er for nevronet;bias
: en tilfeldig initiert verdi som hjelper nevronet å ta fleksible avgjørelser.
Vekter og bias skal tilfeldig initieres 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
I tillegg bør Neuron
-klassen inkludere en activate()
-metode, som beregner den vektede summen av inputene og anvender aktiveringsfunksjonen (sigmoid i vårt tilfelle).
Hvis vi har to vektorer av lik lengde (weights
og inputs
), kan den vektede summen beregnes ved hjelp av prikkproduktet 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 aktiveringsfunksjonen:
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!