Implementatie van een Enkele Neuron
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.
Voor nu willen we een neuraal netwerk bouwen met één enkel neuron. Als voorbeeld gebruiken we het voor een binaire classificatietaak, zoals spamdetectie, waarbij 0 staat voor een ham (niet-spam) e-mail en 1 voor een spam e-mail.
Het neuron ontvangt numerieke kenmerken gerelateerd aan e-mails als input en produceert een output tussen 0 en 1, wat de waarschijnlijkheid weergeeft dat een e-mail spam is.
Dit gebeurt stap voor stap:
- Elke input wordt vermenigvuldigd met een bijbehorend gewicht. De gewichten zijn leerbare parameters die het belang van elke input bepalen;
- Alle gewogen inputs worden bij elkaar opgeteld;
- Een extra parameter, de bias, wordt toegevoegd aan de inputsom. De bias stelt het neuron in staat om zijn output omhoog of omlaag te verschuiven, wat flexibiliteit aan het model geeft;
- De inputsom wordt vervolgens door een activatiefunctie gehaald. Omdat we slechts één neuron hebben dat direct de uiteindelijke output (een waarschijnlijkheid) produceert, gebruiken we de sigmoidfunctie, die waarden comprimeert tot het bereik (0,1).
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.
Hoewel deze klasse geen deel zal uitmaken 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 uit een uniforme verdeling binnen het bereik [low, high)
te genereren.
import numpy as np
np.random.uniform(low, high, size=...)
Voorwaartse Propagatie
Daarnaast moet de Neuron
-klasse een activate()
-methode bevatten, die de gewogen som van de inputs berekent en de activatiefunctie toepast (in ons geval sigmoid).
Als we twee vectoren van gelijke lengte hebben (weights
en inputs
), kan de gewogen som 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 vervolgens 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 z de gewogen som van de inputs met toegevoegde bias (ruwe outputwaarde) voor deze specifieke neuron voorstelt:
σ(z)=1+e−z1Met 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 z als deze positief is en anders 0:
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?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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
Implementatie van een Enkele Neuron
Veeg om het menu te tonen
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.
Voor nu willen we een neuraal netwerk bouwen met één enkel neuron. Als voorbeeld gebruiken we het voor een binaire classificatietaak, zoals spamdetectie, waarbij 0 staat voor een ham (niet-spam) e-mail en 1 voor een spam e-mail.
Het neuron ontvangt numerieke kenmerken gerelateerd aan e-mails als input en produceert een output tussen 0 en 1, wat de waarschijnlijkheid weergeeft dat een e-mail spam is.
Dit gebeurt stap voor stap:
- Elke input wordt vermenigvuldigd met een bijbehorend gewicht. De gewichten zijn leerbare parameters die het belang van elke input bepalen;
- Alle gewogen inputs worden bij elkaar opgeteld;
- Een extra parameter, de bias, wordt toegevoegd aan de inputsom. De bias stelt het neuron in staat om zijn output omhoog of omlaag te verschuiven, wat flexibiliteit aan het model geeft;
- De inputsom wordt vervolgens door een activatiefunctie gehaald. Omdat we slechts één neuron hebben dat direct de uiteindelijke output (een waarschijnlijkheid) produceert, gebruiken we de sigmoidfunctie, die waarden comprimeert tot het bereik (0,1).
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.
Hoewel deze klasse geen deel zal uitmaken 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 uit een uniforme verdeling binnen het bereik [low, high)
te genereren.
import numpy as np
np.random.uniform(low, high, size=...)
Voorwaartse Propagatie
Daarnaast moet de Neuron
-klasse een activate()
-methode bevatten, die de gewogen som van de inputs berekent en de activatiefunctie toepast (in ons geval sigmoid).
Als we twee vectoren van gelijke lengte hebben (weights
en inputs
), kan de gewogen som 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 vervolgens 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 z de gewogen som van de inputs met toegevoegde bias (ruwe outputwaarde) voor deze specifieke neuron voorstelt:
σ(z)=1+e−z1Met 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 z als deze positief is en anders 0:
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?
Bedankt voor je feedback!