Le persone imparano dall'esperienza.
Più ricche sono le nostre esperienze, più possiamo imparare. Nella disciplina dell'intelligenza artificiale (AI) nota come deep learning, lo stesso si può dire per le macchine alimentate da hardware e software di intelligenza artificiale.
Le esperienze attraverso le quali le macchine possono apprendere sono definite dai dati che acquisiscono e la quantità e la qualità dei dati determinano quanto possono apprendere.
Il deep learning è una branca del machine learning . A differenza dei tradizionali algoritmi di machine learning, molti dei quali hanno una capacità limitata di apprendere indipendentemente dalla quantità di dati che acquisiscono, i sistemi di deep learning possono migliorare le proprie prestazioni con l'accesso a più dati.
Dopo che le macchine hanno acquisito sufficiente esperienza attraverso il deep learning, possono essere messe al lavoro per compiti specifici come guidare un'auto, rilevare le erbacce in un campo coltivato, rilevare malattie, ispezionare macchinari per identificare guasti e così via.
Come funziona l'apprendimento profondo ?
Le reti di deep learning apprendono scoprendo strutture complesse nei dati che sperimentano. Costruendo modelli computazionali composti da più livelli di elaborazione, le reti possono creare più livelli di astrazione per rappresentare i dati.
Ad esempio, un modello di apprendimento profondo noto come rete neurale convoluzionale può essere addestrato utilizzando un numero elevato (come in milioni) di immagini, come quelle contenenti gatti. Questo tipo di rete neurale impara tipicamente dai pixel contenuti nelle immagini che acquisisce. Può classificare gruppi di pixel che sono rappresentativi delle caratteristiche di un gatto, con gruppi di caratteristiche come artigli, orecchie e occhi che indicano la presenza di un gatto in un'immagine.
Il deep learning è fondamentalmente diverso dal machine learning convenzionale. In questo esempio, un esperto di dominio dovrebbe dedicare molto tempo alla progettazione di un sistema di apprendimento automatico convenzionale per rilevare le caratteristiche che rappresentano un gatto. Con il deep learning, tutto ciò che serve è fornire al sistema un numero molto elevato di immagini di gatti e il sistema può apprendere autonomamente le caratteristiche che rappresentano un gatto.
Per molte attività, come la visione artificiale, il riconoscimento vocale (noto anche come elaborazione del linguaggio naturale ), la traduzione automatica e la robotica, le prestazioni dei sistemi di apprendimento profondo superano di gran lunga quelle dei sistemi di apprendimento automatico convenzionali. Questo non vuol dire che la creazione di sistemi di deep learning sia relativamente facile rispetto ai sistemi di machine learning convenzionali. Sebbene il riconoscimento delle funzionalità sia autonomo nell'apprendimento profondo, migliaia di iperparametri (manopole) devono essere ottimizzati affinché un modello di apprendimento profondo diventi efficace.
Perché l'apprendimento profondo è importante?
Stiamo vivendo un momento di opportunità senza precedenti e la tecnologia di deep learning può aiutarci a raggiungere nuove scoperte. Il deep learning è stato determinante nella scoperta di esopianeti e nuovi farmaci e nel rilevamento di malattie e particelle subatomiche. Fondamentalmente sta aumentando la nostra comprensione della biologia, inclusa la genomica, la proteomica, la metabolomica, l'immunoma e altro ancora.
Viviamo anche in un'epoca in cui ci troviamo di fronte a sfide incessanti. Il cambiamento climatico minaccia la produzione alimentare e potrebbe un giorno portare a guerre per risorse limitate. La sfida del cambiamento ambientale sarà esacerbata da una popolazione umana in costante aumento, che dovrebbe raggiungere i nove miliardi entro il 2050. La portata e la portata di queste sfide richiedono un nuovo livello di intelligenza reso possibile dal deep learning.
Durante l'esplosione del Cambriano circa 540 milioni di anni fa, la visione emerse come un vantaggio competitivo negli animali e divenne presto il principale motore dell'evoluzione. In combinazione con l'evoluzione delle reti neurali biologiche per elaborare le informazioni visive, la visione ha fornito agli animali una mappa dell'ambiente circostante e ha accresciuto la loro consapevolezza del mondo esterno.
Oggi, la combinazione di telecamere come occhi artificiali e reti neurali in grado di elaborare le informazioni visive catturate da quegli occhi sta portando a un'esplosione di applicazioni di intelligenza artificiale basate sui dati. Proprio come la visione ha svolto un ruolo cruciale nell'evoluzione della vita sulla terra, il deep learning e le reti neurali miglioreranno le capacità dei robot. Saranno sempre più in grado di comprendere il loro ambiente, prendere decisioni autonome, collaborare con noi e aumentare le nostre capacità.
Esempi di Apprendimento Profondo o Deep Learning
Esempio di Apprendimento Profondo : Robotica
Molti dei recenti sviluppi della robotica sono stati guidati dai progressi dell'IA e del deep learning. Ad esempio, l'IA consente ai robot di rilevare e rispondere al loro ambiente. Questa capacità aumenta la gamma di funzioni che possono svolgere, dall'esplorazione dei piani del magazzino allo smistamento e alla manipolazione di oggetti irregolari, fragili o confusi insieme. Qualcosa di semplice come raccogliere una fragola è un compito facile per gli umani, ma è stato straordinariamente difficile da eseguire per i robot. Con il progredire dell'IA, tale progresso migliorerà le capacità dei robot.
Gli sviluppi nell'IA significano che possiamo aspettarci che i robot del futuro vengano sempre più utilizzati come assistenti umani. Non saranno usati solo per capire e rispondere alle domande, come alcuni sono usati oggi. Saranno anche in grado di agire su comandi vocali e gesti, persino anticipare la prossima mossa di un lavoratore. Oggi, i robot collaborativi lavorano già al fianco degli esseri umani, con esseri umani e robot che svolgono ciascuno compiti separati che sono più adatti ai loro punti di forza.
Esempio di Apprendimento Profondo : Agricoltura
L'IA ha il potenziale per rivoluzionare l'agricoltura. Oggi, il deep learning consente agli agricoltori di implementare attrezzature in grado di vedere e distinguere tra piante coltivate ed erbe infestanti. Questa capacità consente alle macchine diserbo di spruzzare selettivamente erbicidi sulle erbacce e di lasciare intatte altre piante. Le macchine agricole che utilizzano la visione artificiale abilitata per l'apprendimento profondo possono persino ottimizzare le singole piante in un campo spruzzando selettivamente erbicidi, fertilizzanti, fungicidi, insetticidi e prodotti biologici. Oltre a ridurre l'uso di erbicidi e migliorare la produzione agricola, il deep learning può essere ulteriormente esteso ad altre operazioni agricole come l'applicazione di fertilizzanti, l'irrigazione e la raccolta.
Esempio di Apprendimento Profondo : Imaging medico e assistenza sanitaria
Il deep learning è stato particolarmente efficace nell'imaging medico, grazie alla disponibilità di dati di alta qualità e alla capacità delle reti neurali convoluzionali di classificare le immagini. Ad esempio, il deep learning può essere efficace quanto un dermatologo nella classificazione dei tumori della pelle, se non di più. Diversi fornitori hanno già ricevuto l'approvazione della FDA per algoritmi di deep learning a fini diagnostici, inclusa l'analisi delle immagini per oncologia e malattie della retina. Il deep learning sta anche facendo progressi significativi nel miglioramento della qualità dell'assistenza sanitaria prevedendo eventi medici dai dati delle cartelle cliniche elettroniche.
Il futuro dell'apprendimento profondo
Oggi esistono varie architetture di reti neurali ottimizzate per determinati tipi di input e attività. Le reti neurali di convoluzione sono molto brave a classificare le immagini. Un'altra forma di architettura di deep learning utilizza reti neurali ricorrenti per elaborare dati sequenziali. Sia i modelli di rete neurale a convoluzione che quelli ricorrenti eseguono ciò che è noto come apprendimento supervisionato, il che significa che devono essere forniti con grandi quantità di dati per apprendere. In futuro, i tipi più sofisticati di IA utilizzeranno l'apprendimento non supervisionato. Una quantità significativa di ricerca è dedicata alla tecnologia dell'apprendimento non supervisionato e semisupervisionato.
L'apprendimento per rinforzo è un paradigma leggermente diverso dall'apprendimento profondo in cui un agente apprende per tentativi ed errori in un ambiente simulato esclusivamente da ricompense e punizioni. Le estensioni di apprendimento profondo in questo dominio sono denominate apprendimento per rinforzo profondo (DRL). Ci sono stati notevoli progressi in questo campo, come dimostrato dai programmi DRL che battono gli umani nell'antico gioco del GO.
Progettare architetture di reti neurali per risolvere i problemi è incredibilmente difficile, reso ancora più complesso con molti iperparametri da regolare e molte funzioni di perdita tra cui scegliere per ottimizzare. C'è stata molta attività di ricerca per apprendere in modo autonomo buone architetture di reti neurali. Imparare a imparare, noto anche come metalearning o AutoML, sta facendo progressi costanti.
Le attuali reti neurali artificiali si basavano sulla comprensione degli anni '50 di come il cervello umano elabora le informazioni. La neuroscienza ha compiuto notevoli progressi da allora e le architetture di apprendimento profondo sono diventate così sofisticate da sembrare mostrare strutture come le cellule della griglia, che sono presenti nei cervelli neurali biologici utilizzati per la navigazione. Sia la neuroscienza che l'apprendimento profondo possono trarre vantaggio l'un l'altro dall'impollinazione incrociata di idee ed è molto probabile che questi campi inizieranno a fondersi a un certo punto.
Non utilizziamo più computer meccanici e, a un certo punto, non utilizzeremo nemmeno computer digitali. Piuttosto, utilizzeremo una nuova generazione di computer quantistici.
Negli ultimi anni ci sono state diverse scoperte nell'informatica quantistica e gli algoritmi di apprendimento possono certamente trarre vantaggio dall'incredibile quantità di elaborazione disponibile fornita dai computer quantistici. Potrebbe anche essere possibile utilizzare algoritmi di apprendimento per comprendere l'output dei computer quantistici probabilistici.
L'apprendimento automatico quantistico è una branca molto attiva dell'apprendimento automatico e con la prima conferenza internazionale sull'apprendimento automatico quantistico prevista per il 2018, è iniziato bene.
Per capire come funziona l'apprendimento profondo vediamo un esempio con Python
Indice Tutorial In questa guida, seguiremo i seguenti passaggi:
Passaggio 1: caricamento delle librerie e dei moduli richiesti.
Passaggio 2: lettura dei dati ed esecuzione dei controlli di base dei dati.
Passaggio 3: creazione di array per le funzionalità e la variabile di risposta.
Passaggio 4: creazione dei set di dati di addestramento e test.
Passaggio 5 - Costruzione, previsione e valutazione del modello di rete neurale.
Passaggio 1: caricamento delle librerie e dei moduli richiesti
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn 6from sklearn.neural_network import MLPClassifier 7from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from math import sqrt 13from sklearn.metrics import r2_score
Passaggio 2: lettura dei dati ed esecuzione dei controlli sui dati di base
La prima riga di codice legge i dati come dataframe panda, mentre la seconda riga stampa la forma - 768 osservazioni di 9 variabili. La terza riga fornisce le statistiche riassuntive trasposte delle variabili.
Osservando il riepilogo della variabile "diabete", osserviamo che il valore medio è 0,35, il che significa che circa il 35% delle osservazioni nel set di dati ha il diabete. Pertanto, l'accuratezza di base è del 65% e il nostro modello di rete neurale dovrebbe sicuramente battere questo benchmark di base.
df = pd.read_csv('diabetes.csv')
print(df.shape)
df.describe().transpose()
Produzione:
(768, 9)
| | count | mean | std | min | 25% | 50% | 75% | max |
|-------------|-------|------------|------------|--------|----------|----------|-----------|--------|
| pregnancies | 768.0 | 3.845052 | 3.369578 | 0.000 | 1.00000 | 3.0000 | 6.00000 | 17.00 |
| glucose | 768.0 | 120.894531 | 31.972618 | 0.000 | 99.00000 | 117.0000 | 140.25000 | 199.00 |
| diastolic | 768.0 | 69.105469 | 19.355807 | 0.000 | 62.00000 | 72.0000 | 80.00000 | 122.00 |
| triceps | 768.0 | 20.536458 | 15.952218 | 0.000 | 0.00000 | 23.0000 | 32.00000 | 99.00 |
| insulin | 768.0 | 79.799479 | 115.244002 | 0.000 | 0.00000 | 30.5000 | 127.25000 | 846.00 |
| bmi | 768.0 | 31.992578 | 7.884160 | 0.000 | 27.30000 | 32.0000 | 36.60000 | 67.10 |
| dpf | 768.0 | 0.471876 | 0.331329 | 0.078 | 0.24375 | 0.3725 | 0.62625 | 2.42 |
| age | 768.0 | 33.240885 | 11.760232 | 21.000 | 24.00000 | 29.0000 | 41.00000 | 81.00 |
| diabetes | 768.0 | 0.348958 | 0.476951 | 0.000 | 0.00000 | 0.0000 | 1.00000 | 1.00 |
Passaggio 3: creazione di variabili di risposta
La prima riga di codice crea un oggetto della variabile target chiamato 'target_column'. La seconda riga fornisce l'elenco di tutte le caratteristiche, esclusa la variabile target 'disoccupato', mentre la terza riga normalizza i predittori.
La quarta riga mostra il riepilogo dei dati normalizzati. Possiamo vedere che tutte le variabili indipendenti sono state ora ridimensionate tra 0 e 1. La variabile target rimane invariata.
target_column = ['diabetes']
predictors = list(set(list(df.columns))-set(target_column))
df[predictors] = df[predictors]/df[predictors].max()
df.describe().transpose()
Produzione:
| | count | mean | std | min | 25% | 50% | 75% | max |
|-------------|-------|----------|----------|----------|----------|----------|----------|-----|
| pregnancies | 768.0 | 0.226180 | 0.198210 | 0.000000 | 0.058824 | 0.176471 | 0.352941 | 1.0 |
| glucose | 768.0 | 0.607510 | 0.160666 | 0.000000 | 0.497487 | 0.587940 | 0.704774 | 1.0 |
| diastolic | 768.0 | 0.566438 | 0.158654 | 0.000000 | 0.508197 | 0.590164 | 0.655738 | 1.0 |
| triceps | 768.0 | 0.207439 | 0.161134 | 0.000000 | 0.000000 | 0.232323 | 0.323232 | 1.0 |
| insulin | 768.0 | 0.094326 | 0.136222 | 0.000000 | 0.000000 | 0.036052 | 0.150414 | 1.0 |
| bmi | 768.0 | 0.476790 | 0.117499 | 0.000000 | 0.406855 | 0.476900 | 0.545455 | 1.0 |
| dpf | 768.0 | 0.194990 | 0.136913 | 0.032231 | 0.100723 | 0.153926 | 0.258781 | 1.0 |
| age | 768.0 | 0.410381 | 0.145188 | 0.259259 | 0.296296 | 0.358025 | 0.506173 | 1.0 |
| diabetes | 768.0 | 0.348958 | 0.476951 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 1.0 |
Passaggio 4: creazione dei set di dati di addestramento e test
Le prime due righe di codice seguenti creano matrici rispettivamente delle variabili indipendenti (X) e dipendenti (y). La terza riga suddivide i dati in training e test dataset e la quarta riga stampa la forma del training e dei dati di test.
X = df[predictors].values
y = df[target_column].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=40)
print(X_train.shape); print(X_test.shape)
Produzione:
(537, 8)
(231, 8)
Passaggio 5: costruzione, previsione e valutazione del modello di rete neurale
In questo passaggio, costruiremo il modello di rete neurale utilizzando l'oggetto stimatore della libreria scikit-learn, 'Multi-Layer Perceptron Classifier'. La prima riga di codice (mostrata di seguito) importa 'MLPClassifier'.
La seconda riga crea un'istanza del modello con l'argomento 'hidden_layer_sizes' impostato su tre livelli, che ha lo stesso numero di neuroni del conteggio delle funzionalità nel set di dati. Selezioneremo anche 'relu' come funzione di attivazione e 'adam' come risolutore per l'ottimizzazione del peso. Per saperne di più su 'relu' e 'adam', fare riferimento alle guide Deep Learning con Keras , i cui collegamenti sono forniti alla fine di questa guida.
La terza riga di codice adatta il modello ai dati di addestramento, mentre la quarta e la quinta riga utilizzano il modello addestrato per generare previsioni rispettivamente sul set di dati di addestramento e test.
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(8,8,8), activation='relu', solver='adam', max_iter=500)
mlp.fit(X_train,y_train)
predict_train = mlp.predict(X_train)
predict_test = mlp.predict(X_test)
Una volta generate le previsioni, possiamo valutare le prestazioni del modello. Essendo un algoritmo di classificazione, importeremo prima i moduli richiesti, cosa che viene eseguita nella prima riga di codice seguente. La seconda e la terza riga di codice stampano la matrice di confusione ei risultati del rapporto di confusione sui dati di addestramento.
from sklearn.metrics import classification_report,confusion_matrix print(confusion_matrix(y_train,predict_train))
print(classification_report(y_train,predict_train))
Produzione:
[[319 39]
[ 78 101]]
precision recall f1-score support
0 0.80 0.89 0.85 358
1 0.72 0.56 0.63 179
avg / total 0.78 0.78 0.77 537
L'output sopra mostra le prestazioni del modello sui dati di addestramento. La precisione e il punteggio F1 sono rispettivamente di circa 0,78 e 0,77. Idealmente, il modello perfetto avrà il valore di 1 per entrambe queste metriche, ma è quasi impossibile negli scenari del mondo reale.
Il passaggio successivo consiste nel valutare le prestazioni del modello sui dati di test eseguiti con le righe di codice seguenti.
print(confusion_matrix(y_test,predict_test))
print(classification_report(y_test,predict_test))
In questa guida hai imparato a costruire un modello di rete neurale usando scikit-learn. La guida ha utilizzato il set di dati sul diabete e ha costruito un algoritmo di classificazione per prevedere il rilevamento del diabete. Il nostro modello sta raggiungendo una discreta precisione del 78% e del 75% rispettivamente sui dati di addestramento e test. Osserviamo che l'accuratezza del modello è superiore all'accuratezza di base del 66%. Il modello può essere ulteriormente migliorato eseguendo la convalida incrociata, l'ingegneria delle funzionalità o modificando gli argomenti nello stimatore della rete neurale.
Si noti che abbiamo costruito un modello di classificazione in questa guida. Tuttavia, anche la costruzione del modello di regressione segue la stessa struttura, con un paio di aggiustamenti. Il primo è che al posto dello stimatore 'MLPClassifier', istanziare lo stimatore 'MLPRegressor'. La seconda correzione è che, invece di utilizzare l'accuratezza come metrica di valutazione, utilizzeremo il valore RMSE o R-quadrato per la valutazione del modello.
Per ulteriori informazioni sulla creazione di modelli di machine learning utilizzando scikit-learn , fare riferimento alle seguenti guide:
Comments