Так выглядит движение на самоуправляемых автомобилях.

😮

Представьте себе жизнь в этом мире. Мир, в котором есть:

  • Нет пробок
  • Нет дорожно-транспортных происшествий
  • Нет времени на вождение

Как я указывал в своей последней статье Обучение с подкреплением (которую вы должны прочитать перед этим), это революционно по двум основным причинам:

  • Он будет спасать 1,25 МИЛЛИОНА жизней каждый год в результате дорожно-транспортных происшествий.
  • Это даст вам эквивалент 3 дополнительных года жизни, которые в настоящее время потрачены в пути.

И компании работают над этими машинами прямо сейчас! Такие компании, как Tesla (вы о них слышали), Google, Wayve и другие!

Эти автомобили будут оснащены обучением с подкреплением!

Опять же, если вы еще не читали мою последнюю статью, начните с нее. Для краткого обзора,

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

Более формально, агент в среде с определенным состоянием имеет набор действий, которые он может выполнять. После выполнения этих действий он получает награду , которая сообщает, насколько хорошо это действие было. Конечно, мы хотим получать самые высокие награды, соответствующие нашей цели. Уравнение Беллмана используется для расчета будущих вознаграждений, поскольку обычно представляет собой серию действий, которые приводят к положительному результату. В Q-Learning мы используем эти награды для обновления Q-значений, которые говорят нам, насколько хорошо / желательно определенное состояние. В Deep Q-Learning вместо хранения Q-значений мы вместо этого используем глубокую нейронную сеть, которая позволяет нам аппроксимировать Q-значения, учитывая наше состояние в качестве входных данных. В следующий раз, когда наш агент будет перемещаться по нашей среде, он будет использовать Deep Q-Network для генерации Q-значений для каждого действия и предпринять действие с наивысшим Q-значением.

Вау, это много. Если вы этого не понимаете, ничего страшного. Пока достаточно интуитивного понимания. Просто сравните обучение с подкреплением с тем, как мы учимся:

Мы предпринимаем действия, которые приводят либо к положительным, либо к отрицательным последствиям. Если результат положительный, нас побуждают предпринять это действие снова, и наоборот. E к Z!

Итак, вот мое воссоздание виртуального самоуправляемого автомобиля!

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

1. Настройка среды

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

Я использовал пакет Python под названием Kivy, чтобы создать для меня свой пользовательский интерфейс.

Начнем с пустой карты. Цель «машины» - перемещаться вперед и назад из левого верхнего угла в правый нижний угол карты.

Однако я, как пользователь, могу рисовать «песок» на карте. Если машина когда-либо врезается в песок, это считается автомобильной аварией!

Мы собираемся использовать обучение с подкреплением (RL), в частности Deep Q-Learning, чтобы создать наш беспилотный автомобиль. Как мы узнали из моей последней статьи Обучение с подкреплением, все алгоритмы RL имеют 3 ключевых элемента: состояние, действия и награды. Вот как эти элементы определены в моей программе:

Состояние

Состояние машины состоит из 5 переменных:

  • Датчик Красный
  • Датчик Желтый
  • Датчик Синий
  • Ориентация
  • -Ориентация

Первые три поступают от 3 датчиков на передней панели автомобиля. Каждый датчик (красный, желтый, синий) определяет, сколько пикселей песка находится в радиусе 10 пикселей от него. Логически это означало бы, что если бы слева от машины была стена из песка, синий датчик обнаружил бы больше песка, чем желтый датчик. Это позволяет автомобилю определять, где находится песок и, следовательно, в каком направлении двигаться. Последние 2 переменные представляют ориентацию автомобиля. Он измеряется в градусах, где 0 градусов указывает прямо вверх. Также добавлен отрицательный аспект ориентации, поскольку он призван улучшить производительность при настройке.

Действия

Возможны три действия:

  • Поверните на 20 градусов по часовой стрелке
  • Поверните на 20 градусов против часовой стрелки
  • Не включайте

Награды

К основным наградам относятся:

  • -5: Если машина въезжает в песок
  • -0.1: Если машина удалялась дальше от цели
  • 0.1: Если машина приблизилась к цели

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

2. Выбор модели

Я снова решил использовать обучение с подкреплением, в частности Deep Q-Learning. Это архитектура моей нейронной сети:

  • Входной уровень: 5 узлов (по одному на каждый вход состояния)
  • Скрытый слой: 30 узлов
  • Выходной уровень: 3 узла (по одному на каждое действие)
  • Функции активации: ReLU
  • Оптимизатор: Adam Optimizer

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

3. Обучение

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

4. Оценка и настройка параметров

Это график вознаграждений, полученных агентом на каждом временном шаге. На этом графике агент получает вознаграждение +1 каждый раз, когда он приближается к своей цели, и вознаграждение -1 в противном случае. Это было изменено с +0,1 и -0,1. После 1500 временных шагов тренировка вышла на плато.

Вот график, созданный ранее. Это было, когда агенту давали +0,1 и -0,1 награды за приближение и удаление от цели соответственно. Как видите, вознаграждение стабилизировалось после 2000 шагов вместо 1500 шагов на этот раз. Оба этих графика заняли в среднем 10 различных периодов обучения. Результаты показывают, что награды +1 и -1 приводят к тому, что агент тренировался быстрее, чем награды +0,1 и -0,1.

В модель было внесено много других изменений. Вот несколько:

  • Температура была отрегулирована
  • Дополнительные награды (например, агент не выбрал оптимальный маршрут. Была добавлена ​​награда, которая стимулировала уменьшение количества шагов для достижения цели по сравнению с последним кругом).
  • Различная архитектура нейронной сети (например, слои, количество узлов, оптимизаторы, функции активации)

5. Прогноз!

Теперь с нашей оптимизированной моделью. Наша машина может ездить без столкновений!

Вот репозиторий GitHub со всем кодом, если вы хотите его загрузить и протестировать: https://github.com/Jerry2001Qu/Self-Driving-Car

(Благодарим https://www.udemy.com/course/artificial-intelligence-az/ за код OG и великолепный курс.)

«Первый шаг - установить, что что-то возможно; тогда появится вероятность ». - Илон Маск

Здесь я разработал основные концепции беспилотного автомобиля с приводом от RL. Реальные автомобили будет намного сложнее запрограммировать, но я уверен, что мы доберемся до цели. Помните, я работаю над ноутбуком за 600 долларов, вычислительная мощность которого в миллионы раз меньше, чем у таких компаний, как Tesla. Машинное обучение (ML) - это область, которой я очень увлечен из-за огромных возможностей решать проблемы с помощью ML. От лечения болезней до вождения автомобилей - машинное обучение станет рынком на триллион долларов. Не только это, но и ресурсы машинного обучения растут в геометрической прогрессии вместе с отраслью. Сегодня любой желающий может узнать об этой области, возьмите это у 17-летнего. Нам нужно больше умных людей, работающих над этими проблемами машинного обучения, и если я смогу это сделать, то сможете и вы. Если вам нужно какое-либо подтверждение того, почему машинное обучение важно, просто подумайте о том, как однажды это будет настоящим:

Ключевые выводы:

  • Обучение с подкреплением можно использовать для создания самоуправляемых автомобилей.
  • Есть 5 основных шагов: среда, выбор модели, обучение, оценка и настройка параметров и прогнозирование.
  • Кто угодно может создать алгоритм машинного обучения. Это просто требует обязательств!

Если вам понравилась эта статья:

  • подписывайтесь на мой канал, LinkedIn и Twitter, чтобы быть в курсе моего прогресса!
  • напиши мне письмо ([email protected]), я отвечу 😉