시작하기무료로 시작하기

Experience replay 버퍼

이제 Experience Replay를 지원하는 데이터 구조를 만들어 보겠습니다. 이를 통해 에이전트가 훨씬 효율적으로 학습할 수 있어요.

이 리플레이 버퍼는 두 가지 연산을 지원해야 합니다:

  • 나중에 샘플링할 수 있도록 경험을 메모리에 저장하기
  • 메모리에서 과거 경험을 무작위로 뽑아 배치로 "재생"하기

리플레이 버퍼에서 뽑은 데이터는 신경망 입력으로 사용되므로, 편의를 위해 버퍼는 torch Tensor를 반환해야 합니다.

torchrandom 모듈, 그리고 deque 클래스는 연습 문제 환경에 이미 임포트되어 있습니다.

이 연습은 강의의 일부입니다

Python으로 배우는 Deep Reinforcement Learning

강의 보기

연습 안내

  • ReplayBufferpush() 메서드를 완성해 experience_tuple을 버퍼 메모리에 추가하세요.
  • sample() 메서드에서 self.memory로부터 크기가 batch_size인 무작위 샘플을 뽑으세요.
  • 다시 sample()에서, 처음에는 샘플이 튜플의 리스트 형태로 뽑히므로 이를 리스트의 튜플로 변환해야 합니다.
  • actions_tensor의 형태를 (batch_size)가 아니라 (batch_size, 1)로 변환하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

class ReplayBuffer:
    def __init__(self, capacity):
        self.memory = deque([], maxlen=capacity)
    def push(self, state, action, reward, next_state, done):
        experience_tuple = (state, action, reward, next_state, done)
        # Append experience_tuple to the memory buffer
        self.memory.____    
    def __len__(self):
        return len(self.memory)
    def sample(self, batch_size):
        # Draw a random sample of size batch_size
        batch = ____(____, ____)
        # Transform batch into a tuple of lists
        states, actions, rewards, next_states, dones = ____
        states_tensor = torch.tensor(states, dtype=torch.float32)
        rewards_tensor = torch.tensor(rewards, dtype=torch.float32)
        next_states_tensor = torch.tensor(next_states, dtype=torch.float32)
        dones_tensor = torch.tensor(dones, dtype=torch.float32)
        # Ensure actions_tensor has shape (batch_size, 1)
        actions_tensor = torch.tensor(actions, dtype=torch.long).____
        return states_tensor, actions_tensor, rewards_tensor, next_states_tensor, dones_tensor
코드 편집 및 실행