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

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

Me

Я веб-разработчик-самоучка и разработчик блокчейнов. Так что большая часть моего обучения проходит через Интернет через YouTube, Udemy, Udacity, Medium и т. Д. И я довольно любопытный человек, поэтому обычно изучаю другие области информатики, помимо основной области моей деятельности. Это любопытство привело к изучению некоторых основ машинного обучения. Но я в этом не профи :)

Машинное обучение и я

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

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

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

Итак, однажды появилась программа AWS Deepracer Scholarship от Udacity. Снова из любопытства проверил. Именно тогда я узнал об AWS Deepracer.

Deepracer, замечательное приложение машинного обучения

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

И все, что мне было нужно, это система с подключением к Интернету и учетной записью AWS. Квалификационная фаза стипендии длится 3 месяца, в течение которых лучшие гонщики получат полную стипендию для их программы машинного обучения Nanodegree. Так что если я попробую, то получу стипендию, и я также был готов участвовать в гонках, так как AWS проводит их ежегодно. Так что я подумал, что стоит учиться хотя бы для развлечения.

Стоимость Deepracer, и, поскольку я был новичком в этом, я получил кредит в размере 30 долларов на моем уровне бесплатного пользования AWS.

Путешествие начинается

1 месяц

Это был первый месяц для получения стипендии, и я был взволнован. Было с чем поэкспериментировать,

  • Пространство действий
  • Функция вознаграждения
  • Гиперпараметры

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

И никто не знал, почему произошла эта ошибка. Я боролся с этой неизвестной ошибкой более 2 недель (наконец, исправил ее через месяц с помощью поддержки AWS). Поэтому я решил создать новую учетную запись AWS и начать гонку с нее. На этот раз все прошло, и я успешно завершил круг со временем круга около 38 секунд. Я не изменил никаких значений по умолчанию, кроме области действий, где мы установили максимальную скорость и угол. Поэтому я увеличил максимальную скорость до 4 м / с, сохранив тот же угол (30 градусов).

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

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

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

Сообщество Deepracer и местное обучение

Я заглянул на веб-страницу AWS Deepracer и поискал любые другие варианты, которые я мог бы использовать. Потому что бесплатных кредитов недостаточно для трехмесячной стипендиальной гонки. И оттуда я узнал о замечательном сообществе Deepracing.io. Я присоединился к нему и узнал о местных тренировках, где мы можем обучить модель на месте и использовать ее для гонки. Это было для меня облегчением, так как теперь мне не нужно беспокоиться о том, что меня обвинят.

Итак, я начал настраивать свою машину для локального обучения, следуя этому хранилищу. Сначала я не мог понять, в чем дело. Я слепо следовал шагам, описанным в этом хранилище.

Локальное обучение, ошибки и исправления

Процесс настройки прошел не так, как ожидалось. У меня куча ошибок и проблем. Поэтому я обратился к сообществу и отладил каждую ошибку. И сообщество было настолько полезным, что все обучение на местах было бы невозможным без них. У меня был ряд ошибок, связанных с драйверами Nvidia, Docker, Gazebo и т. Д. На то, чтобы исправить все и фактически нажать кнопку запуска для обучения, потребовалось почти больше недели.

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

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

Анализ журнала

Это самая важная часть всего процесса Deepracer. В консоли мы ограничены только наградой | график прогресса, которого недостаточно, чтобы смотреть глубже.

И перед проведением анализа с использованием локальной настройки все, что я сделал, это проверил этот график и увидел

  • Совпадает ли прогресс с наградой.
  • Есть ли колебания.
  • Кажется ли награда логичной и т. Д.

Этот график по умолчанию по-прежнему хорош для анализа некоторых основных функций. Но для того, чтобы быть наверху, этого недостаточно. Нам нужно заглянуть глубже, чтобы понять, что именно не так с нашей стратегией. И здесь я использовал анализ логов из AWS Workshop. И это было полезно, но все же в некоторых шагах мне было неудобно. И снова член сообщества представил свой метод анализа журналов. С его помощью я смог проделать большую часть аналитической работы и, найдя некоторую комбинацию настроек (функция вознаграждения, пространство действий и гиперпараметры), я смог закончить круг 1-го месяца со временем круга 11,108 с. заняв 73-е место в общей таблице лидеров AWS из 1375 участников. И это даже позволило мне занять место 31 в таблице лидеров стипендий Udacity.

2 месяц

В этом месяце у меня время круга около 12 секунд, и я все еще работаю над его улучшением.

Будет обновлять этот раздел по окончании этого месяца (сентябрь).

Вещи, которые я узнал с моей точки зрения

Функция вознаграждения

  • Функция вознаграждения по умолчанию в консоли достаточно хороша, чтобы показать время круга, но этого недостаточно, чтобы быть на вершине.
  • Используйте различные возможные комбинации входных параметров и проверьте, что происходит. Проверить доступные параметры можно здесь.
  • Не используйте все параметры для функции вознаграждения. Используйте минимум. Чем больше количество параметров должна учитывать модель, тем выше будет сложность, которая, в свою очередь, приведет к неожиданному поведению и займет больше времени, чтобы сойтись, или она не будет сойтись вообще.
  • Функция вознаграждения на основе центральной линии создает шатание и снижает скорость модели. И чтобы этого не произошло, нужно постоянно следить за порогом рулевого управления.
  • Иногда на треке может быть крутой поворот, и в этом случае вашей модели необходимо сделать крутой поворот. А использование здесь жесткого порога рулевого управления затруднит поворот, но модель все равно научится это преодолевать. Просто мы можем избежать некоторых предсказуемых проблем.
  • Ваша модель отражает вашу функцию вознаграждения, поэтому логическая ошибка создаст путаницу, и вы можете по ошибке изменить гиперпараметры. Так что гиперпараметры - не всегда проблема.
  • Не используйте значение вознаграждения меньше 1e-3 (0,001), поскольку значение по умолчанию для отклонения от курса больше 0 и меньше 1e-3. Таким образом, использование значения вознаграждения, равного 0 или отрицательных значений, заставит модель считать, что отклонение от курса лучше, чем движение по правильному пути.

Пространство действий

  • Это так же важно, как и функция вознаграждения. Хорошее пространство для действий очень хорошо сочетается с функцией вознаграждения и является важной стратегией, о которой следует подумать.
  • Ни хорошее пространство действий с плохой функцией вознаграждения, ни плохое пространство действий с хорошей функцией вознаграждения не обеспечат вам лучших результатов. Оба должны идти рука об руку.
  • Максимально допустимая скорость в консоли составляет 8 м / с, но мы можем увеличить ее по своему усмотрению вручную, изменив метаданные модели в сегменте S3. Но чем больше скорость, тем больше нестабильности. Модель будет с трудом совершать поворот на более высоких скоростях. Так что используйте оптимальную скорость, сохраняя при этом большую ее часть извлекаемой функцией вознаграждения.
  • Углы так же важны, как и скорость. Модель снова изо всех сил пытается повернуть, если не предусмотрен необходимый угол. Но модель найдет способ изменить ситуацию, если ваша функция вознаграждения совместима. Например, для модели с осевой линией может потребоваться угол поворота 30 градусов для крутых поворотов. Но отсутствие угла при поощрении модели следовать за осевой линией приведет к неожиданному поведению.
  • Чем больше записей в пространстве действий, тем больше времени требуется модели, чтобы изучить правильную комбинацию скорости и угла. Так что время тренировки будет больше.

Гиперпараметры

  • Как правило, гиперпараметры по умолчанию в большинстве случаев подходят. Но мы все еще можем оптимизировать эту область для получения лучших результатов.
  • Пакет - это набор образцов данных, полученных с камеры модели. А размер пакета определяет, сколько данных выборки попадает в один пакет. Размер пакета 32 означает, что в каждом пакете будет 32 образца данных. В основном у меня работал размер партии 32 или 64.
  • Эпоха - это просто количество раз, когда пакет используется для обучения. Эпоха 3 означает, что пакет повторяется 3 раза, прежде чем перейти к следующему. И для небольших партий эпоха может быть небольшой, а для больших партий может иметь большее значение.
  • Скорость обучения важна из всех гиперпараметров. Скорость обучения по умолчанию 0,003 достаточно хороша, но мы все равно можем увеличить или уменьшить ее в зависимости от наших требований.

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

  • Коэффициент скидки - это фактор, который заставляет модель решать, как долго смотреть при рассмотрении вознаграждений. И я до сих пор не менял это значение по умолчанию.
  • Энтропия - это случайность. Это позволяет модели исследовать больше возможностей принятия различных случайных решений при движении по трассе.
  • Тип потерь - это функция потерь, используемая для некоторого обучения внутренней политике, и, согласно документации, потеря Хубера может использоваться для сходимости, в то время как MSE для более быстрого обучения. Итак, это основано на требовании.
  • Количество эпизодов - это количество попыток модели пройти трек от начала до конца / отклониться от маршрута. Отдельный эпизод идет от начала до конца (завершает трек) / выходит за рамки. И я пока не касался этого параметра.

Тренировочное время

  • Это определяет, подходит ли модель / сходится / перекрывается. Иногда модели может потребоваться более продолжительное время для обучения, в то время как некоторым может потребоваться немного времени.
  • Скорость обучения влияет на время обучения. Большая скорость обучения сделает обучение более быстрым, поэтому большое время обучения здесь приведет к переобучению модели. Аналогично для меньшей скорости обучения.
  • Пространство действия тоже влияет. Более широкому пространству действий нужно время, чтобы сойтись, в то время как узкому требуется меньше времени.

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

О местном обучении

  • Для локального обучения наиболее подходящей ОС является Linux (Ubuntu). Так что лучше использовать его, так как вы найдете хорошую поддержку.
  • Локальное обучение можно проводить только с центральным процессором, но на то, чтобы обучить что-то достойное, потребуется больше времени. Наличие графического процессора ускоряет процесс обучения и занимает меньше времени.
  • Рекомендуемый графический процессор - Nvidia, но это можно сделать и с AMD. И я использую Nvidia, поэтому не уверен в AMD. Но помощь с AMD можно найти здесь.
  • Локальное обучение также можно проводить с помощью AWS Cloud или Google Cloud. Этот репозиторий может помочь в обучении AWS Cloud. А для Google Cloud проверьте эту статью.

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

Что ж, это не лучшая статья, но тем не менее, я надеюсь, что там будет хотя бы одна полезная точка / ссылка, или вы сможете уйти с рук :) И я буду обновлять эту статью по мере продвижения или узнавать что-то новое.

Спасибо и удачных гонок!