Tenho lido o artigo DeepMind Atari do Google e estou tentando para entender o conceito de “repetição da experiência”. A repetição da experiência aparece em muitos outros artigos de aprendizagem de reforço (particularmente, o artigo AlphaGo), então quero entender como funciona. Abaixo estão alguns trechos.
Primeiro, usamos um mecanismo inspirado biologicamente denominado repetição de experiência que torna os dados aleatórios, removendo assim as correlações na sequência de observação e suavizando as mudanças na distribuição dos dados.
O artigo então elabora o seguinte:
Embora existam outros métodos estáveis para treinar redes neurais na configuração de aprendizagem por reforço, como a Q-iteração com ajuste neural, esses métodos envolvem o treinamento repetido de redes de novo centenas de iterações. Consequentemente, esses métodos, ao contrário do nosso algoritmo, são muito ineficiente para ser usado com sucesso com grandes redes neurais. Parametrizamos uma função de valor aproximado $ Q (s, a; \ theta_i) $ usando a rede neural convolucional profunda mostrada na Fig. 1, na qual $ \ theta_i $ são os parâmetros (isto é, pesos) da rede Q na iteração $ i $ . Para realizar a repetição da experiência, armazenamos as experiências do agente $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ em cada intervalo de tempo $ t $ em um conjunto de dados $ D_t = \ {e_1, \ dots, e_t \} $ . Durante aprendizagem, aplicamos atualizações de Q-learning em amostras (ou minilotes) de experiência $ (s, a, r, s “) \ sim U (D) $ , retirado uniformemente ao acaso do pool de amostras armazenadas. A atualização do Q-learning na iteração $ i $ usa a seguinte função de perda:
$$ L_i (\ theta_i) = \ mathbb {E} _ {(s, a, r, s “) \ sim U (D)} \ left [\ left (r + \ gamma \ max_ {a”} Q (s “, a “; \ theta_i ^ -) – Q (s, a; \ theta_i) \ right) ^ 2 \ right] $$
O que é repetição de experiência e quais são seus benefícios, em termos leigos?
Resposta
A parte principal do o texto citado é:
Para realizar a repetição da experiência, armazenamos as experiências do agente $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $
Isso significa que em vez de executar Q-learning em pares de estado / ação à medida que ocorrem durante a simulação ou experiência real, o sistema armazena os dados descobertos para [estado, ação, recompensa, próximo_estado] – normalmente em uma mesa grande. Observe que isso não armazena valores associados – esses são os dados brutos para alimentar os cálculos de valor da ação posteriormente.
A fase de aprendizado é então logicamente separada da obtenção de experiência e baseada na obtenção de amostras aleatórias desta tabela. Você ainda deseja intercalar os dois processos – agir e aprender – porque melhorar a política levará a comportamentos diferentes que devem explorar as ações mais próximas das ótimas, e você deseja aprender com elas. No entanto, você pode dividir como quiser – por exemplo, dê um passo, aprenda com três passos anteriores aleatórios, etc. Os objetivos do Q-Learning ao usar a repetição da experiência usam os mesmos objetivos da versão online, portanto, não há uma nova fórmula para isso. A fórmula de perda fornecida também é aquela que você usaria para DQN sem repetição de experiência. A diferença é apenas quais s, a, r, s “, a” você alimenta.
No DQN, a equipe DeepMind também manteve duas redes e trocou qual era aprendizagem e qual alimentando nas estimativas atuais de valor de ação como “bootstraps”. Isso ajudou na estabilidade do algoritmo ao usar um aproximador de função não linear. É isso que a barra representa em $ {\ theta} ^ {\ overline {\ space}} _ i $ – denota a versão congelada alternativa dos pesos.
Vantagens da repetição da experiência:
-
Uso mais eficiente da experiência anterior, aprendendo com ela várias vezes. Isso é fundamental quando obter experiência no mundo real é caro, você pode obter o uso completo de As atualizações do Q-learning são incrementais e não convergem rapidamente, então várias passagens com os mesmos dados são benéficas, especialmente quando há baixa variação nos resultados imediatos (recompensa, próximo estado) dado o mesmo estado, par de ação.
-
Melhor comportamento de convergência ao treinar um aproximador de função. Em parte, isso ocorre porque os dados são mais parecidos com os dados iid assumidos em a maioria das provas de convergência de aprendizagem supervisionada.
Desvantagem da repetição da experiência:
- É mais difícil usar algoritmos de aprendizado de várias etapas, como Q ($ \ lambda $) , que pode ser ajustado para fornecer melhores curvas de aprendizado, equilibrando o viés (devido ao bootstrapping) e a variância (devido a atrasos e aleatoriedade nos resultados de longo prazo). DQN de várias etapas com DQN de repetição de experiência é uma das extensões exploradas no artigo Rainbow: Combining Improvements in Deep Reinforcement Learning .
A abordagem usada no DQN é brevemente delineada por David Silver em partes desta palestra em vídeo (por volta de 01:17: 00, mas vale a pena ver as seções antes). Eu recomendo assistir a série inteira, que é um curso de pós-graduação em aprendizagem por reforço, se você tiver tempo.
Comentários
- Vamos ‘ s digamos que durante o treinamento estamos em um estado e tomamos uma ação de acordo com a política gananciosa de epsilon e você acaba em outro estado. Então você recebe recompensas e o próximo estado. Aqui, a recompensa pode ser a pontuação do jogo e os estados podem ser os padrões de pixels na tela. E então pegamos o erro entre nosso aproximador de função e o valor que obtivemos da política gulosa novamente usando o aproximador de função já congelado. Mas com a repetição da experiência ao otimizar o aproximador, pegamos alguns conjuntos de dados de ação de estado aleatório. Estou certo?
- @ShamaneSiriwardhana: Sim, acho que você está certo. São exatamente os mesmos dados da trajetória real, mas em vez de aprender apenas com a etapa mais recente, você os salva em uma grande mesa e faz uma amostra dessa tabela (geralmente várias amostras, com um estoque de milhares de etapas anteriores para escolher ) Se precisar de mais esclarecimentos, talvez faça uma pergunta no site.
- Sim, li o papel novamente. Ele também diz que esse método pode melhorar o aprendizado de políticas externas também. Porque em Q aprendizagem com agir de acordo com a política gananciosa do epsilon, mas os valores de atualização funcionam de acordo com a política gananciosa. Portanto, quando cada passo de tempo, nossos parâmetros de rede neural são atualizados por estatísticas de minilote, o que é mais importante, não está relacionado às estatísticas de intervalo de tempo exato, mas o que aconteceu antes disso também ajuda a não correlacionar os dados. ‘ Analisei o artigo Rainbow e não ‘ não vi nenhum comentário especial sobre o uso de um truque especial para combinar repetição de experiência e multi- método da etapa. Além disso, ‘ ouvi dizer que o método de várias etapas é originalmente impossível de combinar com a repetição da experiência, mas por que não escolher aleatoriamente n experiências consecutivas em vez de 1 na repetição da experiência, mas na repetição, que entre cada n-experiências, nenhuma correlação encontrada? Não é ‘ esta experiência de várias etapas é repetida?
- @NeilSlater Por que é ” mais difícil de usar multi- algoritmos de aprendizagem por etapas “? O que você quis dizer?
Resposta
O algoritmo (ou pelo menos uma versão dele, conforme implementado em o projeto Coursera RL capstone ) é o seguinte:
-
Crie um “Buffer” de repetição que armazena o último
#buffer_size
SARS (Estado, ação, recompensa, novo estado) experiências. -
Execute o seu agente e deixe-o acumular experiências no buffer de reprodução até que (o buffer) tenha pelo menos
#batch_size
experiências .- Você pode selecionar ações de acordo com uma determinada política (por exemplo, soft-max para espaço de ação discreto, Gaussiano para contínuo, etc.) em seu $ \ hat {Q} (s, a; \ theta) $ estimador da função.
-
Assim que atingir
#batch_size
, ou mais:-
faça uma cópia do estimador da função ( $ \ hat {Q} (s, a; \ theta) $ ) no momento atual, ou seja, uma cópia dos pesos $ \ theta $ – que você “congela” e não atualiza, e use para calcular os estados “verdadeiros” $ \ hat {Q} (s “, a”; \ theta) $ . Execute para
num_replay
atualizações:-
amostra
#batch_size
experiências do buffer de reprodução. -
Use as experiências de amostra para pr realizar uma atualização em lote para o estimador de função (por exemplo em Q-Learning onde $ \ hat {Q} (s, a) = $ Rede Neural – atualize os pesos da rede). Use os pesos congelados como a “verdadeira” função de valores de ação, mas continue a melhorar a função não congelada.
-
-
faça isso até você atingir um estado terminal.
-
não se esqueça de anexar constantemente as novas experiências ao Replay Buffer
-
-
Corra para quantos episódios você precisar.
O que quero dizer com “verdadeiro”: cada experiência pode ser pensada como uma dupla de aprendizagem “supervisionada”, onde você tem uma função de valor verdadeiro $ Q (s, a) $ e um estimador de função $ \ hat {Q} (s, a) $ . Seu objetivo é reduzir o erro de valor, por exemplo, $ \ sum (Q (s, a) – \ hat {Q} (s, a)) ^ 2 $ . Como você provavelmente não tem acesso aos true valores de ação, em vez disso, você usa uma versão aprimorada inicializada do último estimador , levando em consideração a nova experiência e a recompensa oferecida. No Q-learning, o valor “verdadeiro” da ação é $ Q (s, a) = R_ {t + 1} + \ gamma \ max_ {a “} \ hat {Q} (s”, a “; \ theta) $ onde $ R $ é a recompensa e $ \ gamma $ é o fator de desconto.
Aqui está um trecho do código:
def agent_step(self, reward, state): action = self.policy(state) terminal = 0 self.replay_buffer.append(self.last_state, self.last_action, reward, terminal, state) if self.replay_buffer.size() > self.replay_buffer.minibatch_size: current_q = deepcopy(self.network) for _ in range(self.num_replay): experiences = self.replay_buffer.sample() optimize_network(experiences, self.discount, self.optimizer, self.network, current_q, self.tau) self.last_state = state self.last_action = action return action