Я пытаюсь реализовать сетевой агент политики для игры 2048 в соответствии с Учебное пособие по RL. Я знаю, что алгоритму нужно будет сыграть несколько партий, запомнить введенные данные и предпринятые действия, нормализовать и усреднить конечные результаты. Однако я застрял на конструкции функции потерь. Как правильно поощрять действия, которые приводят к лучшим итоговым баллам, и препятствовать действиям, которые приводят к худшим баллам?
При использовании softmax на выходном слое я придумал что-то вроде этого:
loss = sum((action - net_output) * reward)
где действие в одном горячем формате. Однако эта потеря, кажется, не имеет большого значения, сеть не учится. Мой полный код (без игровой среды) в PyTorch находится здесь.