Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Addestramento del Modello | Rete Neurale da Zero
Introduzione alle Reti Neurali con Python

Addestramento del Modello

Scorri per mostrare il menu

L'addestramento di una rete neurale consiste in un processo iterativo in cui il modello migliora gradualmente regolando i propri pesi e bias per minimizzare la funzione di perdita. Questo processo è noto come ottimizzazione basata sul gradiente e segue un algoritmo strutturato.

Algoritmo generale

Il dataset viene inizialmente passato attraverso la rete più volte in un ciclo, dove ogni passaggio completo è chiamato epoca. Durante ogni epoca, i dati vengono mescolati per evitare che il modello apprenda schemi basati sull'ordine degli esempi di addestramento. La mescolatura aiuta a introdurre casualità, portando a un modello più robusto.

Per ogni esempio di addestramento, il modello esegue la propagazione in avanti, in cui gli input attraversano la rete, strato dopo strato, producendo un output. Questo output viene poi confrontato con il valore target reale per calcolare la perdita.

Mescolatura e propagazione in avanti

Successivamente, il modello applica la backpropagation e aggiorna i pesi e i bias in ogni livello per ridurre la perdita.

Questo processo si ripete per più epoche, permettendo alla rete di perfezionare gradualmente i propri parametri. Con il progredire dell'addestramento, la rete apprende a effettuare previsioni sempre più accurate. Tuttavia, una regolazione attenta degli iperparametri come il learning rate è fondamentale per garantire un addestramento stabile ed efficiente.

Epoca

Il learning rate (α\alpha) determina l'ampiezza del passo negli aggiornamenti dei pesi. Se è troppo alto, il modello potrebbe superare i valori ottimali e non convergere. Se è troppo basso, l'addestramento diventa lento e potrebbe bloccarsi in una soluzione subottimale. La scelta di un learning rate appropriato bilancia velocità e stabilità nell'addestramento. I valori tipici variano da 0.001 a 0.1, a seconda del problema e della dimensione della rete.

Il grafico seguente mostra come un learning rate adeguato consenta alla perdita di diminuire costantemente a un ritmo ottimale:

Diversi tassi di apprendimento

Infine, stochastic gradient descent (SGD) svolge un ruolo fondamentale nell'efficienza dell'addestramento. Invece di calcolare gli aggiornamenti dei pesi dopo aver elaborato l'intero dataset, SGD aggiorna i parametri dopo ogni singolo esempio. Questo rende l'addestramento più veloce e introduce leggere variazioni negli aggiornamenti, che possono aiutare il modello a sfuggire ai minimi locali e raggiungere una soluzione complessiva migliore.

Il metodo fit()

Il metodo fit() nella classe Perceptron è responsabile dell'addestramento del modello utilizzando lo stochastic gradient descent.

def fit(self, training_data, labels, epochs, learning_rate):
    # Iterating over multiple epochs
    for epoch in range(epochs):
        # Shuffling the data  
        indices = np.random.permutation(training_data.shape[0])
        training_data = training_data[indices]
        labels = labels[indices]
        # Iterating through each training example
        for i in range(training_data.shape[0]):
            inputs = training_data[i, :].reshape(-1, 1)
            target = labels[i, :].reshape(-1, 1)

            # Forward propagation
            output = ...

            # Computing the gradient of the loss function w.r.t. output
            da = ...

            # Backward propagation through all layers
            for layer in self.layers[::-1]:
                da = ...
Descrizione del codice
expand arrow
for epoch in range(epochs):

Esegue il ciclo del processo di addestramento per il numero specificato di epoche. Ogni epoca rappresenta un passaggio completo sull'intero dataset.

indices = np.random.permutation(training_data.shape[0])
training_data = training_data[indices]
labels = labels[indices]

Mescola i dati di addestramento e le etichette corrispondenti prima di ogni epoca. Questo impedisce al modello di apprendere schemi basati sull'ordine dei dati.

for i in range(training_data.shape[0]):

Itera su ciascun esempio di addestramento. Poiché viene utilizzato SGD, i pesi vengono aggiornati dopo l'elaborazione di ogni singolo esempio.

inputs = training_data[i, :].reshape(-1, 1)
target = labels[i, :].reshape(-1, 1)

Estrae il i-esimo esempio di addestramento e la sua etichetta. Li ridimensiona in una matrice n x 1 affinché le operazioni matriciali funzionino correttamente.

output = ...

Esegue la propagazione in avanti per calcolare l'output previsto.

da = ...

Calcola il gradiente della funzione di perdita rispetto all'attivazione di output. Questo rappresenta il gradiente iniziale per la retropropagazione.

for layer in self.layers[::-1]:
    da = ...

Esegue la retropropagazione attraverso tutti gli strati in ordine inverso. Ogni strato aggiorna i propri pesi e bias utilizzando la discesa del gradiente.

question mark

Come si chiama un passaggio completo su tutto il dataset di addestramento?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 9

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Sezione 2. Capitolo 9
some-alt