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

Для этой первой попытки я начал с этого урока.

Цель состоит в том, чтобы научить тележку максимально эффективно достигать флага. Толчок в одном направлении не сработает, поэтому мы должны построить Q-таблицу, которая адаптируется к вознаграждению за каждую попытку раскачивания вперед и назад.

Среда предоставляет три возможных действия: «Нажать влево», «Бездействие» и «Нажать вправо», которые отображаются на 0, 1 и 2 соответственно.

Некоторые константы и переменные, которые мы можем установить, включают скорость обучения, скидку, количество попыток (эпизодов) и частоту визуального отображения нашего текущего прогресса.

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

Если бы мы использовали необработанные значения с точностью до 8 знаков после запятой, наша таблица Q была бы неоправданно массивной из-за необходимости хранить все возможные комбинации состояний. Вместо этого мы разбиваем среду на ряд «сегментов» с переменной степенью детализации, чтобы размер нашей таблицы оставался управляемым.

Еще одним «моментом лампочки» для меня стало применение эпсилон в процессе обучения. Раньше я не задумывался, как агент перейдет от случайных действий к использованию табличного принятия решений, и постепенно уменьшающееся значение эпсилон имеет большой смысл.

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

Этот график был сгенерирован автором с количеством сегментов 20x20 и 4000 тренировочных эпизодов. Этого явно было недостаточно, так как, безусловно, есть улучшения, но они все еще непоследовательны, а минимальные награды слишком малы.

Я экспериментировал с увеличением количества ведер, но обнаружил, что это не дает особых улучшений. Однако это значительно увеличило время моделирования и рендеринга, особенно при выполнении этапа построения графика после обучения Q-таблицы. Это имеет смысл, так как таблица 20x20x3 будет иметь 1200 возможных комбинаций, а 40x40x3 - 4800.

В конце концов я отказался от разрешения корзины 20x20 и увеличил количество шагов обучения до 40 000, чтобы понять, сможем ли мы достичь более стабильных результатов и когда.

Как вы можете видеть на графике, мы получаем очень стабильные положительные результаты около 25 тысяч эпизодов. Если бы я делал что-то вроде линейной регрессии, инстинктивно сократил бы свое обучение примерно до 25 тысяч эпизодов, ожидая, что он будет похож на приведенный выше график, но с обрезанными последними 15 тысячами эпизодов. Однако, как отмечено в подписи, я ожидаю, что есть подвох.

Эпсилон.

В настоящее время эпсилон настроен на снижение до 0 в середине процесса обучения, что происходит, когда надежность моей таблицы начинает стабилизироваться. Если я уменьшу свое обучение до 25 000 эпизодов здесь, я подозреваю, что это не будет очень похоже на то, как выглядел бы приведенный выше график, если бы мы просто обрезали конец, потому что эпсилон затухнет на полпути через ЭТОТ диапазон. . Давайте разберемся!

Как и ожидалось, затухание эпсилон было ключом к тому, как скоро мы получили стабильную таблицу Q. Наш окончательный результат после 25 тысяч эпизодов не так стабилен, как после 40 тысяч, но лично я бы назвал его достаточно надежным и последовательным.

Итак… мы можем спуститься ниже? 15к хватит?

Мы получаем довольно стабильные максимальные и средние награды, но минимальные по-прежнему слишком хаотичны для меня. Посмотрим, что у нас получится с 20к.

Интересно, что этот конкретный прогон среды привел к более низкому максимальному/среднему вознаграждению, чем предыдущие прогоны. Основываясь на полных рендерах, которые я наблюдал, я полагаю, что это потому, что начальные случайные значения в таблице Q подтолкнули ее к чуть менее чем оптимальному решению, которое все еще было достаточно оптимальным для обучения.

Следующая статья в этой серии будет посвящена моим попыткам улучшить эффективность и производительность этого приложения.

Что я выучил

Немного! Мне нравится тот факт, что Q-таблицы не являются «загадочными», как глубокие нейронные сети. Все это простой код и простая математика. Не требовалось высокоуровневых API для сложных библиотек. Не было скрытых слоев, которые требовали бы, чтобы вы просто верили, что они делают что-то полезное.

Как отмечалось выше, постепенно затухающий эпсилон был особенно полезен для меня при понимании обучения с подкреплением.

Я также узнал, что, по крайней мере, в этом типе примера генерировать сотни графиков с тысячами точек данных, застряв в GIL Python, неинтересно, но об этом в следующей записи.

Что осталось узнать

Часть, над которой я продолжаю бороться, касается вознаграждения за этот конкретный пример. Награда в среде Mountain Cart, насколько я понимаю, дается только при достижении флажка. Если это так, я не понимаю, что могло бы побуждать тележку двигаться к флагу в течение первых нескольких тысяч эпизодов. Если награда еще не достигнута, как таблица может знать, что нужно подстраиваться, чтобы максимизировать будущие шансы?

Это про "обратное распространение"? Это концепция, над которой я все еще работаю. Кажется, мне нужно глубже изучить это и систему вознаграждений окружающей среды, чтобы понять.