Retro



Comments



Description

Vade Retro!Versão 0.2 Ernesto Costa Departamento de Engenharia Informática Universidade de Coimbra 10 de Abril de 2011 Resumo O algoritmo de aprendizagem de redes neuronais conhecido por regra delta generalizada, ou ainda por retropropagação, tem as suas dificuldades de entendimento. Este pequeno texto pretende através de um exemplo simples mostrar os aspectos práticos da questão. Para a teoria deve consultar a bibliogrsafia da cadeira ([1]), ou outra qualquer onde esta matéria seja tratada. 1 Introdução As crianças aprendem depressa. De várias maneiras. Uma delas ocorre através da apresentação de exemplos classificados por um professor. Por exemplo, numa ida ao jardim zoológico, a criança vai dizendo (ou perguntando) pelo nome dos diferentes animais e o adulto vai respondendo à sua curiosidade. Ela estabelece assim uma correspondência entre os nomes e os objectos (neste caso animais). As redes neuronais podem ser treinadas da mesma maneira: são-lhe presentes exemplos para ela classificar. A rede classifica e recebe uma indicação da existência, ou não, de um erro. Em função do erro os pesos da rede são alterados. É por modificação dos pesos que a rede aprende. O conhecimento da rede está, assim, embutido nos pesos da rede. Vejamos como se processa a aprendizagem começando com o caso simples de um único neurónio como o ilustrado na figura 1. Trata-se do neurónio aumentado: a entrada x0 = 1 e o peso respectivo, wi0 , é igual ao simétrico do limiar θ. O valor da saída xi é dado por 1 falamos de uma Unidade Limiar de Linear (cujo acrónimo em inglês é TLU). O Teorema de Rosenblatt afirma que. Uma forma de ajustar os pesos é dado pela regra de Hidrow-Hoff : ∆wij = wij + η × (ri − xi ) × xj (2) O algoritmo de aprendizagem consiste então num processo iterativo. então estaremos na presença de um erro. dado pela diferença (ri − xi ). caso as classes sejam linearmente separáveis este processo converge. g(Ini ) = 1 se g(Ini ) > 0 0 caso contrário (1) Se a saída pretendida for ri .n xi = g(Ini ) = g j=0 wij × xj 1 x1 Wi0 Wi1 x2 Wi2 ∑ Função de Entrada g(∑) Função de Activação xi Saída Win xn Entradas Pesos Figura 1: Neurónio Artificial Quando a função de activação é uma função de limiar. em que em cada etapa a rede tenta classificar um conjunto de exemplos de treino. O processo termina quando se obtém pesos com um erro associado inferior a um dado valor de referência. A listagem 1 apresenta uma implementação possível do algoritmo de aprendizagem. alterando os pesos de acordo com a equação (2). 1 Se as classes forem linearmente separáveis! 2 . Neste caso a saída permite discriminar entre duas classes1 . [[1. ritmo. """ while erro > 1e-3: erro = 0 for exemplo in exemplos: # calcula saída in_i = prod_escalar(pesos.def hf(pesos.[[1.py] iteração: 1 Erro: 3 3 .0].x_i) erro = erro + abs(dif) # actualiza pesos for i in range(len(pesos)): pesos[i] = pesos[i] + ritmo * dif * exemplo [0][i] return pesos Listagem 1: Algoritmo de Aprendizagem Vejamos um exemplo de aprendizagem dos pesos de um and (ver listagem 2). os pesos da listagem 3. saída] A entrada x0 está sempre a 1.1.exemplo[0]) if in_i > 0: x_i = 1 else: x_i = 0 # calcula erro dif = (exemplo[1] . por exemplo. >>> [evaluate hidrow_hoff. exemplos) Listagem 2: E lógico Executando obtemos. exemplos.1].1]. na forma [lista_entradas . [[1.1.0.erro=1): """ pesos = inicializado com valores pequenos entre -1 e 1 ritmo = valor entere 0 e 1 (normalmente pequeno) exemplos = os exemplos de treino.2 return hf(pesos.ritmo. def nn_and(): pesos = [uniform(-1.0].1) for i in range(3)] exemplos = [[[1.0.0].0].1]] ritmo = 0.0]. alimentadas para a frente.63525577198424987. 0. E w w* W Figura 2: Gradiente Descendente 2 Do inglês backpropagation. na ideia de alterar os pesos de modo a minimizar o erro. Só que agora usa-se o conceito de gradiente descendente.43738783175206092.25261659916023471] >>> Listagem 3: Pesos 2 Retropropagação O algoritmo de aprendizagem conhecido por retropropagação2 aplica-se a redes com uma topologia multi camada. 0. como ilustra a figura 2 para o caso simples de um peso. Ma o que é que quer dizer gradiente descendente? Consideremos a relação funcional entre o erro e os pesos.iteração: 2 Erro: 2 iteração: 3 Erro: 2 iteração: 4 Erro: 1 iteração: 5 Erro: 2 iteração: 6 Erro: 2 iteração: 7 Erro: 3 iteração: 8 Erro: 2 iteração: 9 Erro: 1 iteração: 10 Erro: 0 [-0. como no caso das TLU. que usam a função sigmóide como função de activação. O princípio é simples e baseiase. 4 . w. ∆wij = −η ∂E ∂wij (3) Vejamos como podemos desenvolver esta fórmula. o erro que vamos usar é o erro quadrático 1 × (ri − xi )2 (6) 2 Não existe nenhuma relação directa entre o erro E e os pesos wij . Para tal vamos considerar de novo o neurónio da figura 1. de modo a aproximá-lo do valor óptimo. Esse valor é ainda tornado dependente de um factor η. Daí a fórmula para a variação dos pesos dada pela equação 3.O óptimo corresponde ao valor w∗ . usando a derivada de E no ponto w. No entanto existe uma relação indirecta E= E ⇒ xi ⇒ Ini ⇒ wij Logo 3 Para usarmos o gradiente descendente é preciso que a função de erro seja diferenciável e a função simóide tem essa propriedade. 5 . mas agora vamos supor que a função de activação é a sigmóide3 xi = sig(Ini ) = A derivada da sigmóide é [xi ] = [sig(Ini )] = e−Ini = xi × (1 − xi ) (1 + e−Ini )2 (5) 1 1 + e−Ini (4) Por outro lado. a que chamamos ritmo de aprendizagem. O método do gradiente descendente corresponde a variar o valor actual do peso. capítulo 5. um segundo. para os pesos entre a camada escondida e a camada de saída. em alternativa. ver como se faz em [1].∂E ∂wij ∂E ∂xi ∂Ini = −η × × ∂xi ∂Ini ∂wij 1 ∂xi ∂Ini = −η × × 2 × (ri − xi ) × (−1) × × 2 ∂Ini ∂wij ∂xi ∂Ini = η × (ri − xi ) × × ∂Ini ∂wij ∂Ini = η × (ri − xi ) × xi × (1 − xi ) × ∂wij = η × (ri − xi ) × xi × (1 − xi ) × xj ∆wij = η × δi × xj ∆wij = −η (7) (8) (9) (10) (11) (12) (13) 3 As fórmulas para uma rede multi camada Generalizando o principio acima apresentado podemos obter o modo de alterar os pesos de uma rede multi camada (ver figura 3). Deixamos ao leitor o cuidado de refazer os cálculos. para os pesos entre a camada de entrada e a camada escondida. ou. 6 . Entrada l Escondida m Saída n xi vji zj wkj yk Figura 3: Modelo de Rede Neuronal Multi Camada A ideia é dividir o problema em dois subproblemas: um primeiro. 1 Escondida → Saída Da camada de saída para a camada escondida a actualização dos pesos. 7 . um ou exclusivo que foi o calcanhar de Aquiles na fase inicial de afirmação da redes neuronais como modelo alternativo.3. isto é. ∆vji faz-se de acordo com a fórmula: n ∆vji = η × zj × (1 − zj ) × ( k=0 δk × wkj ) × xi (17) com zj = sig(Inj ) = e Inj = i=0 l 1 1 + e−Inj (18) vji × xi (19) e ainda. 4 Ver a semelhança com o caso de umaTLU.2 Entrada → Escondida Da camada escondida para a camada de entrada a actualização dos pesos. Ela pretende ser usada para implementar um XOR. ∆wkj faz-se de acordo com a fórmula4 : ∆wkj = η × (rk − yk ) × yk × (1 − yk ) × zj com yk = sig(Ink ) = e n (14) 1 1 + e−Ink (15) Ink = j=0 wkj × zj (16) 3. δk = (rk − yk ) × yk × (1 − yk ) (20) 4 O exemplo Considere a rede neuronal da figura 4. para um neurónio. b out = sig( a=0 wa × enta ) (21) 8 . Uma vez mais socorremo-nos das equações 16 e 15. Para chegar a este valor usaram-se as equações 19 e 18. temos a expressão 21. se acrescenta uma entrada de índice 0. inicialmente.62. Admitamos que o ritmo de aprendizagem η = 0.75. no qual.5. incluindo os que representam o limiar.v10 x1 v21 v12 x2 v22 z2 v11 z1 w11 w10 y1 w12 v20 Entrada Escondida Saída Figura 4: A nossa rede. x0 1 1 1 1 x1 0 0 1 1 x2 0 1 0 1 o 0 1 1 0 Tabela 1: Que lindo XOR! Notar que usamos um modelo de neurónio extendido. de um modo geral. Comecemos por ver o que acontece quando x1 e x2 estão ambos a 0. todos os pesos. Um XOR é definido pela tabela 1. Vamos então aos cálculos. como se sabe.1 e que. e o respectivo peso assume o valor simétrico do limiar θ. estão a 0. Lembre-se que. sempre a 1. Do mesmo modo no neurónio de saída y1 o sinal será de 0. com função de activação a função sigmóide. Propagando os sinais ficamos a saber que o sinal à saída dos neurónios z1 e z2 vale 0. e a vida.75) × 1 = −0. neste exemplo.75 × (1 − 0.75) × 0.62 × (1 − 0.62 = −0.0016 9 (35) (36) (37) . ∆v10 = η × z1 × (1 − z1 ) × δ1 × w11 × x0 = 0.008 (26) (27) (28) ∆w12 = η × (r1 − y1 ) × y1 × (1 − y1 ) × z2 = 0.1 × (0 − 0.1 × (0 − 0. só há um neurónio na camada de saída o que vai tornar as contas. ∆w11 = η × (r1 − y1 ) × y1 × (1 − y1 ) × z1 = 0.5 × 1 = −0. sig(x) = ∆w10 = η × (r1 − y1 ) × y1 × (1 − y1 ) × z0 = 0.75) × 0.14 × 0.486 w11 (1) = w11 (0) + ∆w11 = 0.008 Os novos valores dos pesos serão então: w10 (1) = w10 (0) + ∆w10 = 0.014 (23) (24) (25) Notar que neste caso z0 é igual a 1 pois todas as entradas de índice 0 num neurónio extendido estão fixas a 1.75 × (1 − 0.492 w12 (1) = w12 (0) + ∆w12 = 0.75) × 0.75 × (1 − 0.75) × 0. mais simples.62) × −0. Temos assim. Comecemos pelo mais fácil: da camada de saída para a camada escondida.75) × 0.1 × (0 − 0.1 × 0. socorrendo-nos da fórmula 14.62 = −0.492 (29) (30) (31) (32) (33) (34) Agora não podemos iludir a parte mais difícil! No entanto.com 1 (22) 1 + e−x Passamos à fase de minimizar o erro. também se mostrou.5 = 0.75 × (1 − 0. como se pode implementar o algoritmo. É também exemplificado o modo de proceder em concreto relativamente à actualização dos pesos. .com δ1 = (r1 − y1 ) × y1 × (1 − y1 ) = (0 − 0.5 (46) (47) (48) (49) (50) (51) Agora trata-se de recomeçar. no segundo caso da tabela. Mas é tudo uma questão de contas .75) × 0.0016 =0 =0 (40) (41) (42) (43) (44) (45) Os casos de resultado igual a zero deve-se aos valores de xi serem 0.14 Os outros casos são semelhantes. 10 . Este texto não dispensa o estudo aprofundado destas questões. Resumindo. para o leitor impaciente fazer! 5 Conclusão Este pequeno texto tem por ambição explicar de modo simples o princípio subjacente ao algoritmo de aprendizagem conhecido por retropropagação.4984 = 0.75) = −0.4984 = 0. os pesos entre as camadas de entrada e a escondida são: v10 (1) = v10 (0) + ∆v10 v11 (1) = v11 (0) + ∆v11 v12 (1) = v12 (0) + ∆v12 v20 (1) = v20 (0) + ∆v20 v21 (1) = v21 (0) + ∆v21 v22 (1) = v22 (0) + ∆v22 = 0. de modo rudimentar. = η × z1 × (1 − z1 ) × δ1 × w11 × x1 = η × z1 × (1 − z1 ) × δ1 × w11 × x2 = η × z2 × (1 − z2 ) × δ1 × w12 × x0 = η × z2 × (1 − z2 ) × δ1 × w12 × x1 = η × z2 × (1 − z2 ) × δ1 × w12 × x2 (38) (39) ∆v11 ∆v12 ∆v20 ∆v21 ∆v22 =0 =0 = −0. com x0 = 1 x1 = 0 e x2 = 1. por exemplo. .5 = 0. isto é. pegando.5 = 0. Finalmente. Inteligência Artificial: fundamentos e aplicações. 11 . 2008. FCA.Referências [1] Ernesto Costa and Anabela Simões.
Copyright © 2024 DOKUMEN.SITE Inc.