Rede Neural de
Backpropagation
1
Aprendizagem
• Seja tk a k-th saída alvo (desejada) e zk a k-th saída
computada para k = 1, …, c
• Sejam w os pesos da rede
• Seja net a soma ponderada de entradas de um neurônio
• Erro de treinamento:
1 c
1
2
J ( w )   ( t k  zk )  t  z
2 k 1
2
2
• A minimização do erro só pode ser feita atuando sobre os
pesos das conexões da rede
2
Notação para a dedução
• Seja tk a k-th saída alvo (desejada) e zk a k-th saída
computada para k = 1, …, c
• Sejam w os pesos da rede
• Seja net a soma ponderada de entradas de um neurônio
d
d
i 1
i 0
netj   xi w ji  w j 0   xi w ji  wtj .x
 d

zk  f   w ji xi  w j 0   f (netk )
 i 1

3
(k  1,...,c)
Minimização do erro
• Para minimizar o erro é preciso igualar a zero sua derivada em
relação aos pesos
• Erro é função de net e net é função dos pesos
• Derivando parcialmente (camada de saída)
netk
J
J netk

.
  k
wkj netk wkj
wkj
• k mostra a variação do erro com a unidade (neurônio)
J
k  
netk
4
Atualização dos pesos das conexões
• A minimização do erro só pode ser feita atuando sobre os
pesos das conexões da rede
• Depois de cada computação de saída de ordem m o erro de
treinamento deve ser minimizando modificando esse pesos para a
computação de ordem m+1
w(m +1) = w(m) + w(m)
• Incremento de peso para redução do erro de treinamento,
que deve ser minimizado
•  é o coeficiente de aprendizagem
1 c
1
2
J ( w )   ( t k  zk )  t  z
2 k 1
2
J
wki  
wki
5
2
Conexões com a camada de saída
• Erro é função da saída zk e zk é função de net
k  
z k
J
 1

(t k  z k ) 2  (t k  z k )

netk
netk 2
netk
 (t k  z k )
f (netk )
 (t k  z k ) f ´(netk )
netk
• como netk = wkt.y
netk
 yj
wkj
netk
J
J netk
wkj  
 
.
 k
 k y j
wkj
netk wkj
wkj
• A regra de aprendizagem ou atualização de pesos entre a
camada de saída e a camada oculta é
wkj = kyj = (tk – zk) f’ (netk)yj
6
Conexões com a camada oculta
A regra de aprendizagem ou atualização de pesos entre a
camada oculta e a camada de entrada é semelhante
J
J y j net j

.
.
w ji y j net j w ji
k mostra a variação do erro com o peso da conexão
c
 j  f ' (netj ) wkj k
k 1


w ji  xi j   wkj k f ' (net j ) xi

j
7
Resumo da atualização de pesos
f (netk ) * (1  f (netk ))
• Mas
• Para os pesos entre a camada de saída e a camada
oculta o incremento é
• wkj = kyj = (tk – zk) f’ (netk)yj = (tk – zk) f (netk) (1- f (netk))yj
• Para os pesos entre a camada oculta e a camada de entrada o
incremento é


w ji  xi j   wkj k f ' (net j ) xi



j


wji  xi j   wkj k f (netj ) 1  f (netj ) xi
8
Derivadas das funções de transferência
• Para a função logística
f ( x) 
1
1 ex
d 1
1 
1
ex

 1
*

dx 1  e x  1  e x  1  e x 1  e x


2
f (netk )
 f ´(netk )  f (netk ) * (1  f (netk ))
netk
• Para a função tangente hiperbólica
f(y) = tanh(y)
d (tanh( y )
1
2
2
 1  tanh y  sec h y 
dy
cosh 2 y
9
Exemplo de backpropagation XOR
Camada de saída 3
1
w3(0,1)
0
w2(0,2)
w3(2,1)
w3(1,1)
bias
w2(0,1)
w2(2,2)
w2(1,1)
w2(2,1)
1
0,0
10
Camada oculta 2
2
1
w2(1,2)
2
0,0
Camada de entrada 1
Notação para o exemplo
•
•
•
•
Seja net a soma ponderada de entradas de um neurônio
Sejam as camadas numeradas a partir de 1 (entrada)
xc-1(n)  entrada no neurônio n da camada c
wk(i,j)  peso da conexão entre o neurônio i da camada k-1 e
o neurônio j da camada k
• k(n)  parcela a corrigir do nó n na camada k
• w2(0,1) = *x1(0)*2(1) atualização de pesos
• Para conexão com a camada de saída
• 3(1) = x3(1)*(1 - x3(1))*(d - x3(1))
• Para conexão com camada oculta
• 2(1) = x2(1)*(1 - x2(1))*(w3(1,1)*3(1)+ w3(1,1)*3(2))
11
Exemplo – Inicialização
Camada oculta Neurônio 1:
w2(0,1) = 0.341232
w2(1,1) = 0.129952
w2(2,1) =-0.923123
Camada oculta Neurônio 2:
w2(0,2) =-0.115223
w2(1,2) = 0.570345
w2(2,2) =-0.328932
Camada de saía Neurônio 1:
w3(0,1) =-0.993423
w3(1,1) = 0.164732
w3(2,1) = 0.752621
Entrada inicial
x1(0) = 1 (bias)
x1(1) = 0
x1(2) = 0
12
Exemplo – Treinamento Forward
• Para a camada oculta os resultados da função somadora são
Neurônio 1: (1 * 0.341232) + (0 * 0.129952) + (0 * -0.923123) = 0.341232
Neurônio 2: (1 *-0.115223) + (0 * 0.570345) + (0 * -0.328932) = -0.115223
• Aplicando a função de ativação logística temos
x2(1) = 1/(1+e^(-0.341232)) = 0.584490
x2(2) = 1/(1+e^( 0.115223)) = 0.471226
Camada oculta Neurônio 1:
w2(0,1) = 0.341232
w2(1,1) = 0.129952
w2(2,1) =-0.923123
Camada oculta Neurônio 2:
w2(0,2) =-0.115223
w2(1,2) = 0.570345
w2(2,2) =-0.328932
13
Exemplo – Treinamento Forward (2)
A entrada para camada de saída será
x2(0) = 1 (bias)
x2(1) = 0.584490
x2(2) = 0.471226
Camada de saía Neurônio 1:
w3(0,1) =-0.993423
w3(1,1) = 0.164732
w3(2,1) = 0.752621
Para a camada de saída o resultado da função somadora é
Neurônio 1: (1 *-0.993423) + (0.584490 * 0.164732) + (0.471226 * 0.752621)
= -0.542484
Aplicando a função de ativação logística temos
x3(1) = 1/(1+e^(0.542484)) = 0.367610
14
Exemplo – Treinamento Forward (3)
O resultado esperado era 0 logo o erro é 0.367610.
A diferença a corrigir é dada por
No caso em tela 3(1) = x3(1)*(1 - x3(1))*(d - x3(1))
3(1) = x3(1)*(1 - x3(1))*(d - x3(1)) =
= 0.367610 * (1 - 0.367610)(0 - 0.367610) =
=-0.085459
x3(1) = 0.367610
15
Exemplo – Treinamento Backward (1)
Para os neurônios da camada oculta as diferenças a corrigir são
w3(1,1)3(1) é a diferença a corrigir neurônio 1
w3(2,1)3(1) é a diferença a corrigir neurônio 2
2(1) = x2(1)*(1 - x2(1))*w3(1,1)*3(1)
= 0.584490 * (1 - 0.584490)*(0.164732)*(-0.085459) = -0.0034190
2(2) = x2(2)*(1 - x2(2))*w3(1,1)*3(1)
2(2) = 0.471226 * (1 - 0.471226)*(0.752621)*(-0.085459) = -0.0160263
x2(0) = 1 (bias)
x2(1) = 0.584490
x2(2) = 0.471226
3(1) =-0.085459
w3(1,1) = 0.164732
w3(2,1) = 0.752621
16
Exemplo – Treinamento Backward (2)
• A atualização dos pesos das conexões é dada por
sendo  o coeficiente de aprendizagem um
amortecedor empírico, no caso com valor igual a 0,5.
17
Exemplo – Treinamento Backward (3)
w2(0,1) = *x1(0)*2(1) = 0.5 * 1 * -0.0034190 = -0.017095
w2(1,1) =  *x1(1)*2(1) = 0.5 * 0 * -0.0034190 = 0
w2(2,1) =  *x1(2)*2(1) = = 0.5 * 0 * -0.0034190 0
w2(0,2) = *x1(0)*2(2) = 0.5 * 1 * -0.0160263 = -0.0080132
w2(1,2) = *x1(1)*2(2) = 0.5 * 0 * -0.0160263 = 0
w2(2,2) = *x1(2)*2(2) = 0.5 * 0 * -0.0160263 = 0
w3(0,1) = *x2(0)*3(1) = 0.5 * 1 * -0.085459 = -0.042730
w3(1,1) = *x2(0)*3(1) = 0.5 * 0.584490 * -0.085459 = -0.024975
w3(2,1) = *x2(0)*3(1) = 0.5 * 0.471226 * -0.085459 = -0.020135
18
Exemplo – Atualização dos pesos
• Valores atualizados dos pesos das conexões
w2(0,1) = 0.341232 + -0.017095 = 0,3395225
w2(1,1) = 0.129952 + 0 = 0.129952
w2(2,1) =-0.923123 + 0 =-0.923123
w2(0,2) =-0.115223 + = 0,10720985
w2(1,2) = 0.570345 + 0 = 0.570345
w2(2,2) =-0.328932 + 0 =-0.328932
w3(0,1) =-0.993423 + -0.042730 = 0,9506935
w3(1,1) = 0.164732 + -0.024975 = 0,139757035
w3(2,1) = 0.752621 + -0.020135 = 0,732485749
19
Download

2 - Instituto de Computação