Training a Neural Network using a Genetic Algorithm on Pharo

O algoritmo de retropropagação para treinamento de redes neurais usa o algoritmo de gradiente descendente (Veja 1.4 Backpropagation em 1 Neural Networks). Usar o algoritmo genético para o mesmo fim é algo que resolvi testar.

Alteramos o teste abaixo para introduzir o treinamento genético.

O teste abaixo usa o algoritmo genético para treinar a rede neural. Os genes são criados aleatoriamente entre -10 e 10. O critério de parada é quando o valor do fitness ficar abaixo de 0.001.

Abaixo o gráfico da evolução do desempenho dos genes a cada geração.

Abaixo o nosso genetic training algorithm.

O número de genes necessários é igual a total de pesos e bias de toda a rede neural.

Calculamos o fitness como a soma dos quadrados das diferenças entre os outputs obtidos e os desejados. E queremos minimizar este valor e sabemos que o valor ótimo é zero. Com isso nossa rede neural terá os seus pesos e bias ajustados para obter as respostas esperadas.

Todos genes são usados para configurar os vários neurônios da rede.

Os genes gerados configuram os pesos e bias dos neurônios.

Hot encoding

Os testes até agora se aplicaram à redes neurais emulando operações de lógica digital. Particularmente a operação XOR, que é a operação mais simples que não pode ser resolvida por uma rede neural com um só neurônio.

No capítulo Data Classification do livro Agile Artificial Intelligence um exemplo de rede neural converte um número binário para a representação decimal. Os números estão na faixa decimal de 0 a 7. É um problema de classificação e usa o hot encoding onde a camada de saída da rede neural precisa de 8 neurônios para conter as 8 possibilidades. A saída da rede neural é um array onde a posição do neurônio com valor próximo de 1 indica o resultado da classificação.

Abaixo arranjamos um script para mostrar o mapeamento do hot encoding na classificação.

O script abaixo faz a mesma coisa com o treinamento genético.

Para isso o cálculo do fitness teve que ser adaptado para levar em conta o hot encoding.

Compare com a versão anterior.

O treinamento genético que implementamos é muito lento em relação à retropropagação já que não nos preocupamos com o desempenho.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s