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

bookSfida: Addestramento del Percettrone

Prima di procedere con l'addestramento del percettrone, è importante ricordare che utilizza la funzione di perdita entropia incrociata binaria discussa in precedenza. L'ultimo concetto chiave prima di implementare la retropropagazione è la formula per la derivata di questa funzione di perdita rispetto alle attivazioni di output, ana^n. Di seguito sono riportate le formule per la funzione di perdita e la sua derivata:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

dove an=y^a^n = \hat{y}

Per verificare che il percettrone si stia addestrando correttamente, il metodo fit() stampa anche la perdita media a ogni epoca. Questa viene calcolata facendo la media della perdita su tutti gli esempi di addestramento in quell'epoca:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Infine, le formule per il calcolo dei gradienti sono le seguenti:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

I dati di addestramento di esempio (X_train) insieme alle etichette corrispondenti (y_train) sono memorizzati come array NumPy nel file utils.py. Inoltre, le istanze delle funzioni di attivazione sono anch'esse definite lì:

relu = ReLU()
sigmoid = Sigmoid()
Compito

Swipe to start coding

L'obiettivo è completare il processo di addestramento per un percettrone multistrato implementando la retropropagazione e aggiornando i parametri del modello.

Seguire attentamente questi passaggi:

  1. Implementare il metodo backward() nella classe Layer:
  • Calcolare i seguenti gradienti:
    • dz: derivata della funzione di perdita rispetto ai valori di pre-attivazione, utilizzando la derivata della funzione di attivazione;
  • d_weights: gradiente della perdita rispetto ai pesi, calcolato come prodotto scalare tra dz e il vettore di input trasposto;
  • d_biases: gradiente della perdita rispetto ai bias, uguale a dz;
  • da_prev: gradiente della perdita rispetto alle attivazioni dello strato precedente, ottenuto moltiplicando la matrice dei pesi trasposta per dz.
  • Aggiornare pesi e bias utilizzando il learning rate.
  1. Completare il metodo fit() nella classe Perceptron:
  • Calcolare l'output del modello chiamando il metodo forward();
  • Calcolare la perdita utilizzando la formula dell'entropia incrociata;
  • Calcolare danda^n — la derivata della perdita rispetto alle attivazioni di output;
  • Scorrere all'indietro attraverso gli strati, eseguendo la retropropagazione chiamando il metodo backward() di ciascun layer.
  1. Verificare il comportamento dell'addestramento:
  • Se tutto è implementato correttamente, la perdita dovrebbe diminuire costantemente a ogni epoca utilizzando un learning rate di 0.01.

Soluzione

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 10
single

single

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 explain how the derivative of the binary cross-entropy loss is used in backpropagation?

What is the purpose of printing the average loss at each epoch?

Can you clarify how the gradients are computed using the provided formulas?

close

Awesome!

Completion rate improved to 4

bookSfida: Addestramento del Percettrone

Scorri per mostrare il menu

Prima di procedere con l'addestramento del percettrone, è importante ricordare che utilizza la funzione di perdita entropia incrociata binaria discussa in precedenza. L'ultimo concetto chiave prima di implementare la retropropagazione è la formula per la derivata di questa funzione di perdita rispetto alle attivazioni di output, ana^n. Di seguito sono riportate le formule per la funzione di perdita e la sua derivata:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

dove an=y^a^n = \hat{y}

Per verificare che il percettrone si stia addestrando correttamente, il metodo fit() stampa anche la perdita media a ogni epoca. Questa viene calcolata facendo la media della perdita su tutti gli esempi di addestramento in quell'epoca:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Infine, le formule per il calcolo dei gradienti sono le seguenti:

dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

I dati di addestramento di esempio (X_train) insieme alle etichette corrispondenti (y_train) sono memorizzati come array NumPy nel file utils.py. Inoltre, le istanze delle funzioni di attivazione sono anch'esse definite lì:

relu = ReLU()
sigmoid = Sigmoid()
Compito

Swipe to start coding

L'obiettivo è completare il processo di addestramento per un percettrone multistrato implementando la retropropagazione e aggiornando i parametri del modello.

Seguire attentamente questi passaggi:

  1. Implementare il metodo backward() nella classe Layer:
  • Calcolare i seguenti gradienti:
    • dz: derivata della funzione di perdita rispetto ai valori di pre-attivazione, utilizzando la derivata della funzione di attivazione;
  • d_weights: gradiente della perdita rispetto ai pesi, calcolato come prodotto scalare tra dz e il vettore di input trasposto;
  • d_biases: gradiente della perdita rispetto ai bias, uguale a dz;
  • da_prev: gradiente della perdita rispetto alle attivazioni dello strato precedente, ottenuto moltiplicando la matrice dei pesi trasposta per dz.
  • Aggiornare pesi e bias utilizzando il learning rate.
  1. Completare il metodo fit() nella classe Perceptron:
  • Calcolare l'output del modello chiamando il metodo forward();
  • Calcolare la perdita utilizzando la formula dell'entropia incrociata;
  • Calcolare danda^n — la derivata della perdita rispetto alle attivazioni di output;
  • Scorrere all'indietro attraverso gli strati, eseguendo la retropropagazione chiamando il metodo backward() di ciascun layer.
  1. Verificare il comportamento dell'addestramento:
  • Se tutto è implementato correttamente, la perdita dovrebbe diminuire costantemente a ogni epoca utilizzando un learning rate di 0.01.

Soluzione

Switch to desktopCambia al desktop per esercitarti nel mondo realeContinua da dove ti trovi utilizzando una delle opzioni seguenti
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 10
single

single

some-alt