Le migliori librerie di machine learning e deep learning

Se stai avviando un nuovo progetto di machine learning o deep learning, potresti essere confuso su quale framework scegliere. Come vedremo, ci sono molte buone opzioni per entrambi i tipi di progetti.

C'è una differenza tra un framework di machine learning e un framework di deep learning. In sostanza, un framework di machine learning copre una varietà di metodi di apprendimento per la classificazione, la regressione, il clustering, il rilevamento di anomalie e la preparazione dei dati e può includere o meno metodi di rete neurale.

Un framework di deep learning o deep neural network copre una varietà di topologie di reti neurali con molti livelli nascosti. Keras, MXNet, PyTorch e TensorFlow sono framework di deep learning. Scikit-learn e Spark MLlib sono framework di machine learning. (Fare clic su uno qualsiasi dei collegamenti precedenti per leggere la mia recensione indipendente del prodotto.)

In generale, i calcoli della rete neurale profonda vengono eseguiti molto più velocemente su una GPU (in particolare una GPU generica Nvidia CUDA), TPU o FPGA, piuttosto che su una CPU. In generale, i metodi di machine learning più semplici non traggono vantaggio da una GPU.

Sebbene sia possibile addestrare reti neurali profonde su una o più CPU, l'addestramento tende ad essere lento e per lento non parlo di secondi o minuti. Più neuroni e strati devono essere addestrati e più dati sono disponibili per la formazione, più tempo è necessario. Quando il team di Google Brain ha addestrato i suoi modelli di traduzione linguistica per la nuova versione di Google Translate nel 2016, ha svolto le sessioni di formazione per una settimana alla volta, su più GPU. Senza GPU, ogni esperimento di addestramento del modello avrebbe richiesto mesi.

Da allora, la Intel Math Kernel Library (MKL) ha reso possibile l'addestramento di alcune reti neurali sulle CPU in un ragionevole lasso di tempo. Nel frattempo GPU, TPU e FPGA sono diventati ancora più veloci.

La velocità di addestramento di tutti i pacchetti di deep learning in esecuzione sulle stesse GPU è quasi identica. Questo perché i cicli interni di formazione trascorrono la maggior parte del loro tempo nel pacchetto Nvidia CuDNN.

Oltre alla velocità di formazione, ciascuna delle librerie di deep learning ha il proprio set di pro e contro, e lo stesso vale per Scikit-learn e Spark MLlib. Immergiamoci.

Keras

Keras è un'implementazione e una specifica front-end di alto livello per la creazione di modelli di rete neurale che viene fornita con il supporto per tre framework di deep learning back-end: TensorFlow, CNTK e Theano. Amazon sta attualmente lavorando allo sviluppo di un back-end MXNet per Keras. È anche possibile utilizzare PlaidML (un progetto indipendente) come back-end per Keras per sfruttare il supporto OpenCL di PlaidML per tutte le GPU.

TensorFlow è il back-end predefinito per Keras e quello consigliato per molti casi d'uso che coinvolgono l'accelerazione GPU su hardware Nvidia tramite CUDA e cuDNN, nonché per l'accelerazione TPU in Google Cloud. TensorFlow contiene anche una tf.kerasclasse interna , separata da un'installazione Keras esterna.

Keras ha un ambiente di alto livello che rende l'aggiunta di un livello a una rete neurale facile come una riga di codice nel suo modello sequenziale e richiede solo una chiamata di funzione ciascuno per la compilazione e l'addestramento di un modello. Keras ti consente di lavorare a un livello inferiore se lo desideri, con il suo modello o l'API funzionale.

Keras ti consente di scendere ancora più in basso, al livello di codifica Python, creando sottoclassi keras.Model, ma preferisce l'API funzionale quando possibile. Keras ha anche scikit-learnun'API, in modo da poter utilizzare la ricerca sulla griglia di Scikit-learn per eseguire l'ottimizzazione degli iperparametri nei modelli Keras. 

Costo: open source gratuito. 

Piattaforma: Linux, MacOS, Windows o Raspbian; Back-end TensorFlow, Theano o CNTK. 

Leggi la mia recensione di Keras. 

MXNet

MXNet si è evoluto e migliorato parecchio da quando è passato sotto l'ombrello di Apache Software Foundation all'inizio del 2017. Sebbene sia stato lavorato su Keras con un back-end MXNet, un'interfaccia diversa di alto livello è diventata molto più importante: Gluon. Prima dell'incorporazione di Gluon, era possibile scrivere codice imperativo semplice o codice simbolico veloce in MXNet, ma non entrambi contemporaneamente. Con Gluon, puoi combinare il meglio di entrambi i mondi, in un modo che compete sia con Keras che con PyTorch.

I vantaggi rivendicati per Gluon includono:

  • Codice semplice e di facile comprensione: Gluon offre un set completo di elementi costitutivi della rete neurale plug-and-play, inclusi livelli predefiniti, ottimizzatori e inizializzatori.
  • Struttura flessibile e imperativa: Gluon non richiede la definizione rigida del modello di rete neurale, ma piuttosto avvicina l'algoritmo di addestramento e il modello per fornire flessibilità nel processo di sviluppo.
  • Grafici dinamici: Gluon consente agli sviluppatori di definire modelli di rete neurale che sono dinamici, nel senso che possono essere costruiti al volo, con qualsiasi struttura e utilizzando qualsiasi flusso di controllo nativo di Python.
  • Prestazioni elevate: Gluon offre tutti i vantaggi di cui sopra senza influire sulla velocità di allenamento fornita dal motore sottostante.

Questi quattro vantaggi, insieme a una raccolta ampiamente ampliata di esempi di modelli, portano Gluon / MXNet alla massima parità con Keras / TensorFlow e PyTorch per facilità di sviluppo e velocità di addestramento. Puoi vedere esempi di codice per ciascuno di questi nella pagina principale di Gluon e ripetuti nella pagina di panoramica per l'API Gluon.

L'API Gluon include funzionalità per livelli di rete neurale, reti neurali ricorrenti, funzioni di perdita, metodi di set di dati e set di dati di visione, uno zoo modello e una serie di metodi di rete neurale sperimentali forniti. È possibile combinare liberamente Gluone con moduli standard MXNet e NumPy, per esempio module,autograd e ndarray, così come con flussi controllo Python.

Gluon offre una buona selezione di layer per la creazione di modelli, inclusi layer di base (Dense, Dropout, ecc.), Layer convoluzionali, layer di pooling e layer di attivazione. Ognuna di queste è una chiamata su una riga. Questi possono essere utilizzati, tra l'altro, all'interno di contenitori di rete come gluon.nn.Sequential().

Costo: open source gratuito. 

Piattaforma: Linux, MacOS, Windows, Docker, Raspbian e Nvidia Jetson; Python, R, Scala, Julia, Perl, C ++ e Clojure (sperimentale). MXNet è incluso nell'AMI di AWS Deep Learning.

Leggi la mia recensione di MXNet. 

PyTorch

PyTorch si basa sul vecchio Torch e sul nuovo framework Caffe2. Come puoi intuire dal nome, PyTorch utilizza Python come linguaggio di scripting e utilizza un back-end Torch C / CUDA evoluto. Le funzionalità di produzione di Caffe2 vengono incorporate nel progetto PyTorch.

PyTorch è classificato come "Tensori e reti neurali dinamiche in Python con forte accelerazione GPU". Cosa significa?

I tensori sono un costrutto matematico ampiamente utilizzato in fisica e ingegneria. Un tensore di rango due è un tipo speciale di matrice; prendendo il prodotto interno di un vettore con il tensore si ottiene un altro vettore con una nuova grandezza e una nuova direzione. TensorFlow prende il nome dal modo in cui i tensori (dei pesi delle sinapsi) scorrono attorno al suo modello di rete. NumPy usa anche i tensori, ma li chiama ndarray.

L'accelerazione GPU è un dato di fatto per la maggior parte dei moderni framework di reti neurali profonde. Una rete neurale dinamica è quella che può cambiare da iterazione a iterazione, ad esempio consentendo a un modello PyTorch di aggiungere e rimuovere strati nascosti durante l'addestramento per migliorarne l'accuratezza e la generalità. PyTorch ricrea il grafico al volo ad ogni passaggio dell'iterazione. Al contrario, TensorFlow per impostazione predefinita crea un singolo grafico del flusso di dati, ottimizza il codice del grafico per le prestazioni e quindi addestra il modello.

Sebbene la modalità di esecuzione desiderosa sia un'opzione abbastanza nuova in TensorFlow, è l'unico modo in cui PyTorch viene eseguito: le chiamate API vengono eseguite quando vengono invocate, anziché essere aggiunte a un grafico da eseguire in seguito. Potrebbe sembrare che sarebbe meno efficiente dal punto di vista computazionale, ma PyTorch è stato progettato per funzionare in questo modo e non è un problema quando si tratta di velocità di allenamento o previsione.

PyTorch integra librerie di accelerazione come Intel MKL e Nvidia cuDNN e NCCL (Nvidia Collective Communications Library) per massimizzare la velocità. Il suo core CPU e GPU Tensor e back-end della rete neurale - TH (Torch), THC (Torch CUDA), THNN (Torch Neural Network) e THCUNN (Torch CUDA Neural Network) - sono scritti come librerie indipendenti con un'API C99. Allo stesso tempo, PyTorch non è un'associazione Python in un framework C ++ monolitico: l'intenzione è che sia profondamente integrato con Python e che consenta l'uso di altre librerie Python.

Costo: open source gratuito. 

Piattaforma: Linux, MacOS, Windows; CPU e GPU Nvidia. 

Leggi la mia recensione di PyTorch. 

Scikit-impara

Il framework Scikit-learn Python ha un'ampia selezione di robusti algoritmi di machine learning, ma nessun deep learning. Se sei un fan di Python, Scikit-learn potrebbe essere l'opzione migliore per te tra le semplici librerie di machine learning.

Scikit-learn è una libreria di machine learning robusta e collaudata per Python con un vasto assortimento di algoritmi consolidati e grafica integrata. È relativamente facile da installare, imparare e utilizzare e ha buoni esempi ed esercitazioni.

Tra l'altro, Scikit-learn non copre l'apprendimento profondo o l'apprendimento per rinforzo, manca di modelli grafici e previsione di sequenza e non può essere utilizzato da linguaggi diversi da Python. Non supporta PyPy, il compilatore just-in-time di Python o le GPU. Detto questo, ad eccezione della sua piccola incursione nelle reti neurali, non ha davvero problemi di velocità. Usa Cython (il compilatore da Python a C) per le funzioni che devono essere veloci, come i cicli interni.

Scikit-learn ha una buona selezione di algoritmi per la classificazione, la regressione, il clustering, la riduzione della dimensionalità, la selezione del modello e la preelaborazione. Ha una buona documentazione ed esempi per tutti questi, ma manca qualsiasi tipo di flusso di lavoro guidato per svolgere queste attività.

Scikit-learn ottiene il massimo dei voti per la facilità di sviluppo, soprattutto perché tutti gli algoritmi funzionano come documentato, le API sono coerenti e ben progettate e ci sono pochi "disadattamenti di impedenza" tra le strutture di dati. È un piacere lavorare con una libreria le cui caratteristiche sono state completamente sviluppate e i cui bug sono stati completamente eliminati.

D'altra parte, la biblioteca non copre l'apprendimento profondo o l'apprendimento di rinforzo, che tralascia gli attuali problemi difficili ma importanti, come la classificazione accurata delle immagini e l'analisi e la traduzione affidabile in tempo reale. Chiaramente, se sei interessato all'apprendimento profondo, dovresti cercare altrove.

Tuttavia, ci sono molti problemi, che vanno dalla costruzione di una funzione di previsione che collega diverse osservazioni, alla classificazione delle osservazioni, all'apprendimento della struttura di un set di dati senza etichetta, che si prestano a un semplice apprendimento automatico vecchio senza bisogno di dozzine di strati di neuroni e per quelle aree Scikit-learn è davvero molto buono.

Costo: open source gratuito. 

Piattaforma: richiede Python, NumPy, SciPy e Matplotlib. Le versioni sono disponibili per MacOS, Linux e Windows.

Leggi la mia recensione di Scikit-learn. 

Spark MLlib

Spark MLlib, la libreria di machine learning open source per Apache Spark, fornisce algoritmi di machine learning comuni come classificazione, regressione, clustering e filtraggio collaborativo (ma non reti neurali profonde). Include anche strumenti per l'estrazione di feature, la trasformazione, la riduzione della dimensionalità e la selezione; strumenti per la costruzione, la valutazione e l'ottimizzazione di pipeline di machine learning; e utilità per salvare e caricare algoritmi, modelli e pipeline, per la gestione dei dati e per fare algebra lineare e statistica.

Spark MLlib è scritto in Scala e utilizza il pacchetto di algebra lineare Breeze. Breeze dipende da netlib-java per l'elaborazione numerica ottimizzata, sebbene nella distribuzione open source ciò significhi un uso ottimizzato della CPU. Databricks offre cluster Spark personalizzati che utilizzano GPU, che possono potenzialmente ottenere un ulteriore miglioramento della velocità 10 volte per l'addestramento di modelli di machine learning complessi con big data.

Spark MLlib implementa un carico di autocarri di algoritmi e modelli comuni per la classificazione e la regressione, al punto che un principiante potrebbe confondersi, ma un esperto potrebbe trovare una buona scelta di modello per i dati da analizzare, alla fine. A questa pletora di modelli Spark 2.x aggiunge l'importante funzionalità dell'ottimizzazione degli iperparametri, nota anche come selezione del modello. L'ottimizzazione degli iperparametri consente all'analista di impostare una griglia di parametri, uno stimatore e un valutatore e lasciare che il metodo di convalida incrociata (che richiede tempo ma accurato) o il metodo di suddivisione della convalida (più veloce ma meno accurato) trovi il modello migliore per il dati.

Spark MLlib ha API complete per Scala e Java, API per lo più complete per Python e API parziali abbozzate per R. Puoi avere un'idea della copertura contando gli esempi: 54 Java e 60 esempi di machine learning Scala, 52 macchine Python esempi di apprendimento e solo cinque esempi R. Nella mia esperienza Spark MLlib è più facile lavorare con i notebook Jupyter, ma puoi certamente eseguirlo in una console se domini i dettagliati messaggi di stato di Spark.

Spark MLlib fornisce praticamente tutto ciò che desideri in termini di apprendimento automatico di base, selezione di funzionalità, pipeline e persistenza. Fa un ottimo lavoro con la classificazione, la regressione, il clustering e il filtro. Dato che fa parte di Spark, ha un ottimo accesso a database, flussi e altre origini dati. D'altra parte, Spark MLlib non è realmente configurato per modellare e addestrare reti neurali profonde allo stesso modo di TensorFlow, PyTorch, MXNet e Keras.

Costo: open source gratuito.

Piattaforma: Spark funziona sia su sistemi Windows che Unix (ad esempio Linux, MacOS), con Java 7 o successivo, Python 2.6 / 3.4 o successivo e R 3.1 o successivo. Per l'API di Scala, Spark 2.0.1 utilizza Scala 2.11. Spark richiede Hadoop / HDFS.

Leggi la mia recensione di Spark MLlib.