Você está na página 1de 10

Exercı́cio - Algoritmo Backpropagation

Algoritmo BackPropagation
Maria Bernadete Zanusso

April 2, 2002

PROBLEMA: Considere os seguintes dados para treinar um Percep-


tron de Múltiplas Camadas

a) Conjunto de treinamento:
1 1.8 1 1.8 2 3.0 2.5 3.5 3 4.0 4 4.5
Entrada =
1 1.5 2 2.5 1 2.5 1.5 2.3 3 2.5 3 3.5
1 1.0 1 1.0 1 1.0 0.0 0.0 0 0.0 0 0.0
Saı́daDese =
0 0.0 0 0.0 0 0.0 1.0 1.0 1 1.0 1 1.0

−0.2 −0.1 +0.3 w10 w11 w12


b) Matrizes de pesos iniciais: W1 = +0.5 −0.8 +0.4 = w20 w21 w22
+0.1 +0.1 −0.6 w30 w31 w32
−0.1 +0.5 −0.3 +0.1 w10 w11 w12 w13
W2 = =
−0.3 +0.2 +0.6 −0.9 w20 w21 w22 w23

c) Eta é η = 0.1.

d) Função de ativação para a camada intermediária(ou oculta):


1
ϕ1 (v) =
1 + exp(−v)

e) Função de ativação para a camada de saı́da:

ϕ2 (v) = v

RESOLVA OS ITENS:
1. Defina a arquitetura e topologia da rede.
2. Aleatorize a matriz de entrada.
3. Dê uma entrada inicial para a rede e a propague até o final,
passando pelo cálculo de xi ’s, yj ’s e yk ’s, ek ’s e E(1).
4. Reajuste os pesos.
5. Dê uma outra entrada para a rede que está, agora, com os novos

1
pesos e calcule novamente xi ’s, yj ’s e yk ’s, ek ’s e E(2).
6. Calcule Emedio e EQM (epoca).

SOLUÇÃO

1 Arquitetura da rede
Colocar figura e definir n1 , n2 , n3 , x0 , y0

2 Uma possı́vel aleatorização:


2 4 1 1.8 1 3.0 2.5 3.5 3 4 1.8 4.5
Entrada =
1 3 2 2.5 1 2.5 1.5 2.3 3 2.5 1.5 3.5
Os vetores de entrada mudam de posição, mas mantêm a correspondência
inicial com os desejados. A mesma mudança é feita na matriz desejada.

3 Entra o primeiro exemplo (padrão) de treino:


" # " #
x1 2
X= =
x2 1
Temos então: x1 = 2 e x2 = 1.

3.1 Calculando a ativação dos neurônios da camada inter-


mediária:
n1
X
vj = wji ∗ xi , paraj = 1, 2, 3, · · · , n2 .
i=0

Para j = 1
2
X
v1 = (w1i ∗ xi )
i=0
= (−0, 2) ∗ 1 + (−0, 1) ∗ 2 + (0, 3) ∗ 1
= − 0, 2 − 0, 2 + 0, 3
= − 0, 1

Para j = 2
v2 = w20 ∗ x0 + w21 ∗ x1 + w22 ∗ x2
= (0, 5) ∗ 1 + (−0, 8) ∗ 2 + (0, 4) ∗ 1
= 0, 5 − 1, 6 + 0, 4
= − 0, 7

2
Para j = 3
v3 = w30 ∗ x0 + w31 ∗ x1 + w32 ∗ x2
= (0, 1) ∗ 1 + (0, 1) ∗ 2 + (−0, 6) ∗ 1
= 0, 1 + 0, 2 − 0, 6
= − 0, 3

3.2 Calculando a saı́da da camada intermediária:


1
yj = ϕ1 (vj ) = , paraj = 1, 2, · · · , n2 .
1 + exp(−vj )

1
y1 = ϕ1 (v1 ) = = 0, 4750
1 + exp(0, 1)
1
y2 = ϕ1 (v2 ) = = 0, 3318
1 + exp(0, 7)
1
y3 = ϕ1 (v3 ) = = 0, 4255
1 + exp(0, 3)

3.3 Calculando a ativação dos neurônios da camada de saı́da:


n2
X
vk = wkj ∗ yj , parak = 1, 2, · · · , n3 .
j=0

Para k = 1
3
X
v1 = (wkj ∗ yj )
j=0
= (−0, 1) ∗ 1 + 0, 5 ∗ 0, 4750 + (−0, 3) ∗ 0, 3318 + 0, 1 ∗ 0, 4255
= −0, 1 + 0, 2375 − 0, 0995 + 0, 04255
= 0, 0805

Para k = 2
v2 = (−0, 3) ∗ 1 + 0, 2 ∗ 0, 4750 + 0, 6 ∗ 0, 3318 + (−0, 9) ∗ 0, 4255
= −0, 3 + 0, 0950 + 0, 1990 − 0, 3829
= −0, 3889

3
3.4 Calculando a saı́da da camada de saı́da:
yk = ϕ2 (vk ) = vk , parak = 1, 2, · · · , n3 .

y1 = ϕ2 (v1 ) = 0, 0805
y2 = ϕ2 (v2 ) = −0, 3889

3.5 Calculando os erros das unidades de saı́da:


ek (n) = dk (n) − yk (n), parak = 1, 2, . . . , n3 en = 1, 2, . . . , N.
O primeiro instante se dá em n = 1, quando entra o primeiro padrão de
treino.

e1 (1) = 1 − 0, 0805 = 0, 9195


e2 (1) = 0 − (−0, 3889) = 0, 3889

3.6 Cálculo do erro instantâneo para o primeiro padrão de


treino:
n3
X
E(n) = e2k (n), n = 1, 2, · · · , N
k=1

2
1X
E(1) = e2 (1)
2 k=1 k
1 h i
= ∗ (0, 9195)2 + (0, 3889)2
2
= 0, 49834

Obs: No método de treino padrão por padrão ou pattern mode, depois do


cálculo desse erro instantâneo já poderı́amos reajustar os pesos novamente
e aı́ dar entrada no segundo padrão de treino. Este método é o que estamos
descrevendo agora.

4 Reajuste dos pesos:


4.1 Cálculo dos deltas (δ) e Deltas(∆)
a) Cálculo de δk = ϕ02 (vk ) ∗ ek , para k = 1, ..., n3 :

δ1 = 1 ∗ 0, 9195 = 0, 9195
δ2 = 1 ∗ 0, 3889 = 0, 3889

4
Pn3
b) Cálculo de δj = ϕ01 (vj ) k=1 δk ∗ wkj , para j = 1, ..., n2 :

δ1 = 0, 4750 ∗ (1 − 0, 4750) ∗ 0, 5375 = 0, 1340


δ2 = 0, 3318 ∗ (1 − 0, 3318) ∗ (−0, 0425) = −0, 0094
δ3 = 0, 4255 ∗ (1 − 0, 4255) ∗ (−0, 2580) = −0, 0630

c) Cálculo dos ∆wkj = η.δk .yj , para k = 1, ..., n3 e j = 0, ..., n2 :

Para k = 1
∆w10 = 0, 1 ∗ 0, 9195 ∗ 1 = 0, 09195
∆w11 = 0, 1 ∗ 0, 9195 ∗ 0, 4750 = 0, 04368
∆w12 = 0, 1 ∗ 0, 9195 ∗ 0, 3318 = 0, 03051
∆w13 = 0, 1 ∗ 0, 9195 ∗ 0, 4255 = 0, 3913

Para k = 2
∆w20 = 0, 1 ∗ (0, 3889) ∗ 1 = 0, 03889
∆w21 = 0, 1 ∗ (0, 3889) ∗ 0, 4750 = 0, 01848
∆w22 = 0, 1 ∗ (0, 3889) ∗ 0, 3318 = 0, 01291
∆w23 = 0, 1 ∗ (0, 3889) ∗ 0, 4255 = 0, 01656

d) Cálculo dos ∆wji = η.δj .xi , para j = 1, ..., n2 e i = 0, ..., n1 :

Para j = 1
∆w10 = 0, 1 ∗ 0, 1340 ∗ 1 = 0, 0134
∆w11 = 0, 1 ∗ 0, 1340 ∗ 2 = 0, 0268
∆w12 = 0, 1 ∗ 0, 1340 ∗ 1 = 0, 0134

Para j = 2
∆w20 = 0, 1 ∗ (−0, 0094) ∗ 1 = −0, 0009
∆w21 = 0, 1 ∗ (−0, 0094) ∗ 2 = −0, 0018
∆w22 = 0, 1 ∗ (−0, 0094) ∗ 1 = −0, 0009

Para j = 3

5
∆w30 = 0, 1 ∗ (−0, 0630) ∗ 1 = −0, 0063
∆w31 = 0, 1 ∗ (−0, 0630) ∗ 2 = −0, 0126
∆w32 = 0, 1 ∗ (−0, 0630) ∗ 1 = −0, 0063

4.2 Calculando os novos pesos:


wkj (novo) = wkj (velho) + ∆wkj

Para k = 1
w10 = −0, 1 + 0, 09195
w11 = +0, 5 + 0, 04368
w12 = −0, 3 + 0, 03051
w13 = +0, 1 + 0, 3913

Para k = 2
w20 = −0, 3 + 0, 03889 = −0, 26111
w21 = +0, 2 + 0, 01848 = +0, 21848
w22 = +0, 6 + 0, 01291 = +0, 61291
w23 = −0, 9 + 0, 01656 = −0, 88344

wji (novo) = wji (velho) + ∆wji

Para j = 1
w10 = −0, 2 + 0, 0134 = −0, 1866
w11 = −0, 1 + 0, 0268 = −0, 0732
w12 = +0, 3 + 0, 0134 = +0, 3134

Para j = 2
w20 = +0, 5 + (−0, 0009) = +0, 4991
w21 = −0, 8 + (−0, 0018) = −0, 8018
w22 = +0, 4 + (−0, 0009) = +0, 3991

Para j = 3
w30 = +0, 1 + (−0, 0063) = +0, 0937

6
w31 = +0, 1 + (−0, 0126) = +0, 0874
w32 = −0, 6 + (−0, 0063) = −0, 6063

5 Entra o segundo exemplo (padrão) de treino:


" # " #
x1 4
X= =
x2 3

Temos então: x1 = 4 e x2 = 3. Neste instante n = 2.

5.1 Calculando a ativação dos neurônios da camada inter-


mediária:
n1
X
vj = wji ∗ xi , j = 1, 2, 3, · · · , n2 .
i=0

X
v1 = w1i ∗ xi
= − 0, 1866 ∗ 1
− 0, 0732 ∗ 4
+ 0, 3134 ∗ 3
= +0, 4608

X
v2 = w2i ∗ xi
= + 0, 4991 ∗ 1
− 0, 8018 ∗ 4
+ 0, 3991 ∗ 3
= −1, 5108

X
v3 = w3i ∗ xi
= + 0, 0937 ∗ 1
+ 0, 0874 ∗ 4
− 0, 6063 ∗ 3
= −1, 3756

5.2 Calculando a saı́da da camada intermediária:


1
yj = ϕ2 (vj ) = , j = 1, 2, · · · , n2 .
e(
1 + − vj )

7
1
y1 = ϕ1 (v1 ) = = 0, 6132
1 + e−0,4608
1
y2 = ϕ1 (v2 ) = = 0, 1800
1 + e1,5108
1
y3 = ϕ1 (v3 ) = = 0, 2017
1 + e1,3756

5.3 Calculando a ativação dos neurônios da camada de saı́da:


n2
X
vk = wkj ∗ yj , parak = 1, 2, · · · , n3 .
j=0

X
v1 = w1j ∗ yj
= − 0, 0926 ∗ 1, 0000
+ 0, 5074 ∗ 0, 6132
− 0, 2926) ∗ 0, 1800
+ 0, 1074 ∗ 0, 2017
= 0, 1872

X
v2 = w2j ∗ yj
= − 0, 3151 ∗ 1, 0000
+ 0, 1849 ∗ 0, 6132
+ 0, 5849 ∗ 0, 1800
− 0, 9151 ∗ 0, 2017
= −0, 2811

5.4 Calculando a saı́da da camada de saı́da:


yk = ϕ2 (vk ) = vk , parak = 1, 2, · · · , n3 .

ϕ2 (v1 ) = 0, 1872
ϕ2 (v2 ) = −0, 2811

5.5 Calculando os erros das unidades de saı́da:


ek (n) = dk (n) − yk (n),
para k = 1, 2, . . . , n3 .

8
e1 (2) = 0 − 0, 1872 = −0, 1872
e2 (2) = 1 + 0, 2811 = 1, 2811

5.6 Cálculo do erro instantâneo para o segundo padrão de


treino:
n3
1X
E(n) = e2 (n), n = 1, 2, · · · , N
2 k=1 k
Para o instante n = 2 tem-se:
1 h i
E(2) = · (−0, 1872)2 + (1, 2811)2
2
E(2) = 0, 9958

6 Cálculo de Emedio e de EQM (epoca)


N
1 X
Emedio = E(n)
N n=1
Se tivéssemos só dois padrões, isto é, N = 2:
2
1X
Emedio = E(n) = E(1) + E(2)
2 n=1
Assim:
0, 49835 + 0, 9958 1, 49415
Emedio = = = 0, 7470
2 2
Mas temos N = 12 padrões de treino. Terı́amos de continuar o processo
para o terceiro, o quarto, até o décimo segundo padrão de treino e calcular:
12
1 X
Emedio = E(n)
12 n=1
Cada vez que entram os 12 padrões de treino, tem-se um época. Para
treinar a rede são necessárias muitas épocas. EQM (epoca) é o Erro Quadrático
Médio depois de cada época. Na verdade é o Emedio depois de cada época.
Se fizermos um gráfico em que na horizontal se colocam as épocas e na
vertical EQM (epoca), ele deve mostrar uma função decrescente para zero.

OBSERVAÇÕES

9
a) No modo por lote ou batch mode do aprendizado back-propagation, os
pesos w’s são atualizados depois da apresentação de todos os exemplos
de treino que constituem uma época. Neste caso a função custo é
Emedio ou EQM (epoca).

b) Aqui mostramos só a parte de treino. Para fazer a parte de teste da rede
terı́amos que pegar uma matriz de padrões, que não foram usados no
treino, e passar pela rede propagando até o cálculo dos yk ’s e ek ’s. Se,
para cada padrão, a diferença entre o desejado e o calculado pela rede
fosse pequena então ele seria classificado como certo. Deseja-se uma
porcentagem grande de acertos no conjunto de teste.

c) Para introduzir a taxa de momento, α, que pode melhorar o treinamento


da rede, pode-se usar as fórmulas:
(l) (l) (l) (l) (l−1)
wji (n + 1) = wji (n) + α[wji (n − 1)] + ηδj (n)yi (n)

Uma outra fórmula usada é:


(l) (l) (l) (l) (l) (l−1)
wji (n + 1) = wji (n) + α[wji (n) − wji (n − 1)] + ηδj (n)yi (n)

10