重要性采样及KL散度分析与不同实现方法

本文探讨了重要性采样在强化学习中的应用,特别是在连续动作空间的策略优化算法如PPO中。介绍了如何通过 Importance Sampling 技术来估计难以采样的分布期望,以及在Off-Policy算法中估计Target Policy的期望Return。同时,文章还讲解了KL散度的概念,作为衡量两个概率分布差异的指标,以及在PyTorch中的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文原始地址:https://blog.oliverxu.cn

重要性采样及KL散度分析与不同实现方法

最近在看《Guided policy search》这篇文章,其中,用到了Importance Sampling,KL divergence等技术,虽然这些之前都用过,但是没有系统的整理过一些文档出来,《Guided policy search》这篇文章是13年的,但是TRPO和PPO等一些算法用到的技术,在这篇文章里基本都有用到了。初步感觉这篇文章还是比较经典的。

这篇文章里举的例子都是以强化学习的连续动作空间中的policy来举例的。

产生两个策略用于验证:

因为我的研究方向是强化学习,所以举的例子用的也是强化学习中的连续空间的Policy来说明。以PPO算法为例,一般来说,当使用Actor-Critic网络的结构时,actor的输入是State,输出是action对应维度的正态分布的均值 μ \mu μ。然后根据这个均值和计算出来的方差,可以计算出对应的分布。使用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")

函数参考:

  1. 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.

  1. PPO构造actor可以参考https://github.com/nikhilbarhate99/PPO-PyTorch/blob/master/PPO.py

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qh4DaT4L-1631778692130)(image-20210818164510370.png)]

Importance Sampling原理

考虑这样一个情况,你想要计算一个函数 f ( x ) f(x) f(x)​在某个分布 x ∼ p ( x ) x \sim p(x) xp(x)​下的期望,根据连续概率密度函数的期望公式,可以得到:

E [ f ( x ) ] = ∫ f ( x ) p ( x ) d x ≈ 1 n Σ i f ( x i ) E[f(x)] = \int f(x)p(x)dx \approx \frac{1}{n} \Sigma_if(x_i) E[f(x)]=f(x)p(x)dxn1Σif(xi)

如果用Monte Carlo方法来计算这个期望的话,相当于对这个分布进行不断采样(对 x x x),然后根据期望公式计算相应的期望。但是,当 p ( x ) p(x) p(x)​是一个比较难以采样的分布(有没有具体的例子来描述一下,到底在什么情况会出现难以采样的分布?什么样子的分布是难以采样的分布?)如何通过一些已知的和一些简单的分布的采样来估计出这个难以采样的分布对应的期望。

对应的解决方法就是Importance Sampling技术,该技术“Importance Sampling has been successfully used to accelerate stochastic optimization in many convex problems.《Biased Importance Sampling for Deep Neural Network Training》”。

E [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值