Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Implementatie van een Enkele Neuron | Neuraal Netwerk Vanaf Nul
Introductie tot Neurale Netwerken

bookImplementatie van een Enkele Neuron

Note
Definitie

Een neuron is de basale computationele eenheid van een neuraal netwerk. Het verwerkt meerdere inputs en genereert een enkele output, waardoor het netwerk kan leren en voorspellingen kan doen.

In dit voorbeeld is het doel om een neuraal netwerk te bouwen met één enkel neuron. Dit wordt gebruikt voor een binaire classificatietaak, zoals spamdetectie, waarbij 0 overeenkomt met een ham (niet-spam) e-mail en 1 overeenkomt met een spam e-mail.

Het neuron ontvangt numerieke kenmerken die uit e-mails zijn gehaald als input en produceert een output tussen 0 en 1, wat de waarschijnlijkheid weergeeft dat een bepaalde e-mail spam is.

Het proces verloopt als volgt, stap voor stap:

  1. Elke input wordt vermenigvuldigd met een bijbehorend gewicht; de gewichten zijn leerbare parameters die het belang van elke input bepalen;
  2. Alle gewogen inputs worden bij elkaar opgeteld;
  3. Een bias-term wordt toegevoegd aan de som van de inputs, waardoor het neuron zijn output kan verschuiven en extra flexibiliteit aan het model biedt;
  4. De som wordt door een activatiefunctie gehaald. Omdat een enkel neuron direct de uiteindelijke output (een waarschijnlijkheid) produceert, wordt de sigmoidfunctie gebruikt om waarden samen te persen tot het bereik (0,1)(0, 1).
Note
Opmerking

Bias van de neuron is ook een trainbaar parameter.

Neuronklasse

Een neuron moet zijn gewichten en bias opslaan, waardoor een klasse een logische manier is om deze gerelateerde eigenschappen te groeperen.

Note
Opmerking

Hoewel deze klasse geen deel uitmaakt van de uiteindelijke implementatie van het neuraal netwerk, illustreert het effectief de belangrijkste principes.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: een lijst van willekeurig geïnitialiseerde waarden die bepalen hoe belangrijk elke input (n_inputs is het aantal inputs) is voor de neuron;
  • bias: een willekeurig geïnitialiseerde waarde die de neuron helpt om flexibele beslissingen te nemen.

Gewichten en bias moeten willekeurig geïnitialiseerd worden met kleine waarden tussen -1 en 1, getrokken uit een uniforme verdeling, om symmetrie te doorbreken en ervoor te zorgen dat verschillende neuronen verschillende kenmerken leren.

Ter herinnering: NumPy biedt de functie random.uniform() om een willekeurig getal of een array (door het argument size op te geven) van willekeurige getallen te genereren uit een uniforme verdeling binnen het bereik [low, high).

import numpy as np

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

Voorwaartse Propagatie

De Neuron-klasse moet een activate()-methode bevatten die de gewogen som van de inputs berekent en vervolgens de activatiefunctie toepast (in dit geval de sigmoidfunctie).

Wanneer twee vectoren van gelijke lengte — weights en inputs — beschikbaar zijn, kan de gewogen som efficiënt worden berekend met het dotproduct van deze vectoren.

Hiermee kunnen we de gewogen som in één regel code berekenen met de functie numpy.dot(), waardoor een lus overbodig wordt. De bias kan vervolgens direct aan het resultaat worden toegevoegd om input_sum_with_bias te verkrijgen. De uitvoer wordt dan berekend door de sigmoid activatiefunctie toe te passen:

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

    return output

Activatiefuncties

De formule voor de sigmoid-functie is als volgt, waarbij zz de gewogen som van de inputs met toegevoegde bias (ruwe outputwaarde) voor deze specifieke neuron voorstelt:

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

Met deze formule kan sigmoid als een eenvoudige functie in Python worden geïmplementeerd:

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

De formule voor de ReLU-functie is als volgt, die de output gelijk stelt aan zz als deze positief is en anders aan 0:

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

1. Wat is de rol van de bias-term in een enkele neuron?

2. Waarom initialiseren we gewichten met kleine willekeurige waarden in plaats van nullen?

question mark

Wat is de rol van de bias-term in een enkele neuron?

Select the correct answer

question mark

Waarom initialiseren we gewichten met kleine willekeurige waarden in plaats van nullen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 1

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

Can you show me how to complete the Neuron class with the random initialization?

How do I use the activate method with some example inputs?

What is the difference between using sigmoid and ReLU in this context?

Awesome!

Completion rate improved to 4

bookImplementatie van een Enkele Neuron

Veeg om het menu te tonen

Note
Definitie

Een neuron is de basale computationele eenheid van een neuraal netwerk. Het verwerkt meerdere inputs en genereert een enkele output, waardoor het netwerk kan leren en voorspellingen kan doen.

In dit voorbeeld is het doel om een neuraal netwerk te bouwen met één enkel neuron. Dit wordt gebruikt voor een binaire classificatietaak, zoals spamdetectie, waarbij 0 overeenkomt met een ham (niet-spam) e-mail en 1 overeenkomt met een spam e-mail.

Het neuron ontvangt numerieke kenmerken die uit e-mails zijn gehaald als input en produceert een output tussen 0 en 1, wat de waarschijnlijkheid weergeeft dat een bepaalde e-mail spam is.

Het proces verloopt als volgt, stap voor stap:

  1. Elke input wordt vermenigvuldigd met een bijbehorend gewicht; de gewichten zijn leerbare parameters die het belang van elke input bepalen;
  2. Alle gewogen inputs worden bij elkaar opgeteld;
  3. Een bias-term wordt toegevoegd aan de som van de inputs, waardoor het neuron zijn output kan verschuiven en extra flexibiliteit aan het model biedt;
  4. De som wordt door een activatiefunctie gehaald. Omdat een enkel neuron direct de uiteindelijke output (een waarschijnlijkheid) produceert, wordt de sigmoidfunctie gebruikt om waarden samen te persen tot het bereik (0,1)(0, 1).
Note
Opmerking

Bias van de neuron is ook een trainbaar parameter.

Neuronklasse

Een neuron moet zijn gewichten en bias opslaan, waardoor een klasse een logische manier is om deze gerelateerde eigenschappen te groeperen.

Note
Opmerking

Hoewel deze klasse geen deel uitmaakt van de uiteindelijke implementatie van het neuraal netwerk, illustreert het effectief de belangrijkste principes.

class Neuron:
    def __init__(self, n_inputs):  
        self.weights = ...
        self.bias = ...
  • weights: een lijst van willekeurig geïnitialiseerde waarden die bepalen hoe belangrijk elke input (n_inputs is het aantal inputs) is voor de neuron;
  • bias: een willekeurig geïnitialiseerde waarde die de neuron helpt om flexibele beslissingen te nemen.

Gewichten en bias moeten willekeurig geïnitialiseerd worden met kleine waarden tussen -1 en 1, getrokken uit een uniforme verdeling, om symmetrie te doorbreken en ervoor te zorgen dat verschillende neuronen verschillende kenmerken leren.

Ter herinnering: NumPy biedt de functie random.uniform() om een willekeurig getal of een array (door het argument size op te geven) van willekeurige getallen te genereren uit een uniforme verdeling binnen het bereik [low, high).

import numpy as np

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

Voorwaartse Propagatie

De Neuron-klasse moet een activate()-methode bevatten die de gewogen som van de inputs berekent en vervolgens de activatiefunctie toepast (in dit geval de sigmoidfunctie).

Wanneer twee vectoren van gelijke lengte — weights en inputs — beschikbaar zijn, kan de gewogen som efficiënt worden berekend met het dotproduct van deze vectoren.

Hiermee kunnen we de gewogen som in één regel code berekenen met de functie numpy.dot(), waardoor een lus overbodig wordt. De bias kan vervolgens direct aan het resultaat worden toegevoegd om input_sum_with_bias te verkrijgen. De uitvoer wordt dan berekend door de sigmoid activatiefunctie toe te passen:

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

    return output

Activatiefuncties

De formule voor de sigmoid-functie is als volgt, waarbij zz de gewogen som van de inputs met toegevoegde bias (ruwe outputwaarde) voor deze specifieke neuron voorstelt:

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

Met deze formule kan sigmoid als een eenvoudige functie in Python worden geïmplementeerd:

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

De formule voor de ReLU-functie is als volgt, die de output gelijk stelt aan zz als deze positief is en anders aan 0:

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

1. Wat is de rol van de bias-term in een enkele neuron?

2. Waarom initialiseren we gewichten met kleine willekeurige waarden in plaats van nullen?

question mark

Wat is de rol van de bias-term in een enkele neuron?

Select the correct answer

question mark

Waarom initialiseren we gewichten met kleine willekeurige waarden in plaats van nullen?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 1
some-alt