Tensorflow.js только что был выпущен, и я только что посетил лекцию о его вариантах использования в браузере. У меня был опыт интенсивного использования Tensorflow в Python, но мне было любопытно, насколько сложно будет создать небольшой пример обучения с подкреплением в браузере, в котором вы могли бы увидеть, как агент учится с течением времени.
Я выбрал «Камень-ножницы-бумага», которые с этого момента будут называться RPS для краткости и лени из-за их простых правил игры и потому, что я знал, что обучение будет происходить с очень немногими примерами.
Для кого предназначен этот учебник: для всех, кто заинтересован в интуитивно понятном нематематическом руководстве по обучению с подкреплением (RL) и нейронным сетям. Они должны иметь базовые знания JavaScript и html, чтобы понимать код, но это не требуется для понимания концептуальных частей.
Цель: создать агента, способного изучать правила RPS с использованием обучения с подкреплением и нейронных сетей. Это означает, что мы хотим, чтобы агент мог выбирать камень, если пользователь выбирает ножницы.
Интуитивно можно описать обучение с подкреплением следующим образом:
цикл: делайте что-то, основанное на убеждениях → получайте положительное или отрицательное вознаграждение → обновляйте убеждения на основе вознаграждения
Поэтому, формулируя проблему обучения с подкреплением, вы должны помнить о приведенном выше цикле. Таким же образом мы можем разбить игру RPS.
- Агент имеет некоторые представления о том, какой ход он должен выбрать, когда пользователь выбирает ход. то есть агент думает, что ему следует выбрать камень, когда пользователь выбирает бумагу.
- Пользователь дает агенту положительное или отрицательное вознаграждение за сделанный им ход.
- Агент обновляет свое мнение о том, нужно ли было выбирать камень, когда Пользователь выбирал бумагу.
Имея это в виду, руководство разбито на два раздела:
- script.js, который будет содержать код для выполнения цикла обучения с подкреплением.
- 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. Это требуется для следующих действий:
- Разрешить пользователю выбрать ход.
- Пользователь должен иметь возможность сказать, был ли ход этого агента плохим или хорошим.
- Возможность переключения между обучающим агентом, выбирающим ходы случайным образом, и выбором ходов, в которых он наиболее уверен.
- Визуализировать убеждения агента, что означает показать, насколько уверен агент в выборе определенного хода, когда пользователь выбирает ход.
Ниже приводится отрывок из index.html, в котором отражены приведенные выше вопросы.
Строки 1–3: есть три кнопки, которые перемещает пользователь, при нажатии на которые вызывается функция chooseMove и передается значение кнопки. Это позволит агенту выбрать и вернуть ход.
Строки 5–6: Эти кнопки будут вызывать функцию обучения, когда пользователь определяет, был ли выбранный агентом ход хорошим или плохим. Это скажет агенту обновить свои убеждения положительно или отрицательно.
Строки 8–11: Переключает, изучает ли агент или оценивает то, что он узнал.
Строки 13–17: содержат блоки div, которые будут использоваться для построения верований агента для каждого хода.
На этом мы подошли к концу урока. Чтобы увидеть весь код, посетите этот репозиторий. Не стесняйтесь клонировать его и поэкспериментировать с кодом. После клонирования откройте index.html в браузере. Вы увидите установку, показанную на изображении ниже.
Верхние кнопки - это движения пользователя. После того, как вы выберете ход, агент выберет ход случайным образом. Затем пользователь может нажать кнопку «Положительное вознаграждение» или «Отрицательное вознаграждение», и его убеждения будут обновляться в режиме реального времени. Щелкните новый ход и повторите процесс. Как только вы будете удовлетворены изученным поведением, переключите переключатель с «Обучение» на «Оценивать», и тогда действия, выбранные агентом, будут теми, которые имеют наибольшее значение на каждой гистограмме.
Я надеюсь, что это руководство было полезным и дало интуитивное понимание того, как сформулировать проблему обучения с подкреплением и как нейронную сеть можно использовать для решения этой задачи.
Следите за обновлениями, чтобы увидеть дальнейшие руководства по основам нейронных сетей и обучения с подкреплением.
Спасибо за чтение.