Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Implementering av Enskild Neuron | Neuronnätverk Från Grunden
Introduktion till neurala nätverk

bookImplementering av Enskild Neuron

Note
Definition

En neuron är den grundläggande beräkningsenheten i ett neuralt nätverk. Den bearbetar flera indata och genererar ett enda utdata, vilket möjliggör för nätverket att lära sig och göra förutsägelser.

För tillfället vill vi bygga ett neuralt nätverk med en enda neuron. Som exempel kan vi använda det för en binär klassificeringsuppgift, såsom skräppostdetektion, där 0 representerar ett ham (icke-skräppost) e-postmeddelande och 1 representerar ett skräppostmeddelande.

Neuronen tar numeriska egenskaper relaterade till e-post som indata och producerar ett utdata mellan 0 och 1, vilket representerar sannolikheten att ett e-postmeddelande är skräppost.

Så här går det till steg för steg:

  1. Varje indata multipliceras med en motsvarande vikt. Vikterna är lärbara parametrar som avgör betydelsen av varje indata;
  2. Alla viktade indata summeras;
  3. En ytterligare parameter kallad bias läggs till indatasumman. Bias gör det möjligt för neuronen att förskjuta sitt utdata uppåt eller nedåt, vilket ger flexibilitet till modellen;
  4. Indatasumman skickas sedan genom en aktiveringsfunktion. Eftersom vi bara har en enda neuron, som direkt producerar slututdata (en sannolikhet), använder vi sigmoidfunktionen, som komprimerar värden till intervallet (0,1)(0, 1).
Note
Notering

Bias för neuronen är också en träningsbar parameter.

Neuronklass

En neuron behöver lagra sina vikter och bias, vilket gör en klass till ett naturligt sätt att gruppera dessa relaterade egenskaper.

Note
Notering

Även om denna klass inte kommer att ingå i den slutliga implementeringen av det neurala nätverket, illustrerar den effektivt viktiga principer.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: en lista med slumpmässigt initierade värden som avgör hur viktig varje indata (n_inputs är antalet indata) är för neuronen;
  • bias: ett slumpmässigt initierat värde som hjälper neuronen att fatta flexibla beslut.

Vikter och bias bör slumpmässigt initieras med små värden mellan -1 och 1, dragna från en likformig fördelning, för att bryta symmetri och säkerställa att olika neuroner lär sig olika egenskaper.

För att sammanfatta, NumPy tillhandahåller funktionen random.uniform() för att generera ett slumpmässigt tal eller en array (genom att ange argumentet size) av slumpmässiga tal från en likformig fördelning inom intervallet [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Framåtriktad Propagering

Dessutom bör klassen Neuron inkludera en metod activate(), som beräknar den viktade summan av indata och applicerar aktiveringsfunktionen (sigmoid i vårt fall).

Om vi har två vektorer av samma längd (weights och inputs), kan den viktade summan beräknas med hjälp av skalärprodukten av dessa vektorer:

Detta gör det möjligt att beräkna den viktade summan i en enda kodrad med funktionen numpy.dot(), vilket eliminerar behovet av en loop. Bias kan sedan läggas direkt till resultatet för att få input_sum_with_bias. Utdata beräknas därefter genom att applicera sigmoid aktiveringsfunktionen:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktiveringsfunktioner

Formeln för sigmoid-funktionen är följande, där zz representerar den viktade summan av indata med tillagd bias (råutgångsvärde) för denna specifika neuron:

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

Med denna formel kan sigmoid implementeras som en enkel funktion i Python:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

Formeln för ReLU-funktionen är följande, vilket i princip sätter utgången lika med zz om den är positiv och 0 annars:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Vilken roll har bias-termen i en enskild neuron?

2. Varför initierar vi vikter med små slumpmässiga värden istället för nollor?

question mark

Vilken roll har bias-termen i en enskild neuron?

Select the correct answer

question mark

Varför initierar vi vikter med små slumpmässiga värden istället för nollor?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 1

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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 Enskild Neuron

Svep för att visa menyn

Note
Definition

En neuron är den grundläggande beräkningsenheten i ett neuralt nätverk. Den bearbetar flera indata och genererar ett enda utdata, vilket möjliggör för nätverket att lära sig och göra förutsägelser.

För tillfället vill vi bygga ett neuralt nätverk med en enda neuron. Som exempel kan vi använda det för en binär klassificeringsuppgift, såsom skräppostdetektion, där 0 representerar ett ham (icke-skräppost) e-postmeddelande och 1 representerar ett skräppostmeddelande.

Neuronen tar numeriska egenskaper relaterade till e-post som indata och producerar ett utdata mellan 0 och 1, vilket representerar sannolikheten att ett e-postmeddelande är skräppost.

Så här går det till steg för steg:

  1. Varje indata multipliceras med en motsvarande vikt. Vikterna är lärbara parametrar som avgör betydelsen av varje indata;
  2. Alla viktade indata summeras;
  3. En ytterligare parameter kallad bias läggs till indatasumman. Bias gör det möjligt för neuronen att förskjuta sitt utdata uppåt eller nedåt, vilket ger flexibilitet till modellen;
  4. Indatasumman skickas sedan genom en aktiveringsfunktion. Eftersom vi bara har en enda neuron, som direkt producerar slututdata (en sannolikhet), använder vi sigmoidfunktionen, som komprimerar värden till intervallet (0,1)(0, 1).
Note
Notering

Bias för neuronen är också en träningsbar parameter.

Neuronklass

En neuron behöver lagra sina vikter och bias, vilket gör en klass till ett naturligt sätt att gruppera dessa relaterade egenskaper.

Note
Notering

Även om denna klass inte kommer att ingå i den slutliga implementeringen av det neurala nätverket, illustrerar den effektivt viktiga principer.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: en lista med slumpmässigt initierade värden som avgör hur viktig varje indata (n_inputs är antalet indata) är för neuronen;
  • bias: ett slumpmässigt initierat värde som hjälper neuronen att fatta flexibla beslut.

Vikter och bias bör slumpmässigt initieras med små värden mellan -1 och 1, dragna från en likformig fördelning, för att bryta symmetri och säkerställa att olika neuroner lär sig olika egenskaper.

För att sammanfatta, NumPy tillhandahåller funktionen random.uniform() för att generera ett slumpmässigt tal eller en array (genom att ange argumentet size) av slumpmässiga tal från en likformig fördelning inom intervallet [low, high).

import numpy as np

np.random.uniform(low, high, size=...)

Framåtriktad Propagering

Dessutom bör klassen Neuron inkludera en metod activate(), som beräknar den viktade summan av indata och applicerar aktiveringsfunktionen (sigmoid i vårt fall).

Om vi har två vektorer av samma längd (weights och inputs), kan den viktade summan beräknas med hjälp av skalärprodukten av dessa vektorer:

Detta gör det möjligt att beräkna den viktade summan i en enda kodrad med funktionen numpy.dot(), vilket eliminerar behovet av en loop. Bias kan sedan läggas direkt till resultatet för att få input_sum_with_bias. Utdata beräknas därefter genom att applicera sigmoid aktiveringsfunktionen:

def activate(self, inputs):
    input_sum_with_bias = ...
    output = ...

    return output

Aktiveringsfunktioner

Formeln för sigmoid-funktionen är följande, där zz representerar den viktade summan av indata med tillagd bias (råutgångsvärde) för denna specifika neuron:

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

Med denna formel kan sigmoid implementeras som en enkel funktion i Python:

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

Formeln för ReLU-funktionen är följande, vilket i princip sätter utgången lika med zz om den är positiv och 0 annars:

ReLU(z)=max(0,z)ReLU(z) = max(0, z)
def relu(z):
    return np.maximum(0, z)

1. Vilken roll har bias-termen i en enskild neuron?

2. Varför initierar vi vikter med små slumpmässiga värden istället för nollor?

question mark

Vilken roll har bias-termen i en enskild neuron?

Select the correct answer

question mark

Varför initierar vi vikter med små slumpmässiga värden istället för nollor?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 1
some-alt