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

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