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 input multipli e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.

In questo esempio, l'obiettivo è costruire una rete neurale con un singolo neurone. Verrà utilizzata per un compito di classificazione binaria, come il rilevamento dello spam, dove 0 corrisponde a una email ham (non spam) e 1 corrisponde a una email spam.

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

Ecco cosa succede 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 termine di bias viene aggiunto alla somma degli input, permettendo al neurone di spostare il proprio output e fornendo ulteriore flessibilità al modello;
  4. La somma viene passata attraverso una funzione di attivazione. Poiché un singolo neurone produce direttamente l'output finale (una probabilità), viene utilizzata la funzione sigmoide per comprimere 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: una lista 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.

I pesi e il 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.

In sintesi, 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

La classe Neuron dovrebbe includere un metodo activate() che calcola la somma pesata degli input e applica la funzione di attivazione (in questo caso la funzione sigmoide).

Quando sono disponibili due vettori della stessa lunghezza — weights e inputs — la somma pesata può essere calcolata in modo efficiente utilizzando il prodotto scalare di questi vettori.

Questo consente 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

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 input multipli e genera un singolo output, consentendo alla rete di apprendere ed effettuare previsioni.

In questo esempio, l'obiettivo è costruire una rete neurale con un singolo neurone. Verrà utilizzata per un compito di classificazione binaria, come il rilevamento dello spam, dove 0 corrisponde a una email ham (non spam) e 1 corrisponde a una email spam.

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

Ecco cosa succede 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 termine di bias viene aggiunto alla somma degli input, permettendo al neurone di spostare il proprio output e fornendo ulteriore flessibilità al modello;
  4. La somma viene passata attraverso una funzione di attivazione. Poiché un singolo neurone produce direttamente l'output finale (una probabilità), viene utilizzata la funzione sigmoide per comprimere 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: una lista 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.

I pesi e il 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.

In sintesi, 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

La classe Neuron dovrebbe includere un metodo activate() che calcola la somma pesata degli input e applica la funzione di attivazione (in questo caso la funzione sigmoide).

Quando sono disponibili due vettori della stessa lunghezza — weights e inputs — la somma pesata può essere calcolata in modo efficiente utilizzando il prodotto scalare di questi vettori.

Questo consente 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