Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implementazione di un Singolo Neurone | Rete Neurale da Zero
Introduzione alle Reti Neurali

bookImplementazione di un Singolo Neurone

Note
Definizione

Un neurone è l'unità computazionale di base di una rete neurale. Elabora molteplici input e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.

Per ora, si desidera costruire una rete neurale con un singolo neurone. Ad esempio, si supponga di utilizzarla per un compito di classificazione binaria, come il rilevamento di spam, dove 0 rappresenta una email ham (non spam) e 1 rappresenta una email spam.

Il neurone riceverà come input caratteristiche numeriche relative alle email e produrrà un output compreso tra 0 e 1, rappresentando la probabilità che una email sia spam.

Ecco cosa accade passo dopo passo:

  1. Ogni input viene moltiplicato per un peso corrispondente. I pesi sono parametri apprendibili che determinano l'importanza di ciascun input;
  2. Tutti gli input pesati vengono sommati;
  3. Un parametro aggiuntivo chiamato bias viene aggiunto alla somma degli input. Il bias consente al neurone di spostare il proprio output verso l'alto o verso il basso, fornendo flessibilità al modello;
  4. La somma degli input viene quindi passata attraverso una funzione di attivazione. Poiché si dispone di un solo neurone, che produce direttamente l'output finale (una probabilità), verrà utilizzata la funzione sigmoide, che comprime i valori nell'intervallo (0,1)(0, 1).
Note
Nota

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.

Note
Nota

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: un elenco di valori inizializzati casualmente che determinano quanto sia importante ciascun input (n_inputs è il numero di input) per il neurone;
  • bias: un valore inizializzato casualmente che aiuta il neurone a prendere decisioni flessibili.

Weights e bias devono essere inizializzati casualmente con valori piccoli compresi tra -1 e 1, estratti da una distribuzione uniforme, per rompere la simmetria e garantire che neuroni diversi apprendano caratteristiche differenti.

Per riassumere, NumPy fornisce la funzione random.uniform() per generare un numero casuale o un array (specificando l'argomento size) di numeri casuali da una distribuzione uniforme nell'intervallo [low, high).

import numpy as np

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

Propagazione in avanti

Inoltre, la classe Neuron dovrebbe includere un metodo activate(), che calcola la somma pesata degli input e applica la funzione di attivazione (sigmoide nel nostro caso).

Infatti, se abbiamo due vettori della stessa lunghezza (weights e inputs), la somma pesata può essere calcolata utilizzando il prodotto scalare di questi vettori:

Questo ci permette di calcolare la somma pesata in una sola riga di codice utilizzando la funzione numpy.dot(), eliminando la necessità di un ciclo. Il bias può quindi essere aggiunto direttamente al risultato per ottenere input_sum_with_bias. L'output viene poi calcolato applicando la funzione di attivazione sigmoide:

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

    return output

Funzioni di Attivazione

La formula per la funzione sigmoide è la seguente, dove zz rappresenta la somma pesata degli input con il bias aggiunto (valore di output grezzo) per questo particolare neurone:

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

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 zz se è positivo e 0 altrimenti:

ReLU(z)=max(0,z)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?

question mark

Qual è il ruolo del termine di bias in un singolo neurone?

Select the correct answer

question mark

Perché inizializziamo i pesi con piccoli valori casuali invece che con zeri?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookImplementazione di un Singolo Neurone

Scorri per mostrare il menu

Note
Definizione

Un neurone è l'unità computazionale di base di una rete neurale. Elabora molteplici input e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.

Per ora, si desidera costruire una rete neurale con un singolo neurone. Ad esempio, si supponga di utilizzarla per un compito di classificazione binaria, come il rilevamento di spam, dove 0 rappresenta una email ham (non spam) e 1 rappresenta una email spam.

Il neurone riceverà come input caratteristiche numeriche relative alle email e produrrà un output compreso tra 0 e 1, rappresentando la probabilità che una email sia spam.

Ecco cosa accade passo dopo passo:

  1. Ogni input viene moltiplicato per un peso corrispondente. I pesi sono parametri apprendibili che determinano l'importanza di ciascun input;
  2. Tutti gli input pesati vengono sommati;
  3. Un parametro aggiuntivo chiamato bias viene aggiunto alla somma degli input. Il bias consente al neurone di spostare il proprio output verso l'alto o verso il basso, fornendo flessibilità al modello;
  4. La somma degli input viene quindi passata attraverso una funzione di attivazione. Poiché si dispone di un solo neurone, che produce direttamente l'output finale (una probabilità), verrà utilizzata la funzione sigmoide, che comprime i valori nell'intervallo (0,1)(0, 1).
Note
Nota

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.

Note
Nota

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: un elenco di valori inizializzati casualmente che determinano quanto sia importante ciascun input (n_inputs è il numero di input) per il neurone;
  • bias: un valore inizializzato casualmente che aiuta il neurone a prendere decisioni flessibili.

Weights e bias devono essere inizializzati casualmente con valori piccoli compresi tra -1 e 1, estratti da una distribuzione uniforme, per rompere la simmetria e garantire che neuroni diversi apprendano caratteristiche differenti.

Per riassumere, NumPy fornisce la funzione random.uniform() per generare un numero casuale o un array (specificando l'argomento size) di numeri casuali da una distribuzione uniforme nell'intervallo [low, high).

import numpy as np

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

Propagazione in avanti

Inoltre, la classe Neuron dovrebbe includere un metodo activate(), che calcola la somma pesata degli input e applica la funzione di attivazione (sigmoide nel nostro caso).

Infatti, se abbiamo due vettori della stessa lunghezza (weights e inputs), la somma pesata può essere calcolata utilizzando il prodotto scalare di questi vettori:

Questo ci permette di calcolare la somma pesata in una sola riga di codice utilizzando la funzione numpy.dot(), eliminando la necessità di un ciclo. Il bias può quindi essere aggiunto direttamente al risultato per ottenere input_sum_with_bias. L'output viene poi calcolato applicando la funzione di attivazione sigmoide:

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

    return output

Funzioni di Attivazione

La formula per la funzione sigmoide è la seguente, dove zz rappresenta la somma pesata degli input con il bias aggiunto (valore di output grezzo) per questo particolare neurone:

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

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 zz se è positivo e 0 altrimenti:

ReLU(z)=max(0,z)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?

question mark

Qual è il ruolo del termine di bias in un singolo neurone?

Select the correct answer

question mark

Perché inizializziamo i pesi con piccoli valori casuali invece che con zeri?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 1
some-alt