Home
7 risposte su… Deep Learning con Python

07 Maggio 2020

7 risposte su… Deep Learning con Python

di

Cose da sapere sulle tecniche di apprendimento meccanizzato che cambiano il mondo del business, il mercato del lavoro e tutte le vite professionali, anche dove il loro effetto non è immediatamente evidente.

Le 7 risposte

  1. Che cosa sono le reti neurali ricorrenti
  2. Che cosa sono overfitting e underfitting
  3. Tecniche per rappresentare visivamente le convnet
  4. Che cos’è una derivata
  5. Che cos’è il deep learning generativo
  6. Il futuro del deep learning
  7. Come configurare una workstation per il deep learning

1. Che cosa sono le reti neurali ricorrenti

Una caratteristica comune a molte reti neurali, come le reti densamente connesse e le convnet, è che non hanno memoria. Ogni input che esaminano viene elaborato in modo indipendente, e non vi è alcuna conservazione di stato fra i vari input. Con tali reti, per elaborare una sequenza o una serie temporale di punti di dati, dobbiamo mostrare alla rete l’intera sequenza in una volta sola, trasformandola in un singolo punto dei dati. Tali reti sono chiamate reti feed-forward.

Al contrario, mentre leggiamo questa frase, la elaboriamo parola per parola, o piuttosto, occhiata per occhiata, ma sempre memorizzando quanto abbiamo letto prima; questo ci dà una rappresentazione fluida del significato fornito da questa frase. L’intelligenza biologica elabora le informazioni in modo incrementale, conservando un modello interno di ciò che sta elaborando, costruito sulla base delle informazioni precedenti e costantemente aggiornato con le nuove informazioni in arrivo.

Una rete neurale ricorrente (RNN) adotta lo stesso principio, ma in una versione estremamente semplificata: elabora le sequenze eseguendo iterazioni sugli elementi della sequenza e conservando uno stato contenente informazioni relative a tutto quello che ha visto in precedenza. In pratica, una RNN è un tipo di rete neurale che ha un ciclo interno (come nella prossima figura). Lo stato della RNN subisce un reset solo fra l’elaborazione di due sequenze differenti, indipendenti, pertanto si considera ancora una sequenza come un singolo punto dei dati: un singolo input per la rete. Ciò che cambia è che questo punto dei dati non è più elaborato in un unico passo; piuttosto, la rete opera ciclicamente sugli elementi della sequenza.

5 risposte su Deep Learning con Python: una rete ricorrente è una rete con un ciclo

Una rete ricorrente: una rete con un ciclo.

Torna all’inizio.

2. Che cosa sono overfitting e underfitting

Quasi sempre le prestazioni di un modello di deep learning raggiungono un picco dopo alcune epoche e poi iniziano a degradare: il modello va rapidamente in overfit sui dati di addestramento. Questo fenomeno si verifica in ogni problema di machine learning. Imparare a trattare l’overfitting è fondamentale nella pratica del machine learning.

La questione fondamentale, nel machine learning, è gestire la tensione fra ottimizzazione e generalizzazione. L’ottimizzazione è un processo di aggiustamento di un modello in modo che abbia le migliori prestazioni possibili nell’apprendimento dai dati di addestramento (la parte learning di machine learning), mentre la generalizzazione fa riferimento alla capacità del modello addestrato di operare correttamente su dati che non ha mai visto prima. L’obiettivo finale è avere una buona generalizzazione, sulla quale non abbiamo, però, alcun controllo; possiamo solo aggiustare il modello sulla base dei suoi dati di addestramento.

All’inizio del training, l’ottimizzazione e la generalizzazione sono correlate: più basso è il valore loss (la distanza dal target) sui dati di addestramento, più basso è il valore loss anche sui dati di test. Quando la situazione è questa, il modello manifesta un underfit: possono essere compiuti dei progressi; la rete non ha ancora incorporato nel modello tutti i pattern rilevanti presenti nei dati di addestramento. Ma dopo un certo numero di iterazioni sui dati di addestramento, la generalizzazione smette di migliorare e le metriche di convalida si appiattiscono e iniziano a degradare: il modello sta andando in overfit, ovvero sta iniziando a seguire quei pattern che sono specifici dei dati di addestramento, ma che sono fuorvianti o irrilevanti quando si trova ad affrontare nuovi dati.

Per evitare che un modello impari pattern fuorvianti o irrilevanti presenti nei dati di addestramento, la soluzione migliore consiste nel dotarsi di più dati di addestramento. Un modello addestrato su una maggiore quantità di dati manifesterà, naturalmente, migliori doti di generalizzazione. Quando questo non è possibile, un’altra soluzione consiste nel modulare la quantità di informazioni che il modello può memorizzare o nell’aggiungere vincoli su quali informazioni può memorizzare. Se una rete può permettersi di memorizzare solo un piccolo numero di pattern, il processo di ottimizzazione la costringerà a concentrarsi sui pattern più evidenti, che hanno anche maggiori probabilità di essere generalizzabili.

Torna all’inizio.

3. Tecniche per rappresentare visivamente le convnet

Spesso si dice che i modelli di deep learning sono black box, scatole nere: apprendono rappresentazioni che sono difficili da estrarre e presentare in una forma comprensibile a un essere umano. Sebbene questo sia parzialmente vero per alcuni tipi di modelli di deep learning, è decisamente falso per le convnet. Le rappresentazioni apprese dalle convnet si prestano moltissimo alla visualizzazione, in larga parte perché sono rappresentazioni di concetti visuali. Dal 2013, sono state sviluppate molte nuove tecniche per visualizzare e interpretare queste rappresentazioni. Tre fra le più accessibili e utili di queste sono le seguenti:

  • Visualizzazione degli output intermedi delle convnet (attivazioni intermedie): utile per comprendere come i vari layer della convnet trasformano il loro input e per farsi un’idea del significato dei singoli filtri della convnet.
  • Visualizzazione dei filtri delle convnet: utile per comprendere precisamente a quali pattern o concetti visuali è sensibile ogni filtro di una convnet.
  • Visualizzazione delle mappe termiche di attivazione delle classi in un’immagine: utile per comprendere quali parti di un’immagine sono state identificate come appartenenti a una data classe, consentendoci di localizzare gli oggetti nelle immagini.

Torna all’inizio.

4. Che cos’è una derivata

Consideriamo una funzione regolare e continua f(x) = y, che associa un numero reale x a un altro numero reale y. Poiché la funzione continua, una piccola variazione di x produrrà intuitivamente una piccola variazione in y. Supponiamo di incrementare x di un piccolo fattore epsilon_x: questo produrrà una piccola variazione epsilon_y rispetto a y:

f(x + epsilon_x) = y + epsilon_y

Inoltre, poiché la funzione è regolare (la sua curva non presenta angoli netti), quando epsilon_x è sufficientemente piccolo, attorno a un certo punto p è possibile approssimare f come una funzione lineare di pendenza a, tale che epsilon_y diviene a * epsilon_x:

f(x + epsilon_x) = y + a * epsilon_x

Ovviamente, questa approssimazione lineare è valida solo quando il punto x è sufficientemente vicino a p.

La pendenza a è chiamata la derivata di f in p. Se a è negativa, significa che una piccola variazione di x attorno a p produrrà una riduzione di f(x) (come in figura); e se la pendenza a è positiva, una piccola variazione di x produrrà un aumento di f(x). Inoltre, il valore assoluto di a (la magnitudine della derivata) vi dirà quanto rapidamente si verifica questo questa riduzione o questo aumento.

La derivata di f in p

La derivata di f in p.

Per ogni funzione differenziabile f(x) (dove differenziabile significa che può essere derivata; per esempio, le funzioni regolari e continue possono essere derivate), esiste una funzione derivata f'(x) che associa ai valori di x la pendenza dell’approssimazione lineare locale di f in quei punti. Per esempio, la derivata di cos(x) è -sin(x), la derivata di f(x) = a * x è f'(x) = a e così via.

Se stiamo tentando di aggiornare x di un fattore epsilon_x per minimizzare f(x), e conosciamo la derivata di f, il gioco è fatto: la derivata descrive completamente il modo in cui f(x) evolve quando cambiamo x. Se vogliamo ridurre il valore di f(x), dobbiamo solo spostare x di un poco nella direzione opposta della derivata.

Torna all’inizio.

5. Che cos’è il deep learning generativo

Le potenzialità dell’intelligenza artificiale di emulare i processi del pensiero umano vanno ben oltre i compiti passivi, come il riconoscimento degli oggetti, e i compiti prevalentemente reattivi, come la guida di un’auto. In particolare, si estendono molto bene nelle attività creative. Quando ho affermato che, in un futuro non troppo distante, la maggior parte dei contenuti culturali che consumiamo normalmente sarà creata con un aiuto sostanziale da parte di una o più intelligenze artificiali, le reazioni sono state di totale incredulità, anche da parte dei grandi utilizzatori del machine learning.

Era il 2014. Tre anni dopo l’incredulità ha lasciato il posto alla realtà, e a una velocità incredibile. Nell’estate del 2015, siamo stati intrattenuti dall’algoritmo Deep Dream di Google che trasformava un’immagine in una macedonia psichedelica di occhi di cane e illusioni pareidoliche; nel 2016, abbiamo impiegato l’applicazione Prisma per trasformare delle fotografie in dipinti di vari stili. Nell’estate del 2016, un filmato breve sperimentale, Sunspring, è stato diretto da uno script prodotto da un algoritmo LSTM (Long Short-Term Memory), con tanto di dialoghi. Forse, recentemente, abbiamo ascoltato musica generata da una rete neurale.

È certo che le produzioni artistiche realizzate finora da un’intelligenza artificiale sia>no di qualità piuttosto scadente. L’intelligenza artificiale non si avvicina neppure alla produzione degli sceneggiatori, dei pittori e dei compositori. Ma la questione non è quella di sostituire gli esseri umani: l’intelligenza artificiale non intende sostituire la nostra intelligenza con qualcos’altro, bensì offrire alla nostra vita e al nostro lavoro più intelligenza: un’intelligenza di tipo differente. In molti campi, ma specialmente in quelli creativi, l’intelligenza artificiale verrà impiegata da esseri umani come uno strumento in grado di estendere le loro capacità: Quindi è più un’intelligenza estesa che un’intelligenza artificiale.

Una larga parte della creazione artistica è costituita da semplici abilità tecniche e di riconoscimento di pattern. E questa è esattamente la parte del processo che molti trovano meno interessante o anche sacrificabile. E qui entra in campo l’intelligenza artificiale. Le nostre modalità percettive, il nostro linguaggio e la nostra produzione artistica hanno una struttura statistica. E gli algoritmi di deep learning eccellono nell’apprendere questa struttura. I modelli di machine learning possono apprendere lo spazio latente statistico delle immagini, dei brani musicali e dei racconti, e poi possono eseguire campionamenti di questo spazio, creando nuove opere d’arte aventi caratteristiche simili a quelle esaminate dal modello nei suoi dati di addestramento.

Naturalmente, tale campionamento non è un vero atto di creazione artistica. È una pura operazione matematica: l’algoritmo non ha alcuna conoscenza della vita umana, emozioni umane da esprimere o esperienza del mondo; al contrario, impara da un’esperienza che ha ben poco in comune con la nostra. È solo la nostra interpretazione, in quanto spettatori umani, a dare significato al modello generato automaticamente. Ma, nelle mani di un artista di talento, la generazione tramite algoritmi può essere guidata verso risultati significativi e apprezzabili. Il campionamento dello spazio latente può diventare un pennello nelle mani di un artista, che ne estende le possibilità creative e che espande lo spazio della sua immaginazione. Ma c’è di più: può anche rendere una creazione artistica più accessibile eliminando la necessità di ricorrere a competenze tecniche e pratiche, definendo così un nuovo medium di espressione pura, togliendo l’arte dalla sfera dell’artigianato.

Iannis Xenakis, un visionario pioniere della musica elettronica e algoritmica, ha espresso meravigliosamente questa stessa idea negli anni Sessanta, nel contesto dell’applicazione delle tecnologie alla composizione musicale (Iannis Xenakis, Musiques formelles: nouveaux principes formels de composition musicale, numero speciale di “Revue musicale”, n. 253-254, 1963):

Liberato dai noiosi calcoli, il compositore può finalmente dedicarsi ai problemi generali posti da questa nuova forma musicale ed esplorare ogni aspetto e dettaglio di questa forma intervenendo sui valori dei dati di input. Per esempio, può provare tutte le combinazioni strumentali, dai solisti alle orchestre da camera alle grandi orchestre. Con l’aiuto dei computer il compositore diviene una sorta di pilota: preme pulsanti, inserisce coordinate e manipola i comandi di un vascello cosmico che salpa per lo spazio del suono, fra costellazioni soniche e galassie che prima poteva vedere solo come sogni distanti.

Torna all’inizio.

6. Il futuro del deep learning

Dato ciò che sappiamo sul funzionamento delle reti profonde, sui loro limiti e sullo stato corrente della ricerca, riusciamo a predire dove ci stiamo muovendo sul medio periodo? Quelle che seguono sono riflessioni puramente personali. Ma non ho la sfera di cristallo, pertanto molto di ciò che illustrerò potrebbe non avverarsi mai. Condivido con voi queste predizioni non perché mi aspetto che si avverino completamente in futuro, ma perché sono interessanti e visibili nel presente.

A grandi linee, queste sono alcune delle direzioni che mi sembrano promettenti.

  • Modelli sempre più vicini a programmi generici, costruiti sulla base di primitive più ricche degli attuali layer differenziabili. Questo è il modo in cui possiamo avvicinarci al ragionamento e all’astrazione, elementi che fondamentalmente mancano negli attuali modelli.
  • Nuove forme di apprendimento che rendano possibile il punto precedente, consentendo ai modelli di superare le trasformazioni differenziabili.
  • Modelli che richiedano meno impegno agli esseri umani. Il nostro compito non dovrebbe essere quello di regolare continuamente le leve e manopole virtuali di un modello.
  • Maggiore e sistematico riutilizzo delle caratteristiche e delle architetture precedentemente apprese, come il meta-apprendimento di sistemi tramite subroutine riutilizzabili e modulari.

Notiamo inoltre che queste considerazioni non sono specifiche dell’apprendimento con supervisione su cui si basa il deep learning oggi, ma piuttosto sono applicabili a ogni forma di machine learning, compreso quello senza supervisione, ad auto-supervisione e ad apprendimento per rinforzo. Non è davvero così importante da dove provengano le etichette o l’aspetto del ciclo di addestramento; questi diversi rami del machine learning sono solo sfaccettature differenti dello stesso costrutto.

Torna all’inizio.

7. Come configurare una workstation per il deep learning

Prima di poter iniziare a sviluppare applicazioni di deep learning, occorre configurare una workstation. È decisamente consigliabile, ma non strettamente necessario, eseguire il codice di deep learning su una GPU Nvidia recente. Alcune applicazioni – in particolare, quelle di elaborazione delle immagini con reti convolutive e di elaborazione delle sequenze con reti neurali ricorrenti – saranno insopportabilmente lente sulla sola CPU, anche se fosse una veloce CPU multicore. E anche per le applicazioni che possono essere eseguite realisticamente su una CPU, generalmente potremo contare su un incremento di velocità di un fattore 5 o 10 potendo contare su una moderna GPU. Se non vogliamo installare una GPU sulla nostra macchina, possiamo considerare la possibilità di condurre i nostri esperimenti su un’istanza di GPU EC2 di AWS o sulla Google Cloud Platform. Ma consideriamo il fatto che le istanze cloud di GPU possono rivelarsi molto costose, nel tempo.

Che stiamo operando localmente o nel cloud, è preferibile impiegare una workstation Unix. Sebbene sia tecnicamente possibile usare Keras in Windows (tutti e tre i backend di Keras supportano Windows), lo sconsigliamo. Nelle istruzioni per l’installazione nell’Appendice A, consideriamo una macchina Ubuntu. Se abbiamo una macchina Windows, la soluzione più semplice per poter lavorare consiste nell’installare Ubuntu in dual boot sulla macchina. Può sembrare complicato, ma utilizzando Ubuntu ci risparmieremo molte perdite di tempo e molti problemi.

Notiamo che per poter impiegare Keras, dobbiamo installare TensorFlow o CNTK o Theano (o anche tutti e tre, se vogliamo essere in grado di passare dall’uno all’altro dei backend).

Notebook Jupyter: il modo migliore per condurre esperimenti di deep learning

I notebook Jupyter sono un ottimo modo per condurre esperimenti di deep learning. E infatti sono ampiamente utilizzati nelle community della scienza dei dati e del machine learning. Un notebook è un file generato dall’app Jupyter Notebook, che possiamo modificare nel browser. Offre la possibilità di eseguire codice Python e ricche funzionalità di editing del testo per annotare ciò che stiamo facendo. Un notebook consente inoltre di suddividere un grosso esperimento in tante parti più piccole, che possono essere eseguite in modo indipendente; ciò rende lo sviluppo più interattivo e fa sì che non dobbiamo eseguire nuovamente tutto il codice precedente se poi qualcosa va storto nell’esperimento.

Consigliamo di utilizzare dei notebook Jupyter per iniziare a usare Keras, ma naturalmente questo non è un obbligo: possiamo tranquillamente eseguire gli script in Python o lanciare il codice da un IDE come PyCharm.

Utilizzare Keras: due opzioni

Per iniziare con Keras, consigliamo una delle due opzioni seguenti.

  • Usare le AMI ufficiali EC2 Deep Learning, ed eseguire gli esperimenti Keras come notebook Jupyter con EC2. Possiamo farlo se sulla macchina non abbiamo installato una GPU.
  • Installare tutto dall’inizio in una workstation Unix locale. Potremo poi eseguire dei notebook Jupyter locali o una base di codice Python. Possiamo farlo se sul sistema abbiamo una GPU Nvidia ad alte prestazioni.

Osserviamo più da vicino alcuni dei compromessi legati a queste due opzioni.

Svolgere compiti di deep learning nel cloud: pro e contro

Se non abbiamo una GPU da dedicare al deep learning (una GPU Nvidia recente e di alto livello), allora condurre esperimenti di deep learning nel cloud rappresenta un modo semplice e a basso costo per iniziare senza acquistare nuovo hardware. Se usiamo notebook Jupyter, l’esperienza di condurli nel cloud non differirà da un’esecuzione locale. Il cloud che offre il modo migliore per iniziare con il deep learning è decisamente AWS EC2.

Se siamo invece forti utilizzatori del deep learning, questa configurazione risulterà insostenibile a lungo termine, diciamo per più di qualche settimana. Le istanze EC2 sono costose: l’istanza p2.xlarge, che non offre moltissima potenza, costa 0,90 dollari l’ora. D’altra parte, una buona GPU di classe consumer costerà fra i 1.000 e i 1.500 dollari, un prezzo che è rimasto piuttosto stabile nel corso del tempo, anche se le specifiche di queste GPU migliorano continuamente. Se vogliamo fare sul serio con il deep learning, dovremmo configurare una workstation locale con una o più GPU.

In breve, EC2 è un ottimo modo per iniziare. Ma se il nostro uso del deep learning si farà più intenso, compriamoci delle GPU.

La GPU migliore per il deep learning

Se dobbiamo acquistare una GPU, innanzitutto, deve essere una Nvidia, l’unica società che abbia fortemente investito sul deep learning; d’altra parte i framework di deep learning operano solo su schede Nvidia.

Consigliamo una scheda Nvidia GTX 1080 Ti. A un prezzo più contenuto, possiamo considerare la scheda GTX 1060.

Torna all’inizio.

Questo articolo richiama contenuti da Deep Learning con Python.

unsplash-logoImmagine di apertura di Drew Graham

L'autore

  • François Chollet
    François Chollet si occupa di intelligenza artificiale all'interno del Google Brain Team. È l’ideatore della libreria di deep learning Keras e ha contribuito allo sviluppo del framework di machine learning TensorFlow. Svolge ricerche nel campo della visione artificiale e dell’applicazione del machine learning al ragionamento formale. I suoi contributi sono stati pubblicati in occasione delle principali conferenze di settore.

Iscriviti alla newsletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.

Corsi che potrebbero interessarti

Tutti i corsi
Big-data-analytics-iniziare-bene-cover Corso Online

Big Data Analytics - Iniziare Bene

con Andrea De Mauro

Credi che i Big Data siano una grande opportunità ma che spesso se ne parli a sproposito? Excel ti sta stretto e vorresti fare di più? Andrea De Mauro ti aiuta a fare chiarezza e ti insegna a muovere i primi passi nell'analisi dei Big Data.

big-_data_executive-home Corso Online

Big Data Executive: business e strategie

con Andrea De Mauro

Vuoi capire se e come la tua azienda può ottenere un vantaggio di business investendo in una strategia di creazione e analisi di Big Data? Il corso di Andrea De Mauro è quello che ti serve.

corso-data-governance Simone Aliprandi Corso Online

Data governance: diritti, licenze e privacy

con Simone Aliprandi

I dati sono ovunque intorno a noi ma per poterli utilizzare in sicurezza bisogna confrontarsi con temi complessi che riguardano licenze, proprietà intellettuale e privacy. Se non ti senti sicuro o hai paura di prendere la decisione sbagliata, il corso di Simone Aliprandi fa per te.


Libri che potrebbero interessarti

Tutti i libri

Big Data Analytics

Analizzare e interpretare dati con il machine learning

34,90

49,89€ -30%

28,41

29,90€ -5%

19,99

di Andrea De Mauro

Big Data con Hadoop

45,25

63,99€ -29%

37,05

39,00€ -5%

24,99

di Garry Turkington, Gabriele Modena

Deep Learning con Python

Imparare a implementare algoritmi di apprendimento profondo

26,99

di François Chollet


Articoli che potrebbero interessarti

Tutti gli articoli