العودة إلى المدونة
Machine Learning 18 يناير 2025 13 min للقراءة

DQN من الصفر: تعليم وكيل كيفية لعب Snake

تنفيذ DQN كامل من الصفر بـ PyTorch — البيئة، وذاكرة التشغيل، واستكشاف epsilon-greedy.

المكوّنات الأساسية لـ DQN

ذاكرة الإعادة (Replay Buffer)

class ReplayBuffer:
    def __init__(self, capacity=10000):
        self.buffer = deque(maxlen=capacity)
    
    def push(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)

شبكة Q

class DQN(nn.Module):
    def __init__(self, state_dim, action_dim):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(state_dim, 256), nn.ReLU(),
            nn.Linear(256, 256), nn.ReLU(),
            nn.Linear(256, action_dim)
        )
    def forward(self, x): return self.net(x)

نقاط رئيسية في حلقة التدريب

  • الشبكة الهدف: انسخ الأوزان كل 1000 خطوة (يمنع التذبذب)
  • تناقص إبسيلون: خطي من 1.0 إلى 0.01 على مدى 50 ألف خطوة
  • حجم الدفعة: 64، التحديث كل 4 خطوات
  • Double DQN: يقلّل تحيّز المبالغة في التقدير
Reinforcement LearningDQNPyTorchGame AIDeep Q-Network
O

Ossama Elhakki

مهندس ذكاء اصطناعي وأنظمة ML — المغرب