Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Implementering av Enkeltnevron | Nevralt Nettverk fra Bunnen Av
Introduksjon til nevrale nettverk

bookImplementering av Enkeltnevron

Note
Definisjon

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:

  1. Hver inngang blir multiplisert med en tilhørende vekt. Vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
  2. Alle de vektede inngangene blir summert sammen;
  3. 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;
  4. 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)(0, 1).
Note
Merk

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å.

Note
Merk

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 zz representerer den vektede summen av input med bias lagt til (rå utgangsverdi) for denne nevronen:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

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 zz hvis den er positiv og 0 ellers:

ReLU(z)=max(0,z)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?

question mark

Hva er rollen til bias-termen i et enkelt nevron?

Select the correct answer

question mark

Hvorfor initialiserer vi vekter med små tilfeldige verdier i stedet for null?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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

bookImplementering av Enkeltnevron

Sveip for å vise menyen

Note
Definisjon

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:

  1. Hver inngang blir multiplisert med en tilhørende vekt. Vektene er lærbare parametere som bestemmer viktigheten av hver inngang;
  2. Alle de vektede inngangene blir summert sammen;
  3. 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;
  4. 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)(0, 1).
Note
Merk

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å.

Note
Merk

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 zz representerer den vektede summen av input med bias lagt til (rå utgangsverdi) for denne nevronen:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

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 zz hvis den er positiv og 0 ellers:

ReLU(z)=max(0,z)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?

question mark

Hva er rollen til bias-termen i et enkelt nevron?

Select the correct answer

question mark

Hvorfor initialiserer vi vekter med små tilfeldige verdier i stedet for null?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 1
some-alt