Sei sulla pagina 1di 8

Prof. B. Lazzerini Perceptron in MATLAB Prof. B.

Lazzerini Perceptron in MATLAB

NOTAZIONE MATLAB 2. UNO STRATO DI NEURONI

1. UN NEURONE

b = bias
f = funzione di trasferimento
n = net input n=w p +w p
1,1 1 1, 2 2
= Wp + b
+ ... + w1, R p R + b
(W è una matrice di una sola riga)
a = uscita del neurone

• NOTAZIONE ABBREVIATA

I pesi del neurone i-mo sono la riga i-ma di W. Tale riga è indicata con
iW.

1 2
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

• NOTAZIONE ABBREVIATA PIÚ STRATI DI NEURONI (NOTAZIONE ABBREVIATA)

• NOTAZIONE ABBREVIATA ESTESA Si = numero di neuroni nello strato i


IW1,1 = input weight matrix
LWi,j = layer weight matrix (connette lo strato j allo strato i)
ai = uscita dallo strato i (l’uscita a3 dal 3° strato coincide con l’uscita y
della rete)

IW1,1 = input weight matrix avente sorgente 1 (secondo indice) e


destinazione 1 (primo indice)
b , n , a1, …: l’apice 1 indica che si riferiscono al primo strato
1 1

s1 = numero di neuroni nel primo strato

3 4
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

PERCEPTRON RETE DI PERCEPTRON

Un perceptron si crea con la funzione newp:


net = newp(pr,s,tf,lf)
dove: pr = matrice Rx2 dei valori minimi e massimi per gli R
elementi di ingresso
s = numero di neuroni (dello strato di perceptron)
tf = transfer function, default = 'hardlim'.
lf = learning function, default = 'learnp'.

Per creare una rete perceptron con un vettore di input di un solo elemento,
i cui valori variano in [0 3], ed un neurone:
>> net=newp([0 3],1);

In MATLAB, una rete neurale (net nel nostro caso) è un oggetto di cui è
possibile visualizzare l’architettura, le funzioni, i parametri, i pesi e i bias
digitandone il nome nella finestra comandi.
Per esempio, la funzione di inizializzazione è contenuta in initFcn e ad
essa si può accedere scrivendo
>> net.initFcn

5 6
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

In modo simile, i pesi e i bias , che sono array di celle, sono contenuti nelle Possiamo cambiare il modo in cui un perceptron è inizializzato con la
matrici IW (input weight) ed LW (layer weight) e nel vettore b (bias). Ad funzione init. Per esempio, assegnando numeri casuali:
esempio, per accedere ai pesi di ingresso si deve digitare net.IW{1,1}.
>> net.inputweights{1,1}.initFcn='rands';
Per vedere cosa è stato creato: >> net.biases{1}.initFcn='rands';
>> net=init(net);
>> net.inputweights{1,1}
REGOLA DI ADDESTRAMENTO (learnp)
Otterremo,tra l’altro, Vediamo come si comporta la funzione di addestramento del perceptron
initFcn: 'initzero' funz. di inizializzazione di default (fissa a zero learnp. Se non si usa un bias, learnp cerca una soluzione modificando solo
i valori iniziali dei pesi e del bias) il vettore dei pesi w in modo che w si avvicini a vettori di ingresso che
learnFcn: 'learnp' funzione di apprendimento di default devono essere classificati con “1”, e si allontani da vettori che devono
weightFcn: ‘dotprod’ prodotto del vettore di input e della matrice dei essere classificati con “0”. Questo produce un confine decisionale che è
pesi + bias perpendicolare a w e che classifica correttamente i vettori di ingresso.
L’uso di un eventuale bias non fa altro che traslare il confine decisionale.
Analogamente: Dati il vettore di input p, l’uscita desiderata t e la risposta a della rete
possono verificarsi le seguenti condizioni:
>> net.biases{1} • l’uscita è corretta, cioè a = t e l’errore e = t - a = 0  il vettore dei
pesi w non è modificato;
fornisce risultati simili. • se l’uscita del neurone è 0 mentre avrebbe dovuto essere 1 (a = 0 e t
= 1, ed e = t – a = 1), il vettore di input p è aggiunto al vettore dei
Per visualizzare i valori di pesi e bias: pesi w. Questo rende il vettore dei pesi piú vicino al vettore di input,
>> net.iw{1,1} aumentando in tal modo la probabilità che il vettore di input sarà
>> net.b{1} classificato come 1 in futuro;
• se l’uscita del neurone è 1 mentre avrebbe dovuto essere 0 (a = 1 e t
Per cambiare l’inizializzazione dei pesi: = 0, ed e = t – a = -1), il vettore di input p è sottratto dal vettore dei
>> net.iw{1,1} = -1; pesi w. Questo rende il vettore dei pesi piú lontano dal vettore di
>> net.b{1} = 1; input, aumentando in tal modo la probabilità che il vettore di input
SIMULAZIONE (sim) sarà classificato come 0 in futuro.
Per simulare la rete:
>> p=[1,-2]; % vettore contenente due input La regola può essere riscritta sinteticamente in termini dell’errore e = t – a,
>> a= sim(net, p) e di ∆W :
INIZIALIZZAZIONE (init) • e = 0  ∆W =0
Con la funzione init si possono resettare pesi e bias della rete ai loro valori • e = 1  ∆W = p T

originali:
• e = -1  ∆W = − p T

>> net=init(net);
quindi

7 8
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

È garantito che la regola di apprendimento del perceptron converge in un Limiti del perceptron
numero finito di passi per tutti i problemi risolvibili da un perceptron, cioè
I valori di uscita sono solo 2 (funzione hardlim).
per tutti i problemi di classificazione che sono linearmente separabili.
Il perceptron può classificare soltanto insiemi linearmente separabili.
L’addestramento può richiedere molto tempo a causa degli outliers. Il
ADDESTRAMENTO (train)
problema si può risolvere usando la funzione learnpn (normalizza la regola
di addestramento).
Potremmo addestrare il perceptron usando ripetutamente sim e learnp per
presentare gli esempi di addestramento, calcolare l’uscita e l’errore, e
Outliers e regola di addestramento normalizzata
modificare pesi e bias di conseguenza. Tutto questo viene fatto
automaticamente dalla funzione train. Lunghi tempi di addestramento possono derivare dalla presenza di un
vettore di ingresso, detto outlier, la cui lunghezza è molto superiore o
Esempio: inferiore a quella degli altri vettori di ingresso. La regola di apprendimento
richiede di sommare e sottrarre vettori di ingresso dagli attuali pesi in
net = newp([0 1; -2 2],1); % crea uno strato di perceptron
risposta ad un errore. Di conseguenza, un vettore di ingresso con
% con un vettore di input di 2 elementi (i cui valori variano,
componenti grandi ha un effetto notevole sul vettore dei pesi w al punto
% rispettivamente, in [0 1] and [-2 2]) ed un neurone.
che vettori di ingresso molto piú piccoli devono essere presentati molte
P = [0 0 1 1; 0 1 0 1]; % 4 vettori di input (colonne), ciascuno
volte per avere un effetto sensibile.
% con 2 elementi
Per rendere il tempo di addestramento insensibile agli outliers si
T = [0 1 1 1]; % i 4 target corrispondenti
normalizza la regola di apprendimento:
Y = sim(net,P) % simuliamo l’uscita della rete
net.trainParam.epochs = 20;
net = train(net,P,T); % addestriamo per 20 epoche
Y = sim(net,P) % simuliamo di nuovo l’uscita della rete
In questo modo, l’effetto sui pesi è lo stesso per tutti i vettori di ingresso.
Eseguendo l’esempio precedente si vede che la rete impara dopo 4 epoche. La regola normalizzata è implementata dalla funzione learnpn.

Differenza tra train e adapt Esempio:


La funzione di addestramento adapt presenta alla rete un input alla volta e
Realizzare una porta AND utilizzando un perceptron.
corregge i pesi sulla base di ciascuna presentazione. L’uso di adapt
garantisce che qualsiasi problema linearmente separabile sia risolto in un
numero finito di presentazioni del training set. La funzione train opera in
net=newp([0 1;0 1],1); % definisce un perceptron con due ingressi
modo batch aggiustando i pesi sulla base della somma delle correzioni
% (nel range da 0 a 1) e un neurone di uscita
individuali. Sfortunatamente non vi è alcuna prova che questo algoritmo
p=[[0;0],[0;1],[1;0],[1;1]]; % definisce 4 vettori di addestramento.
converga.
% E' equivalente a p=[0 0 1 1; 0 1 0 1];
t=[0 0 0 1]; % uscite desiderate
net.adaptParam.passes=10; % specifica 10 iterazioni dell'algoritmo
% (10 presentazioni del training set)

9 10
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

[net,a,e]=adapt(net,p,t); % addestra la rete; GRAPHICAL USER INTERFACE (GUI)


% i pesi della rete aggiornati sono in net; MATLAB mette a disposizione un’interfaccia grafica per creare una rete,
% le uscite sono in a e l'errore e' in e visualizzarla, addestrarla, simularla ed esportare i risultati nel workspace.
a1=sim(net,[0;0]); % testa la rete con l'input [0;0] È possibile anche importare dati dal workspace nella GUI.
plotpv(p,t) % mostra i dati di addestramento (rappresenta con lo stesso
% simbolo vettori di input associati allo stesso valore target) Costruiamo una rete perceptron che esegue la funzione AND.
plotpc(net.iw{1,1},net.b{1}) % disegna la retta di classificazione Vettore di ingresso dati1= [0 0 1 1;0 1 0 1]
Vettore target t=[0 0 0 1].
Osserviamo che ha senso chiamare la funzione plotpc solo dopo la Chiamiamo la rete ANDNet.
funzione plotpv. Digitando
>> nntool
appare la seguente finestra:

11 12
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

Definiamo l’input della rete: [0 0 1 1;0 1 0 1] costituito da 4 vettori di 2


elementi. Facendo click su New Data appare una nuova finestra Create
New Data:

È possibile visualizzare la rete facendo click su View. Otteniamo:

Fare click su Create per creare effettivamente il file di input. Riappare la


finestra Network/Data Manager, click su New Data di nuovo, specificare
nome, valore e tipo della variabile target. Di nuovo click su Create e
riapparirà la finestra Network/Data Manager con le informazioni
sull’input e sul target.

Creazione della rete

Creiamo una nuova rete di nome ANDNet. Click su New Network ed


appare la finestra CreateNew Network. Digitare ANDNet in Network
Name. Settare Network Type a Perceptron. I range degli input possono La figura mostra che stiamo creando una rete perceptron con un singolo
essere specificati inserendo numeri nell’apposito campo, ovvero input (composto da 2 elementi), funzione di trasferimento ‘hardlim’, e un
ricavandoli dai dati di input. A tale scopo, fare click sulla freccia sul lato singolo output.
destro di Input Ranges. Il menu a tendina mostra il file da cui prendere i
range. Poi settiamo la funzione di trasferimento a ‘hardlim’ e la funzione Facendo click su Create generiamo la rete.
di apprendimento a ‘learnp’:
Addestramento del perceptron

Per addestrare la rete fare click su ANDNet nella finestra Network/Data


Manager e poi su Train. Si apre una nuova finestra Network:ANDNet. A
questo punto si possono specificare i dati di training (input e target)
selezionando Training Info:

13 14
Prof. B. Lazzerini Perceptron in MATLAB Prof. B. Lazzerini Perceptron in MATLAB

Specifichiamo anche i file con le uscite e gli errori della fase di


addestramento.
Facciamo ora click su Training Parameters. Vengono visualizzati
parametri, quali le epoche e l’errore desiderato. Ovviamente possiamo
cambiare questi parametri.
Questo significa che la rete è addestrata a produrre errore zero dopo 4
Adesso click su Train Network per addestrare la rete. Apparirà la
epoche.
seguente finestra:
Possiamo controllare che questo è vero simulando la rete con gli input
specificati. A tale scopo si torna alla finestra Network/Data Manager e si
fa click su Network Only: Simulate. Questo farà apparire la finestra
Network:ANDNet, in cui facciamo click su Simulate. Usiamo il menu a
tendina Input per specificare l’input, e chiamiamo l’uscita
ANDNet_outputsSim per distinguerla dall’uscita dell’addestramento. Ora
fare click su Simulate Network nell’angolo in basso a destra. Nella
finestra Network/Data Manager vedremo una nuova variabile di output:
ANDNet_outputsSim. Facendo doppio click su essa appare una piccola
finestra Data:ANDNet_outputsSim con il valore
[0 0 0 1].
In tal modo la rete esegue effettivamente l’AND degli input.

15 16

Potrebbero piacerti anche