Come realizzare una rete neurale: architettura, parametri e codice

Pubblicato: 2021-02-12

Le reti neurali, come suggerisce il nome, sono circuiti di neuroni. Esistono diversi tipi di reti neurali. Le reti neurali biologiche sono costituite da veri neuroni biologici. Considerando che le reti neurali artificiali (ANN) sono un sistema basato sulla rete neurale biologica, come quella presente nel cervello. Il numero stimato di neuroni nel cervello è di circa 100 miliardi, che comunicano attraverso segnali elettrochimici.

L'ANN cerca di ricreare la complessità computazionale presente nei neuroni biologici ma non è paragonabile a quella e sono versioni molto più semplici e non complesse delle reti neurali biologiche. In questo articolo capiremo la struttura di una RNA e impareremo come creare una rete neurale usando Python.

Sommario

Architettura della rete neurale

La rete neurale artificiale è costituita da neuroni artificiali chiamati anche “Nodi”. Questi nodi sono collegati tra loro in modo tale da creare una rete o una mesh. Alla forza di queste connessioni tra loro viene assegnato un valore. Questo valore è compreso tra -1 e 1.

Se il valore della connessione è alto indica una forte connessione tra quei nodi. Ogni nodo ha una funzione caratteristica. La modifica di questa funzione cambierà il comportamento e la natura della complessità della rete neurale. Esistono tre tipi di neuroni in una ANN, nodi di input, nodi nascosti e nodi di output, come mostrato di seguito:

Fonte

Il nodo di input è responsabile della ricezione delle informazioni che generalmente sono sotto forma di valori numerici o espressioni. Le informazioni vengono presentate come valori di attivazione, in cui a ciascun nodo viene assegnato un numero, maggiore è il numero, maggiore è l'attivazione.
Le informazioni vengono ulteriormente trasmesse in rete. Sulla base dei pesi di connessione del nodo e della funzione di attivazione relativa a determinati neuroni di strati specifici, l'informazione viene trasmessa da neurone a neurone. Ciascun nodo aggiunge i valori di attivazione alla ricezione, i valori vengono modificati in base alla funzione di trasferimento.
Le informazioni fluiscono attraverso la rete, attraverso livelli nascosti, fino a raggiungere i nodi di output. I nodi di output sono molto importanti in quanto riflettono l'input in modo significativo verso il mondo esterno. Qui si può vedere un aspetto sorprendente delle reti neurali che porta alla regolazione dei pesi per ogni livello e nodo.

La differenza tra il valore previsto e il valore effettivo (errore) verrà propagata all'indietro. La rete neurale quindi imparerà dagli errori commessi e cercherà di regolare i pesi sulla base dell'approccio del tasso di apprendimento designato.

Quindi, regolando i parametri come un numero di strati nascosti, un numero di neuroni per strato, la strategia di aggiornamento del peso e la funzione di attivazione, possiamo creare una rete neurale.

Definisci i parametri

Funzione di attivazione

Ci sono varie funzioni di attivazione tra cui scegliere che possono essere utilizzate nella rete neurale in base al problema in esame.

Le funzioni di attivazione sono equazioni matematiche che ogni neurone possiede. Determina l'output di una rete neurale.
Questa funzione di attivazione è collegata a ogni neurone nella rete e determina se deve essere attivata o meno, il che si basa sul fatto che l'attivazione di quel particolare neurone aiuta a derivare previsioni rilevanti a livello di output. Livelli diversi possono avere diverse funzioni di attivazione associate. Le funzioni di attivazione aiutano anche a normalizzare l'output di ciascun neurone in un intervallo compreso tra 1 e 0 o tra -1 e 1.

Le moderne reti neurali utilizzano un'importante tecnica chiamata backpropagation per addestrare il modello regolando i pesi, che pone un maggiore sforzo computazionale sulla funzione di attivazione e sulla sua funzione derivata.

Funzionamento di una funzione di attivazione
Collegamento mancante

Esistono 3 tipi di funzioni di attivazione:
Binario- x<0 y=0 , x>0 y=1
Lineare- x=y
Non lineare – Vari tipi: Sigmoid, TanH, Logistic, ReLU, Softmax ecc.

Fonte: blog

Tipo: ReLU
Collegamento mancante

Algoritmo

Esistono molti tipi di reti neurali, ma sono spesso divise in reti feed-forward e feed-back (backpropagation).

1) La rete di feed in avanti è una rete non ripetitiva che contiene input, output e livelli nascosti; poiché i segnali possono muoversi solo in una direzione. I dati di input vengono trasferiti al livello dell'apparecchiatura di elaborazione dove esegue i calcoli. Ciascun fattore di elaborazione effettua il suo calcolo in base al peso dell'input. Vengono calcolati nuovi valori e quindi i nuovi valori di input alimentano il livello successivo.

Questo processo continua finché non passa attraverso tutti i livelli e determina il risultato. A volte viene utilizzata una funzione di trasferimento Limite per misurare l'output dei neuroni nel livello di output. Le reti Feed Forward sono conosciute come e includono le reti Perceptron (dirette e indirette). Le reti feed-forward vengono spesso utilizzate per il data mining.

2) La rete di feedback (ad esempio, una rete neurale ricorrente o RNN) ha meccanismi retrospettivi, il che significa che possono avere segnali che si muovono in entrambe le direzioni usando trappole/loop. È consentita ogni possibile comunicazione tra i neuroni.

Poiché i loop sono presenti in questo tipo di rete, diventa un sistema non lineare che cambia continuamente fino a raggiungere uno stato di stabilità. Le reti di feedback vengono spesso utilizzate per le memorie associate a problemi di prestazioni quando la rete è alla ricerca di un buon insieme di oggetti connessi.

Formazione

il passaggio feed-forward significa dato un input e pesa come viene calcolato l'output. Dopo il completamento dell'allenamento, eseguiamo solo il passaggio in avanti per formare le previsioni.

Ma prima abbiamo dovuto addestrare il nostro modello per imparare veramente i pesi, e quindi la procedura di allenamento funziona come segue:

  1. Seleziona e inizializza casualmente i pesi per tutti i nodi. Esistono metodi di inizializzazione intelligenti integrati in TensorFlow e Keras (Python).
  2. Per ogni esempio di allenamento, esegui un passaggio in avanti usando i pesi presenti e calcola l'output di ogni nodo andando da sinistra a destra. L'output finale è il valore dell'ultimo nodo.
  3. Confronta l'output finale con l'obiettivo effettivo all'interno dei dati di addestramento e misura l'errore utilizzando una funzione di perdita.
  4. Eseguire un passaggio all'indietro da destra a sinistra e propagare l'errore calcolato nell'ultimo passaggio a ogni singolo nodo utilizzando la backpropagation.
  5. Calcola il contributo del peso di ciascun neurone all'errore e regola i pesi della connessione di conseguenza utilizzando la discesa del gradiente. Propaga i gradienti di errore a partire dall'ultimo livello.

Codice Python per la rete neurale

Ora che capiamo come è fatta la rete neurale in teoria, implementiamo lo stesso usando Python.

Rete neurale in Python
Utilizzeremo l'API Keras con i backend Tensorflow o Theano per creare la nostra rete neurale.

Installazione di librerie
Teano
>>> installazione pip –upgrade –no-deps git+git://github.com/Theano/Theano.git

Tensorflow e Keras
>>> pip3 installa tensorflow
>>> pip install –upgrade Keras

Importa le librerie

importare chera
da keras.models import Sequential
da keras.layers import Dense

Inizializzazione della rete neurale artificiale

modello = sequenziale()

Crea livelli di input e nascosti-

model.add(Dense(input_dim = 2, unità = 10, attivazione='relu', kernel_initializer='uniform'))

Questo codice aggiunge il livello di input e un livello nascosto alla rete sequenziale
Dense(): consente di creare una rete neurale densamente connessa
input_dim: forma o numero di nodi nel livello di input
unità: il numero di neuroni o nodi nello strato corrente (strato nascosto)
attivazione: la funzione di attivazione applicata a ciascun nodo.”relu” sta per Rectified Linear Unit
kernel_initializer: pesi casuali iniziali del livello

Secondo strato nascosto
model.add(Dense(units = 20, activation='relu', kernel_initializer='uniform'))

Il codice crea e aggiunge un altro livello nascosto al modello con 20 nodi e la funzione di attivazione "Lineare rettificato". È possibile aggiungere più livelli in modo simile a seconda del problema e della complessità.

Livello di uscita
model.add(Dense(units = 1, activation='sigmoid', kernel_initializer='uniform'))

Un singolo livello di output con Sigmoid o softmax sono le funzioni di attivazione comunemente utilizzate per un livello di output.

Compilazione ANN:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

L'ANN viene compilata con una funzione di ottimizzazione e una funzione di perdita prima di essere addestrata.

Ottimizzatore: una funzione di ottimizzazione per la rete, esistono vari tipi di ottimizzatori e viene utilizzato principalmente adam.
Perdita: utilizzata per calcolare le perdite e gli errori. Ne esistono di vari tipi e la scelta dipende dalla natura del problema da affrontare.
Metrics: la metrica utilizzata per misurare le prestazioni del modello.

Adattamento del modello con i dati di allenamento:
model.fit(X_train, Y_train, batch_size=64, epochs=30)

Questo codice creerà il modello

Conclusione

Ora possiamo creare una rete neurale artificiale (su Python) da zero poiché abbiamo compreso i diversi parametri che possono essere modificati in base al problema in esame.

Se sei interessato a saperne di più sulle tecniche di deep learning e machine learning, dai un'occhiata al Diploma PG di IIIT-B e upGrad in Machine Learning e AI, progettato per i professionisti che lavorano e offre oltre 450 ore di formazione rigorosa, oltre 30 casi di studio e incarichi, stato di Alumni IIIT-B, oltre 5 progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Impara il corso ML dalle migliori università del mondo. Guadagna master, Executive PGP o programmi di certificazione avanzati per accelerare la tua carriera.

Guida la rivoluzione tecnologica guidata dall'intelligenza artificiale

Richiedi il programma di certificazione avanzato in Machine Learning e NLP