Introdução
Passo um
Escrevi uma rede neural padrão de backpropegating e, para testá-la, decidi mapear o XOR.
É uma rede 2-2-1 (com função de ativação tanh)
X1 M1
O1
X2 M2
B1 B2
Para fins de teste, configurei manualmente o neurônio do meio superior (M1) como uma porta AND e o neurônio inferior (M2) como uma porta OR (saída 1 se verdadeira e -1 se falsa).
Agora, também configurei manualmente a conexão M1-O1 como -.5, M2-O1 como 1 e B2 como -.75
Portanto, se M1 = 1 e M2 = 1, a soma é (-0,5 +1 -0,75 = -,25) tanh (0,25) = -0,24
se M1 = -1 e M2 = 1, a soma é ((-0,5) * (- 1) +1 -0,75 = 0,75) tanh (0,75) = 0,63
se M1 = -1 e M2 = -1, a soma é ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8
Este é um resultado relativamente bom para uma "primeira iteração".
Passo dois
Depois, modifiquei um pouco esses pesos e os treinei usando o algoritmo de propagação de erros (com base na descida do gradiente). Nesse estágio, deixo intactos os pesos entre os neurônios de entrada e os médios e apenas modifico os pesos entre o meio (e o viés) e a saída.
Para o teste, defino os pesos como e .5 .4 .3 (respectivamente para M1, M2 e viés)
Aqui, no entanto, começo a ter problemas.
Minha pergunta
Defino minha taxa de aprendizado como 0,2 e deixo o programa repetir os dados de treinamento (ABA ^ B) para 10000 iterações ou mais.
Na maioria das vezes, os pesos convergem para um bom resultado. No entanto, às vezes, esses pesos convergem para (digamos) 1.5, 5.7 e .9, o que resulta em uma saída +1 (par) para uma entrada de {1, 1} (quando o resultado deve ser -1).
É possível que uma RNA relativamente simples, que tenha uma solução para não convergir, ou que haja algum erro na minha implementação?
fonte
Se você fixou os pesos entre as unidades de entrada e ocultas e só está modificando os pesos ocultos para os de saída durante o treinamento, não haverá mínimos locais. Com entrada fixa para pesos ocultos, o problema de otimização que você está resolvendo é semelhante à regressão logística, mas com uma função tanh em vez de sigmóide. Independentemente do problema ser convexo, deve haver apenas um mínimo global.
Como os mínimos locais não estão causando seu problema, recomendo aproximar numericamente suas derivadas e compará-las com os valores que você está computando. Se você não tiver certeza de como fazer isso, o tutorial do Standford ULFDL tem uma boa visão geral.
fonte