Что такое Dueling DQN?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Dueling DQN — это модификация DQN, где оценка Q-функции разделяется на две части: ценность состояния и преимущество действия. Такой подход помогает лучше обучаться в состояниях, где выбор действия почти не влияет на результат. В итоге агент часто обучается стабильнее и быстрее, чем с обычным DQN.
Определение:
Dueling DQN — это архитектура deep reinforcement learning, в которой нейросеть отдельно оценивает:
- V(s) — насколько хорошо состояние само по себе;
- A(s, a) — насколько выгодно конкретное действие в этом состоянии.
Затем эти две оценки объединяются в итоговое значение Q(s, a). Идея в том, что в некоторых состояниях важнее понять, насколько состояние хорошее, чем различать все действия по отдельности.
Пример использования:
Например, в игре с большим числом похожих действий агент может долго не понимать, какое действие лучше в большинстве состояний. Dueling DQN сначала учится определять, насколько состояние вообще перспективно, а уже потом уточняет, какое действие дает преимущество.
# Упрощённая схема объединения потоков в Dueling DQN
import torch
import torch.nn as nn
class DuelingDQN(nn.Module):
def __init__(self, state_dim, action_dim):
super().__init__()
self.feature = nn.Sequential(
nn.Linear(state_dim, 128),
nn.ReLU()
)
self.value_stream = nn.Sequential(
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, 1) # V(s)
)
self.advantage_stream = nn.Sequential(
nn.Linear(128, 64),
nn.ReLU(),
nn.Linear(64, action_dim) # A(s, a)
)
def forward(self, x):
features = self.feature(x)
value = self.value_stream(features)
advantage = self.advantage_stream(features)
q_values = value + advantage - advantage.mean(dim=1, keepdim=True)
return q_values
Пояснение кода:
Код показывает типичную структуру Dueling DQN.
Сначала входное состояние проходит через общий блок feature, который извлекает признаки. Затем признаки разделяются на два потока: value_stream считает оценку состояния V(s), а advantage_stream — преимущества каждого действия A(s, a). На выходе они объединяются в Q-значения.
В формуле q_values = value + advantage - advantage.mean(...) вычитается среднее преимущество, чтобы избежать неоднозначности: без этого можно было бы произвольно перераспределять значения между V и A, не меняя итоговый Q.
Ключевые моменты:
- Dueling DQN разделяет оценку на ценность состояния и преимущество действия.
- Это полезно, когда не все действия сильно различаются в одном и том же состоянии.
- Архитектура часто дает лучшее и более стабильное обучение, чем обычный DQN.
- Итоговое Q-значение собирается из двух потоков с нормализацией advantage.
- Это не отдельный алгоритм обучения, а модификация архитектуры Q-сети.