Aprendizado de máquina de rede neural profunda reforçada no tensorflow.js: truques

Treinar redes neurais profundas a partir do zero não é uma tarefa fácil.

São necessários muitos dados e tempo para aprender, mas alguns truques podem ajudar a acelerar o processo, sobre o qual falarei em detalhes.

Demonstração da passagem de um labirinto simples usando truques. Duração do treinamento em rede: 1 hora 06 minutos. Gravação acelerada em 8 vezes.


Para cada tarefa, você precisa desenvolver seu próprio conjunto de truques para acelerar o aprendizado em rede. Vou compartilhar alguns truques que me ajudaram a treinar a rede muito mais rapidamente.

Para conhecimento teórico, recomendo mudar para o canal sim0nsays .
E vou contar sobre meus modestos sucessos no treinamento de redes neurais.

Declaração do problema


Aproximar a função de convergência, minimizando a função de perda quadrática pela propagação reversa do erro por redes neurais profundas.

Eu tive uma escolha estratégica sobre como treinar uma rede neural.
Incentive a conclusão bem-sucedida da tarefa ou incentive-a à medida que se aproxima da conclusão da tarefa.

Eu escolhi o segundo método, por dois motivos:

  • A probabilidade de que a rede atinja a linha de chegada por conta própria é muito pequena, portanto estará fadada a receber muito reforço negativo. Isso redefinirá o peso de todos os neurônios e a rede não será capaz de treinamento adicional.
  • Redes neurais profundas são poderosas. Não excluo que o primeiro método teria sido bem-sucedido se eu tivesse um enorme poder de computação e muito tempo para treinamento. Eu segui o caminho de menor custo desenvolvendo truques.

Arquitetura de rede neural


A arquitetura está sendo desenvolvida experimentalmente, com base na experiência do arquiteto e na boa sorte.

Arquitetura para resolver o problema:

  • 3 neurônios de entrada - as coordenadas do agente e o valor da célula passada (normalizamos no intervalo de 0 a 1).
  • 2 camadas ocultas de 256 e 128 neurônios (reduzimos a dimensão das camadas em direção à saída da rede).
  • 1 camada descartando neurônios aleatórios para a rede de aprendizagem da sustentabilidade.
  • 4 neurônios de saída - a probabilidade de decidir qual lado escolher para o próximo passo.
  • Função de ativação do neurônio: sigmóide. Otimizador: adam.

sigmoid fornece 4 probabilidades na saída no intervalo de 0 a 1, escolhendo a máxima, obtemos o lado para o próximo passo: [jumpTop, jumpRight, jumpBottom, jumpLeft].

Desenvolvimento de arquitetura


A reciclagem ocorre ao usar modelos excessivamente complexos.

É quando a rede lembra os dados de treinamento e, para novos dados que a rede ainda não viu, funcionará mal porque a rede não precisou procurar generalizações, pois possuía memória suficiente para memorizar.

Falta de educação - com modelos insuficientemente complexos. É quando a rede possui poucos dados de treinamento para encontrar generalizações.

Conclusão: quanto mais camadas e neurônios neles, mais dados são necessários para o treinamento.

Campo de jogo




Regras do jogo


0 - Ao entrar nesta célula, o agente é destruído.
1..44 - Células cujos valores aumentam a cada etapa.
Quanto mais o agente for, mais recompensa ele receberá.
45 - Concluir. Ao mesmo tempo, o treinamento não ocorre, apenas quando todos os agentes são destruídos, e o final é uma exceção que simplesmente usa a rede já treinada para a próxima previsão, desde o início do labirinto.

Descrição dos parâmetros


O agente possui uma "antena" em quatro direções - ele desempenha o papel de inteligência ambiental e é uma descrição das coordenadas do agente e do valor da célula em que está.

A descrição desempenha o papel de prever a próxima direção para o movimento do agente. Ou seja, o agente verifica com antecedência o que vem a seguir e, consequentemente, com o tempo, a rede aprende a se mover na direção de aumentar o valor da célula e não ir além dos limites do movimento permitido.

O objetivo da rede neural: obter mais recompensas.
Objetivo do aprendizado: para incentivar ações corretas, quanto mais próximo o agente estiver da solução da tarefa, maior será a recompensa pela rede neural.

Truques


As primeiras tentativas de aprender sem truques levaram várias horas de treinamento e o resultado estava longe de ser completo. Aplicando certas técnicas, o resultado foi alcançado em apenas uma hora e seis minutos!

Loop de agente


Durante o treinamento, a rede começou a tomar decisões, fazer movimentos para a frente e para trás - o problema do "uso". Ambos os movimentos dão à rede uma recompensa positiva, que interrompeu o processo de exploração do labirinto e não permitiu sair do mínimo local.

A primeira tentativa de uma solução foi limitar o número de movimentos do agente, mas isso não foi o ideal, pois o agente passou muito tempo em um loop antes de se autodestruir. A melhor solução era destruir o agente se ele fosse para a cela com um valor mais baixo do que aquele em que estava - a proibição de seguir na direção oposta.

Pesquisa ou uso


Um truque simples foi usado para explorar os caminhos em torno da posição atual do agente: a cada passo, cinco agentes serão pesquisadores "voluntários". O curso desses agentes será escolhido aleatoriamente, e não pela previsão da rede neural.

Assim, temos uma probabilidade maior de que um dos cinco agentes avance além dos outros e ajudará no treinamento da rede com melhores resultados.

Algoritmo genético


Cada época, 500 agentes participam no campo de jogo. As previsões para todos os agentes são executadas no modo assíncrono para todos os agentes de uma só vez; além disso, os cálculos são delegados à gpu. Assim, obtemos um uso mais eficiente do poder computacional do computador, o que leva a uma redução no tempo para prever uma rede neural para 500 agentes por vez.

A previsão funciona mais rápido que o treinamento, portanto, a rede tem mais chances de avançar no labirinto com a menor quantidade de tempo e o melhor resultado.

Aprendendo o melhor da geração


Ao longo da época, para 500 agentes, os resultados de seu avanço pelo labirinto são preservados. Quando o último agente é destruído, os 5 melhores agentes entre 500 são selecionados - que chegaram ao labirinto o mais longe possível.

Com base nos melhores resultados da época, uma rede neural será treinada.

Portanto, reduziremos a quantidade de memória usada não salvando e não treinando a rede em agentes que não avançam na rede.

Conclusão


Não sendo especialista neste campo, consegui obter algum sucesso no treinamento da rede neural e você terá sucesso - vá em frente!

Esforce-se para aprender mais rápido que os computadores, enquanto fazemos melhor.

Materiais


Repositório com código
Iniciar o treinamento do navegador
A documentação do tensorflow.js , onde você também pode encontrar recursos adicionais para aprender.

Livros


  • Aprendizagem profunda. Imersão no mundo das redes neurais
    S. Nikolenko, A. Kadurin, E. Arkhangelskaya
  • Aprendizado de máquina e fluxo de tensão
    N. Shakla
  • Sistemas de auto-aprendizagem
    S. I. Nikolenko, A. L. Tulupyev
  • Treinamento de reforço
    R.S. Sutton, E.G. Barto
  • Cartões auto-organizados
    T. Kohonen

Obrigado pela atenção!

Source: https://habr.com/ru/post/pt452612/


All Articles