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