|
|
||
|---|---|---|
| .. | ||
| lab | ||
| Perceptron.ipynb | ||
| README.md | ||
README.md
Introduzione alle Reti Neurali: Perceptron
Quiz pre-lezione
Uno dei primi tentativi di implementare qualcosa di simile a una rete neurale moderna fu realizzato da Frank Rosenblatt del Cornell Aeronautical Laboratory nel 1957. Si trattava di un'implementazione hardware chiamata "Mark-1", progettata per riconoscere figure geometriche primitive, come triangoli, quadrati e cerchi.
![]() |
![]() |
Immagini da Wikipedia
Un'immagine di input era rappresentata da una matrice di fotocellule 20x20, quindi la rete neurale aveva 400 ingressi e un'uscita binaria. Una rete semplice conteneva un solo neurone, chiamato anche threshold logic unit. I pesi della rete neurale funzionavano come potenziometri che richiedevano regolazioni manuali durante la fase di addestramento.
✅ Un potenziometro è un dispositivo che consente all'utente di regolare la resistenza di un circuito.
Il New York Times scrisse del perceptron in quel periodo: l'embrione di un computer elettronico che [la Marina] si aspetta sarà in grado di camminare, parlare, vedere, scrivere, riprodursi e essere consapevole della propria esistenza.
Modello del Perceptron
Supponiamo di avere N caratteristiche nel nostro modello, nel qual caso il vettore di input sarebbe un vettore di dimensione N. Un perceptron è un modello di classificazione binaria, cioè può distinguere tra due classi di dati di input. Supponiamo che per ogni vettore di input x l'output del nostro perceptron sia +1 o -1, a seconda della classe. L'output sarà calcolato utilizzando la formula:
y(x) = f(wTx)
dove f è una funzione di attivazione a gradino
Addestramento del Perceptron
Per addestrare un perceptron, dobbiamo trovare un vettore di pesi w che classifichi correttamente la maggior parte dei valori, cioè che produca il minimo errore. Questo errore E è definito dal criterio del perceptron nel seguente modo:
E(w) = -∑wTxiti
dove:
- la somma è calcolata sui punti di dati di addestramento i che risultano classificati in modo errato
- xi è il dato di input, e ti è -1 o +1 per esempi negativi e positivi rispettivamente.
Questo criterio è considerato una funzione dei pesi w, e dobbiamo minimizzarlo. Spesso si utilizza un metodo chiamato discesa del gradiente, in cui si parte da un vettore di pesi iniziale w(0), e poi a ogni passo si aggiornano i pesi secondo la formula:
w(t+1) = w(t) - η∇E(w)
Qui η è il cosiddetto tasso di apprendimento, e ∇E(w) denota il gradiente di E. Dopo aver calcolato il gradiente, otteniamo:
w(t+1) = w(t) + ∑ηxiti
L'algoritmo in Python appare così:
def train(positive_examples, negative_examples, num_iterations = 100, eta = 1):
weights = [0,0,0] # Initialize weights (almost randomly :)
for i in range(num_iterations):
pos = random.choice(positive_examples)
neg = random.choice(negative_examples)
z = np.dot(pos, weights) # compute perceptron output
if z < 0: # positive example classified as negative
weights = weights + eta*weights.shape
z = np.dot(neg, weights)
if z >= 0: # negative example classified as positive
weights = weights - eta*weights.shape
return weights
Conclusione
In questa lezione, hai imparato cos'è un perceptron, un modello di classificazione binaria, e come addestrarlo utilizzando un vettore di pesi.
🚀 Sfida
Se vuoi provare a costruire il tuo perceptron, prova questo laboratorio su Microsoft Learn che utilizza il designer di Azure ML.
Quiz post-lezione
Revisione e Studio Autonomo
Per vedere come possiamo utilizzare il perceptron per risolvere un problema semplice e problemi reali, e per continuare a imparare, vai al notebook Perceptron.
Ecco un interessante articolo sui perceptron.
Compito
In questa lezione, abbiamo implementato un perceptron per un compito di classificazione binaria e lo abbiamo utilizzato per classificare tra due cifre scritte a mano. In questo laboratorio, ti viene chiesto di risolvere completamente il problema della classificazione delle cifre, cioè determinare quale cifra corrisponde più probabilmente a una data immagine.

