Aprendizado supervisionado vs aprendizado por reforço para um carro rc autônomo simples

12

Estou construindo um carro autônomo com controle remoto para se divertir. Estou usando um Raspberry Pi como computador de bordo; e estou usando vários plug-ins, como uma câmera Raspberry Pi e sensores de distância, para obter feedback sobre os arredores do carro. Estou usando o OpenCV para transformar os quadros de vídeo em tensores e estou usando o TensorFlow do Google para criar uma rede neural complicada para aprender os limites e obstáculos da estrada. Minha principal pergunta é: devo usar o aprendizado supervisionado para ensinar o carro a dirigir ou devo fornecer objetivos e penalidades e fazer aprendizado por reforço (ou seja, chegar ao ponto B o mais rápido possível, sem bater em nada e permanecer dentro dos limites da estrada)? Abaixo está uma lista dos prós e contras que eu propus.

Profissionais de aprendizado supervisionado:

  • As entradas para o algoritmo de aprendizado são bastante diretas. O carro aprende a associar as leituras de distância do sensor e do tensor do quadro de vídeo ao deslocamento para a frente, para trás e angular da roda
  • Eu posso mais ou menos ensinar o carro a dirigir exatamente como eu quero (sem sobreajustar, é claro)
  • Eu já fiz vários problemas de aprendizado supervisionado antes, e essa abordagem parece se encaixar confortavelmente no meu conjunto de habilidades existente

Contras de aprendizado supervisionado:

  • Não está claro como ensinar velocidade, e a velocidade correta é bastante arbitrária, desde que o carro não corra tão rápido que saia da estrada. Suponho que eu poderia dirigir rápido durante o treinamento, mas isso parece uma abordagem grosseira. Talvez eu possa adicionar manualmente uma variável constante durante o treinamento que corresponda à velocidade da sessão de treinamento e, quando o algoritmo de aprendizado for implantado, defino essa variável de acordo com a velocidade que desejo?

Profissionais de aprendizado por reforço:

  • Se eu construir meu carro com o objetivo específico de pilotar carros autônomos de outras pessoas, o aprendizado por reforço parece ser a maneira natural de dizer ao meu carro para "chegar o mais rápido possível"
  • Eu li que o RL às vezes é usado para drones autônomos, então, em teoria, deve ser mais fácil nos carros, porque eu não preciso me preocupar em subir e descer

Contras de aprendizagem por reforço:

  • Sinto que o aprendizado por reforço exigiria muitos sensores adicionais e, francamente, meu carro de um metro de comprimento não tem muito espaço, considerando que ele também precisa instalar uma bateria, o Raspberry Pi e uma placa de ensaio

  • O carro se comportará de maneira muito irregular no início, tanto que talvez ele se destrua. Também pode levar um tempo excessivamente longo para aprender (por exemplo, meses ou anos)

  • Não posso incorporar regras explícitas mais tarde, por exemplo, parar em um sinal vermelho de brinquedo. Com o aprendizado supervisionado, eu pude incorporar numerosos algoritmos SL (por exemplo, um classificador Haar Cascade para identificar sinais de trânsito) em um mecanismo de regras configurável que é avaliado entre cada quadro de vídeo. O mecanismo de regras seria capaz de substituir o algoritmo SL de direção se visse um semáforo vermelho, mesmo que o semáforo talvez não fizesse parte do treinamento do algoritmo de direção. RL parece contínuo demais para fazer isso (por exemplo, pare apenas no estado terminal)
  • Eu não tenho muita experiência com o aprendizado por reforço aplicado, embora eu definitivamente queira aprender, independentemente
Ryan Zotti
fonte
Na verdade, isso não é uma resposta. Na verdade, estou fazendo o mesmo projeto, um carro autônomo com Q-learning (RL) (ainda no começo), e gostaria de perguntar se o código do seu projeto está disponível em algum local on-line. seria muito útil para mim. Este é o projeto que estou acompanhando agora: medium.com/@harvitronix/… ele usa RL com NN como o google deep Q learning (o artigo da Atari), mas ele não usa o aprendizado supervisionado. Seu código está disponível aqui: github.com/harvitronix/reinfo
Mahmoud Hossam
@MahmoudHossam você tem um local alternativo para o código? O link que você deu está morto.
Homunculus Reticulli
Looks @MahmoudHossam como o repo alterado para: github.com/harvitronix/rl-rc-car
Ryan Zotti

Respostas:

12

Eu sugiro que você tente uma abordagem híbrida:

  • Primeiro, treine seu carro de maneira supervisionada por demonstração . Basta controlá-lo e usar seus comandos como rótulos. Isso permitirá que você obtenha todos os profissionais do SL.
  • Em seguida, ajuste sua rede neural usando o aprendizado por reforço. Você não precisa de sensores extras para isso: as recompensas podem ser obtidas a partir de sensores de distância (distâncias maiores = melhor) e da própria velocidade. Isso dará a você os profissionais da RL e treinará seu NN para o objetivo correto de dirigir rápido, evitando obstáculos em vez do objetivo de imitá-lo.
  • Combinando as duas abordagens, você terá os profissionais do SL e da RL, evitando os contras. A RL não começará com um comportamento aleatório, apenas pequenos desvios graduais do que você ensinou ao NN. Uma abordagem semelhante foi aplicada com sucesso pelo Google DeepMind com AlphaGo .
  • Você sempre pode incluir regras explícitas em cima disso. Implemente-os com alta prioridade e chame o NN somente quando não houver uma regra explícita para a situação atual. Isso lembra a Arquitetura da Subsunção .
rcpinto
fonte
DeepMind mesmo arrancado Matthew Lai, fresco fora de suas emocionantes resultados Giraffe Chess NN: motherboard.vice.com/en_us/article/...
DukeZhou