Deep learning: dalle basi alle architetture avanzate con Python

Il Deep learning, o apprendimento profondo, è una sottocategoria del Machine Learning (letteralmente “apprendimento automatico”) e indica quella branca dell’Intelligenza Artificiale che fa riferimento agli algoritmi ispirati alla struttura e alla funzione del cervello chiamate reti neurali artificiali.

Potremmo quindi dire, semplificando, che il Deep Learning indica l’apprendimento automatico da parte delle macchine attraverso dati appresi tramite algoritmi.

“Se avete provato a informarvi sulle reti neurali e il deep learning, probabilmente avete trovato un sacco di risorse, dai post sui blog ai MOOC (Massive Open Online Course) di varia qualità e persino alcuni libri. Tuttavia è probabile che le spiegazioni sulle reti neurali trovate finora siano state in qualche modo carenti. A me è successa la stessa cosa
quando iniziai a studiare questo argomento: le varie spiegazioni mi davano l’idea di persone cieche che cercavano di descrivere le diverse parti di un elefante, ma nessuna
riusciva a descrivere l’intera faccenda. È questo che mi ha spinto a scrivere un libro”. Queste le parole del data scientist Seth Weidman, autore del libro Deep Learning.

Che cos’è una rete neurale?

Nel caso delle reti neurali la parte più difficile, secondo Seth Weidman, è trasmettere il “modello mentale” corretto che aiuti a capire che cos’è una rete neurale, soprattutto perché la comprensione delle reti neurali richiede non uno ma diversi modelli mentali, ognuno dei quali chiarisce un aspetto diverso (ma essenziale) del funzionamento delle stesse.

Alla domanda “Che cos’è una rete neurale”, tutte queste risposte sono infatti corrette:

  • una rete neurale è una funzione matematica che riceve un input e produce un output;
  • una rete neurale è un grafo computazionale attraverso il quale scorrono matrici multidimensionali;
  • una rete neurale è costituita da strati, ognuno dei quali può essere pensato come se avesse un certo numero di “neuroni”;
  • una rete neurale è un Universal Function Approximator che in teoria può rappresentare la soluzione di qualsiasi problema di apprendimento supervisionato.

Molti potrebbero avere già sentito menzionare una o più di queste spiegazioni e potrebbero avere una conoscenza adeguata del loro significato. Per comprenderle appieno è però necessario comprenderle tutte e vedere come sono connesse. Questo uno degli obiettivi dell’autore.

Deep Learning: dalle basi alle architetture avanzate, con Python

In questo libro imparerete come applicare da zero le reti neurali multistrato, le reti neurali convoluzionali e quelle ricorrenti, acquisendo una comprensione dettagliata di come queste reti funzionino matematicamente, computazionalmente e concettualmente.

Ecco come è strutturato il volume:

  • Capitolo 1 – Viene mostrato in che modo le funzioni matematiche possono essere rappresentate attraverso una serie di operazioni collegate tra loro per formare un grafo computazionale, e come tale rappresentazione permetta di calcolare le derivate degli output di queste funzioni rispetto ai loro input utilizzando la regola della catena insegnata nei corsi di calcolo. Viene poi introdotta un’operazione molto importante, la moltiplicazione di matrici, e viene mostrato come si può inserire in una funzione matematica rappresentata in questo modo per consentire di calcolare le derivate che serviranno nel deep learning.
  • Capitolo 2 – Vengono usati gli elementi fondamentali creati nel Capitolo 1 per costruire e addestrare modelli per risolvere un problema reale: in particolare, per costruire sia modelli a regressione lineare sia modelli di reti neurali in grado di prevedere i prezzi delle abitazioni basati su un dataset reale. L’approccio basato sui “principi fondamentali” usato per costruire i modelli in questo capitolo dovrebbe dare un’idea precisa di come funzionano le reti neurali, ma mostrerà anche le capacità limitate dell’approccio passo passo, basato esclusivamente sui principi fondamentali, per definire i modelli del deep learning; tutto ciò giustificherà il Capitolo 3.
  • Capitolo 3 – Vengono presi gli elementi costitutivi dell’approccio basato sui principi fondamentali descritti nei primi due capitoli e utilizzati per costruire i componenti di “livello più alto” che costituiscono tutti i modelli di deep learning: Layer, Model, Optimizer e così via. Il capitolo si conclude addestrando un modello di deep learning, definito da zero, sullo stesso dataset usato nel Capitolo 2 e mostrando che funziona meglio della semplice rete neurale.
  • Capitolo 4 – Vengono descritti i più importanti “trucchi di addestramento” che generalmente aumentano la probabilità che una rete neurale trovi una buona soluzione e, ove possibile, verrà data qualche indicazione matematica del perché funzionano.
  • Capitolo 5 – Si esaminano le idee alla base delle reti neurali convoluzionali (CNN),
    una sorta di architettura di rete neurale specializzata in interpretazione delle
    immagini. Viene mostrata la differenza rispetto alle normali reti neurali: nello specifico, come le CNN fanno sì che ogni strato di neuroni sia organizzato in “mappa di caratteristiche” e come due di questi strati (ognuno composto da molteplici mappe di caratteristiche) siano connessi tramite filtri convoluzionali. Inoltre verrà scritto il codice degli strati convoluzionali per rafforzare la comprensione del loro funzionamento.
  • Capitolo 6 – La maggior parte delle reti neurali è implementata attraverso una tecnica chiamata differenziazione automatica. Viene fatta una breve panoramica della differenziazione automatica all’inizio del Capitolo 6, il cui argomento principale sono le RNN (reti neurali ricorrenti), l’architettura di rete neurale utilizzata normalmente per interpretare i dati in cui i punti appaiono in sequenza, come i dati delle serie temporali o i dati legati al linguaggio naturale. Viene quindi spiegato il funzionamento delle “RNN alla vaniglia” e delle due varianti: GRU e LSTM (implementate tutte e tre da zero).
  • Capitolo 7 – Viene mostrato come tutto ciò che è stato fatto da zero nei Capitoli da 1 a 6 possa essere implementato utilizzando la rete neurale open source ad alte prestazioni PyTorch. Imparare a usare un framework come questo è essenziale per progredire nell’apprendimento delle reti neurali; ma tuffarsi e studiare un framework senza aver prima acquisito delle basi solide sul come e perché le reti neurali funzionino limiterebbe gravemente la comprensione a lungo termine.L’obiettivo dell’evoluzione dei capitoli di questo libro è dare al lettore la capacità di costruire reti neurali ad altissime prestazioni (insegnando PyTorch) e contemporaneamente prepararlo all’apprendimento e ai risultati a lungo termine (insegnando i concetti fondamenti prima di spiegare come funziona PyTorch).

Seth Weidman, l’autore del libro

Seth Weidman è un data scientist che ha applicato e insegnato per molti anni concetti
di machine learning. Ha iniziato come data scientist al Trunk Club, dove ha costruito
modelli di valutazione dei contatti e sistemi di suggerimenti; attualmente lavora in Facebook, dove costruisce modelli di machine learning per il team delle infrastrutture. Tra una cosa e l’altra, ha insegnato data science e machine learning in campi scuola e nei corsi di formazione aziendale di Metis. Ama spiegare in modo chiaro concetti complessi, sforzandosi di trovare la semplicità nella complessità.