Sobes.tech
Back to questions
Middle — Senior
12

Что такое experience replay buffer и зачем он нужен?

Companies where asked
Ниармедик Ваш Доктор Рядом
СамокатСамокат
SelectelSelectel

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Experience replay buffer — это хранилище переходов агента, из которого он позже случайно семплирует мини-батчи для обучения. Он нужен, чтобы разорвать корреляцию между соседними шагами, повысить стабильность обучения и эффективнее использовать уже собранный опыт. Особенно важен в off-policy алгоритмах, таких как DQN.

Определение:

Experience replay buffer — это буфер, куда сохраняются события взаимодействия агента со средой в виде переходов: состояние, действие, награда, следующее состояние и признак завершения эпизода. Вместо обучения только на последнем шаге модель учится на случайно выбранных старых и новых примерах из буфера. Это делает обучение более устойчивым и позволяет многократно переиспользовать одни и те же данные.

Пример использования:

В DQN для игры Atari агент после каждого шага сохраняет переход в буфер. Затем при обучении случайно выбирается мини-батч из нескольких тысяч прошлых переходов и по нему обновляются веса сети.

from collections import deque
import random

class ReplayBuffer:
    def __init__(self, capacity):
        self.buffer = deque(maxlen=capacity)

    def add(self, state, action, reward, next_state, done):
        self.buffer.append((state, action, reward, next_state, done))

    def sample(self, batch_size):
        return random.sample(self.buffer, batch_size)

    def __len__(self):
        return len(self.buffer)

buffer = ReplayBuffer(capacity=100000)

# Сохранение опыта
buffer.add(state, action, reward, next_state, done)

# Обучение на случайной выборке
batch = buffer.sample(batch_size=64)
states, actions, rewards, next_states, dones = zip(*batch)

Пояснение кода:

  1. deque(maxlen=capacity) хранит ограниченное число переходов и автоматически удаляет самые старые.
  2. Метод add(...) добавляет один переход агента в буфер.
  3. Метод sample(batch_size) случайно выбирает набор переходов без повторений.
  4. Такой батч подается на обучение, чтобы обновление сети было основано не на последовательных, а на перемешанных данных.
  5. Это снижает зависимость между примерами и улучшает сходимость.

Ключевые моменты:

  • Буфер хранит прошлый опыт агента в виде переходов (s, a, r, s', done).
  • Главная цель — убрать корреляцию между соседними наблюдениями.
  • Повторное использование опыта повышает sample efficiency.
  • Replay buffer особенно полезен в off-policy RL.
  • Для on-policy методов replay buffer обычно либо не используется, либо используется ограниченно.
  • Часто в продвинутых вариантах применяют prioritized replay, где важные переходы семплируются чаще.