Aprendizado por Reforço
http://www.cns.atr.jp/cnb/papers/pdf/Doya2002nn.pdf
Demorei mas voltei! Achei um artigo muito bom (link no título) do Kenji Doya, meu atual ídolo, unificando teorias de aprendizado por reforço (do inglês reinforcement learning) e neuromoduladores. Calma, vou explicar o que é isso. Seria tudo em 1 post, mas após escrever a primeira parte, percebi que é melhor dividir em 2 (assim também me forço a continuar postando, hehe).
Aprendizado por reforço consiste em reforçar as tendências de um indivíduo a repetir ações que lhe trazem benefícios e evitar ações prejudiciais. Para isto é necessário haver um sistema de recompensa e castigo pré-determinado e mínimo. Por exemplo, o indivíduo precisa ao menos saber que dor é ruim. Através do aprendizado por reforço ele aprenderá a evitar ações que resultem em dor. Um problema que surge nesta abordagem é o da atribuição de crédito. Qual ação exatamente resultou na dor? Acender o fogão ou botar a mão no fogo? Para resolver este problema, existe o método das diferenças temporais. Ele consiste em aproximar os valores de ações passadas ao valor da situação atual, conforme a proximidade no tempo. No exemplo dado, o indivíduo atribuiria um valor altamente negativo à ação de botar a mão no fogo, pois foi a última que ocorreu antes da dor. Logo após, não tão negativa, viria a ação de acender o fogão. "Mas então, por menor que seja, ele vai ter medo de acender o fogão!". Correto. Mas quando ele tentar novamente e não botar a mão no fogo (talvez com ajuda da mãe), os valores vão se reajustar e ele vai perceber que o verdadeiro problema está em botar a mão no fogo e não em acender o fogão (embora ele ainda vá saber que um fogão aceso é mais perigoso que um fogão apagado). Esse mecanismo é simples porém muito poderoso, capaz de resolver diversos problemas em inteligência artificial para agentes autônomos, tendo um mínimo de conhecimento prévio e mão humana.
Aqui tem um exemplo de implementação de aprendizado pro reforço que eu fiz em Java Script, utilizando diferenças temporais: http://netfighters.org/experimentos/rl.html
O mapa, no topo, representa os estados possíveis do agente (a bolinha). Nas pontas existem um estado ruim (esquerda) e um bom (direita). Note que eles são os únicos estados que já iniciam com valores pré-definidos. Imagine isso como se fossem nossos instintos e afins, o mínimo que nascemos "sabendo". Ao clicar em "Next Move", o agente vai se mover, com uma certa probabilidade, para a melhor posição possível a partir de onde ele está. A probabilidade complementar (representada pelo "Exploration Rate (epsilon)") consiste em um movimento aleatório. No exemplo do Random Walk isto não tem muita utilidade, mas a intenção é que o agente aprenda métodos de agir melhores dos que ele já vivenciou, através de exploração (seria como arriscar e descobrir atalhos melhores para chegar no trabalho). Note que os valores de cada posição vão continuar em zero até que o agente visite um estado com valor conhecido. Nesse momento os estados visitados recentemente serão reajustados na direção da recompensa (ou castigo) recebida. Em vez de ficar clicando em "Next Move", clique apenas uma vez e deixe o ENTER pressionado, assim o agente fará vários movimentos e ajustará os valores rapidamente. Perceba que eles sempre ficarão em ordem crescente, e isso significa que o algoritmo funciona, pois, quanto mais para a direita, mais próximo está de uma boa recompensa, e mais distante de um castigo. Experimente diminuir o Exploaration Rate para zero e verá que o agente vai sempre se mover para a direita (após ter aprendido os valores intermediários).
Mas e o "Learning Rate"? E o "Discount Rate"? Vamos por partes. O learning rate é a taxa de aprendizado, ela regula a velocidade na qual os valores são ajustados. Um learning rate maior vai fazer com que os valores se ajustem muito mais rápido, mas cuidado: a teoria matemática por trás de tudo diz que esta taxa precisa ser muito pequena para que o algoritmo funcione. Se aumentar demais, os valores podem "enlouquecer". Ou seja, o truque está em achar um valor intermediário que caia bem para o problema (no próximo post veremos como isso acontece no cérebro). O discount rate é a taxa de desconto nos valores através do tempo. Uma taxa de desconto 1 dignifica que não há desconto através do tempo (sim, parece o contrário do nome, mas enfim...), ou seja, resultados de muito longo prazo têm valor similar aos de curto prazo. Alterando essa taxa obtemos equilíbrios diferentes entre curto (0) e longo (1) prazo. No próximo post veremos como o nosso cérebro ajusta isso.
Por hoje é só! "E o tal de Trace Decay Rate??". Bom, ele não influencia em onde eu quero chegar, então ficará de lado. Só digo que ele regula o tempo de alcance da atribuição de crédito. No próximo post falarei sobre neuromoduladores e como misturar tudo isso! -->
Aprendizado por reforço consiste em reforçar as tendências de um indivíduo a repetir ações que lhe trazem benefícios e evitar ações prejudiciais. Para isto é necessário haver um sistema de recompensa e castigo pré-determinado e mínimo. Por exemplo, o indivíduo precisa ao menos saber que dor é ruim. Através do aprendizado por reforço ele aprenderá a evitar ações que resultem em dor. Um problema que surge nesta abordagem é o da atribuição de crédito. Qual ação exatamente resultou na dor? Acender o fogão ou botar a mão no fogo? Para resolver este problema, existe o método das diferenças temporais. Ele consiste em aproximar os valores de ações passadas ao valor da situação atual, conforme a proximidade no tempo. No exemplo dado, o indivíduo atribuiria um valor altamente negativo à ação de botar a mão no fogo, pois foi a última que ocorreu antes da dor. Logo após, não tão negativa, viria a ação de acender o fogão. "Mas então, por menor que seja, ele vai ter medo de acender o fogão!". Correto. Mas quando ele tentar novamente e não botar a mão no fogo (talvez com ajuda da mãe), os valores vão se reajustar e ele vai perceber que o verdadeiro problema está em botar a mão no fogo e não em acender o fogão (embora ele ainda vá saber que um fogão aceso é mais perigoso que um fogão apagado). Esse mecanismo é simples porém muito poderoso, capaz de resolver diversos problemas em inteligência artificial para agentes autônomos, tendo um mínimo de conhecimento prévio e mão humana.
Aqui tem um exemplo de implementação de aprendizado pro reforço que eu fiz em Java Script, utilizando diferenças temporais: http://netfighters.org/experimentos/rl.html
O mapa, no topo, representa os estados possíveis do agente (a bolinha). Nas pontas existem um estado ruim (esquerda) e um bom (direita). Note que eles são os únicos estados que já iniciam com valores pré-definidos. Imagine isso como se fossem nossos instintos e afins, o mínimo que nascemos "sabendo". Ao clicar em "Next Move", o agente vai se mover, com uma certa probabilidade, para a melhor posição possível a partir de onde ele está. A probabilidade complementar (representada pelo "Exploration Rate (epsilon)") consiste em um movimento aleatório. No exemplo do Random Walk isto não tem muita utilidade, mas a intenção é que o agente aprenda métodos de agir melhores dos que ele já vivenciou, através de exploração (seria como arriscar e descobrir atalhos melhores para chegar no trabalho). Note que os valores de cada posição vão continuar em zero até que o agente visite um estado com valor conhecido. Nesse momento os estados visitados recentemente serão reajustados na direção da recompensa (ou castigo) recebida. Em vez de ficar clicando em "Next Move", clique apenas uma vez e deixe o ENTER pressionado, assim o agente fará vários movimentos e ajustará os valores rapidamente. Perceba que eles sempre ficarão em ordem crescente, e isso significa que o algoritmo funciona, pois, quanto mais para a direita, mais próximo está de uma boa recompensa, e mais distante de um castigo. Experimente diminuir o Exploaration Rate para zero e verá que o agente vai sempre se mover para a direita (após ter aprendido os valores intermediários).
Mas e o "Learning Rate"? E o "Discount Rate"? Vamos por partes. O learning rate é a taxa de aprendizado, ela regula a velocidade na qual os valores são ajustados. Um learning rate maior vai fazer com que os valores se ajustem muito mais rápido, mas cuidado: a teoria matemática por trás de tudo diz que esta taxa precisa ser muito pequena para que o algoritmo funcione. Se aumentar demais, os valores podem "enlouquecer". Ou seja, o truque está em achar um valor intermediário que caia bem para o problema (no próximo post veremos como isso acontece no cérebro). O discount rate é a taxa de desconto nos valores através do tempo. Uma taxa de desconto 1 dignifica que não há desconto através do tempo (sim, parece o contrário do nome, mas enfim...), ou seja, resultados de muito longo prazo têm valor similar aos de curto prazo. Alterando essa taxa obtemos equilíbrios diferentes entre curto (0) e longo (1) prazo. No próximo post veremos como o nosso cérebro ajusta isso.
Por hoje é só! "E o tal de Trace Decay Rate??". Bom, ele não influencia em onde eu quero chegar, então ficará de lado. Só digo que ele regula o tempo de alcance da atribuição de crédito. No próximo post falarei sobre neuromoduladores e como misturar tudo isso! -->