Documente Academic
Documente Profesional
Documente Cultură
Verso 0.2
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
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
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)
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*
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 =
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
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)
1 1 + eInj
(18)
vji xi
(19)
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
w10
y1 w12
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
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)
=0 =0 = 0.0016 =0 =0
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
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