Addestriamo la rete neurale a singolo Perceptron

A questo punto, tutto è pronto per procedere all’addestramento del tuo Perceptron.

Non ti resta che utilizzare il dataset di training e lanciare l’algoritmo di addestramento.



Come hai appena visto, la tua Rete Neurale è stata in grado di apprendere attraverso l’elaborazione del campione di dati noti ed ha generalizzato la sua conoscenza classificando correttamente nuovi dati senza avere al suo interno alcuna codifica esplicita della regola.

Prima di terminare la Missione, è bene richiamare l’attenzione su alcuni punti che abbiamo introdotto nel nostro software, che sono elementi tipici dei modelli di reti neurali utilizzati nella pratica.

Il programma presentato nel video definisce e utilizza un perceptron per classificare input in due categorie (“verde” e “rosso”) basandosi su un processo di apprendimento. Questo processo si avvale di tecniche chiave come il bias, la funzione di attivazione, il training con back-propagation, e l’operazione di shuffle dei dati di training. Analizziamo il ruolo del bias e dello shuffle:

Bias

Nel contesto dei perceptroni e delle reti neurali in generale, il bias è un termine aggiuntivo nei calcoli dell’input che permette al modello di adattarsi meglio ai dati quando la relazione tra input e output non origina dall’origine (0,0) nello spazio delle caratteristiche. Il bias può essere visto come un peso aggiuntivo associato a un input costante (tipicamente 1), che consente alla funzione di attivazione di spostarsi a sinistra o a destra, facilitando la corretta classificazione degli input.

Nel nostro programma, il bias è implicitamente incluso negli input quando si chiama la feed_forward o la back_propagation fornendo [x[0][0], x[0][1], 1] come input, dove 1 rappresenta il valore del bias. Questo permette al perceptron di adattarsi a una varietà di dati che non sarebbero linearmente separabili se il modello assumesse che i dati passino per l’origine.

Puoi provare a modificare il codice eliminando il bias. Puoi provare a definire il Perceptron con soli due input ed eliminare il terzo input costante in tutte le chiamate a feed_forward. Noterai che il processo di apprendimento in questo caso non converge più.

Shuffle dei Dati di Training

Lo shuffle (mescolamento) dei dati di training prima di ogni epoca di apprendimento è una pratica comune nell’addestramento delle reti neurali e altri modelli di machine learning. Questo processo ha diversi benefici:

  1. Prevenzione dell’Overfitting: Mescolando i dati, si riduce il rischio che il modello si adatti troppo alle caratteristiche peculiari di una sequenza specifica di dati di training, migliorando la generalizzazione del modello su dati non visti.
  2. Miglioramento della Convergenza: Presentare i dati di training in ordine diverso ad ogni epoca aiuta a prevenire che il modello rimanga intrappolato in minimi locali della funzione di perdita, potenzialmente migliorando la velocità e la qualità della convergenza verso una soluzione ottimale.

Nel nostro codice, lo shuffle viene eseguito all’inizio di ogni epoca di training con random.shuffle(trainSet), assicurando che l’ordine di presentazione dei punti di dati al perceptron vari da un’epoca all’altra.

Se provi a rimuovere l’istruzione di shuffle dal programma, noterai che l’apprendimento converge ma in modo leggermente più lento. Anche le prestazioni della rete saranno leggermente minori.

In conclusione, il bias è fondamentale per permettere al perceptron di adattarsi in modo flessibile ai dati, mentre lo shuffle dei dati di training aiuta a migliorare la robustezza e l’efficacia dell’apprendimento, contribuendo a prevenire l’overfitting e favorire una convergenza stabile e rapida del modello.