Машинное Обучение Нейронных Сетей С Глубоким Подкреплением С Помощью Tensorflow.js: Хитрости

Обучение глубоких нейронных сетей с нуля — непростая задача.

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

Демонстрация того, как пройти простой лабиринт с помощью трюков.

Продолжительность обучения сети: 1 час 06 минут. Запись ускоряется в 8 раз.

Для каждой задачи нужно разработать свой набор приемов для ускорения обучения сети.

Поделюсь несколькими приемами, которые помогли мне обучить сеть гораздо быстрее.

Для теоретических знаний рекомендую зайти на канал Сим0нсейс .

А я расскажу вам о своих скромных успехах в обучении нейросетей.



Постановка задачи

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

У меня был выбор стратегии обучения нейросети.

Награда за успешное выполнение заданной задачи или награда по мере приближения к завершению данной задачи.

Я выбрал второй способ по двум причинам:

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

    Это сбросит веса всех нейронов на ноль, и сеть не сможет продолжить обучение.

  • Глубокие нейронные сети обладают огромной силой.

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

    Я пошел по пути наименьших затрат – разрабатывая трюки.



Архитектура нейронной сети

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

Архитектура решения задачи:

  • 3 входных нейрона – координаты агента и значение переданной ячейки (нормируем в диапазоне от 0 до 1).

  • 2 скрытых слоя по 256 и 128 нейронов (размерность слоев уменьшаем в сторону выхода сети).

  • 1 уровень случайного сброса нейронов для стабильности обучения сети.

  • 4 выходных нейрона – вероятности принятия решения о выборе стороны для следующего шага.

  • Функция активации нейрона: сигмовидная.

    Оптимизатор: Адам.

сигмоида дает на выходе 4 вероятности в диапазоне от 0 до 1, выбирая максимальную, получаем сторону для следующего шага: [jumpTop, jumpRight, jumpBottom, jumpLeft].



Разработка архитектуры

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

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

Недостаточное обучение происходит, когда модели недостаточно сложны.

Это когда в сети было мало обучающих данных для поиска обобщений.

Заключение: Чем больше слоев и нейронов, тем больше данных необходимо для обучения.



Игровая площадка



Машинное обучение нейронных сетей с глубоким подкреплением с помощью tensorflow.js: хитрости



Правила игры

0 — при входе в эту ячейку агент уничтожается.

1.44 — Ячейки, значения которых увеличиваются с каждым шагом.

Чем дальше агент пройдёт, тем больше вознаграждения он получит. 45 – Финиш.

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



Описание параметров

Агент имеет «антенны» в четырех направлениях от себя — они играют роль разведки окружающей среды и являются описанием координат агента и значения ячейки, на которой он стоит. Описание играет роль прогнозирования следующего направления движения агента.

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

Назначение нейронной сети: получать более высокие награды.

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



Трюки

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

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

Зацикливание агента

Во время обучения сеть начала принимать решения, делать ходы туда-сюда — проблема «использования».

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

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

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



Изучите или используйте

Для исследования путей вокруг текущей позиции агента использовался простой трюк: на каждом этапе 5 агентов будут «добровольными» исследователями.

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

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



Генетический алгоритм

Каждую эпоху на игровом поле участвуют 500 агентов.

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

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

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



Тренируйтесь с лучшими представителями поколения

В течение эпохи результаты прохождения лабиринта сохраняются для 500 агентов.

Когда последний агент уничтожен, выбираются 5 лучших агентов из 500 — которые прошли по лабиринту дальше всех.

Нейронная сеть будет обучена на лучших результатах эпохи.

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

Завершение

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



Материалы

Репозиторий кода Начать обучение в браузере Документация Tensorflow.js , где вы также можете найти дополнительные ресурсы для изучения.



Книги

  • Глубокое обучение.

    Погрузитесь в мир нейронных сетей С.

    Николенко, А.

    Кадурин, Е.

    Архангельская

  • Машинное обучение и TensorFlow Н.

    Шакла

  • Самообучающиеся системы С.

    И.

    Николенко, А.

    Л.

    Тулупьев

  • Обучение с подкреплением Р.

    С.

    Саттон, ?.

    Дж.

    Барто

  • Самоорганизующиеся карты Т.

    Кохонен



Спасибо за внимание!

УПД: Змея, обучающаяся с подкреплением Теги: #Машинное обучение #JavaScript #машинное обучение #обучение с подкреплением #tensorflow-js
Вместе с данным постом часто просматривают: