Aprile 2019

Volume 34 Numero 4

[Artificially Intelligent]

In che modo apprendono le reti neurali?

Dal Frank La La | Aprile 2019

Frank La VigneNel mio articolo precedente ("Informazioni dettagliate su reti neurali," msdn.com/magazine/mt833269), ho esaminato la struttura di base delle reti neurali e crearne uno da zero con Python. Dopo aver esaminato le strutture di base comuni a tutte le reti neurali, creato un framework di esempio per calcolare la somma ponderata e i valori di output. I neuroni stessi sono semplici e di eseguono funzioni matematiche di base per normalizzare i relativi output compreso tra 1 e 0 o -1 e 1. Questi diventano potenti, tuttavia, quando sono connessi tra loro. I neuroni sono disposti su livelli in una rete neurale e ogni neurone passa i valori per il livello successivo. I valori di input a catena in avanti attraverso la rete e influire sull'output in un processo denominato propagazione in avanti.

Tuttavia, esattamente dove le reti neurali trovare? Che cos'è il processo e ciò che accade all'interno di una rete neurale quando apprende? Nella colonna precedente, lo stato attivo Avanti propagazione di valori. Per gli scenari di apprendimento supervisionato, reti neurali possono sfruttare un processo denominato retropropagazione.

Retropropagazione, perdita e le epoche

È importante ricordare che ogni neurone in una rete neurale accetta i valori di input moltiplicati un peso per rappresentare la forza di tale connessione. Retropropagazione individua i pesi corretti da applicare ai nodi in una rete neurale, confrontando gli output corrente della rete con l'output desiderato o corretti. Dalla funzione di perdita o sui costi, viene calcolata la differenza tra l'output desiderato e l'output corrente. La funzione di perdita in altre parole, indica il livello di accuratezza nostra rete neurale è in esecuzione di stime per un input specificato.

La formula per calcolare la perdita è nelle figura 1. Non c'è da intimidire per le operazioni matematiche, ma è aggiungere un massimo di quadrati di tutti le differenze. In genere, i pesi e distorsioni inizialmente impostati su valori casuali, che spesso generano un valore di una perdita elevato quando si inizia a eseguire il training di una rete neurale.

Il costo, o la perdita, funzione
Figura 1 il costo, o la perdita, funzione

L'algoritmo viene quindi modificata ogni peso per ridurre al minimo la differenza tra il valore calcolato e il valore corretto. Il termine "retropropagazione" deriva dal fatto che l'algoritmo viene reimpostato e modifica i pesi e distorsioni dopo il calcolo di una risposta. Minore è la perdita di una rete, il più accurata che diventa. Il processo di apprendimento, quindi, può essere quantificato come output della funzione di perdita di ridurre al minimo. Ogni ciclo di correzione di propagazione e retropropagazione Inoltra per ridurre la perdita viene chiamato un oggetto come valore epoch. In poche parole, retropropagazione è sull'individuazione di più inpui pesi e distorsioni per ottenere un output più accurato o "ridurre al minimo la perdita." Se si sta pensando che ciò può sembrare un'operazione costosa, lo è. In effetti, calcolo power non era sufficiente fino a quando non relativamente recente per semplificare questo processo per l'uso di larghezza.

Valori descent con sfumatura, velocità di apprendimento e valori descent con sfumatura Stocastica

Come vengono modificati i pesi in ogni periodo? Essi in modo casuale vengono modificate o è presente un processo? Si tratta in cui molti principianti iniziano a farsi confuso, poiché sono presenti numerosi termini sconosciuti generata, come valori descent con sfumatura e velocità di apprendimento. Tuttavia, non realmente eccessivamente complessa quando illustrati in modo corretto. La funzione di perdita riduce la complessità di una rete neurale fino a un singolo numero che indica quanto sono fuori della rete neurale, risposta dalla risposta desiderata. Considerare come un numero singolo output della rete neurale consente di considerare le prestazioni in termini semplici. L'obiettivo è trovare la serie di pesi che restituisce il valore più basso di perdita o il valore minimo.

Questo tracciato in un grafico, come in figura 2, mostra che la funzione di perdita ha un proprio curva e sfumature che possono essere utilizzate come guida per modificare i pesi. L'inclinazione della curva della funzione di perdita funge da Guida e fa riferimento al valore minimo. L'obiettivo è necessario individuare il valore minimo tra l'intero curva, che rappresenta gli input in cui la rete neurale è più accurata.

Grafico della funzione di perdita con una semplice curva
Figura 2 diagramma della funzione di perdita con una semplice curva

Nelle figura 2, l'aggiunta più di raggiunge i pesi con punto e quindi inizia a salire nuovamente. L'inclinazione della linea mostra la direzione in cui tale punto sulla curva, che rappresenta la perdita più bassa più basso. Se la pendenza è negativa, aggiungere i pesi. Se la pendenza è positiva, sottrarre i pesi. La quantità specifica aggiunte o sottratte per i pesi è noto come la velocità di apprendimento. Determinare che una velocità di apprendimento ideale è più un'arte perché è una scienza. Troppo grande e l'algoritmo potrebbe si supera il valore minimo. Un valore troppo basso e il training richiede troppo tempo. Questo processo è denominato valori descent con sfumatura. I lettori che hanno maggiore familiari con le complessità del calcolo vedranno questo processo è: determinare la derivata della funzione di perdita.

Raramente, tuttavia, è il grafico di una funzione di perdita semplice come quello nel figura 2. In pratica, esistono molti picchi e stagnazioni. Il problema diventa quindi come trovare il valore minimo tra i punti di bassa (minimo globale) e non get tratto in inganno da bassa punti nelle vicinanze (valori minimi locali). L'approccio migliore in questo caso è per selezionare un punto lungo la curva in modo casuale e quindi procedere con il processo di valori descent con sfumatura descritto in precedenza, pertanto il termine "Descent sfumatura Stocastica." Per una spiegazione eccezionale dei concetti matematici su questo processo, guardare il video di YouTube, "valori descent con sfumatura, come altre reti neurali | Apprendimento avanzato, capitolo 2,"nella youtu.be/IHZwWFHWa-w.

Nella maggior parte, questo livello di architettura di rete neurale è stato in gran parte speditamente in librerie quali Keras e TensorFlow. Come in qualsiasi tipo di ingegneria del software, conoscere le nozioni di base sempre aiuta quando deve affrontare problematiche nel campo.

Inserimento teoria alla pratica

Nella colonna precedente, ho avevo creato una rete neurale da zero per elaborare le cifre MNIST. La base codice risultante per eseguire il bootstrap del problema è fantastica per illustrare i meccanismi interni di architetture di rete neurale, ma è impraticabile portare avanti. Esistono numerosi Framework e librerie a questo punto che eseguono la stessa attività con meno codice.

Per iniziare, aprire un nuovo notebook Jupyter e immettere le informazioni seguenti in una cella vuota e lo esegue per importare tutte le librerie necessarie:

import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import to_categorical
import matplotlib.pyplot as plt

Si noti che l'output di questa cella indichi che utilizza un back-end TensorFlow Keras. Poiché l'esempio di rete neurale MNIST è talmente comune, Keras include come parte dell'API e persino suddivide i dati in un set di training e un set di test. Scrivere il codice seguente in una nuova cella ed eseguirlo per scaricare i dati e leggerli in variabili appropriate:

# import the data
from keras.datasets import mnist
# read the data
(X_train, y_train), (X_test, y_test) = mnist.load_data()

Una volta l'output indica che i file vengono scaricati, usare il codice seguente viene brevemente esaminare il training e set di dati di test:

print(X_train.shape)
print(X_test.shape)

L'output deve essere letto che il set di dati x_train contiene 60.000 elementi e il set di dati x_test dispone di 10.000 elementi. Entrambi costituiti da una matrice di 28 x 28 dei pixel. Per visualizzare una particolare immagine dai dati MNIST, tramite matplotlib per eseguire il rendering di un'immagine con il codice seguente:

plt.imshow(X_train[10])

L'output dovrebbe essere, ad esempio una mano "3". Per visualizzare ciò che si trova all'interno del set di dati di test, immettere il codice seguente:

plt.imshow(X_test[10])

L'output mostra il valore zero. È possibile sperimentare modificando il numero di indice e il set di dati per esplorare il set di dati di immagine.

Il Data Shaping

Come con qualsiasi progetto di analisi scientifica dei dati o di intelligenza artificiale, i dati di input devono essere ripetuto il data shaping per soddisfare le esigenze degli algoritmi. I dati dell'immagine devono essere resa bidimensionale in un vettore unidimensionale. Poiché ogni immagine è 28 x 28 pixel, il vettore unidimensionale sarà 1 da (28 x 28) o 1 per 784. Immettere il codice seguente in una nuova cella ed eseguire (si noti che non si otterrà il testo di output):

num_pixels = X_train.shape[1] * X_train.shape[2]
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')

Intervallo di valori di pixel tra zero e 255. Per usarli, è necessario normalizzare li in valori compresi tra zero e uno. A tale scopo, usare il codice seguente:

X_train = X_train / 255
X_test = X_test / 255

Immettere quindi il codice seguente per vedere quali i dati è simile a questo punto:

X_train[0]

L'output, viene visualizzata una matrice di 784 valori compreso tra zero e uno.

L'attività di recupero in diverse immagini di cifre scritte a mano e determinare quale numero rappresentano sia la classificazione. Prima di compilare il modello, è necessario suddividere le variabili di destinazione in categorie. In questo caso, si sa che vi sono 10, ma è possibile usare la funzione to_categorical in Keras per determinare che automaticamente. Immettere il codice seguente ed eseguirlo (l'output visualizzerà 10):

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
num_classes = y_test.shape[1]
print(num_classes)

Compilare, eseguire il training e Test della rete neurale

Ora che i dati sono stata a forma di e preparati, è possibile creare le reti neurali usando Keras. Immettere il codice seguente per creare una funzione che crea una rete neurale sequenziale con tre livelli con i neuroni di un livello di input di num_pixels (o 784):

def classification_model():
  model = Sequential()
  model.add(Dense(num_pixels, activation='relu', input_shape=(num_pixels,)))
  model.add(Dense(100, activation='relu'))
  model.add(Dense(num_classes, activation='softmax'))
  model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
  return model

Confrontare questo codice al codice dai metodi dell'ultimo articolo di "da zero". È possibile notare i nuovi termini quali "relu" o "softmax" fa riferimento nelle funzioni di attivazione. Fino ad ora, ho esaminato solo la funzione Sigmoidale attivazione, ma sono disponibili diversi tipi di funzioni di attivazione. Per il momento, tenere presente che tutte le funzioni di attivazione comprimere un valore di input, restituendo un valore compreso tra 0 e 1 o -1 e 1.

Con tutta l'infrastruttura posto, è possibile compilare, eseguire il training e assegnare un punteggio di modello. Immettere il codice seguente in una cella vuota ed eseguirlo:

model = classification_model()
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=10, verbose=2)
scores = model.evaluate(X_test, y_test, verbose=0)

Mentre è in esecuzione la rete neurale, tenere presente che il valore di una perdita scende con ciascuna iterazione. Di conseguenza, l'accuratezza migliora anche. Inoltre, annotare il tempo impiegato per l'esecuzione di ogni periodo. Al termine, immettere il codice seguente per visualizzare le percentuali di accuratezza e di errore:

print('Model Accuracy: {} \n Error: {}'.format(scores[1], 1 - scores[1]))

L'output rivela un'accuratezza maggiore di 98 percento e un errore di 1.97 percento.

Rende persistente il modello

Ora che il modello di training di un elevato livello di accuratezza, è possibile salvare il modello per un uso futuro evitare di dover eseguire nuovamente il training. Fortunatamente, Keras è semplice. Immettere il codice seguente in una nuova cella ed eseguirlo:

model.save('MNIST_classification_model.h5')

Ciò consente di creare un file binario che è di circa 8KB di dimensioni e contiene i valori ottimali per i pesi e distorsioni. Il caricamento del modello è anche facile con Keras, come illustrato di seguito:

from keras.models import load_model
pretrained_model = load_model('MNIST_classification_model.h5')

Questo file h5 contiene il modello e può essere distribuito insieme al codice per modificare la forma e preparare i dati di immagine di input. In altre parole, il processo di lunga durato del training di un modello deve solo essere eseguita una sola volta. Riferimento di modello predefinito non richiede il processo di training un'operazione costosa e, nel sistema di produzione finale, della rete neurale può essere implementata rapidamente.

Conclusioni

Le reti neurali possono risolvere i problemi che hanno confounded algoritmi tradizionali per decenni. Come abbiamo visto, la loro struttura semplice nasconde la complessità true. Le reti neurali funzionano propagando input diretto, i pesi e distorsioni. Tuttavia, è il processo inverso di retropropagazione rete effettivamente informarsi determinando le modifiche esatte per rendere i pesi e distorsioni per produrre un risultato esatto.

Learning, nel senso macchina, sta riducendo al minimo la differenza tra il risultato effettivo e il risultato corretto. Questo processo è noiosa e costosa, calcolo, come evidenziato dal tempo che necessario per l'esecuzione tramite un periodo. Fortunatamente, questo corso di formazione deve solo essere eseguita una sola volta e non ogni volta che il modello è necessaria. Inoltre, esplorato usando Keras per creare la rete neurale. Sebbene sia possibile scrivere il codice necessario per creare le reti neurali da zero, è molto più semplice usare le librerie esistenti, ad esempio Keras, cui occuparsi dei dettagli al minuto per l'utente.


Frank La Vignelavora in Microsoft come un professionista di soluzioni di tecnologia di intelligenza artificiale in cui aiuta le aziende ottenere migliori risultati per usufruire al meglio i propri dati con analitica e intelligenza artificiale. Ha inoltre CO-host il DataDriven podcast. Il suo blog all'indirizzo FranksWorld.com ed è possibile guardare lui sul suo canale YouTube, "Di Frank mondo TV" (FranksWorld.TV).

Si ringraziano i seguenti esperti tecnici per la revisione dell'articolo: Andy Leonard