Оригинальный адрес этой статьи: https://blog.oliverxu.cn
Выборка по важности и анализ расхождений KL и различные методы реализации
Недавно я читал статью "Управляемый поиск политики", в которой использовались такие технологии, как Importance Sampling и KL divergence. Хотя они использовались раньше, некоторые документы систематически не разбирались. Статье "Управляемый поиск политики" 13 лет, но методы, используемые некоторыми алгоритмами, такими как TRPO и PPO, в основном используются в этой статье. Сначала мне кажется, что эта статья вполне классическая.
Все примеры, приведенные в этой статье, являются примерами политик в пространстве непрерывного действия обучения с подкреплением.
Создайте две стратегии для проверки:
Поскольку направлением моего исследования является обучение с подкреплением, пример, который я привел, также иллюстрируется политикой непрерывного пространства в обучении с подкреплением. Возьмем в качестве примера алгоритм PPO.Вообще говоря, при использовании структуры сети Актер-Критик вход актера — это состояние, а выход — среднее значение нормального распределения соответствующего измерения действия.. Затем на основе этого среднего значения и рассчитанной дисперсии можно рассчитать соответствующее распределение. Реализовано с помощью Pytorch.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import torch
import torch.nn as nn
from torch.distributions import MultivariateNormal
# 构造两个分布作为p(x)和q(x),为了简单分析,action的维度设置为1
px = MultivariateNormal(torch.zeros(1), torch.eye(1))
qx = MultivariateNormal(torch.tensor([0.5]), torch.tensor([[2.0]]))
# 画出两个分布的概率密度函数
## 这里使用matplotlib来画出概率密度函数的图像,使用scipy.stats.norm这一个包,主要原理是:正态分布有其对应的概率密度公式,直接根据xaxis的数据,来计算出对应的概率密度的数值,而不需要进行采样之类的操作。
x_axis = np.arange(-20, 20, 0.01)
px_mean = 0
px_std = 1
qx_mean = 0.5
qx_std = 2.0
fig = plt.figure()
ax = plt.subplot(1, 1, 1)
l1, = ax.plot(x_axis, norm.pdf(x_axis, px_mean, px_std))
l2, = ax.plot(x_axis, norm.pdf(x_axis, qx_mean, qx_std))
plt.legend([l1, l2], ['p(x)', 'q(x)'])
plt.savefig("pdf.pdf")
Ссылка на функцию:
- Pytorch MultivariateNormal: https://pytorch.org/docs/stable/distributions.html
Creates a multivariate normal (also called Gaussian) distribution parameterized by a mean vector and a covariance matrix.
- Субъект строительства PPO может относиться к:GitHub.com/Вы видите, что люди из Хирибы…
Принцип выборки по важности
Рассмотрим ситуацию, когда вы хотите вычислить функциюв дистрибутивеМатематическое ожидание при , согласно формуле математического ожидания непрерывной функции плотности вероятности, может быть получено:
Если для вычисления этого ожидания используется метод Монте-Карло, это эквивалентно непрерывной выборке этого распределения (для), а затем вычислить соответствующее математическое ожидание по формуле математического ожидания. Однако, когдапредставляет собой дистрибутив, из которого трудно выполнить выборку (можно ли описать какой-либо конкретный пример, в какой ситуации может возникнуть дистрибутив, из которого трудно выполнить выборку? Какой тип распределения представляет собой некоторая простая выборка распределения для оценки ожидания, соответствующего этому сложному для выборки распределению.
Соответствующим решением является технология «Выборка по важности», которая «Выборка по важности успешно использовалась для ускорения стохастической оптимизации во многих выпуклых задачах. «Смещенная выборка по важности для обучения глубокой нейронной сети»».
это из раздачивыборка,Это называется отношением выборки или весом выборки. Его роль - «поправочный вес для компенсации вероятностной выборки из другого распределения».
Это Чжихуzhuanlan.zhihu.com/p/41217212Приведена демонстрационная выборка важности, которая используется для нахождения площади кривой в качестве примера.Для интеграла кривой, который трудно решить непосредственно аналитическим решением, интеграл не может быть получен непосредственно, и метод часто используется оценка, то есть в интервале подынтегральной функции Выборка, использующая идею сегментации, суммирования и взятия предела исчисления для аппроксимации интеграла или площади кривой.
Если выборка однородная, оценку можно получить, но этот метод оценки будет становиться все более и более точным по мере увеличения количества выборок С другой стороны: когда количество выборок фиксировано, есть ли способ его улучшить? Интегрируйте точность расчета и уменьшите дисперсию расчета. Пример, приведенный в этом Zhihu, интересен. Очевидно, что там, где функция плотности вероятности велика, значение ее функции оказывает большое влияние на интеграл, при этом увеличение числа отсчетов в этой области может соответственно повысить точность расчета.
Реализация выборки по важности
При использовании внеполитического алгоритма в основном используются две стратегии (не учитывая TD3): одна — политика поведения, а другая — целевая политика.
- Политика поведения: количество обновлений быстрое, что используется для создания эпизодов, необходимых в процессе обучения.
- Целевая политика: Процесс обновления идет медленно, обычно после обновления политики поведения до определенного уровня параметры политики поведения переносятся в целевую политику.
Или, другими словами, на самом деле есть две политики поведения, но одна обновляется медленно, а другая быстро.Конечно, после определенного количества итераций идеальное состояние — сходиться к оптимальному значению. Используя метод выборки по важности, ожидаемый доход от целевой политики можно оценить с помощью политики поведения.
def fx(x):
return 1/(1+np.exp(-x))
#return x
px = MultivariateNormal(torch.tensor([3.2], dtype=torch.float32), torch.tensor([[1.0]], dtype=torch.float32))
qx = MultivariateNormal(torch.tensor([3.0], dtype=torch.float32), torch.tensor([[1.0]], dtype=torch.float32))
x_axis = np.arange(-20, 20, 0.01)
px_mean = 4
px_std = 1
qx_mean = 1
qx_std = 4
fig = plt.figure()
ax = plt.subplot(1, 1, 1)
l1, = ax.plot(x_axis, norm.pdf(x_axis, px_mean, px_std))
l2, = ax.plot(x_axis, norm.pdf(x_axis, qx_mean, qx_std))
plt.legend([l1, l2], ['p(x)', 'q(x)'])
plt.savefig("pdf1.pdf")
n = 10000
s = 0
for i in range(n):
#pdb.set_trace()
x_i = px.sample()
s += fx(x_i)
print("Simulation Value", s/n)
# 使用IS技术对q(x)进行采样
s = 0
for i in range(n):
x_i = qx.sample()
s += fx(x_i) * (px.log_prob(x_i) / qx.log_prob(x_i))
print("IS results: ", s/n)
pdb.set_trace()
Simulation Value tensor([0.9414])
IS results: tensor([0.9398])
Вопрос: Каково определение fx того, как IS используется в RL (например, PPO)?
Ответ: fx определяет Преимущество, а конечная целевая функция ищет среднее значение Преимущества и максимизирует его среднее значение.
Вы можете обратиться к:zhuanlan.zhihu.com/p/388707220
Принцип расходимости KL
Рекомендации по количественной оценке информации:
- События с высокой вероятностью должны быть менее информативными, а в крайних случаях события, которые гарантированно произойдут, должны быть менее информативными.
- Менее вероятные события содержат больше информации.
- Независимые события должны иметь дополнительную информацию. Например, монета, подброшенная дважды, должна нести в два раза больше информации, чем монета, подброшенная решкой.
мероприятиеинформация о себе:
Натуральный логарифм с основаниемИнтуитивно понятно, что чем больше вероятность события, тем больше он к нему привык, то есть тем меньше ценность самоинформации, определенная выше.
Определение энтропии
В теории информации это мера количества информации, а в физике и термодинамике — мера хаоса.
Энтропия Шеннона дает количественную оценку общей суммы неопределенности во всем распределении, которому принадлежит событие:
Относительная энтропия (расхождение KL)
для случайной величиныесть два дистрибутиваи, расхождение KL можно использовать для измерения разницы между двумя распределениями, следует отметить, что здесьотносительноРаспространение:
Реализация дивергенции KL
px = MultivariateNormal(torch.tensor([5.0], dtype=torch.float32), torch.tensor([[1.0]], dtype=torch.float32))
qx = MultivariateNormal(torch.tensor([2.0], dtype=torch.float32), torch.tensor([[1.0]], dtype=torch.float32))
kl_div = kl_divergence(px, qx)
tensor(4.5000)
Использованная литература:py torch.org/docs/stable…
TORCH.DISTRIBUTIONS: Этот модуль относится к пакету TensorFlow Distribution.Существует два основных метода обратного распространения (прямое обратное распространение случайных выборок невозможно, в частности, документы об алгоритмах TRPO и PPO, упомянутые в Метод расчета двух альтернативных функций): один — функция Score, а другая — производная Pathwise.
- Функция оценки:
- Производная по пути:
torch.distributions.kl.kl_divergence(p, q)
Проверка: для одномерного распределения Гаусса вывод его KL-расхождения может относиться к:zhuanlan.zhihu.com/p/22464760, его окончательное выражение:
Из анализа приведенных выше результатов политики можно обнаружить, что результаты двух одинаковы, но исходный код torch.distributions.kl.kl_divergence и принцип его расчета требуют написания статьи для продолжения в -глубинный анализ.
использованная литература:
zhuanlan.zhihu.com/p/143105854
к data science.com/light-on-horse…
zhuanlan.zhihu.com/p/150693309