Эта статья была впервые опубликована вУокер ИИ
введение
В зависимости от различий в обучении агентов его можно разделить на метод, основанный на ценностях, метод, основанный на политике, и метод актера-критика. Q-обучение, Saras и DQN, которые мы представили ранее, — это обучение, основанное на ценностях.Хотя этот метод обучения с подкреплением широко используется во многих областях, его ограничения также очевидны. Во-первых, эти алгоритмы в основном имеют дело с дискретными действиями и строят простую Q-таблицу, но трудно иметь дело с непрерывными действиями, не говоря уже о построении огромной Q-таблицы; во-вторых, основанный на значениях метод использует функцию значения для аппроксимации Значение Q, хотя его можно сравнить Эффективно решить проблему непрерывного пространства состояний, но действие по-прежнему только дискретно, и стратегия выбора действия не изменится Обычно это детерминированная стратегия, но оптимальная стратегия, требуемая некоторыми практическими Проблемы не детерминированы Это случайная стратегия, как камень-ножницы-бумага, если вы будете следовать детерминированной стратегии, чтобы нанести удар, то, когда другие поймают шаблон, вы проиграете. Поэтому нам необходимо ввести новый метод для решения вышеуказанных проблем, например, метод градиента политики.
1. Монте-Карло
Прежде чем объяснять алгоритм градиента политики (Policy Gradient, называемый PG), вы можете сначала понять алгоритм Монте-Карло, сначала давайте посмотрим на небольшую историю:
В эпоху Наруто, чтобы улучшить свои способности, Наруто, который все еще был под властью ниндзя, взял квест уровня C в Центре квестов ниндзя Конохи.Выполняя квест, он внезапно попал в ловушку иллюзии человека в маске. . Лабиринтоподобная иллюзия (выход - дверь света, что можно понимать как дверь со светом), Наруто не может выбраться, как бы он ни ходил.Хотя выходов в этой иллюзии много, только ближайший выход может пройти через дверь света, чтобы выйти из иллюзии Другое Хотя на выходе есть дверь света, пройти через нее трудно. Возможно, что Наруто также весьма искушен в математике.Он использовал запрещенную технику многотеневых аватаров, которую он научился, чтобы разделить множество аватаров (при условии, что достаточно, не спрашивайте, достаточно ли чакры Наруто, в критические моменты). позаимствовать его у девятихвостого в теле), а затем стал объяснять задание каждому клону:
Примечание. Все аватары начинают с начальной точки, и каждый шаг, который они делают, будет получать соответствующую добавку чакры или уменьшение энергии (награды, положительные и отрицательные). И выбор каждого клона, стоящего перед развилкой, — средний выбор. Фактор скидки для вознаграждений игнорируется.
- Каждому из вас нужно найти выход, далеко или близко, и каждый шаг на пути должен записывать пройденный вами путь и количество полученной чакры на свитке;
- Запишите общее количество чакры, полученной этим путем, и вернитесь к исходной точке исходного пути;
- Усредните общее количество наград, полученных каждым из вас, и сообщите мне окончательный результат как значение для текущей отправной точки.
- Затем измените начальную точку на начальную точку, которую можно выбрать на следующем шаге, и повторите шаги 1–3.
После того, как Наруто получил значения всех пересечений, он выбирал пересечение с наибольшим значением каждый раз, когда сталкивался с развилкой, и, наконец, Наруто успешно вышел из иллюзии.
Вышеприведенная история на самом деле похожа на алгоритм Монте-Карло, а именно:
Алгоритм Монте-Карло — это метод, основанный на выборке, с заданной политикой, пусть агент взаимодействует с окружающей средой, и вы получите множество траекторий. Каждая траектория имеет соответствующую доходность.Мы усредняем доходность каждой траектории, чтобы узнать значение соответствующего состояния при определенной стратегии. Это предложение можно разбить, чтобы оно соответствовало приведенной выше истории:
- Монте-Карло — метод, основанный на выборке. (В истории достаточно аватаров Наруто)
- Должна быть дана стратегия(соответствует тому, что каждый аватар сталкивается с развилкой в истории, это средний выбор)
- Агент взаимодействует с окружающей средой и получает множество траекторий. (Соответственно процессу поиска выхода в фантазии для каждого аватара в истории, каждому аватару соответствует траектория)
- Каждая траектория имеет соответствующую награду. (соответствует общей награде, полученной каждым клоном в истории)
- Значение соответствующего состояния получается путем усреднения результатов каждой траектории. (Соответственно Наруто, общая награда за каждого клона будет усреднена)
2. Алгоритм градиента политики
2.1 Введение
В обучении с подкреплением есть три компонента: актер, среда и функция вознаграждения. Окружающая среда и функция вознаграждения не находятся под нашим контролем и даются заранее, до того, как мы начинаем учиться. В акторе будет стратегия, которая используется для определения действий актора. Стратегия заключается в том, что при внешнем вводе он выводит действие, которое должен теперь выполнить актор. Единственное, что мы можем сделать, это настроить стратегию внутри актера так, чтобы актер мог получить максимальное вознаграждение.
Когда мы объединяем глубокое обучение с обучением с подкреплением, политика π представляет собой сеть, которая используетвыражатьпараметр. В приведенном выше примере иллюзии входными данными является бифуркация, в которой находится текущий клон.Предполагая, что вы можете идти вверх, вниз и влево, после прохождения сети политик, выходными данными является вероятность того, что можно выбрать три действия. . Затем актор решает, какое действие предпринять, основываясь на этом распределении вероятностей, и действия, предпринимаемые актором, также различаются в зависимости от распределения вероятностей. Проще говоря, сетевые выходные данные политики представляют собой распределение вероятностей, и действующее лицо производит выборку из этого распределения, чтобы решить, какое действие на самом деле предпринять.
По сути, PG — это алгоритм, сочетающий Монте-Карло и нейронную сеть.PG больше не выводит значение Q, как Q-learning и DQN, а напрямую выводит вероятность того, что текущее состояние может выполнять все действия в непрерывном интервале.
В предыдущем объяснении метода, основанного на значениях, мы использовали аппроксимацию функции значения, чтобы превратить проблему обновления таблицы Q в проблему подбора функции, и аналогичные состояния получают аналогичные выходные действия, как показано в следующей формуле, путем обновления параметра w чтобы функция f аппроксимировала оптимальное значение Q.
В алгоритме PG, поскольку стратегия является вероятностной и не может быть непосредственно использована для итерации, мы берем аналогичную идею и преобразовываем ее в функциональную форму, как показано в следующей формуле.На данный момент наша цель состоит в том, чтобы использоватьФункция параметров аппроксимирует политику, обновляя параметры, аппроксимируя оптимальную стратегию.
Теперь, когда у нас есть функция стратегии, наша цель, конечно, оптимизировать ее, так как же нам узнать плюсы и минусы оптимизированной функции стратегии? Каждый обязательно задумается о необходимости целевой функции, которую можно оптимизировать, мы позволим этой целевой функции оптимизироваться в сторону максимального значения, ее основная функция — измерение качества стратегии.
2.2 Содержание алгоритма
Прежде всего, мы можем думать об окружающей среде как о функции.Эта функция в начале выдает состояние.Если это состояние является экраном игры, то актер видит экран игры.Позже выберитеэто действие. окружающая обстановкакак вход, а затем выплюнуть, то есть выплюнуть новый игровой экран. Актеры видят новые кадры игрового процесса и совершают новые действия.. смотреть на окружающую среду, то выплюнуть. Этот процесс продолжается до тех пор, пока среда не почувствует, что он должен остановиться.
В игре действующее лицо в конечном итоге завершается непрерывным взаимодействием с окружающей средой.Согласно приведенному выше описанию может быть получена траектория, которая выражается как,вгосударство,экспресс действие,,Указывает, что актер выбирает действие 1, когда находится в состоянии 1, и так далее. как показано в следующей формуле.
Затем предположим, что сетевые параметры политики текущего актора равны, мы можем рассчитать вероятность того, что эта траектория произойдет. Это зависит от двух частей: действия среды и действия агента, как показано в следующей формуле, оно представляет собой вероятность траектории после ее создания.
Действие среды относится к тому, как выглядят параметры или правила внутри функции среды, оно неуправляемо и прописано заранее.представляет окружающую среду. Действие агента относится к способности контролировать себя,Представляет агента в заданном состоянии, какие действия предпримет актербудет зависеть от параметров актера, так что эта часть находится под контролем актера. Поскольку действия акторов различны, для каждой одной и той же траектории она будет иметь разную вероятность появления.
Помимо окружения и актеров, есть еще и функция вознаграждения. дать ему вход,, который говорит вам получить. дай это,, который говорит вам получить. положить всеСкладываем все это и получаем, представляющий некоторую траекториюнаграда.
В определенной игре мы получим. Путем настройки параметров внутри актера, так чтоЧем больше значение , тем лучше, что является целью оптимизации алгоритма PG. Но на самом деле вознаграждение — это не просто скаляр, вознаграждениеявляется случайной величиной, потому что действия, которые будет выполнять актор в одном и том же состоянии, случайны. Какое действие предпримет среда при том же наблюдении и какое наблюдение будет сгенерировано, также является случайным, поэтомуявляется случайной величиной. Тогда мы можем вычислить, учитывая определенный набор параметровВ случае полученияКаково ожидаемое значение . Ожидаемое значение определяется по формуле ниже.
Нам нужно исчерпать все возможные траектории, каждый трекоба имеют вероятность и общее вознаграждение. также может распространяться изобразец трассировки,рассчитатьОжидаемая ценность — это ожидаемое вознаграждение. Все, что нам нужно сделать, это максимизировать ожидаемую награду.
Как максимизировать ожидаемое вознаграждение?Поскольку это максимизация, мы можем использовать градиентное восхождение для обновления параметров, чтобы максимизировать ожидаемое вознаграждение. правильноВозьмите градиент, где толькоэто сСвязанный. Полная формула градиента политики показана на рисунке ниже.
Рисунок 1. Формула градиента политикиСреди них киспользовать,получитьэтоВы можете понять это как фиксированное преобразование формулы, просто запомните это.
Как показано в следующей формуле, дляподводить итоги,иЭти два используютвзвешенный, так как использованиеВзвешенные и их можно записать в желаемом виде. это ты изВыборка из этой раздачивыходи и считайездить на, принять его во всех возможныхВ общем, это ожидаемое значение.
На самом деле нет никакого способа вычислить это ожидаемое значение, поэтому мы используем выборку для выборки.Ручка, чтобы вычислить эти значения для каждого штриха, сложите их все, и вы можете получить градиент. Мы можем обновить параметры, а затем мы можем обновить агент, как показано в следующей формуле.
Конкретный процесс расчета показан в следующей формуле
Уведомление,ииз окружающей среды,
это от агента.иопределяется окружающей средой, поэтому снеактуально, так
Мы можем интуитивно понять формулу, окончательно выведенную на рисунке 1, то есть в данных, которые мы выбирали, выбирали в определенном состоянии.выполнить действие,иэто на всей траекторииПара состояния и действия в . Предположим, мывоплощать в жизнь, и наконец нашелНаграда положительная, увеличим вероятность этого предмета, увеличимвоплощать в жизньВероятность. Наоборот, ввоплощать в жизньприведет кНаграда становится отрицательной, мы должны уменьшить вероятность этого срока.
Чтобы рассчитать приведенную выше формулу, мы должны сначала собрать большое количествоипара, но и знать этииСколько вознаграждения вы получите, когда взаимодействуете с окружающей средой. Конкретно нам нужно взять агента, и его параметры, чтобы взаимодействовать с окружающей средой, после взаимодействия вы получите много игровых рекордов.
Мы можем подставить выборочные данные в формулу градиента и вычислить градиент. То есть каждый из выборочных данныхиБерём пару, вычисляем её логарифмическую вероятность, то есть вычисляем логарифмическую вероятность совершения определённого действия в определённом состоянии, и берём для него градиент, который будет умножаться на вес, а вес есть награда игра. С ними модель будет обновлена.
Рисунок 2. Алгоритм градиента политикиПосле обновления модели нам нужно снова собрать данные и обновить модель. Обратите внимание, что данные, выбранные градиентом общей политики, будут использоваться только один раз. Данные выбираются, а затем используются для обновления параметров, данные теряются. Затем передискретизируйте данные, чтобы обновить параметры. Однако для этого также есть обходной путь, и далее мы расскажем, как его решить.
2.3 Навыки
(1) Увеличьте базовый уровень
- Во многих играх награда всегда положительна или равна нулю. Поскольку сумма вероятностей совершения действия равна 1, когда все вознаграждения положительны, может иметь место нормализация,(вес) Чем больше увеличение, тем большеМаленький, после нормализации падает. Например, в следующем случае предположим, что в определенном состоянии есть три действия, а именно,,, все награды положительные. По формуле, мы хотим, чтобы вероятности и логарифмические вероятности этих трех действий были высокими, но веса перед нимиОно разное, есть большие и маленькие, поэтому вес тяжелый, прибавка чуть больше, вес маленький, прибавка меньше, а так как логарифмическая вероятность есть вероятность, то сумма трех действий должна быть 0, то после завершения возврата После трансформации поднимутся те, кто поднимется больше, а те, кто поднимется меньше, упадут.
- выборка должна быть ожидаемой для всех возможныхиПары суммируются. Но при обучении отбирается лишь небольшое количество образцов.иВерно. Некоторые действия никогда не могут быть сэмплированы. Также предположим, что действия, которые могут быть выполнены в определенном состоянии,,,, но вы можете только пробовать действияили просто пример действия, действие не сэмплируется. Награды за все действия теперь положительные, по формуле, каждая из его вероятностей должна возрастать. так какЕсли он не выбран, если вероятность других действий увеличивается,вероятность снижается. ноНе обязательно плохой ход, он просто не сэмплирован. Но вероятность упала, что явно проблематично, поэтому мы хотим, чтобы награда не всегда была положительной.
Чтобы решить проблему, заключающуюся в том, что награда всегда положительна, награду можно вычесть на единицу., как показано в следующей формуле.
в,называется базовым, за вычетомПозже вы можете позволитьВ этом есть положительные и отрицательные стороны. Таким образом, если общая полученная наградабольше, чемЕсли это так, увеличьте его вероятность. Если это общее вознаграждение меньше, чем, даже если он положительный, нехорошо, если положительный очень мал, поэтому вероятность этого пункта необходимо уменьшить.обычно ставятЗначение ожидаемое, рассчитатьсреднее значение. Во время реальной тренировки,Оценка записывается и постоянно рассчитываетсясреднее значение.
(2) Назначьте соответствующие баллы
- В одной и той же игре или в одном и том же раунде все пары состояние-действие взвешиваются с одинаковым вознаграждением, что несправедливо, поскольку в одной и той же игре некоторые действия могут быть хорошими, а некоторые — плохими. Предположение, что исход всей игры хороший, не означает, что каждое действие правильное, и наоборот. Например, предположим, что игра короткая, ввоплощать в жизньнаграда5, ввоплощать в жизньнаградаравно 0, ввоплощать в жизньнаградаравно -2. Вся игра окончена, и общая награда равна 3. но не означаетвыполнить действиехорошо, потому что эта положительная оценка в основном исходит отказнен, следитьвоплощать в жизньневажно, может быть, ввоплощать в жизньЭто нехорошо, потому что это заставляет вас войти в следующий,воплощать в жизньОчки вычитаются, поэтому результат всей игры хороший, это не значит, что каждое действие правильное. Следовательно, при обучении каждая пара состояний и действий будет умножаться на 3.
В идеале эту проблему можно решить с помощью достаточного количества выборок. Но теперь проблема в том, что мы не делаем выборок достаточное количество раз, поэтому, когда мы вычисляем награду за эту пару состояние-действие, мы не суммируем все награды, полученные за всю игру, а только вычисляем награды, полученные от выполнение этого действия. Потому что то, что происходит до того, как действие будет выполнено в этой игре, не имеет ничего общего с выполнением действия, поэтому то, какую награду вы получите до того, как действие будет выполнено, не может считаться заслугой действия. Что-то, связанное с этим действием, только сумма всех вознаграждений, которые произошли после выполнения действия, является реальным вкладом этого действия. Формула выглядит следующим образом.
Делаем скидку на будущие награды, т.к. чем дольше время, тем менее значимо вознаграждение, коэффициент скидки,, обычно устанавливается на 0,9 или 0,99, если=0, что означает, что речь идет только о немедленном вознаграждении; если=1, что означает, что будущее вознаграждение эквивалентно немедленному вознаграждению.
Например, все поймут. Например, если я дам тебе 100 юаней сейчас или дам тебе эти 100 юаней через 10 лет, что ты выберешь? Конечно, первое. 100 юаней через 10 лет , там это может стоить 10 баксов сегодня. Другими словами, является ли доллар в 1960-х той же стоимостью, что и доллар сегодня?
3. Реализация кода
Случай: Смоделируйте ситуацию, когда лунная лодка приземлится на поверхность Луны. Цель миссии состояла в том, чтобы безопасно посадить лунную лодку на ровную поверхность между двумя желтыми флагами. Тестовая среда: LunarLander-v2
Наблюдения: в этой игровой среде есть восемь наблюдений, а именно горизонтальная координата x, вертикальная координата y, горизонтальная скорость, вертикальная скорость, угол, угловая скорость, нога 1 касается земли, а нога 2 касается земли;
Действие: Агент может выполнить четыре дискретных действия: ничего не делать, запустить впрыск двигателя влево, запустить впрыск основного двигателя вниз и запустить впрыск двигателя в правом направлении.
Награда: -100 баллов за разбившуюся лодку; 100-140 баллов за успешную посадку лодки между двумя желтыми флагами; -0,3 балла за каждую струю главного двигателя вниз; 100 баллов за каждую окончательную остановку лодки. баллы, по 10 баллов за каждую ногу приземления.
Хотя здесь мы используем дискретные пространства действий, общий код не сильно отличается Заинтересованные студенты могут попробовать пространства непрерывных действий.
Определите структуру сети:
class PolicyNet(nn.Module):
def __init__(self, n_states_num, n_actions_num, hidden_size):
super(PolicyNet, self).__init__()
self.data = [] # 存储轨迹
# 输入为长度为8的向量 输出为4个动作
self.net = nn.Sequential(
# 两个线性层,中间使用Relu激活函数连接,最后连接softmax输出每个动作的概率
nn.Linear(in_features=n_states_num, out_features=hidden_size, bias=False),
nn.ReLU(),
nn.Linear(in_features=hidden_size, out_features=n_actions_num, bias=False),
nn.Softmax(dim=1)
)
def forward(self, inputs):
# 状态输入s的shape为向量:[8]
x = self.net(inputs)
return x
Определите класс PG:
class PolicyGradient():
def __init__(self, n_states_num, n_actions_num, learning_rate=0.01, reward_decay=0.95 ):
# 状态数 state是一个8维向量,分别是水平坐标x,垂直坐标y,水平速度,垂直速度,角度,角速度,腿1触地,腿2触地
self.n_states_num = n_states_num
# action是4维、离散,即什么都不做,发动左方向引擎,发动主机,发动右方向引擎。
self.n_actions_num = n_actions_num
# 学习率
self.lr = learning_rate
# gamma
self.gamma = reward_decay
# 网络
self.pi = PolicyNet(n_states_num, n_actions_num, 128)
# 优化器
self.optimizer = torch.optim.Adam(self.pi.parameters(), lr=learning_rate)
# 存储轨迹 存储方式为 (每一次的reward,动作的概率)
self.data = []
self.cost_his = []
# 存储轨迹数据
def put_data(self, item):
# 记录r,log_P(a|s)z
self.data.append(item)
def train_net(self):
# 计算梯度并更新策略网络参数。tape为梯度记录器
R = 0 # 终结状态的初始回报为0
policy_loss = []
for r, log_prob in self.data[::-1]: # 逆序取
R = r + gamma * R # 计算每个时间戳上的回报
# 每个时间戳都计算一次梯度
loss = -log_prob * R
policy_loss.append(loss)
self.optimizer.zero_grad()
policy_loss = torch.cat(policy_loss).sum() # 求和
# print('policy_loss:', policy_loss.item())
# 反向传播
policy_loss.backward()
self.optimizer.step()
self.cost_his.append(policy_loss.item())
# print('cost_his:', self.cost_his)
self.data = [] # 清空轨迹
# 将状态传入神经网络 根据概率选择动作
def choose_action(self, state):
# 将state转化成tensor 并且维度转化为[8]->[1,8]
s = torch.Tensor(state).unsqueeze(0)
prob = self.pi(s) # 动作分布:[0,1,2,3]
# 从类别分布中采样1个动作, shape: [1] torch.log(prob), 1
# 作用是创建以参数prob为标准的类别分布,样本是来自“0 … K-1”的整数,其中K是prob参数的长度。也就是说,按照传入的prob中给定的概率,
# 在相应的位置处进行取样,取样返回的是该位置的整数索引。不是最大的,是按照概率采样的那个,采样到那个就是哪个的索引
m = torch.distributions.Categorical(prob) # 生成分布
action = m.sample()
return action.item(), m.log_prob(action)
def plot_cost(self, avage_reward):
import matplotlib.pyplot as plt
plt.plot(np.arange(len(avage_reward)), avage_reward)
plt.ylabel('Reward')
plt.xlabel('training steps')
plt.show()
Обучите модель:
for n_epi in range(1000):
state = env.reset() # 回到游戏初始状态,返回s0
ep_reward = 0
for t in range(1001): # CartPole-v1 forced to terminates at 1000 step.
# 根据状态 传入神经网络 选择动作
action, log_prob = policyGradient.choose_action2(state)
# print(action, log_prob)
# 与环境交互
s_prime, reward, done, info = env.step(action)
# s_prime, reward, done, info = env.step(action)
if n_epi > 1000:
env.render()
# 记录动作a和动作产生的奖励r
policyGradient.put_data((reward, log_prob))
state = s_prime # 刷新状态
ep_reward += reward
if done: # 当前episode终止
break
# episode终止后,训练一次网络
running_reward = 0.05 * ep_reward + (1 - 0.05) * running_reward
avage_reward.append(running_reward)
# 交互完成后 进行学习
policyGradient.train_net()
if n_epi % print_interval == 0:
print('Episode {}\tLast reward: {:.2f}\tAverage reward: {:.2f}'.format(
n_epi, ep_reward, running_reward))
if running_reward > env.spec.reward_threshold: # 大于游戏的最大阈值时,退出游戏
print("Solved! Running reward is now {} and "
"the last episode runs to {} time steps!".format(running_reward, t))
torch.save(policyGradient.pi.state_dict(), 'pg.pkl')
break
policyGradient.plot_cost(avage_reward)
Наконец, получается кривая вознаграждения, как показано на рисунке ниже, которая стремится к сходимости:
Рисунок 4. График вознагражденияОкончательный эффект анимации выглядит следующим образом:
Рисунок 5. График представления результатов4. Резюме
Градиенты политик хорошо работают для сценариев с непрерывными пространствами действий и могут изучать некоторые случайные политики, иногда оптимальные политики. Сходимость все же может быть лучше, но также возможна сходимость к локальному оптимуму, а не к глобальному оптимуму, и процесс оценки стратегии иногда бывает неэффективным, а дисперсия велика. Но в целом все еще хорошо, и тогда мы представим относительно лучшие алгоритмы для устранения этих недостатков.
5. Ссылки
[1] «Подкрепление + обучение: + введение»
[2] blog.CSDN.net/Baidu_41871…
Мы ходячий ИИ, и мы продолжаем двигаться вперед в «ИИ + игра».
Зайдите в официальный аккаунт [walker AI] и ответьте на [Tigers and Dragons], чтобы получить красную обложку конверта ограниченного выпуска. Приходите и обсудите с нами технические вопросы!