Как обрабатывать недопустимые движения в обучении подкреплению?

20

Я хочу создать ИИ, который может играть пять в ряд / гомоку. Как я уже упоминал в названии, я хочу использовать для этого обучение с подкреплением.

Я использую метод градиента политики , а именно REINFORCE, с базовым уровнем. Для приближения значения и функции политики я использую нейронную сеть . Имеет сверточные и полностью связанные слои. Все слои, кроме выходных, являются общими. Слой вывода политики имеет выходной блок 8×8=64 (размер платы) и softmax на них. Так что это стохастик. Но что, если сеть выдает очень высокую вероятность неверного перемещения? Неверный ход - это когда агент хочет проверить квадрат, в котором есть один «Х» или «О». Я думаю, что это может застрять в этом состоянии игры.

Не могли бы вы порекомендовать какое-либо решение для этой проблемы?

Я предполагаю использовать метод актер-критик . За недействительный ход мы должны дать отрицательное вознаграждение и передать ход противнику.

Мольнар Иштван
источник

Ответы:

10

Просто игнорируйте неверные ходы.

Для исследования вполне вероятно, что вы не просто выполните ход с наибольшей вероятностью, а вместо этого выберете ходы случайным образом на основе выведенной вероятности. Если вы наказываете только незаконные ходы, они по-прежнему сохраняют некоторую вероятность (хотя и небольшую) и, следовательно, будут выполняться время от времени (хотя и редко). Таким образом, вы всегда будете иметь агента, который иногда делает незаконные ходы.

Для меня имеет смысл просто установить вероятности всех незаконных ходов в ноль и перенормировать выходной вектор, прежде чем выбрать свой ход.

BlindKungFuMaster
источник
Спасибо. вероятно, я не был ясен, но я выбрал движение случайным образом из-за выведенных вероятностей. Я попробую ваш совет, чтобы установить вероятность незаконных ходов в ноль и посмотреть, что произойдет. Хорошего дня.
Мольнар Иштван
8

Обычно методы softmax в методах градиента политики, использующих линейную функцию приближения, используют следующую формулу для расчета вероятности выбора действия a . Здесь вес θ , и функция ϕ является функцией текущего состояния s и действием из множества действий A .

π(θ,a)=eθϕ(s,a)bAeθϕ(s,b)

Чтобы исключить незаконные шаги, можно ограничить набор действий только теми, которые были законными, следовательно, Legal(A) .

π(θ,a)=eθϕ(s,a)bLegal(A)eθϕ(s,b),aLegal(A)

В псевдокоде формула может выглядеть так:

action_probs = Agent.getActionProbs(state)
legal_actions = filterLegalActions(state, action_probs)
best_legal_action = softmax(legal_actions)

Независимо от того, используется ли линейное или нелинейное приближение функции (ваша нейронная сеть), идея состоит в том, чтобы использовать только законные шаги при вычислении вашего softmax. Этот метод означает, что агент будет выдавать только действительные ходы, что хорошо, если вы захотите позже изменить свою игру, и что разница в значении между ограниченным выбором действий будет легче различить агентом. Это также будет быстрее, поскольку количество возможных действий уменьшается.

Яден Травник
источник
Очень полезный. Спасибо за размещение обоих уравнений и псевдокода!
DukeZhou
1
Математика и псевдокод здесь не совпадают. Softmax по законным вероятностям перемещения скорректирует относительные вероятности. Например, (0,3, 0,4, 0,2, 0,1), отфильтрованные с удалением первого и третьего элементов, будут (0,0, 0,8, 0,0, 0,2) с вашей формулой, но будут (0,0, 0,57, 0,0, 0,42) с использованием псевдокода. Псевдокод должен принимать логи, до вычисления вероятности действия.
Нил Слэйтер
4
Как рассчитать градиент отфильтрованной версии Softmax? Похоже, что это было бы необходимо для успешного распространения, да?
Брианбернс
@brianberns Вам удалось найти ответ? Мне кажется, что так и было бы, но почему-то в моем примере с игрушкой я получаю правильный ответ только при использовании логарифмических вероятностей нефильтрованного софтмакса ...
trytolearn
5

ИМХО идея недействительных ходов сама по себе недействительна. Представьте себе размещение "X" в координатах (9, 9). Вы можете считать это неверным ходом и дать ему отрицательное вознаграждение. Абсурд? Конечно!

Но на самом деле ваши недействительные ходы - просто пережиток представления (что само по себе просто и хорошо). Лучшее из них - полностью исключить их из любых вычислений.

Это становится более очевидным в шахматах:

  • В позиционном представлении вы можете рассмотреть ход a1-a8, который относится к игре, только если в нем есть Ладья или Королева a1(и некоторые другие условия выполняются).

  • В другом представлении вы могли бы рассмотреть ход Qb2. Опять же, это может или не может принадлежать игре. Если у текущего игрока нет королевы, то, конечно, нет.

Поскольку недействительные ходы связаны с представлением, а не с игрой, они не должны рассматриваться вообще.

maaartinus
источник
1
Отличный момент. В играх [M], в которые играют на судоку, ограничения делают многие позиции (координаты + значение) недопустимыми после первого размещения. Нет смысла рассматривать эти незаконные позиции с точки зрения размещения, но важным стратегическим уровнем является признание того, какие размещения минимизируют ценность оставшихся не сыгранных позиций. (т. е. если я размещу здесь 8, это блокирует моего оппонента от размещения 8 в этом ряду, столбце или регионе. По сути, «сколько стратегических позиций это размещение удаляет с
игровой доски
5

Недавно я столкнулся с похожей проблемой с Сапер.

Я решил это путем полного игнорирования незаконных / недействительных ходов.

  1. Используйте Q-сеть, чтобы предсказать Q-значения для всех ваших действий (действительных и недействительных)
  2. Предварительно обработайте значения Q, установив для всех недопустимых ходов значение Q, равное нулю / отрицательному числу (зависит от вашего сценария)
  3. Используйте политику по вашему выбору, чтобы выбрать действие из уточненных Q-значений (например, жадный или Больцмана)
  4. Выполните выбранное действие и возобновите логику DQN.

Надеюсь это поможет.

Sanavesa
источник
1
Единственное, что я хотел бы добавить к этому, это то, что вы должны помнить о необходимости делать backprop для DQN, когда вы устанавливаете значения Q для недопустимых пар (s, a) на большое отрицательное значение, так что оно обучено не выбирать это состояние, действие пары в следующий раз.
SN
Но мне непонятно, что установка больших целевых значений Q влияет на непрерывность или форму функции потери / ошибки (что влияет на поиск градиента). Каким был ваш опыт?
SN
1
@ СН Я понимаю твою точку зрения. Идея состоит в том, чтобы выбрать действие с наибольшим значением Q , которое не является недопустимым действием . Затем вы выполняете это действие и используете это действие в своем правиле обновления (т. Е. Обучаете свой DQN поддерживать это действие в долгосрочной перспективе). Это делает будущие значения Q выбранного действия более высокими и, следовательно, более благоприятными. Это не снизит значение Q недопустимых действий, что не имеет значения, потому что они всегда отфильтровываются (не учитываются). Дайте мне знать, если вы хотите, чтобы я подробно остановился на примере. :)
Sanavesa
1
@Sanavesa, безусловно, имеет смысл, вы, в сущности, рассчитываете на то, что DQN в конечном итоге узнает, какие правильные решения будут приняты в школе жестких ударов. Но в ситуациях, когда есть только один или несколько законных решений, у вас очень медленное обучение. Подход, который я предлагаю, - это способ включения домена K в задачу, чтобы ускорить это обучение. Это также то, что, как я думал, вы делали в своем первоначальном посте, где вы писали о «установке недопустимых ходов в Q-значение ноль / отрицательное число»
SN
1
@SNPrecisely! Оба подхода имеют свои достоинства. Зависит от приложения, если легче узнать законные ходы или просто игнорировать их. Для больших сложных приложений я чувствую, что игнорирование недействительных ходов гораздо быстрее, чтобы агент мог учиться, но не цитируйте меня об этом.
Санавеса