PyTorch: grafi dinamici per il deep learning

Facebook AI Research rilascia PyTorch con grafi computazionali dinamici, autograd e API Pythonica, offrendo un approccio opposto ai grafi statici di TensorFlow.

Open SourceAI Open SourcePyTorchDeep LearningAIFacebookAutograd

L’eredità di Torch e i limiti dei grafi statici

Il deep learning nel 2016 è dominato da TensorFlow, rilasciato da Google l’anno precedente. TensorFlow adotta un modello a grafi statici: lo sviluppatore definisce prima l’intera struttura della rete neurale come un grafo computazionale, poi lo compila e infine lo esegue con i dati. Questo approccio è efficiente per la produzione, ma rende il debugging complesso — il grafo è un oggetto opaco, non ispezionabile con i normali strumenti Python — e la sperimentazione lenta, perché ogni modifica alla struttura richiede la ricompilazione dell’intero grafo.

PyTorch, rilasciato da Facebook AI Research (FAIR), eredita le fondamenta matematiche di Torch — un framework di calcolo numerico scritto in Lua — ma le ripensa completamente in Python, adottando un approccio radicalmente diverso: i grafi computazionali dinamici.

Define-by-run

Il concetto centrale di PyTorch è il define-by-run: il grafo computazionale non viene definito in anticipo, ma si costruisce automaticamente durante l’esecuzione del codice. Ogni operazione su un tensore crea un nodo nel grafo al volo. Questo significa che lo sviluppatore può usare normali costrutti Python — if, for, while — per controllare il flusso della computazione, e il grafo si adatterà dinamicamente a ogni esecuzione.

Il vantaggio per i ricercatori è immediato: possono ispezionare ogni passo con print(), usare il debugger standard di Python, modificare l’architettura della rete a runtime e sperimentare con strutture che cambiano forma a ogni batch di dati — come le reti ricorrenti con sequenze di lunghezza variabile.

Autograd

Il sistema di autograd (differenziazione automatica) è il motore che rende possibili i grafi dinamici. Ogni operazione su un tensore con requires_grad=True viene tracciata: PyTorch registra la sequenza di operazioni e, quando si chiama .backward(), calcola automaticamente i gradienti percorrendo il grafo al contrario. Il ricercatore definisce solo il passaggio in avanti; il calcolo dei gradienti per l’ottimizzazione è automatico.

API Pythonica

PyTorch non astrae il modello dietro API dichiarative: i tensori sono oggetti Python, le reti neurali sono classi Python, l’addestramento è un ciclo for esplicito. Chi conosce NumPy trova un’interfaccia familiare, con la differenza che i tensori PyTorch supportano l’esecuzione su GPU e la differenziazione automatica. Il progetto è rilasciato sotto licenza BSD e si afferma rapidamente nel mondo accademico come alternativa a TensorFlow per la ricerca.

Link: pytorch.org

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi