Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Backpropagation


L'errore tra l'output previsto e desiderato viene propagato all'indietro. Calcolando i contributi di ciascun peso all'errore complessivo.

Backpropagation


La backpropagation è un algoritmo fondamentale utilizzato nell'allenamento delle reti neurali artificiali.
Consiste in un metodo per calcolare il gradiente della funzione di costo rispetto ai pesi della rete neurale, permettendo così di aggiornare i pesi in modo da minimizzare la funzione di costo durante il processo di addestramento.


In termini semplici, durante la fase di forward propagation, l'input viene passato attraverso la rete neurale fino ad ottenere un output.
Successivamente, durante la fase di backpropagation, l'errore tra l'output previsto e l'output desiderato viene propagato all'indietro attraverso la rete, calcolando i contributi di ciascun peso all'errore complessivo.
Questi contributi vengono quindi utilizzati per aggiornare i pesi in modo appropriato, riducendo gradualmente l'errore durante l'addestramento della rete.

Esempio


Ecco un esempio di come implementare la backpropagation utilizzando Python e il dataset Fashion MNIST con TensorFlow:

import tensorflow as tf
from tensorflow.keras.datasets import fashion_mnist

# Caricamento del dataset Fashion MNIST
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()

# Normalizzazione delle immagini
X_train = X_train / 255.0
X_test = X_test / 255.0

# Definizione del modello
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compilazione del modello
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Addestramento del modello
model.fit(X_train, y_train, epochs=10, batch_size=32)

# Valutazione del modello sul set di test
test_loss, test_acc = model.evaluate(X_test, y_test)
print("Test accuracy:", test_acc)

In questo esempio, carichiamo il dataset Fashion MNIST, normalizziamo le immagini, definiamo un semplice modello sequenziale con uno strato nascosto, compiliamo il modello specificando l'ottimizzatore, la funzione di costo e le metriche di valutazione, quindi addestriamo il modello utilizzando il metodo `fit()`.

Infine, valutiamo le prestazioni del modello sul set di test utilizzando il metodo `evaluate()`.