Представьте себя родителем, проводящим своего ребенка через жизненные трудности и наблюдающим его невероятный рост. А теперь представьте себе такое же путешествие в области искусственного интеллекта через обучение с подкреплением. Как и при воспитании ребенка, агент ИИ учится методом проб и ошибок, что в конечном итоге приводит к умопомрачительным результатам.
В этой статье мы узнаем о функциях вознаграждения AWS DeepRacer и о том, как оно работает на самом деле, а также развеем некоторые мифы и заблуждения о функциях вознаграждения. Мы расскажем, как новички или даже эксперты в AWS DeepRacer не могут определить, как на самом деле работает их функция вознаграждения. Мы также проверим некоторые новые техники, которые, по крайней мере, я лично больше нигде не видел. Давайте углубимся в это:
Как работает функция вознаграждения?
Функция вознаграждения в AWS DeepRacer аналогична угощению щенка, если он правильно выполняет команду. Щенок усваивает, что когда он слушается, он получает лакомство. Точно так же функция вознаграждения помогает научить автомобиль DeepRacer управлять гоночной трассой. Автомобиль получает очки (или угощения), когда он правильно выполняет определенные действия, например, остается на трассе или поддерживает определенную скорость. Эти очки мотивируют машину продолжать хорошо работать и в конечном итоге научиться проходить гоночную трассу с максимально возможной наградой.
Скорость ничего не делала!
Обратите внимание, что мы начнем с основных примеров и постепенно перейдем к сложным задачам. Многие новички склонны отдавать предпочтение параметру скорости при разработке функции вознаграждения, предполагая, что, предоставляя лакомства (вознаграждения) за скорость, DeepRacer просто будет двигаться быстрее. Однако это распространенное заблуждение, которое часто приводит к неожиданным результатам. Допустим, вы пишете функцию вознаграждения:
Теперь вы сосредоточились на скорости как на основном показателе производительности, обеспечив максимальное вознаграждение за скорость. Однако вскоре вы поймете, что скорость — это только одна часть головоломки. При разработке функции вознаграждения может возникнуть соблазн начислить баллы за высокую скорость и не сбиться с пути. Но будьте осторожны, эта стратегия может иметь неприятные последствия, поскольку DeepRacer умело замедляется, чтобы набрать больше очков, увеличивая количество шагов за круг. Позвольте мне сделать это проще;
Предположим, что DeepRacer завершает круг всего за 100 шагов с вознагражденной скоростью (>1,6), он зарабатывает 2000 баллов за свой темп и, скажем, дополнительные 200 за то, что не сбивается с курса, что в сумме дает 2200 баллов. Вам может показаться, что вы все поняли, но затем происходит неожиданный поворот.
Когда ваш DeepRacer делает более медленный подход, двигаясь со скоростью в три раза ниже желаемой, он все равно завершает круг, но за 300 шагов. Удивительно, но он набирает поразительные 3000 баллов! Средняя награда за круг увеличивается, непреднамеренно заставляя DeepRacer предпочитать более медленный темп. Таким образом, чем медленнее будет DeepRacer, тем большую награду он получит в данном случае, хотя мы давали двойную награду за достижение максимальной скорости. Давайте посмотрим на этот график:
Мы ясно видим, что с уменьшением скорости вознаграждение увеличивается, и, наконец, модель учится двигаться с меньшей скоростью. Этот увлекательный поворот событий предлагает нам копнуть глубже, раскрывая секреты обучения с подкреплением таким образом, чтобы все были вовлечены, сохраняя при этом техническую глубину для более опытных энтузиастов.
Мы обсудим несколько подходов и методов решения этой проблемы, но самым простым из них является рассмотрение функции вознаграждения как математического уравнения и предоставление взвешенных вознаграждений по этим параметрам. Таким образом, вы можете распределять вознаграждения более контролируемым образом.
Здесь значению скорости придается в четыре раза большее значение, чем расстоянию от центра. Это означает, что DeepRacer будет отдавать приоритет скорости в качестве своей основной цели, а также стараться оставаться ближе к центру трассы, чтобы достичь наилучших возможных результатов и получить самую высокую награду. Однако важно понимать, что это не «функция окончательного вознаграждения», поскольку расчет вознаграждения включает в себя различные технические аспекты и параметры. Тем не менее, этот пример прекрасно иллюстрирует, как можно эффективно использовать взвешенные параметры для расчета вознаграждений в DeepRacer. Чтобы оптимизировать наш процесс принятия решений и подходы, мы углубимся в еще более продвинутые методы. К концу у нас будет достаточно знаний, чтобы смешать все эти методы и самостоятельно создать окончательную, наиболее оптимизированную функцию вознаграждения.
Не заботиться только о текущем шаге
Я заметил, что многие новички, использующие AWS, совершают распространенную ошибку. Как правило, их внимание сосредоточено исключительно на текущем шаге, оценивая и вознаграждая скорость, направление, положение и другие параметры настоящего момента. Однако у вас есть возможность сделать гораздо больше, чем это. Выполняя операции на основе прошлого, вы получаете возможность принимать еще более обоснованные решения. Да, это может показаться удивительным, но вы действительно можете отслеживать предыдущие шаги и использовать эту информацию для управления своими будущими действиями. Воспользовавшись этой стратегией, вы сможете оптимизировать свою работу и потенциально добиться еще большего успеха. например:
в этой функции вознаграждения, сохраняя скорость предыдущего шага, вы можете вознаградить свой DeepRacer за увеличение его скорости по сравнению с предыдущим шагом. Это означает, что ваш DeepRacer всегда будет чувствовать мотивацию, чтобы выйти за пределы своих возможностей и двигаться быстрее. Но это еще не все — вы можете делать с этим много интересных вещей, например, вы можете рассчитать его ускорение и определить, есть ли в нем какие-либо внезапные изменения по скорости изменения ускорения, и если они есть, это означает, что ваш DeepRacer быть отрывистым, и вы можете наказать его соответствующим образом. Имея доступ к информации из прошлого, вы можете научить своего DeepRacer принимать более разумные решения и избегать повторения одних и тех же ошибок. Поэтому важно использовать объектно-ориентированный подход и сохранять свое предыдущее состояние. Таким образом, вы сможете разработать более эффективный и успешный DeepRacer, способный покорить любую трассу!
Заглянуть в будущее?
Здесь возникает вопрос: пока мы вычисляем наше предыдущее состояние, можем ли мы также оптимизировать наше будущее решение? и ответ - да, вычисляя передние путевые точки и вычисляя их положение (x, y), мы можем найти наш оптимальный путь в будущем, а не следовать по центру пути. Аналогичная концепция используется в алгоритме k-1999 для F1-гонок. Следовые линии k1999 для AWS deep-racer можно найти здесь:
Без сомнения, это может привести к оптимальным гоночным линиям, но это похоже на жесткое программирование машины для следования определенному набору точек, что не только противоречит всей концепции машинного обучения, но и имеет неприятные последствия в реальная установка. Таким образом, более динамичный подход будет динамично смотреть в будущее на каждом этапе.
Здесь мы будем вычислять наши будущие путевые точки и вычислять оптимальный путь на каждом этапе. Этот оптимальный путь можно вычислить следующим образом:
Теперь вы можете выполнить несколько операций с этим оптимальным путем, например:
- Выравнивание угла поворота руля с оптимальным направлением
- Контроль скорости на основе кривизны пути
Прежде чем обсуждать эти операции одну за другой, позвольте мне сказать вам, что это будет очень интересно и технически технически.
Выравнивание угла поворота руля с оптимальным направлением
Теперь здесь оптимальный угол курса может быть рассчитан по углу третьей путевой точки (наш пункт назначения) от текущих координат, как показано выше, а затем косинус разницы курса дается в качестве вознаграждения за выравнивание, которое будет варьироваться от (-1 до 1, максимальное значение при cos(0) = 1), которое будет дополнительно уточнено взвешенной суммой всех вознаграждений в заявлении о возврате. Таким образом, вы можете максимизировать вознаграждение за оптимальное направление движения в соответствии с динамическим путем, который вы только что рассчитали для будущих шагов.
Контроль скорости на основе кривизны пути
Теперь здесь оптимальная скорость рассчитывается на основе кривизны трассы, кривизна рассчитывается путем вычитания двух линий, образованных следующими тремя путевыми точками, как показано на изображении выше. Тогда оптимальная скорость рассчитывается по этому уравнению:
что даст значение в диапазоне (1,4) в зависимости от кривизны. Непрерывная функция приведет к максимальной скорости с минимальной кривизной и минимальной скорости к максимальной кривизне, что приведет к следующему графику:
Затем будет рассчитана разница скоростей, которая будет передана через экспоненциальную функцию, заданную как:
что приведет к следующему
что ясно показывает, что при минимальной разнице в скорости это приведет к максимальной награде и быстро упадет, если разница в скорости увеличится. Таким образом, вы можете максимизировать вознаграждение за оптимальную скорость, вознаграждение за скорость также можно дополнительно настроить, используя взвешенный результат в заявлении о возврате.
Еще несколько советов и приемов в сочетании с методами
Теперь, когда у нас есть знание ПРОШЛОГО, доступ к БУДУЩЕМУ, мы можем управлять функцией вознаграждения с помощью операторов взвешенного возврата, мы можем комбинировать эти методы, чтобы разработать умопомрачительную функцию вознаграждения, например, если мы сохраним угол поворота с помощью объектно-ориентированного описанный ранее подход, мы можем сравнить текущий угол поворота и рассчитать сглаженность угла поворота, например:
Надеюсь, вам понравилась статья. Есть еще много вещей, которые вы можете сделать. Моя цель в этой статье заключалась в том, чтобы дать вам некоторое представление о методах, которые я использовал, которые очень помогли мне как в виртуальных, так и в реальных сценариях. чтобы узнать больше об обновлениях и хитростях, следите за автором на GitHub и отмечайте этот репозиторий звездочкой.