Aprendizado por reforço com agentes do Tensorflow [2022]

Publicados: 2021-01-01

O aprendizado por reforço ganhou popularidade valiosa com o sucesso relativamente recente do método AlphaGo da DeepMind para derrotar o campeão mundial de jogadores de Go. O método AlphaGo foi educado em parte pelo aprendizado de reforço em redes neurais profundas.

Esse estilo de aprendizado é uma característica distinta do aprendizado de máquina dos paradigmas supervisionados e não supervisionados clássicos. No aprendizado por reforço, a rede responde aos dados ambientais (chamados de estado) usando redes neurais profundas e influencia o comportamento de um agente para tentar otimizar uma recompensa.

Essa técnica ajuda uma rede a aprender a praticar esportes, como Atari ou outros videogames, ou algum outro desafio que possa ser reescrito como uma forma de jogo. Neste tutorial, um modelo comum de aprendizado por reforço, apresentarei os princípios gerais do aprendizado Q e demonstrarei como incorporar o aprendizado Q profundo no TensorFlow.

Índice

Introdução ao aprendizado por reforço

Como mencionado acima, o aprendizado por reforço consiste em algumas entidades ou princípios básicos. São eles: um ambiente que cria uma condição e recompensa, e uma entidade que realiza ações em determinado ambiente. No diagrama abaixo, você vê essa interação:

A tarefa do agente em tal cenário é analisar o estado e as informações de incentivo que recebe e escolher um comportamento que maximize a entrada que recebe da recompensa. O agente aprende pelo contato repetitivo com o mundo, ou, em outras palavras, pela repetição do jogo.

Para ter sucesso, é necessário que o agente:

1. Aprenda a ligação entre estados, comportamento e incentivos resultantes

2. Determine qual é a melhor jogada para escolher (1)

A implementação (1) requer a definição de um certo conjunto de princípios que podem ser usados ​​para notificar (2) e (2) é referido como a estratégia de operação. Um dos métodos mais comuns de aplicação (1) e (2) usando deep Q é a rede Deep Q e a política epsilon-greedy.

Aprenda: os 5 projetos mais populares do TensorFlow para iniciantes

Aprendizado Q

O aprendizado Q é uma maneira baseada em valor de fornecer dados para informar qual ação um agente pode realizar. Criar uma tabela que resuma os benefícios de agir em várias jogadas em um estado é um conceito originalmente intuitivo de gerar princípios nos quais basear as ações. Isso irá acompanhar quais são os movimentos mais benéficos. Para começar, vamos considerar um jogo simples em cada estado com 3 estados e duas ações potenciais - uma tabela pode representar as recompensas para este jogo:

Ação 1 Ação 2
Estado 1 0 10
Estado 2 10 0
Estado 3 0 10

Você pode ver na tabela acima que para este jogo simples, quando o agente estiver no Estado 1 e fizer a Ação 2, se ele fizer a Ação 1, receberá uma recompensa de 10, mas zero de recompensa. No Estado 2, a condição é invertida e o Estado 3 eventualmente se assemelha ao Estado 1. Se um agente explorou arbitrariamente este jogo e calculou o comportamento obtido a maior recompensa em qualquer um dos três estados (armazenando esse conhecimento em uma matriz, digamos), para que a forma prática da tabela acima seja efetivamente conhecida.

Em outras palavras, se o agente realmente selecionou o comportamento que aprendeu no passado que forneceu a maior recompensa (aprender alguma forma da tabela acima de forma eficaz), ele teria aprendido a jogar o jogo de forma eficaz. Quando é apropriado simplesmente construir tabelas por soma, por que precisamos de ideias extravagantes como aprendizado Q e redes neurais?

Recompensa diferida

Bem, a primeira resposta aparente é que o jogo acima é simplesmente muito simples, com apenas 3 estados e 2 atos por estado. Jogos verdadeiros são significativamente mais complexos. O princípio da recompensa atrasada no caso acima é o outro conceito significativo que está ausente. Um agente tem que aprender a ser capaz de tomar medidas para jogar corretamente os jogos mais realistas, o que pode não necessariamente levar a uma recompensa, mas pode resultar em uma recompensa significativa mais tarde.

Ação 1 Ação 2
Estado 1 0 5
Estado 2 0 5
Estado 3 0 5
Estado 4 20 0

Se a Ação 2 for realizada em todos os estados do jogo mencionado acima, o agente volta ao Estado 1, ou seja, volta ao início. Nos Estados 1 a 3, recebe até um crédito de 5 ao fazê-lo. Se, portanto, a Ação 1 for tomada em todos os Estados 1-3, o agente viajará para o próximo Estado, mas não receberá uma recompensa até entrar no Estado 4, quando então receberá uma recompensa de 20.

Em outras palavras, um agente estará em melhor situação se não realizar a Ação 2 para obter uma recompensa instantânea de 5, mas, em vez disso, pode escolher a Ação 1 para prosseguir continuamente pelos estados para obter uma recompensa de 20. para escolher atos que resultam em uma recompensa atrasada quando o valor da recompensa atrasada é muito alto.

Leia também: Classificação de imagens do Tensorflow

A regra de aprendizado Q

Isso nos encoraja a esclarecer as regras de aprendizado Q. No aprendizado Q profundo, a rede neural precisa tomar o estado presente, s, como um vetor e retornar um valor Q para cada comportamento potencial, a, naquele estado, ou seja, é necessário retornar Q(s, a) para ambos s e a. Este Q(s, a) precisa ser revisado no treinamento através da seguinte regra:

Q(s,a) = Q(s,a) + alp[r+γmax Q(s',a ') – Q(s,a)] + alp[r+ γmax Q(s',a')

Esta lei precisa de um pouco de descompactação para a atualização. Segundo, você pode ver que o novo valor de Q(s, a) requer a alteração de seu valor existente, inserindo alguns bits extras no lado direito da equação acima. Mude da esquerda para a direita. Esqueça o alfa por um tempo. Dentro dos colchetes, vemos que a primeira palavra é r, que significa o prêmio ganho por agir nos estados.

Esta é a recompensa instantânea; nenhuma satisfação diferida está envolvida ainda. A próxima palavra é a estimativa de incentivo diferido. Em primeiro lugar, temos o valor de γ que desconta o efeito de recompensa atrasada, que está sempre entre 0 e 1. Mais sobre isso em um segundo. O próximo termo maxa'Q(s, 'a') é o valor máximo de Q disponível na próxima condição.

Vamos tornar as coisas um pouco mais fáceis - o agente inicia nos estados, executa a ação a, termina nos estados e, em seguida, o código especifica o valor máximo de Q nos estados, ou seja, max a 'Q(s',a'). Por que o sentido de Max um 'Q(s',a') é levado em consideração, então? Se entrar em vigor e no estado s, sabe-se que representa toda a recompensa possível para o manipulador.

No entanto, γ desconta esse valor para levar em conta que esperar por um possível incentivo para sempre não é desejável para o agente - é melhor que o agente busque o maior prêmio com o menor tempo possível. Observe que o valor Q(s',a)' também retém implicitamente o maior incentivo descontado para a economia depois disso, ou seja, Q(s',a)' porque mantém a motivação descontada para o estado Q(s',a) ' e assim por diante.

Isso ocorre porque o agente selecionará a ação não apenas com base na recompensa imediata r, mas também com base em possíveis incentivos futuros com desconto.

Aprendizado Q profundo

O aprendizado Q profundo segue a lei de atualização do aprendizado Q durante toda a fase de treinamento. Em outras palavras, é criada uma rede neural que recebe o estado s como entrada e, em seguida, a rede é treinada para produzir valores Q(s, a) apropriados para cada comportamento no estado s. A ação do agente será então selecionada tomando a ação com o maior valor de Q(s, a) (pegando um argmax da saída da rede neural). Isso pode ser visto na primeira etapa do diagrama abaixo:

Etapas de seleção e treinamento de ação – Aprendizado Q profundo

Uma vez realizada esta transferência e selecionada uma ação, o agente realizará a ação. O agente então obterá feedback sobre qual incentivo está sendo dado para realizar a ação daquele estado. De acordo com o Q Learning Guideline, o próximo passo que queremos fazer agora é treinar a rede. Na segunda parte, isso pode ser visto no diagrama acima.

O vetor de estado s é a matriz de entrada x para treinamento de rede, e a amostra de treinamento de saída y é o vetor Q(s, a) coletado durante o processo de seleção da ação. No entanto, um dos valores de Q(s,a), correspondente à ação a, é definido para ter um objetivo de r+γQ(s',a '), como pode ser visto na figura acima. Ao treinar a rede dessa maneira para informar ao agente qual comportamento será o melhor a ser selecionado para seu benefício de longo prazo, o vetor de saída Q(s, a) da rede ficará mais forte com o tempo.

Prós do Aprendizado por Reforço:

  • O aprendizado por reforço pode ser usado para resolver desafios muito desafiadores que não podem ser superados por abordagens convencionais.
  • Essa estratégia é selecionada para produzir resultados de longo prazo, que são muito difíceis de alcançar.
  • Esse padrão de aprendizado é um pouco semelhante ao aprendizado dos seres humanos. Por isso, está perto de atingir a perfeição.
  • O modelo corrigiria os erros que ocorreram durante a fase de teste.
  • Se um erro for corrigido pelo modelo, as chances de ocorrer o mesmo erro são um pouco menores.
  • Isso criaria o melhor paradigma para um problema particular a ser resolvido.

Contras do Aprendizado por Reforço

  • O aprendizado por reforço como esquema é incorreto em muitos aspectos diferentes, mas é precisamente essa qualidade que o torna útil.
  • Muito aprendizado por reforço pode resultar em estados sobrecarregados, o que pode reduzir os resultados.
  • A aprendizagem por reforço não é preferível a ser usada para resolver problemas fundamentais.
  • O aprendizado por reforço requer muita inteligência e muita computação. É fome de dados. É por isso que ele se encaixa tão bem nos videogames, para que você possa jogar o jogo repetidamente, e parece possível obter muitos detalhes.
  • A aprendizagem por reforço assume que o universo é markoviano, o que não é. O modelo markoviano descreve uma sequência de eventos possíveis em que a probabilidade de cada ocorrência depende apenas da condição atingida no evento anterior.

Qual o proximo?

Se você deseja dominar o aprendizado de máquina e aprender a treinar um agente para jogar jogo da velha, treinar um chatbot, etc., confira o curso PG Diploma de Aprendizado de Máquina e Inteligência Artificial do upGrad.

O que é TensorFlow?

Python, a linguagem de programação popularmente usada em aprendizado de máquina, vem com uma vasta biblioteca de funções. O TensorFlow é uma dessas bibliotecas Python lançadas pelo Google, que suporta cálculos numéricos rápidos e eficientes. É uma biblioteca de código aberto criada e mantida pelo Google que é amplamente usada para desenvolver modelos de Deep Learning. O TensorFlow também é usado junto com outras bibliotecas de wrapper para simplificar o processo. Ao contrário de algumas outras bibliotecas numéricas que também são usadas em Deep Learning, o TensorFlow foi desenvolvido para pesquisa e desenvolvimento de aplicativos e funções do ambiente de produção. Ele pode ser executado em máquinas com CPUs únicas, dispositivos móveis e sistemas de computadores distribuídos.

Quais são algumas outras bibliotecas como o TensorFlow no aprendizado de máquina?

Durante os dias anteriores, os engenheiros de aprendizado de máquina costumavam escrever todo o código para diferentes algoritmos de aprendizado de máquina manualmente. Agora, escrever sempre as mesmas linhas de código para algoritmos, modelos estatísticos e matemáticos semelhantes não era apenas demorado, mas também ineficiente e tedioso. Como solução alternativa, as bibliotecas Python foram introduzidas para reutilizar funções e economizar tempo. A coleção de bibliotecas do Python é vasta e versátil. Algumas das bibliotecas mais usadas do Python são Theano, Numpy, Scipy, Pandas, Matplotlib, PyTorch, Keras e Scikit-learn, além do TensorFlow. As bibliotecas Python também são facilmente compatíveis com bibliotecas C/C++.

Quais são as vantagens de usar o TensorFlow?

As muitas vantagens do TensorFlow o tornam uma opção extremamente popular para desenvolver modelos computacionais em aprendizado profundo e aprendizado de máquina. Em primeiro lugar, é uma plataforma de código aberto que suporta formatos avançados de visualização de dados com sua apresentação gráfica. Os programadores também podem usá-lo facilmente para depurar nós, o que economiza tempo e elimina a necessidade de examinar todo o comprimento do código da rede neural. O TensorFlow oferece suporte a todos os tipos de operações, e os desenvolvedores podem criar qualquer tipo de modelo ou sistema nessa plataforma. É facilmente compatível com outras linguagens de programação como Ruby, C++ e Swift.