Implementazione di un Singolo Neurone
Un neurone è l'unità computazionale di base di una rete neurale. Elabora input multipli e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.
In questo esempio, costruiamo una rete neurale con un solo neurone per un compito di classificazione binaria (ad esempio, rilevamento di spam). Il neurone riceve caratteristiche numeriche e produce un valore compreso tra 0 e 1, che rappresenta la probabilità che un'email sia spam (1) o ham (0).
Passaggi:
- Moltiplicare ciascun input per il proprio peso;
- Sommare tutti gli input pesati;
- Aggiungere un bias per modificare l'output;
- Passare il risultato attraverso una funzione di attivazione sigmoide, che lo converte nell'intervallo ((0,1)) per l'output di probabilità.
Bias del neurone è anch'esso un parametro addestrabile.
Classe Neurone
Un neurone deve memorizzare i propri pesi e bias, rendendo la classe un modo naturale per raggruppare queste proprietà correlate.
Sebbene questa classe non farà parte dell'implementazione finale della rete neurale, illustra efficacemente i principi chiave.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: valori inizializzati casualmente (uno per ogni input);bias: un singolo valore casuale. Entrambi sono estratti da una distribuzione uniforme in ([-1, 1]) utilizzandonp.random.uniform()per rompere la simmetria.
Propagazione in avanti
Il metodo activate() del neurone calcola la somma pesata e applica la sigmoide.
La somma pesata utilizza il prodotto scalare tra pesi e input:
input_sum_with_bias = np.dot(self.weights, inputs) + self.bias
Successivamente si applica la funzione di attivazione per ottenere l’output finale del neurone.
L’utilizzo di np.dot() evita i cicli e calcola l’intera somma pesata in un’unica riga.
La funzione sigmoide trasforma poi questo valore grezzo in una probabilità:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Attivazione Sigmoide
Dato un output grezzo (z), la funzione sigmoide è:
σ(z)=1+e−z1Mappa qualsiasi numero in ((0,1)), rendendola ideale per la classificazione binaria, dove l’output del neurone deve rappresentare una probabilità.
Utilizzando questa formula, la sigmoide può essere implementata come una semplice funzione in Python:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
La formula per la funzione ReLU è la seguente, che sostanzialmente imposta l’output uguale a z se è positivo e 0 altrimenti:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Qual è il ruolo del termine di bias in un singolo neurone?
2. Perché inizializziamo i pesi con piccoli valori casuali invece che con zeri?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Can you explain why we use the sigmoid function for binary classification?
How does the dot product work in the context of neural networks?
What is the difference between sigmoid and ReLU activations?
Awesome!
Completion rate improved to 4
Implementazione di un Singolo Neurone
Scorri per mostrare il menu
Un neurone è l'unità computazionale di base di una rete neurale. Elabora input multipli e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.
In questo esempio, costruiamo una rete neurale con un solo neurone per un compito di classificazione binaria (ad esempio, rilevamento di spam). Il neurone riceve caratteristiche numeriche e produce un valore compreso tra 0 e 1, che rappresenta la probabilità che un'email sia spam (1) o ham (0).
Passaggi:
- Moltiplicare ciascun input per il proprio peso;
- Sommare tutti gli input pesati;
- Aggiungere un bias per modificare l'output;
- Passare il risultato attraverso una funzione di attivazione sigmoide, che lo converte nell'intervallo ((0,1)) per l'output di probabilità.
Bias del neurone è anch'esso un parametro addestrabile.
Classe Neurone
Un neurone deve memorizzare i propri pesi e bias, rendendo la classe un modo naturale per raggruppare queste proprietà correlate.
Sebbene questa classe non farà parte dell'implementazione finale della rete neurale, illustra efficacemente i principi chiave.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: valori inizializzati casualmente (uno per ogni input);bias: un singolo valore casuale. Entrambi sono estratti da una distribuzione uniforme in ([-1, 1]) utilizzandonp.random.uniform()per rompere la simmetria.
Propagazione in avanti
Il metodo activate() del neurone calcola la somma pesata e applica la sigmoide.
La somma pesata utilizza il prodotto scalare tra pesi e input:
input_sum_with_bias = np.dot(self.weights, inputs) + self.bias
Successivamente si applica la funzione di attivazione per ottenere l’output finale del neurone.
L’utilizzo di np.dot() evita i cicli e calcola l’intera somma pesata in un’unica riga.
La funzione sigmoide trasforma poi questo valore grezzo in una probabilità:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Attivazione Sigmoide
Dato un output grezzo (z), la funzione sigmoide è:
σ(z)=1+e−z1Mappa qualsiasi numero in ((0,1)), rendendola ideale per la classificazione binaria, dove l’output del neurone deve rappresentare una probabilità.
Utilizzando questa formula, la sigmoide può essere implementata come una semplice funzione in Python:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
La formula per la funzione ReLU è la seguente, che sostanzialmente imposta l’output uguale a z se è positivo e 0 altrimenti:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Qual è il ruolo del termine di bias in un singolo neurone?
2. Perché inizializziamo i pesi con piccoli valori casuali invece che con zeri?
Grazie per i tuoi commenti!