Sobes.tech
Back to questions
Middle — Senior
11

Что такое Dueling DQN?

Companies where asked
GravityField
Skyeng
Rubbles

Answer from AI

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-сети.