Оценка и разведка

Добро пожаловать в первую публикацию из серии статей об обучении с подкреплением. Меня очень интересует область безопасности искусственного интеллекта, и я считаю, что очень важно хорошо понимать RL, среди прочего, для решения проблем в области безопасности искусственного интеллекта. Я использую невероятную работу Ричарда С. Саттона и Эндрю Дж. Барто «Обучение с подкреплением: введение» в качестве основного источника обучения. Чтобы действительно обосновать свое понимание, я буду писать программы и проводить эксперименты, где это необходимо, чтобы дополнить естественные программы, которые выполняются только в нашем уме.

Самый простой вариант k-arm bandit

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

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

Итак, вот чисто оценочная и неассоциативная версия проблемы k-arm bandit. Доступно k действий, и мы неоднократно выбираем одно из k действий. Каждое из этих действий связано с наградой, которая изначально неизвестна. Цель состоит в том, чтобы с течением времени максимизировать ожидаемое общее вознаграждение.

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

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

Методы значения действия

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

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

Однако в этом наивном жадном подходе есть проблема. Простой выбор действия с наивысшей ценностью на каждом этапе не исследует действия, оценки которых низки, но фактически лучше, чем другие действия. Итак, вместо того, чтобы быть абсолютно жадными, мы можем время от времени игнорировать значения действий и случайным образом выбирать одно из действий. Мы выбираем случайный выбор также при наличии нескольких действий с наибольшим значением. Говоря асимптотически, значения действия, вычисленные с помощью этого метода, сходятся к теоретическому оптимуму. Эти схемы агентов называются жадными и эпсилон-жадными соответственно, где эпсилон означает вероятность выбора случайного действия на каждом шаге.

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

Давайте посмотрим, как разные значения epsilon влияют на поведение агента и полученное вознаграждение. Различный эпсилон - единственное различие между агентами. Для каждого значения epsilon мы запускаем эксперимент 300 раз, и каждый запуск имеет дело с новым экземпляром среды и агента. Каждый прогон состоит из 1000 шагов, и мы отслеживаем среднее вознаграждение за шаг для каждого шага, и, наконец, мы берем среднее значение за 300 прогонов. Результаты показаны ниже:

Давайте сначала посмотрим на крайние значения эпсилон. Когда эпсилон равен 0, агент абсолютно жаден и на самом деле не имеет дело с неточными оценками ценности действия. Он будет использовать эти оценки для всего прогона, что приведет к низкому кумулятивному вознаграждению с течением времени. С другой стороны, когда эпсилон близок к 1, например 0,8, он предпочитает исследовать большую часть времени, улучшая оценки ценности действия, но не может извлечь выгоду из улучшения, поскольку он продолжает исследовать, а не использовать улучшающие ценности действия. . Слишком много эксплуатации и слишком много исследований привели к низкой общей награде.

Когда эпсилон является низким и отличным от нуля, например 0,1–0,3, агенту намного лучше, поскольку он улучшает оценки ценности действия в 10–30% случаев и использует улучшения в 70–90% случаев. Это приводит к высокой средней награде за шаг с течением времени, особенно когда количество шагов намного превышает количество действий.

Вы понимаете, почему эпсилон 0,1 в конечном итоге превосходит эпсилон 0,2? Когда эпсилон равен 0,2, агент пытается улучшить оценки в 20% случаев, поэтому он улучшается быстрее, но когда оценки достаточно точны, он все равно исследует 20% времени, что приводит к неоптимальному вознаграждению и едва ли улучшенным оценкам. С другой стороны, когда вы исследуете только 10% времени, вы улучшаете оценки медленно, но когда они становятся достаточно точными, вы используете их в 90% случаев. Таким образом, только 10% времени тратится на улучшение и без того точных оценок при получении неоптимальных вознаграждений.

Изюминка проблемы

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

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

Результаты очень похожи на результаты в случае фиксированного вознаграждения. Маленький и достаточный эпсилон в конечном итоге достигает точных значений действия и начинает использовать эти точные оценки в 90% случаев. А слишком много или совсем мало исследований приводит к плохим результатам по причинам, которые мы уже обсуждали выше.

Можем ли мы исследовать лучше?

На любом шаге отдачи, когда агент решает исследовать, агент выбирает действие наугад. Конечно, мы можем добиться большего успеха, чем случайное, если сможем выяснить, какие действия лучше улучшают оценки ценности действия. Фактически, в этом вся идея исследования - компенсировать неточности оценок ценности действия. Так что, если мы собираемся исследовать, это того стоит!

Мы экспериментируем с идеей UCB (расшифровывается как Upper Confidence Bound). Название не оправдывает простоту идеи. На любом заданном временном шаге мы учитываем три следующих фактора, чтобы оценить ценность действия: оценка ценности действия, количество раз, когда действие было выполнено, и общее количество действий, предпринятых на данный момент.

Мы объединяем эти факторы следующим образом, и политика UCB просто выбирает действие, которое максимизирует приведенное ниже выражение для данного действия. В выражении c - это уровень достоверности, который определяет степень исследования, и его нужно настраивать так же, как и epsilon.

А ниже - определение класса для агента UCB.

Результаты запусков агентов UCB с различными уровнями достоверности показаны ниже. При уровне достоверности 1 агент UCB работает так же хорошо, как агент Epsilon-Greedy с эпсилон 0,1. Как и в случае с агентом Epsilon-Greedy, где мы настраиваем эпсилон, параметр уровня достоверности необходимо соответствующим образом настраивать в различных средах.

Хотя теоретически агенты UCB работают лучше, на практике они могут работать не так хорошо, как агенты Epsilon-Greedy. Кроме того, когда среда имеет нестационарное распределение вознаграждений или большие пространства состояний и действий, UCB сталкивается с проблемами производительности. UCB просто не очень хорошо работает в общих условиях обучения с подкреплением, которые ближе к реальным сценариям.