Creazione di un’animazione di discesa del gradiente in Python
Creazione di un'animazione dell'effetto di sfumatura in Python
Come tracciare la traiettoria di un punto su una superficie complessa
Lasciate che vi racconti come ho creato un’animazione della discesa del gradiente solo per illustrare un punto in un articolo del blog. Ne è valsa la pena poiché ho imparato di più su Python facendolo e ho acquisito una nuova abilità: creare grafici animati.
Vi guiderò attraverso i passaggi del processo che ho seguito.
Un po’ di contesto
Qualche giorno fa ho pubblicato un articolo sulle discese del gradiente come algoritmo di ottimizzazione utilizzato per l’addestramento delle reti neurali artificiali.
Volevo includere un’immagine animata per mostrare come la scelta di diversi punti iniziali per un’ottimizzazione con discesa del gradiente possa produrre risultati diversi.
- Rendi Python più veloce memorizzando le funzioni Memoizzazione
- Smystifyingi la dipendenza e perché è importante nell’inferenza causale e nella validazione causale
- Insegnare è difficile come addestrare modelli piccoli e superare quelli grandi
Ecco quando sono incappato in queste straordinarie animazioni create da Alec Radford anni fa, e condivise in un commento su Reddit, che illustrano la differenza tra alcuni avanzati algoritmi di discesa del gradiente, come Adagrad, Adadelta e RMSprop.
Dato che mi sto sforzando di sostituire Matlab con Python, ho deciso di provare e codificare da solo un’animazione simile, utilizzando inizialmente un algoritmo di discesa del gradiente “vanilla”.
Andiamo avanti, passo dopo passo.
Tracciare la superficie utilizzata per l’ottimizzazione
La prima cosa che facciamo è importare le librerie di cui avremo bisogno e definire la funzione matematica che vogliamo rappresentare.
Volevo utilizzare una superficie a punto sella, quindi ho definito la seguente equazione:
Creiamo anche una griglia di punti per tracciare la superficie. np.mgrid
è perfetto per questo. Il numero complesso 81j
passato come lunghezza dello step indica quanti punti creare tra i valori di inizio e di fine (81 punti).
import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt# Crea una funzione per calcolare la superficiesdef f(theta): x = theta[0] y = theta[1] return x**2 - y**2# Crea una griglia di punti per tracciare la superficex, y = np.mgrid[-1:1:81j, -1:1:81j]