В предыдущей части мы обнаружили, что недостаточно просто проявлять меньшую жадность в нашей политике действий. В некоторых случаях это могло помочь, а могло и не помочь, но определенно не решило проблему.
Возможно, пришло время взглянуть на более сложные топологии сети. Давайте посмотрим, что делают эксперты, чтобы получить рекомендации: для меня это означает прекрасную запись в блоге Артура Джулиани: Простое обучение с подкреплением с помощью Tensorflow, часть 4: Глубокие Q-сети и не только.
Я рекомендую вам прочитать статью самостоятельно, но вот краткое изложение того, что он там делает, чего мы в настоящее время не делаем:
- Сверточные слои
- Опыт Replay
- Предтренировочные игры
- Отдельная целевая сеть (сеть Double Q)
- Дуэль Q Network
Сверточные слои
Сверточные сетевые слои очень эффективны для обработки и анализа визуальных изображений, поскольку они обрабатывают и идентифицируют шаблоны в стеках массивов входных 2D-данных - обычно это разные цветовые полосы 2D-растровых изображений.
Учитывая неотъемлемую 2D-природу доски для крестиков-ноликов, это может очень помочь.
Опыт Replay
Сохраняя предыдущие игры в буфере опыта и повторно используя этот прошлый опыт при обучении сети, мы можем повысить стабильность обучения. Мы избегаем застревания сети в схемах, когда она повторяет одни и те же плохие ходы снова и снова с небольшими изменениями в результатах или обучении. В частности, я надеюсь, что это поможет нам в тех случаях, когда положительный опыт очень редок, например играя вторым против Min Max Player.
Предтренировочные игры
Это набор игр, в которые мы играем до начала обучения, где мы выбираем ходы совершенно случайно. Это дает нам достаточно обширный опыт и выборку возможных результатов. Если мы начнем напрямую с сетевой политики перемещения, у нас есть риск того, что инициализация случайных весов создаст политику, которая застревает в локальном минимуме и вряд ли позволит нам исследовать широкий набор действий - даже с использованием-жадной стратегии.
Отдельная целевая сеть
По мнению экспертов, использование одной и той же Q-сети для обучения, а также целевой функции Q для вычисления потерь может стать нестабильным и выйти из-под контроля. Разделив цель на независимую вторую сеть, обучение должно стать более стабильным.
Наша текущая топология выглядит так: текущее состояние - s, состояние после перемещения - s ′, вознаграждение за текущий ход - r, а значение скидки для будущих ожидаемых вознаграждений - γ:
После добавления целевой сети это будет выглядеть так:
Время от времени мы обновляем целевую сеть, копируя в нее веса из основной сети.
Дуэль Q Network
В настоящее время сеть будет выдавать абсолютное значение качества для каждого шага. Потенциальное улучшение по сравнению с этим подходом состоит в том, чтобы сопоставить ценность хода со значением текущего состояния доски. Т.е. вместо того, чтобы смотреть на абсолютное значение Q хода, мы спрашиваем, насколько этот ход улучшает или уменьшает значение текущего состояния доски. Или другими словами: насколько лучше или хуже ход по сравнению с другими возможными ходами в этом состоянии. Мы называем это преимуществом шага. Т.е.
Q(s,a)=V(s)+A(a)
где Q (s, a) - значение Q перемещения a в состоянии s, V (s) - значение Q состояния s, а A (a) - преимущество перемещения a.
Сеть Dueling Q будет выглядеть так:
Собираем все вместе
Если мы хотим быть методичными в этом вопросе, мы должны попробовать каждое из этих потенциальных улучшений независимо и посмотреть, действительно ли они улучшают ситуацию и насколько сильно. Потом все комбинации. Ни у кого нет на это времени, поэтому мы добавляем Experience Replay, Pre-training games, отдельную целевую сеть и топологию Dueling Q Network одновременно. Однако мы еще не совсем сверточные слои. Код для этого находится в ExpDoubleDuelQPlayer.
Давайте попробуем это сделать, начнем с простого случая - сначала идем против RandomPlayer, а затем пытаемся удачи против других подозреваемых:
Лучше, чем раньше, но все еще не идеально. Кажется, в итоге я получаю около 80 +/- 15% дро. Не те 100%, которые мы искали.
Обобщить:
Player | NN Player 1st | NN Player 2nd ============================================================== Random | Improved, not perfect | Improved, not perfect Min Max | Seems to work | Seems to work Rnd Min Max | Seems to work | Better, but not perfect
В следующей части мы добавим слои сверточной сети и посмотрим, поможет ли это получить последние несколько недостающих процентов.
Остальные части этой серии можно найти здесь:
- Введение - обучение компьютера игре в крестики-нолики
- Часть 1 - Основы компьютерных крестиков-ноликов
- Часть 2 - Алгоритм минимума и максимума
- Часть 3 - Табличное Q-Learning
- Часть 4 - Q-Learning нейронной сети
- Часть 5 - Обзор Q Network и снижение жадности
- Часть 6 - Двойная дуэль Q Network с переигровкой опыта
- Часть 7 - Это глубокая. Замысловато
- Часть 8 - Крестики-нолики с градиентным спуском политики
Исходный код и записные книжки Jupyter для всех частей этой серии доступны на GitHub.