Sunteți pe pagina 1din 11

Vade Retro!

Verso 0.2

Ernesto Costa Departamento de Engenharia Informtica Universidade de Coimbra 10 de Abril de 2011


Resumo O algoritmo de aprendizagem de redes neuronais conhecido por regra delta generalizada, ou ainda por retropropagao, tem as suas diculdades de entendimento. Este pequeno texto pretende atravs de um exemplo simples mostrar os aspectos prticos da questo. Para a teoria deve consultar a bibliogrsaa da cadeira ([1]), ou outra qualquer onde esta matria seja tratada.

Introduo

As crianas aprendem depressa. De vrias maneiras. Uma delas ocorre atravs da apresentao de exemplos classicados por um professor. Por exemplo, numa ida ao jardim zoolgico, a criana vai dizendo (ou perguntando) pelo nome dos diferentes animais e o adulto vai respondendo sua curiosidade. Ela estabelece assim uma correspondncia entre os nomes e os objectos (neste caso animais). As redes neuronais podem ser treinadas da mesma maneira: so-lhe presentes exemplos para ela classicar. A rede classica e recebe uma indicao da existncia, ou no, de um erro. Em funo do erro os pesos da rede so alterados. por modicao dos pesos que a rede aprende. O conhecimento da rede est, assim, embutido nos pesos da rede. Vejamos como se processa a aprendizagem comeando com o caso simples de um nico neurnio como o ilustrado na gura 1. Trata-se do neurnio aumentado: a entrada x0 = 1 e o peso respectivo, wi0 , igual ao simtrico do limiar . O valor da sada xi dado por

xi = g(Ini ) = g
j=0

wij xj

1 x1

Wi0

Wi1 x2 Wi2

Funo de Entrada

g()
Funo de Activao

xi Sada

Win xn Entradas Pesos

Figura 1: Neurnio Articial Quando a funo de activao uma funo de limiar, falamos de uma Unidade Limiar de Linear (cujo acrnimo em ingls TLU). Neste caso a sada permite discriminar entre duas classes1 . g(Ini ) = 1 se g(Ini ) > 0 0 caso contrrio (1)

Se a sada pretendida for ri , ento estaremos na presena de um erro, dado pela diferena (ri xi ). Uma forma de ajustar os pesos dado pela regra de Hidrow-Ho : wij = wij + (ri xi ) xj (2)

O algoritmo de aprendizagem consiste ento num processo iterativo, em que em cada etapa a rede tenta classicar um conjunto de exemplos de treino, alterando os pesos de acordo com a equao (2). O processo termina quando se obtm pesos com um erro associado inferior a um dado valor de referncia. O Teorema de Rosenblatt arma que, caso as classes sejam linearmente separveis este processo converge. A listagem 1 apresenta uma implementao possvel do algoritmo de aprendizagem.
1

Se as classes forem linearmente separveis!

def hf(pesos, ritmo, exemplos,erro=1): """ pesos = inicializado com valores pequenos entre -1 e 1 ritmo = valor entere 0 e 1 (normalmente pequeno) exemplos = os exemplos de treino, na forma [lista_entradas , sada] A entrada x0 est sempre a 1. """ while erro > 1e-3: erro = 0 for exemplo in exemplos: # calcula sada in_i = prod_escalar(pesos,exemplo[0]) if in_i > 0: x_i = 1 else: x_i = 0 # calcula erro dif = (exemplo[1] - 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).
def nn_and(): pesos = [uniform(-1,1) for i in range(3)] exemplos = [[[1,0,0],0], [[1,0,1],0],[[1,1,0],0],[[1,1,1],1]] ritmo = 0.2 return hf(pesos,ritmo, exemplos)

Listagem 2: E lgico Executando obtemos, por exemplo, os pesos da listagem 3.


>>> [evaluate hidrow_hoff.py] iterao: 1 Erro: 3

iterao: 2 Erro: 2 iterao: 3 Erro: 2 iterao: 4 Erro: 1 iterao: 5 Erro: 2 iterao: 6 Erro: 2 iterao: 7 Erro: 3 iterao: 8 Erro: 2 iterao: 9 Erro: 1 iterao: 10 Erro: 0 [-0.63525577198424987, 0.43738783175206092, 0.25261659916023471] >>>

Listagem 3: Pesos

Retropropagao

O algoritmo de aprendizagem conhecido por retropropagao2 aplica-se a redes com uma topologia multi camada, alimentadas para a frente, que usam a funo sigmide como funo de activao. O princpio simples e baseiase, como no caso das TLU, na ideia de alterar os pesos de modo a minimizar o erro. S que agora usa-se o conceito de gradiente descendente. Ma o que que quer dizer gradiente descendente? Consideremos a relao funcional entre o erro e os pesos, como ilustra a gura 2 para o caso simples de um peso.

w*

Figura 2: Gradiente Descendente


2

Do ingls backpropagation.

O ptimo corresponde ao valor w . O mtodo do gradiente descendente corresponde a variar o valor actual do peso, w, de modo a aproxim-lo do valor ptimo, usando a derivada de E no ponto w. Esse valor ainda tornado dependente de um factor , a que chamamos ritmo de aprendizagem. Da a frmula para a variao dos pesos dada pela equao 3. wij = E wij (3)

Vejamos como podemos desenvolver esta frmula. Para tal vamos considerar de novo o neurnio da gura 1, mas agora vamos supor que a funo de activao a sigmide3 xi = sig(Ini ) = A derivada da sigmide [xi ] = [sig(Ini )] = eIni = xi (1 xi ) (1 + eIni )2 (5) 1 1 + eIni (4)

Por outro lado, o erro que vamos usar o erro quadrtico 1 (ri xi )2 (6) 2 No existe nenhuma relao directa entre o erro E e os pesos wij . No entanto existe uma relao indirecta E= E xi Ini wij Logo
3 Para usarmos o gradiente descendente preciso que a funo de erro seja diferencivel e a funo simide tem essa propriedade.

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)

As frmulas para uma rede multi camada

Generalizando o principio acima apresentado podemos obter o modo de alterar os pesos de uma rede multi camada (ver gura 3).
Entrada l Escondida m Sada n

xi

vji

zj

wkj

yk

Figura 3: Modelo de Rede Neuronal Multi Camada

A ideia dividir o problema em dois subproblemas: um primeiro, para os pesos entre a camada escondida e a camada de sada; um segundo, para os pesos entre a camada de entrada e a camada escondida. Deixamos ao leitor o cuidado de refazer os clculos, ou, em alternativa, ver como se faz em [1], captulo 5. 6

3.1

Escondida Sada

Da camada de sada para a camada escondida a actualizao dos pesos, wkj faz-se de acordo com a frmula4 : wkj = (rk yk ) yk (1 yk ) zj com yk = sig(Ink ) = e
n

(14)

1 1 + eInk

(15)

Ink =
j=0

wkj zj

(16)

3.2

Entrada Escondida

Da camada escondida para a camada de entrada a actualizao dos pesos, vji faz-se de acordo com a frmula:
n

vji = zj (1 zj ) (
k=0

k wkj ) xi

(17)

com zj = sig(Inj ) = e Inj =


i=0 l

1 1 + eInj

(18)

vji xi

(19)

e ainda, k = (rk yk ) yk (1 yk ) (20)

O exemplo

Considere a rede neuronal da gura 4. Ela pretende ser usada para implementar um XOR, isto , um ou exclusivo que foi o calcanhar de Aquiles na fase inicial de armao da redes neuronais como modelo alternativo.
4

Ver a semelhana com o caso de umaTLU.

v10 x1 v21 v12 x2 v22 z2 v11 z1 w11

w10

y1 w12

v20 Entrada Escondida Sada

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 neurnio extendido, no qual, como se sabe, se acrescenta uma entrada de ndice 0, sempre a 1, e o respectivo peso assume o valor simtrico do limiar . Um XOR denido pela tabela 1. Vamos ento aos clculos. Admitamos que o ritmo de aprendizagem = 0.1 e que, inicialmente, todos os pesos, incluindo os que representam o limiar, esto a 0.5. Comecemos por ver o que acontece quando x1 e x2 esto ambos a 0. Propagando os sinais camos a saber que o sinal sada dos neurnios z1 e z2 vale 0.62. Para chegar a este valor usaram-se as equaes 19 e 18. Do mesmo modo no neurnio de sada y1 o sinal ser de 0.75. Uma vez mais socorremo-nos das equaes 16 e 15. Lembre-se que, de um modo geral, para um neurnio, com funo de activao a funo sigmide, temos a expresso 21.
b

out = sig(
a=0

wa enta )

(21)

com 1 (22) 1 + ex Passamos fase de minimizar o erro. Comecemos pelo mais fcil: da camada de sada para a camada escondida, socorrendo-nos da frmula 14. sig(x) = w10 = (r1 y1 ) y1 (1 y1 ) z0 = 0.1 (0 0.75) 0.75 (1 0.75) 1 = 0.014 (23) (24) (25)

Notar que neste caso z0 igual a 1 pois todas as entradas de ndice 0 num neurnio extendido esto xas a 1. w11 = (r1 y1 ) y1 (1 y1 ) z1 = 0.1 (0 0.75) 0.75 (1 0.75) 0.62 = 0.008 (26) (27) (28)

w12 = (r1 y1 ) y1 (1 y1 ) z2 = 0.1 (0 0.75) 0.75 (1 0.75) 0.62 = 0.008 Os novos valores dos pesos sero ento: w10 (1) = w10 (0) + w10 = 0.486 w11 (1) = w11 (0) + w11 = 0.492 w12 (1) = w12 (0) + w12 = 0.492

(29) (30) (31)

(32) (33) (34)

Agora no podemos iludir a parte mais difcil! No entanto, neste exemplo, s h um neurnio na camada de sada o que vai tornar as contas, e a vida, mais simples. Temos assim. v10 = z1 (1 z1 ) 1 w11 x0 = 0.1 0.62 (1 0.62) 0.14 0.5 1 = 0.0016 9 (35) (36) (37)

com 1 = (r1 y1 ) y1 (1 y1 ) = (0 0.75) 0.75 (1 0.75) = 0.14 Os outros casos so semelhantes. = 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.0016 =0 =0

(40) (41) (42) (43) (44) (45)

Os casos de resultado igual a zero deve-se aos valores de xi serem 0. Resumindo, os pesos entre as camadas de entrada e a escondida so:

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.4984 = 0.5 = 0.5 = 0.4984 = 0.5 = 0.5

(46) (47) (48) (49) (50) (51)

Agora trata-se de recomear, pegando, por exemplo, no segundo caso da tabela, isto , com x0 = 1 x1 = 0 e x2 = 1. Mas tudo uma questo de contas . . . para o leitor impaciente fazer!

Concluso

Este pequeno texto tem por ambio explicar de modo simples o princpio subjacente ao algoritmo de aprendizagem conhecido por retropropagao. tambm exemplicado o modo de proceder em concreto relativamente actualizao dos pesos. Finalmente, tambm se mostrou, de modo rudimentar, como se pode implementar o algoritmo. Este texto no dispensa o estudo aprofundado destas questes. 10

Referncias
[1] Ernesto Costa and Anabela Simes. Inteligncia Articial: fundamentos e aplicaes. FCA, 2008.

11

S-ar putea să vă placă și