CNTK - Concetti di rete neurale (NN)

Questo capitolo tratta i concetti di rete neurale per quanto riguarda CNTK.

Come sappiamo, diversi strati di neuroni vengono utilizzati per creare una rete neurale. Ma sorge la domanda che in CNTK come possiamo modellare gli strati di un NN? Può essere fatto con l'aiuto delle funzioni di livello definite nel modulo di livello.

Funzione di livello

In realtà, in CNTK, lavorare con i livelli ha una distinta sensazione di programmazione funzionale. La funzione di livello ha l'aspetto di una funzione normale e produce una funzione matematica con un insieme di parametri predefiniti. Vediamo come possiamo creare il tipo di livello più elementare, Denso, con l'aiuto della funzione di livello.

Esempio

Con l'aiuto dei seguenti passaggi di base, possiamo creare il tipo di livello più semplice:

Step 1 - Per prima cosa, dobbiamo importare la funzione Dense layer dal pacchetto dei livelli di CNTK.

from cntk.layers import Dense

Step 2 - Successivamente dal pacchetto radice CNTK, dobbiamo importare la funzione input_variable.

from cntk import input_variable

Step 3- Ora, dobbiamo creare una nuova variabile di input utilizzando la funzione input_variable. Dobbiamo anche fornire le sue dimensioni.

feature = input_variable(100)

Step 4 - Alla fine, creeremo un nuovo livello utilizzando la funzione Denso oltre a fornire il numero di neuroni che vogliamo.

layer = Dense(40)(feature)

Ora possiamo richiamare la funzione del livello Denso configurata per connettere il livello Denso all'input.

Esempio di implementazione completo

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

Personalizzazione dei livelli

Come abbiamo visto CNTK ci fornisce un buon insieme di impostazioni predefinite per la creazione di NN. Basato suactivationfunzione e altre impostazioni che scegliamo, il comportamento così come le prestazioni di NN è diverso. È un altro algoritmo di stemming molto utile. Questo è il motivo, è bene capire cosa possiamo configurare.

Passaggi per configurare un livello denso

Ogni strato in NN ha le sue opzioni di configurazione uniche e quando parliamo di strato denso, dobbiamo definire le seguenti impostazioni importanti:

  • shape - Come suggerisce il nome, definisce la forma di output dello strato che determina ulteriormente il numero di neuroni in quello strato.

  • activation - Definisce la funzione di attivazione di quel livello, quindi può trasformare i dati di input.

  • init- Definisce la funzione di inizializzazione di quel livello. Inizializzerà i parametri del layer quando inizieremo ad addestrare NN.

Vediamo i passaggi con l'aiuto di cui possiamo configurare un file Dense strato -

Step1 - Per prima cosa, dobbiamo importare il file Dense funzione layer dal pacchetto layer di CNTK.

from cntk.layers import Dense

Step2 - Successivamente dal pacchetto operativo CNTK, dobbiamo importare il file sigmoid operator. Verrà utilizzato per configurare come funzione di attivazione.

from cntk.ops import sigmoid

Step3 - Ora, dal pacchetto di inizializzazione, dobbiamo importare il file glorot_uniform inizializzatore.

from cntk.initializer import glorot_uniform

Step4 - Alla fine, creeremo un nuovo livello utilizzando la funzione Denso oltre a fornire il numero di neuroni come primo argomento. Inoltre, fornire il filesigmoid operatore come activation funzione e il glorot_uniform come la init funzione per il livello.

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Esempio di implementazione completo:

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Ottimizzazione dei parametri

Finora abbiamo visto come creare la struttura di un NN e come configurare varie impostazioni. Vedremo qui come ottimizzare i parametri di un NN. Con l'aiuto della combinazione di due componenti vale a direlearners e trainers, possiamo ottimizzare i parametri di un NN.

componente trainer

Il primo componente che viene utilizzato per ottimizzare i parametri di un NN è trainercomponente. Fondamentalmente implementa il processo di backpropagation. Se parliamo del suo funzionamento, passa i dati attraverso NN per ottenere una previsione.

Dopodiché, utilizza un altro componente chiamato learner per ottenere i nuovi valori per i parametri in un NN. Una volta ottenuti i nuovi valori, applica questi nuovi valori e ripete il processo finché non viene soddisfatto un criterio di uscita.

componente discente

Il secondo componente che viene utilizzato per ottimizzare i parametri di un NN è learner componente, che è fondamentalmente responsabile dell'esecuzione dell'algoritmo di discesa del gradiente.

Studenti inclusi nella libreria CNTK

Di seguito è riportato l'elenco di alcuni degli studenti interessanti inclusi nella libreria CNTK:

  • Stochastic Gradient Descent (SGD) - Questo studente rappresenta la discesa del gradiente stocastico di base, senza alcun extra.

  • Momentum Stochastic Gradient Descent (MomentumSGD) - Con SGD, questo studente applica lo slancio per superare il problema dei massimi locali.

  • RMSProp - Questo studente, al fine di controllare il tasso di discesa, utilizza tassi di apprendimento in declino.

  • Adam - Questo studente, al fine di diminuire la velocità di discesa nel tempo, utilizza lo slancio decrescente.

  • Adagrad - Questo discente, per le caratteristiche che si verificano frequentemente e raramente, utilizza tassi di apprendimento diversi.