저는 Google의 DeepMind Atari 문서 를 읽고 노력하고 있습니다. “경험 재생”의 개념을 이해합니다. 경험 재생은 다른 많은 강화 학습 논문 (특히 AlphaGo 논문)에 나와 있으므로 작동 방식을 이해하고 싶습니다. 아래는 일부 발췌입니다.

먼저, 데이터를 무작위로 추출하는 경험 재생이라는 생물학적 영감 메커니즘을 사용하여 관찰 순서의 상관 관계를 제거하고 데이터 분포의 변화를 평활화했습니다.

이 문서는 다음과 같이 자세히 설명합니다.

신경망을 훈련하기위한 다른 안정적인 방법이 존재하지만 신경 적합 Q- 반복과 같은 강화 학습 설정에서 이러한 방법은 네트워크 de novo 의 반복 훈련을 수백 번 반복합니다. 따라서 이러한 방법은 알고리즘과 달리 다음과 같습니다. 대규모 신경망에서 성공적으로 사용하기에는 너무 비효율적입니다. 그림 1에 표시된 심층 컨벌루션 신경망을 사용하여 근사값 함수 $ Q (s, a; \ theta_i) $ 를 매개 변수화합니다. 여기서 $ \ theta_i $ 는 반복 $ i $ 에서 Q- 네트워크의 매개 변수 (즉, 가중치)입니다. 경험 재생을 수행하기 위해 각 시간 단계에서 에이전트의 경험 $ e_t = (s_t, a_t, r_t, s_ {t + 1}) $ 을 저장합니다. 이터 세트 $ D_t = \ {e_1, \ dots, e_t \} $ 의 span class = “math-container”> $ t $ . 학습, 경험 샘플 (또는 미니 배치)에 Q- 학습 업데이트를 적용합니다. $ (s, a, r, s “) \ sim U (D) $ , 저장된 샘플 풀에서 무작위로 균일하게 추출됩니다. 반복 $ i $ 의 Q-learning 업데이트는 다음 손실 함수를 사용합니다.

$$ 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] $$

경험 재생이란 무엇이며 일반인의 관점에서 그 이점은 무엇입니까?

답변

인용 된 텍스트 :

경험 재생을 수행하기 위해 에이전트의 경험을 저장합니다. $ e_t = (s_t, a_t, r_t, s_ {t + 1} ) $

즉, 시뮬레이션 또는 실제 경험 중에 발생하는 상태 / 동작 쌍에 대해 Q- 학습을 실행하는 대신 시스템에서 발견 된 데이터를 저장합니다. [state, action, reward, next_state]-일반적으로 큰 테이블에 있습니다. 이것은 연관된 값을 저장하지 않습니다. 이것은 나중에 행동-가치 계산에 공급할 원시 데이터입니다.

학습 단계는 경험을 얻는 것과 논리적으로 분리되며이 테이블에서 무작위 샘플을 가져 오는 것을 기반으로합니다. 정책을 개선하면 최적의 행동에 더 가까운 행동을 탐색해야하는 다른 행동으로 이어지고 그로부터 배우기를 원하기 때문에 행동과 학습이라는 두 프로세스를 인터리브하고 싶습니다. 그러나 원하는 방식으로 분할 할 수 있습니다. 한 단계를 밟고, 세 가지 임의의 이전 단계에서 배우십시오. 경험 재생을 사용할 때 Q-Learning 대상은 온라인 버전과 동일한 대상을 사용하므로 새로운 공식이 없습니다. 주어진 손실 공식은 경험 재생없이 DQN에 사용할 것입니다. 차이점은 어떤 s, a, r, s “, a”만 입력하는 것입니다.

DQN에서 DeepMind 팀은 또한 두 개의 네트워크를 유지하고 어느 것이 학습과 현재 행동 가치에 어떤 것이 “부트 스트랩”으로 추정되는지. 이것은 비선형 함수 근사를 사용할 때 알고리즘의 안정성에 도움이되었습니다. 이것이 $ {\ theta} ^ {\ overline {\ space}} _ i $에서 막대가 의미하는 바입니다. 가중치의 대체 고정 버전을 나타냅니다.

경험 재생의 장점 :

  • 여러 번 학습하여 이전 경험을보다 효율적으로 사용합니다. 이것은 실제 경험을 얻는 데 비용이 많이들 때 핵심입니다. Q- 러닝 업데이트는 점진적이며 빠르게 수렴되지 않으므로 동일한 상태, 작업 쌍이 주어 졌을 때 즉각적인 결과 (보상, 다음 상태)의 변동이 적을 때 동일한 데이터로 여러 번 통과하는 것이 유용합니다.

  • 함수 근사치를 학습 할 때 더 나은 수렴 동작. 부분적으로 이는 데이터가 다음에서 가정 한 iid 데이터와 더 비슷하기 때문입니다. 대부분의지도 학습 수렴 증명.

경험 재생의 단점 :

  • Q ($ \ lambda $)와 같은 다단계 학습 알고리즘을 사용하는 것이 더 어렵습니다. , 편향 (부트 스트랩으로 인한)과 분산 (장기적 결과의 지연 및 무작위성으로 인한) 사이의 균형을 조정하여 더 나은 학습 곡선을 제공하도록 조정할 수 있습니다. 경험 재생 DQN이 포함 된 다단계 DQN은 Rainbow : Deep Reinforcement Learning의 개선 사항 결합 백서에서 살펴본 확장 기능 중 하나입니다.

DQN에 사용 된 접근 방식은 이 동영상 강의의 일부에서 David Silver가 간략하게 설명했습니다 (1시 17 분경 : 00, 그러나 그 전에 섹션을 볼 가치가 있습니다). 시간이 있으면 강화 학습에 대한 대학원 수준의 전체 시리즈를 시청하는 것이 좋습니다.

댓글

  • Let '는 교육 중에 우리가 한 주에 있으며 엡실론 탐욕 정책에 따라 조치를 취하고 귀하는 다른 주에있게된다고 말합니다. 그래서 당신은 보상과 다음 상태를 얻습니다. 여기서 보상은 게임의 점수가 될 수 있고 상태는 화면의 픽셀 패턴이 될 수 있습니다. 그런 다음 함수 aproximator와 이미 고정 된 함수 근사값을 사용하여 욕심 많은 정책에서 얻은 값 사이의 오류를 가져옵니다. 그러나 근사치를 최적화 할 때 경험 재생을 통해 임의의 상태 작업 데이터 세트를 취합니다. 내가 맞습니까?
  • @ShamaneSiriwardhana : 네, 당신이 옳다고 생각합니다. 실제 궤적에서 얻은 것과 똑같은 데이터이지만 가장 최근 단계에서만 학습하는 대신 큰 테이블에 저장하고 해당 테이블의 샘플 (일반적으로 여러 샘플, 선택할 수있는 이전 단계의 1000 개 저장) ). 더 자세한 설명이 필요하면 사이트에서 질문 할 수 있습니다.
  • 예, 다시 논문을 검토했습니다. 또한이 방법이 오프 정책 학습을 향상시킬 수 있다고 말합니다. 엡실론 탐욕 정책에 따라 행동하지만 업데이트 값은 탐욕 정책에 따라 작동하기 때문에 Q 학습에서. 따라서 매 시간 단계마다 신경망 매개 변수가 미니 배치 통계에 의해 업데이트 될 때 더 중요하게는 정확한 시간 단계 통계와 관련이 없지만 이전에 일어난 일은 데이터의 상관 관계를 해제하는 데 도움이됩니다.
  • @Neil Slater, I ' 레인보우 페이퍼를 검토했지만 ' 경험 리플레이와 멀티 플레이를 결합하기 위해 특별한 트릭을 사용하는 것에 대한 특별한 설명을 보지 못했습니다. 단계 방법. 또한 저는 ' 다단계 방법이 원래 경험 재생과 결합하는 것이 불가능하다고 들었는데, 왜 경험 재생에서 1 개 대신 n- 연속 경험을 무작위로 선택하는 것이 아니라 재생에서 이렇게 각 n- 경험간에 상관 관계가 발견되지 않았습니까? '이 다단계 경험이 다시 재생되지 않습니까?
  • @NeilSlater 여러 단계를 사용하는 것이 " 더 어려운 이유 단계 학습 알고리즘 "? 무슨 의미 였나요?

답변

알고리즘 (또는 Coursera RL 캡 스톤 프로젝트 )는 다음과 같습니다.

  1. 마지막 #buffer_size SARS (상태, 행동, 보상, 새로운 상태) 경험.

  2. 에이전트를 실행하고 (버퍼)가 최소한 #batch_size 경험을 가질 때까지 리플레이 버퍼에 경험을 축적합니다. .

    • $에 대해 특정 정책 (예 : 불연속 작업 공간의 경우 소프트 맥스, 연속의 경우 가우스 등)에 따라 작업을 선택할 수 있습니다. \ hat {Q} (s, a; \ theta) $ function estimator.
  3. #batch_size 이상 :

    • 함수 추정기 ( $ \ hat {Q} (s, a; \ theta) $ ) 현재 시간, 즉 가중치 사본 $ \ theta $ – “고정”하고 업데이트하지 않습니다. “참”상태를 계산하는 데 사용합니다. $ \ hat {Q} (s “, a”; \ theta) $ . Run for num_replay 업데이트 :

      1. 재생 버퍼의 샘플 #batch_size 경험.

      2. 샘플링 된 경험을 사용하여 함수 추정기에 일괄 업데이트를 수행하십시오 (예 : Q-Learning에서 $ \ hat {Q} (s, a) = $ 신경망-네트워크 가중치 업데이트). 고정 된 가중치를 “참”작업 값 함수로 사용하되 고정되지 않은 함수를 계속 개선하십시오.

    • 최종 상태에 도달합니다.

    • 새로운 경험을 재생 버퍼에 지속적으로 추가하는 것을 잊지 마십시오

  4. 필요한만큼 에피소드를 실행하세요.

내가 “참”을 의미하는 것 : 각 경험은 진정한 가치 기능이있는 “지도 된”학습 듀오로 생각할 수 있습니다. $ Q (s, a) $ 및 함수 추정기 $ \ hat {Q} (s, a) $ . 귀하의 목표는 가치 오류를 줄이는 것입니다. $ \ sum (Q (s, a)-\ hat {Q} (s, a)) ^ 2 $ . 아마도 true 작업 값에 대한 액세스 권한이 없기 때문에 대신 부트 스트랩 된 개선 된 버전의 마지막 추정기를 사용합니다. , 주어진 새로운 경험과 보상을 고려합니다. Q-learning에서 “진정한”액션 값은 $ Q (s, a) = R_ {t + 1} + \ gamma입니다. \ max_ {a “} \ hat {Q} (s”, a “; \ theta) $ 여기서 $ R $ 는 보상이고 $ \ gamma $ 는 할인 요소입니다.

다음은 코드 발췌입니다.

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 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다