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

Прежде чем мы поговорим об алгоритме и агенте, давайте разберемся, как работает обучение с подкреплением.

Как работает обучение с подкреплением?

Обучение с подкреплением — это подкласс машинного обучения.

У нас будет среда и агент… круто

Агент предоставляет действия среде.

Среда возвращает состояние и вознаграждение для агента.

Цель агента – максимальное совокупное вознаграждение.

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

Это может работать с некоторыми простыми проблемами (с небольшим количеством данных в состоянии и небольшим количеством действий), но проблема начинается, когда у нас есть большее количество действий или бесконечное количество возможных действий („• ֊ •„)

Затем… это породило алгоритмы глубокого обучения с подкреплением!!

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

Для этой среды я использовал Deep Q-Learning, см. ниже архитектуру этого алгоритма.

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

Задача: сборщик бананов

Эта среда предоставляется Unity.

Unity является лидером в этой области, а их окружение есть и у других, подробнее о Unity смотрите здесь.

В видео ниже они объясняют, как работает эта среда.

Государственное пространство

Пространство состояний имеет 37 измерений и содержит скорость агента, а также основанное на лучах восприятие объектов вокруг направления агента вперед.

Действия

У нас есть 4 действия, которые может выполнить агент:

Награда

За сбор желтого банана предоставляется награда в размере +1, а за сбор синего банана — награда в размере -1.

Архитектура агента

Агент, созданный в этом проекте, состоит из агента, модели глубокого Q-Learning и модуля памяти памяти. .

Агент

У агента есть методы, взаимодействующие с окружением: step(), act(), learn() и некоторые другие.

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

Глубокое Q-обучение

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

Архитектура модели слишком проста, она имеет входной слой, скрытый слой, а затем выходной слой.

Эта нейронная сеть была разработана с https://pytorch.org/

Блок памяти

Для модуля памяти у нас есть два варианта, которые можно использовать:

  • Воспроизведение памяти

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

  • Приоритезированная память

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

Обучение и тестирование агента

Чтобы решить эту среду, агент должен получить средний балл +13.

Агент имеет множество гиперпараметров, некоторые из них используются в модели Deep Q-Learning, другие — в блоке памяти и т. д.

agent = Agent(state_size=37, action_size=4, seed=199, nb_hidden=(64, 64), learning_rate=0.001, memory_size=int(1e6), prioritized_memory=False, batch_size=64, gamma=0.9, tau=0.03, small_eps=0.03, update_every=4)

У нас есть два обученных агента (с ReplayMemory и PrioritizedMemory).

См. ниже результаты сеанса обучения для каждого агента.

С помощью Replay Memory агент решил эту среду с 389 эпизодами и потратил на это около 4 минут.

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

Мы протестируем обученный агент с приоритетной памятью в среде.

Вы можете найти код в моем репозитории GitHub.



Соображения

Мне было очень весело работать с этим алгоритмом, сначала он был сложным, но я думаю, что вам он тоже понравится.

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

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

Это все люди! Спасибо, что прочитали это, и я ценю, если вы можете поделиться своим комментарием со мной ниже.

использованная литература