Обучите лучшую модель менее чем за месяц

На начало августа 2022 года я еще ни разу не создавал модель машинного обучения. К концу месяца моя модель AWS DeepRacer вошла в 2% лучших в ежемесячном соревновании открытого дивизиона. Вот как я это сделал.

О DeepRacer

AWS DeepRacer — отличное введение в машинное обучение. Это сервис AWS, в котором пользователи создают модели усиления, чтобы научить виртуальный автомобиль перемещаться по виртуальным трассам (есть даже настоящий автомобиль в масштабе 1/18, на котором могут работать доступные для покупки модели!). Пользователи могут участвовать со своими моделями в соревнованиях с моделями людей. Об этом подробнее здесь".

Начиная

Если у вас еще нет учетной записи AWS, вам необходимо ее создать. Найдите DeepRacer и нажмите «Начать» в меню слева.

Настройка вашей первой модели

Дайте вашей модели классное имя, например my-model или model-one или naming-things-is-hard, и выберите трек (здесь подойдет значение по умолчанию). На следующей странице выберите time trial — гонки object avoidance и head-to-head добавляют много уровней сложности, которые вам не нужны для соревнований открытого дивизиона.

Я бы рекомендовал пока придерживаться алгоритма обучения PPO. SAC может дать вам более оптимизированную модель, но она работает только с непрерывным пространством действий — вариант на следующей странице. Если вам интересно, вы можете подробнее прочитать о различиях между этими типами алгоритмов обучения здесь.

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

Непрерывные и дискретные пространства действий

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

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

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

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

Написание функции вознаграждения

Взгляните на приведенные примеры функции вознаграждения. Я начал с модели follow the center line и сделал очень небольшую корректировку (просто чтобы почувствовать, что я что-то сделал) для первой тренировки. Я изменил максимальное время под stop conditions на 30 минут.

Ваша первая тренировка

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

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

Журналы оценки модели более легко читаемы — наиболее частым измерением, которое я просматривал, было количество раз, когда машина сбивалась с пути.

Ваша вторая, третья и N-я тренировки

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

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

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

Для остальных тренировок достаточно установить максимальное время в условиях остановки на 60 минут. Слишком короткий, и модель не успеет многому научиться; слишком долго, и вы рискуете переобучиться.

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

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

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

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

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

Основные выводы

Проверьте все с помощью функции вознаграждения — не просто следуйте тому, что я изложил в этой статье, потому что она не включает все различные итерации, которые я запускал. Тренируйте и клонируйте свои модели много. Измените тренировочную среду и параметры. Просмотрите свои журналы. Повторить.

Дальнейшее изучение

Модели, занимающие несколько первых мест, скорее всего, используют пространство непрерывного действия. Они также определенно используют путевые точки. Я не рассматривал их здесь, потому что это довольно сложно и не обязательно, если вы не хотите быть лучшим исполнителем. На Medium есть очень полезная статья о путевых точках здесь от ARCC.

Веселиться!

DeepRacer — это простой способ познакомиться с машинным обучением в увлекательной конкурентной среде. Однако это может быть дорого, поэтому убедитесь, что вы регулярно отслеживаете выставление счетов в своей учетной записи AWS. Удалите модели, которые вам больше не нужны, чтобы сократить расходы. Комментируйте с любыми вопросами или добавьте то, что сработало для вас!

На кону только ваше будущее, так что не волнуйтесь. Шучу, это просто игровое обучение. Наслаждаться!