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

Я выбрал «Камень-ножницы-бумага», которые с этого момента будут называться RPS для краткости и лени из-за их простых правил игры и потому, что я знал, что обучение будет происходить с очень немногими примерами.

Для кого предназначен этот учебник: для всех, кто заинтересован в интуитивно понятном нематематическом руководстве по обучению с подкреплением (RL) и нейронным сетям. Они должны иметь базовые знания JavaScript и html, чтобы понимать код, но это не требуется для понимания концептуальных частей.

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

Интуитивно можно описать обучение с подкреплением следующим образом:

цикл: делайте что-то, основанное на убеждениях → получайте положительное или отрицательное вознаграждение → обновляйте убеждения на основе вознаграждения

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

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

Имея это в виду, руководство разбито на два раздела:

  1. script.js, который будет содержать код для выполнения цикла обучения с подкреплением.
  2. index.html, который позволит пользователю взаимодействовать с обучающим агентом и визуализировать обучение в реальном времени.

Начнем с script.js.

Цикл обучения начинается с «делать что-то, основываясь на убеждениях агента». В данном контексте это означает выбор хода в зависимости от хода пользователя.

Строки 6–12: На этапе оценки мы хотим увидеть, насколько хорошо агент усвоил информацию. Следовательно, выбранный ход имеет наибольшее значение. то есть ход, в котором агент больше всего уверен. Это делается с помощью нейронной сети.

В сторону: нейронные сети

Нейронная сеть - это функция, которую можно настраивать. Он принимает какой-то ввод, что-то делает с вводом и выводит какой-то результат.

В контексте RL и RPS нейронная сеть используется для представления убеждений агента. Вход в сеть - это ход пользователя, а выход - уверенность агента в выборе камня, ножницы и бумаги.

Как видно выше, ход пользователя - рок. Агент на 0,7 уверен, что он должен выбрать ножницы, 0,1 уверен в отношении камня и 0,2 уверен в отношении бумаги. Если мы находимся на этапе оценки, агент выберет ход, который имеет наибольшую ценность / наибольшую уверенность, то есть ножницы.

строки 8–12: преобразовать ход в формат, понятный нейронной сети, запросить у сети результат, а затем выбрать ход с наибольшим значением.

Строки 14–16: В фазе обучения вместо выбора хода на основе убеждений, ход выбирается случайным образом. Это позволяет агенту исследовать все ходы, а не застревать, всегда выбирая один и тот же ход.

Следующая фаза цикла подкрепления - получение вознаграждения от пользователя, которое будет обработано в index.html. После получения награды агент может обновить свои убеждения.

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

строки 10–12: Обновите убеждения агента с помощью награды. Это делается с помощью нейронной сети.

Кроме того: обновление нейронной сети

В этом сценарии пользователь выбрал камень, а агент выбрал ножницы. Пользователь дал награду -100, поскольку это неверный ход. Затем -100 добавляется к 0,7 и отправляется обратно в сеть. Это сообщит сети, что значение 0,7 было слишком высоким и что его следует уменьшить на некоторую величину. Этот процесс называется обратным распространением. Это акт обновления убеждений Агента. Агент должен быть менее уверен в выборе Ножниц в этом сценарии и более уверен в выборе Камня или Бумаги.

Строка 13: После обновления сети отображаются новые убеждения.

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

Строка 10: применяет функцию, которая позволяет суммировать выходные данные нейронной сети до 1. Это позволяет пользователю легче понять выходные данные нейронной сети.

строка 25: отображает набор данных в каждом div в index.html с помощью Plotly.js

Теперь у нас есть все части для цикла армирования и части визуализации. Далее мы опишем index.html. Это требуется для следующих действий:

  1. Разрешить пользователю выбрать ход.
  2. Пользователь должен иметь возможность сказать, был ли ход этого агента плохим или хорошим.
  3. Возможность переключения между обучающим агентом, выбирающим ходы случайным образом, и выбором ходов, в которых он наиболее уверен.
  4. Визуализировать убеждения агента, что означает показать, насколько уверен агент в выборе определенного хода, когда пользователь выбирает ход.

Ниже приводится отрывок из index.html, в котором отражены приведенные выше вопросы.

Строки 1–3: есть три кнопки, которые перемещает пользователь, при нажатии на которые вызывается функция chooseMove и передается значение кнопки. Это позволит агенту выбрать и вернуть ход.

Строки 5–6: Эти кнопки будут вызывать функцию обучения, когда пользователь определяет, был ли выбранный агентом ход хорошим или плохим. Это скажет агенту обновить свои убеждения положительно или отрицательно.

Строки 8–11: Переключает, изучает ли агент или оценивает то, что он узнал.

Строки 13–17: содержат блоки div, которые будут использоваться для построения верований агента для каждого хода.

На этом мы подошли к концу урока. Чтобы увидеть весь код, посетите этот репозиторий. Не стесняйтесь клонировать его и поэкспериментировать с кодом. После клонирования откройте index.html в браузере. Вы увидите установку, показанную на изображении ниже.

Верхние кнопки - это движения пользователя. После того, как вы выберете ход, агент выберет ход случайным образом. Затем пользователь может нажать кнопку «Положительное вознаграждение» или «Отрицательное вознаграждение», и его убеждения будут обновляться в режиме реального времени. Щелкните новый ход и повторите процесс. Как только вы будете удовлетворены изученным поведением, переключите переключатель с «Обучение» на «Оценивать», и тогда действия, выбранные агентом, будут теми, которые имеют наибольшее значение на каждой гистограмме.

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

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

Спасибо за чтение.