Curso de Qrash: aprendizagem de reforço 101 e redes Q profundas em 10 minutos

Shaked Zychlinski Blocked Desbloquear Seguir Seguindo 9 de janeiro

Este artigo não assume nenhum conhecimento prévio em Aprendizado por Reforço, mas supõe algum entendimento básico de redes neurais.

De todos os diferentes tipos de campos Machine Learning, o que mais me fascina é o Aprendizado por Reforço. Para aqueles que estão menos familiarizados com ele – enquanto o Aprendizado Supervisionado lida com valores preditivos ou classes baseadas em dados rotulados e Aprendizado Não Supervisionado lida com agrupamento e encontrar relações em dados não rotulados, Aprendizado por Reforço lida com o modo como algum ser arbitrário (formalmente referido como um Agente ”) deve agir e se comportar em um determinado ambiente. A maneira como isso é feito é dar recompensas ou punições ao agente com base nas ações que ele realizou em diferentes cenários.

Um dos primeiros métodos práticos de Aprimoramento por Reforço que aprendi foi o Deep Q Networks, e acredito que seja um ótimo começo para essa jornada. Então, permita-me guiá-lo pelo caminho em que andei quando tentei aprender RL – incluindo um exercício “Hello World”, que me ajudou mais do que posso explicar.

Definindo o mundo

Uma tarefa de Aprendizado de Reforço é sobre o treinamento de um Agente que interage com seu Ambiente . O agente transita entre diferentes cenários do ambiente, referidos como estados , executando ações . As ações, por sua vez, geram recompensas , que podem ser positivas, negativas ou nulas. O único propósito do Agente é maximizar a recompensa total que ele coleta por um episódio , que é tudo o que acontece entre um estado inicial e um estado terminal. Assim, nós reforçamos o Agente para realizar certas ações, fornecendo-lhe recompensas positivas, e se afastando dos outros, fornecendo recompensas negativas. É assim que um agente aprende a desenvolver uma estratégia ou uma política .

Tome Super Mario como um exemplo: Mario é o agente que interage com o mundo (o ambiente). Os estados são exatamente o que vemos na tela, e um Episódio é um nível: o estado inicial é como o nível começa, e o estado terminal é como o nível termina, se o completamos ou perecemos ao tentar. As ações são avançar, retroceder, pular , etc. As recompensas são dadas dependendo do resultado das ações: quando Mario coleta moedas ou bônus, recebe uma recompensa positiva e, quando cai ou é atingido por um inimigo, recebe uma recompensa negativa. . Quando Mario se pergunta, a recompensa que recebe é zero, como se dissesse “você não fez nada de especial”.

Em um jogo Super Mario, Mario é o agente que interage com o mundo – o Meio Ambiente

Mas há um problema aqui: para ser capaz de coletar recompensas, algumas ações “não especiais” são necessárias para serem tomadas – você tem que caminhar em direção às moedas antes de coletá-las. Assim, um agente deve aprender como lidar com recompensas adiadas , aprendendo a vinculá-las às ações que realmente as causaram. Na minha opinião, essa é a coisa mais fascinante no Aprendizado por Reforço.

Processos de decisão de Markov

Cada estado no qual o agente está é uma consequência direta do estado anterior e da ação escolhida. O estado anterior também é uma conseqüência direta do que veio antes dele, e assim por diante até chegarmos ao estado inicial. Cada uma dessas etapas e sua ordem contêm informações sobre o estado atual – e, portanto, têm efeito direto sobre qual ação o agente deve escolher em seguida. Mas há um problema óbvio aqui: quanto mais avançamos, mais informações o Agente precisa salvar e processar a cada passo dado. Isso pode facilmente chegar ao ponto em que é simplesmente inviável realizar cálculos.

Para resolver isso, assumimos que todos os estados são estados de Markov ; isto é – assumimos que qualquer estado depende apenas do estado que veio antes dele, e a transição desse estado para o estado atual (a ação executada e a recompensa dada). Vamos ver um exemplo – veja estes dois jogos Tic Tac Toe:

Ambos os jogos chegaram ao mesmo estado, mas de maneiras diferentes. Ainda assim, em ambos os casos, o jogador azul deve capturar a célula superior direita ou perderá. Tudo o que precisávamos para determinar isso foi o último estado, nada mais.

É importante lembrar que, ao usar a suposição de Markov, os dados estão sendo perdidos – em jogos complexos como o Xadrez ou o Go, a ordem dos movimentos pode ter alguma informação implícita sobre a estratégia ou modo de pensar do oponente. Ainda assim, a suposição de Markov States é fundamental quando se tenta calcular estratégias de longo prazo.

A equação de Bellman

Vamos em frente e desenvolver nossa primeira estratégia. Considere o caso mais simples: suponha que já sabemos qual é a recompensa esperada para cada ação em cada etapa. Como vamos escolher uma ação neste caso? Muito simplesmente – escolheremos a seqüência de ação que gerará a maior recompensa. Essa recompensa cumulativa que receberemos é frequentemente chamada de Q Value (uma abreviação de Quality Value), e podemos formalizar nossa estratégia matematicamente como:

A equação de Bellman

A equao acima indica que o valor de Q produzidos a partir de estar no estado s e seleccionando acção um, é a recompensa imediata recebido, r (s, a), além do mais alto valor de Q a partir de estado s'(que é o estado em que terminou em depois de tomar uma ação do estado s ). Receberemos o maior Q Value from s ' escolhendo a ação que maximiza o Q Value. Também introduzimos o ?, geralmente chamado de fator de desconto , que controla a importância das recompensas de longo prazo versus as imediatas.

Essa equação é conhecida como a Equação de Bellman, e sua página na Wikipedia fornece uma explicação abrangente de sua derivação matemática. Esta elegante equação é bastante poderosa e será muito útil para nós devido a duas características importantes:

  1. Enquanto ainda mantemos as suposições dos estados de Markov, a natureza recursiva da equação de Bellman permite que recompensas de estados futuros se propaguem para estados passados distantes.
  2. Não há necessidade de saber realmente quais são os verdadeiros valores Q quando começamos; Desde a sua recursiva, podemos adivinhar algo e, eventualmente, convergir para os valores reais.

Q Aprendizagem

Agora temos uma estratégia básica – em qualquer estado, execute a ação que eventualmente produzirá a maior recompensa cumulativa. Algoritmos como esse são chamados de gananciosos , por uma razão óbvia.

Como poderíamos implementar isso para resolver os desafios da vida real? Uma maneira é desenhar uma tabela para armazenar todas as combinações de ações de estado possíveis e usá-las para salvar Q Values. Podemos então atualizá-lo usando a Equação de Bellman como uma regra de atualização:

Q Regra de atualização de aprendizado. A notação ": =" é usada aqui para marcar explicitamente a atribuição em vez da igualdade.

Vamos ver um exemplo:

Demonstração de atualização da tabela de aprendizagem Q

Agora lembre-se de alguns estados são estados terminais. Quando o agente atinge um, nenhuma ação ou transição de estado é possível. Assim, se o futuro do Estado é um estado terminal, ficamos com:

Q Regra de atualização de aprendizado para o estado do terminal s '

Ainda não terminou – nosso algoritmo guloso tem um problema sério: se você continuar selecionando as mesmas melhores ações, nunca experimentará nada novo, e poderá perder uma abordagem mais recompensadora só porque nunca tentou.

Para resolver isso, usamos uma abordagem ?-greedy : para alguns 0 <? <1 , Escolhemos a ação gananciosa (usando nossa tabela) com uma probabilidade p = 1-? , ou uma ação aleatória com probabilidade p = ?. Assim, damos ao agente a chance de explorar novas oportunidades.

Esse algoritmo é conhecido como Q Learning (ou Q-Table ). Parabéns! você acabou de aprender seu primeiro algoritmo de Aprendizado de Reforço!

Redes profundas de Q

Você pode ter se perguntado como é que o Q Learning escala – e se você não o fez, vamos perguntar em conjunto: o que acontece quando o número de estados e ações se torna muito grande? Isso na verdade não é tão raro – até mesmo um jogo simples como o Tic Tac Toe tem centenas de estados diferentes (tente calcular isso), e não esqueça que multiplicamos esse número por 9, que é o número de ações possíveis. Então, como vamos resolver problemas realmente complexos?

Entre no Deep Learning! Nós combinamos Q Aprendizado e Aprendizado Profundo, que produz Deep Q Networks . A idéia é simples: substituiremos a tabela do Q Learning por uma rede neural que tenta aproximar os valores de Q. É geralmente referido como o aproximador ou a função de aproximação , e denotado como Q (s, a; ? ), onde ? representa os pesos treináveis da rede.

Agora, só faz sentido usar a Equação de Bellman como função de custo – mas o que exatamente iremos minimizar? Vamos dar uma outra olhada nisso:

O sinal "=" marca a atribuição , mas existe alguma condição que também satisfaça uma igualdade ? Bem, sim – quando o valor Q alcançou seu valor convergente e final. E este é exatamente o nosso objetivo – para que possamos minimizar a diferença entre o lado esquerdo e o lado direito – e viola! Nossa função de custo:

Função de custo DQN

Isso parece familiar? Provavelmente – é a função Mean Square Error, onde o valor Q atual é a previsão ( y ), e as recompensas imediatas e futuras são o alvo ( y ' ):

Função de erro quadrático médio

É por isso que Q (s ', a; ? ) é geralmente referido como Q-alvo .

Seguindo em frente: Treinamento. Na Aprendizagem por Reforço, o conjunto de treinamento é criado à medida que avançamos; pedimos ao agente para tentar selecionar a melhor ação usando a rede atual – e registramos o estado , a ação , a recompensa e o próximo estado em que ela acabou. Nós decidir sobre um tamanho de lote b, e depois de cada tempo b foram registrados novos recordes, selecionamos b registros de forma aleatória (!!) a partir da memória, e treinar a rede. Os buffers de memória usados geralmente são chamados de Experience Replay. Vários tipos de tais memórias existem – um muito comum é um buffer de memória cíclico . Isso garante que o agente continue treinando sobre seu novo comportamento, em vez de coisas que podem não ser mais relevantes.

As coisas estão ficando reais, então vamos falar de arquitetura: se estiver imitando uma tabela, a rede deve receber como entrada o estado e a ação, e deve produzir um valor Q:

Embora correta, essa arquitetura é muito ineficiente do ponto de vista técnico. Observe que a função de custo requer o valor Q máximo futuro, portanto precisaremos de várias previsões de rede para um cálculo de custo único. Então, em vez disso, podemos usar a seguinte arquitetura:

Aqui nós fornecemos a rede apenas os s estado como entrada, e receber valores de Q para todas as ações possíveis de uma vez. Muito melhor.

E bem, o que você sabe – é basicamente isso. Parabéns novamente! Você acabou de aprender como criar uma Deep Q Network!

Bônus – Double Deep Q Learning

Antes de finalizar, aqui está algo extra: há alguns parágrafos, comparamos a função de custo da Deep Q Network com o Mean Square Error. Mas o MSE compara as previsões y com os rótulos verdadeiros y '- e os rótulos verdadeiros são constantes durante todo o procedimento de treinamento. Obviamente, esse não é o caso em Redes Q Profundas: ambos y e y ' são previstos pela própria rede e, portanto, podem variar a cada iteração. O impacto é claro.

Apresentando: Double Deep Q Network , que usa rótulos semi-constantes durante o treinamento. Como? Mantemos duas cópias da Q Network, mas apenas uma está sendo atualizada – a outra permanece imóvel. De vez em quando, porém, substituímos a rede constante por uma cópia da Q Network treinada, daí o motivo pelo qual a chamamos de “semi-constante”. E entao:

Função de custo DDQN

Aqui, ? representa os pesos semi-constantes, então Q (s ', a; ?) significa o valor Q predito pela rede semi-constante. É isso aí, você entendeu.

Olá Mundo!

Pessoalmente, acredito que a melhor maneira de compreender novos conceitos é tentar implementá-los por conta própria. Para experimentar o Q Learning e Deep Q Networks, criei um jogo simples: um tabuleiro com 4 slots, que deveria ser preenchido pelo agente. Quando o agente seleciona um slot vazio, ele recebe uma recompensa de +1 e o slot é preenchido. Se ele selecionar um slot não-vago, receberá uma recompensa de -1. O jogo termina quando o tabuleiro inteiro está cheio.

Dê uma chance e tente implementar um agente que aprenda a dominar esse jogo usando os dois métodos. Você pode encontrar minhas tentativas aqui .

Boa sorte, e pela terceira vez hoje – Parabéns!