Как создать функцию потерь для модели с неконтролируемым обучением, где выходной сигнал напоминает прямой ввод для игрового агента? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь настроить глубокую нейронную сеть, которая предсказывает следующий шаг игрового агента для навигации по миру. Для управления игровым агентом требуется два плавающих входа. Первый контролирует скорость (0.0 = остановка / не двигаться, 1.0 = максимальная скорость). Второй управляет рулевым управлением (-1,0 = поворот налево, 0,0 = прямо, +1,0 = поворот направо).

Я спроектировал сеть так, чтобы в ней было два выходных нейрона, один для скорости (к ней применена сигмовидная активация) и для рулевого управления (имеет танг активацию). Фактический ввод, который я хочу передать в сеть, это данные пикселей и некоторые значения игрового состояния.

Чтобы обучить сеть, я просто запустил бы целую игру (около 2000 кадров / сэмплов). Когда игра закончится, я хочу тренировать модель. Вот где я борюсь, как будет выглядеть моя функция потери? Во время игры я собираю все действия / выходы из сети, состояние игры и награды за кадр / семпл. Когда игра закончена, я также получил информацию, выиграл или проиграл агент.

Edit:

Этот пост http://karpathy.github.io/2016/05/31/rl/ вдохновил меня. Возможно, я мог бы использовать дисконтированные (переместить, повернуть) пары значений, умножить их на (-1), если игровой агент проиграл, и (+1), если он выиграл. Теперь я могу использовать эти значения в качестве градиентов для обновления весов сетей?

Было бы хорошо, если бы кто-то мог помочь мне здесь.

Всего наилучшего, Tobs.

1 Ответ

0 голосов
/ 24 января 2019

Проблема, о которой вы говорите, относится к reinforcement-learning, где агент взаимодействует со средой и собирает данные о состоянии игры, ее действии и награде / счете, которые он получил в конце. Сейчас есть много подходов.

Тот, о котором вы говорите, - это метод policy-gradient, а функция потерь равна E[\sum r], где r - это оценка, которая должна быть максимизирована. И его градиент будет A*grad(log(p_theta)), где A - функция преимущества, т.е. +1/-1 для выигрыша / проигрыша. И p_theta - это вероятность выбора действия, параметризованного theta (нейронная сеть). Теперь, если он выиграл, градиент будет обновляться в пользу этой политики из-за +1 и наоборот.

Примечание: существует множество методов для проектирования A, в этом случае выбирается +1/-1.

Подробнее вы можете прочитать здесь более подробно.

...