Не могу найти, что не так в моей сети DQN - PullRequest
0 голосов
/ 29 февраля 2020

Привет. Я пытаюсь построить DQN-агент, который решает простую сеточную игру. Это сетка 8х8, где есть препятствия, еда и игрок. Моя модель выглядит так

Обучение выглядит следующим образом

const x: any = [];  
const y: any = [];

dataset.forEach((frame: Frame, index: number) => {
 let newQ;
 if (frame.reward === Reward.OBSTACLE) {
   newQ = frame.reward;
 }  else {
   const maxFutureQ = Math.max(...nextQs[index]);
   newQ = frame.reward + DISCOUNT * maxFutureQ;
 }

 const currentQ = currentQs[index];
 currentQ[frame.action - 1] = newQ;
 x.push(frame.state);
 y.push(currentQ);
});

Где значение q для данного действия рассчитывается на основе следующего состояния MAXQ и текущего вознаграждения. Проблема в том, что после некоторого обучения он всегда идет вправо, и все значения Q всегда отрицательны, например [[-5.7571626, -5.176952, -5.1730952, -4.6779041],] Что-то не так, что я пропускаю? Как и размер плотных слоев, возможно, поместите в качестве входного значения конфорочный слой, потому что размер входного файла 64, вероятно, слишком велик? Различные функции активации?

РЕДАКТИРОВАТЬ: Награды: 1 за перемещение, 100 за сбор пищи, -250 за преодоление препятствия

...