Привет. Я пытаюсь построить 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 за преодоление препятствия