当前位置: 首页 > article >正文

强化学习关键技术:重要性采样深度剖析

目录

    • 一、引言
    • 二、重要性采样基本原理
      • (一)什么是重要性采样
      • (二)重要性采样在强化学习中的作用
    • 三、判断采样好坏的方法
      • (一)偏差(Bias)
      • (二)方差(Variance)
      • (三)有效样本数量(Effective Sample Size)
      • (四)与真实值对比(如果已知)
    • 四、重要性采样公式推导
    • 五、代码示例
    • 六、案例分析
      • (一)机器人路径规划
      • (二)游戏 AI
    • 七、总结


一、引言

强化学习旨在让智能体在与环境的交互中学习到最优策略,以最大化长期累积奖励。在这个过程中,重要性采样(Importance Sampling)扮演着关键角色,它是一种在概率分布估计和优化中广泛应用的技术,能帮助我们从一个分布中采样,来估计另一个分布的期望,这在强化学习的策略评估和优化中十分重要。本文将深入探讨强化学习中的重要性采样,通过原理讲解、公式推导、代码示例以及实际案例分析,希望能全面理解这一技术。

二、重要性采样基本原理

(一)什么是重要性采样

想象你要调查一个城市居民的平均收入。直接对整个城市人口进行普查耗时费力,不太现实。这时,你可以从城市中选取一部分有代表性的社区(比如按照收入水平、职业分布等因素划分)进行调查,然后根据这些社区的调查结果来推断整个城市的平均收入,这就是一种简单的采样思想。而重要性采样则更进一步,它考虑到不同社区对于整体收入分布的 “重要性” 不同,比如高收入社区和低收入社区对整体平均收入的影响程度不一样,通过给不同社区的调查结果赋予不同的权重,从而更准确地估计整体平均收入。

在强化学习中,重要性采样是指从一个容易采样的分布 q ( x ) q(x) q(x)中采样,来估计另一个目标分布 p ( x ) p(x) p(x)下的期望。数学上,对于一个函数 f ( x ) f(x) f(x),在分布 p ( x ) p(x) p(x)下的期望 E p [ f ( x ) ] E_{p}[f(x)] Ep[f(x)],其完整的表达为: E p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x E_{p}[f(x)]=\int f(x)p(x)dx Ep[f(x)]=f(x)p(x)dx

这里的 E p [ f ( x ) ] E_{p}[f(x)] Ep[f(x)]表示在概率分布 p ( x ) p(x) p(x)下,函数 f ( x ) f(x) f(x)的期望值。 p ( x ) p(x) p(x)是目标概率分布函数,它描述了随机变量 x x x在不同取值下出现的概率情况。 f ( x ) f(x) f(x)是一个关于 x x x的函数,我们希望求出 f ( x ) f(x) f(x) p ( x ) p(x) p(x)这个分布下的平均取值,也就是期望。积分符号 ∫ \int 表示对所有可能的 x x x取值进行求和, d x dx dx则表示积分变量是 x x x

举个简单的例子,假设 x x x表示掷骰子的结果(取值为 1 - 6), p ( x ) p(x) p(x)是骰子每个面出现的概率(理想情况下每个面出现概率为 1 6 \frac{1}{6} 61 ), f ( x ) f(x) f(x)表示掷出 x x x点后获得的奖励(比如 f ( 1 ) = 1 f(1)=1 f(1)=1 f ( 2 ) = 2 f(2)=2 f(2)=2,以此类推),那么 E p [ f ( x ) ] E_{p}[f(x)] Ep[f(x)]就是在这个掷骰子的概率分布下,平均能获得的奖励。

如果直接从 p ( x ) p(x) p(x)采样困难,而从 q ( x ) q(x) q(x)采样容易,那么可以利用重要性采样估计这个期望: E p [ f ( x ) ] ≈ 1 N ∑ i = 1 N p ( x ( i ) ) q ( x ( i ) ) f ( x ( i ) ) E_{p}[f(x)]\approx\frac{1}{N}\sum_{i = 1}^{N}\frac{p(x^{(i)})}{q(x^{(i)})}f(x^{(i)}) Ep[f(x)]N1i=1Nq(x(i))p(x(i))f(x(i))

其中, x ( i ) x^{(i)} x(i)是从分布 q ( x ) q(x) q(x)中采样得到的第 i i i个样本, p ( x ( i ) ) q ( x ( i ) ) \frac{p(x^{(i)})}{q(x^{(i)})} q(x(i))p(x(i))被称为重要性权重。这个公式的含义是,通过从容易采样的分布 q ( x ) q(x) q(x)中抽取 N N N个样本 x ( i ) x^{(i)} x(i),然后用每个样本对应的重要性权重 p ( x ( i ) ) q ( x ( i ) ) \frac{p(x^{(i)})}{q(x^{(i)})} q(x(i))p(x(i))乘以函数值 f ( x ( i ) ) f(x^{(i)}) f(x(i)) ,再对这些乘积进行平均(求和后除以 N N N),以此来近似估计在目标分布 p ( x ) p(x) p(x) f ( x ) f(x) f(x)的期望。

(二)重要性采样在强化学习中的作用

在强化学习里,重要性采样主要是对智能体在环境中采取的动作序列及其对应的状态、奖励进行采样。简单来说,就是从智能体与环境交互产生的众多可能轨迹里,选取一部分轨迹作为代表 。这些采样得到的轨迹,被用来近似代表智能体按照某个策略与环境交互时,可能出现的所有情况。

在强化学习中,策略评估需要计算状态价值函数或动作价值函数的期望。例如,计算状态价值函数 V π ( s ) : V π ( s ) = E π [ ∑ t = 0 ∞ γ t r t ∣ s 0 = s ] V^{\pi}(s): V^{\pi}(s)=E_{\pi}[\sum_{t = 0}^{\infty}\gamma^{t}r_{t}|s_{0}=s] Vπ(s)Vπ(s)=Eπ[t=0γtrts0=s]

这里的 V π ( s ) V^{\pi}(s) Vπ(s)表示在策略 π \pi π下,从状态 s s s开始,智能体所能获得的长期累积奖励的期望。 E π E_{\pi} Eπ表示基于策略 π \pi π的期望计算。 ∑ t = 0 ∞ γ t r t \sum_{t = 0}^{\infty}\gamma^{t}r_{t} t=0γtrt表示从当前时刻 t = 0 t = 0 t=0开始,一直到无穷远的未来时刻,智能体获得的奖励 r t r_{t} rt的总和,并且每个时刻的奖励都乘以了折扣因子 γ t \gamma^{t} γt γ \gamma γ是一个介于 0(包含)到 1(包含)之间的折扣因子,它的作用是让智能体更关注近期的奖励,因为随着时间推移,未来奖励的不确定性增加,对当前决策的影响也相对变小。 s 0 = s s_{0}=s s0=s表示初始状态为 s s s

例如,在一个机器人行走的任务中, s s s可以是机器人当前所处的位置和姿态, π \pi π是机器人选择下一步行动的策略, r t r_{t} rt是机器人在时刻 t t t采取行动后获得的奖励(比如到达目标点获得正奖励,碰到障碍物获得负奖励), V π ( s ) V^{\pi}(s) Vπ(s)就是在这个策略 π \pi π下,从当前位置和姿态出发,机器人最终能获得的总奖励的期望。

如果直接按照策略 π \pi π采样轨迹来计算这个期望,可能会因为某些状态或动作出现的概率较低而难以准确估计。这时,我们可以使用重要性采样,从一个更易采样的策略 μ \mu μ中采样。所谓更易采样的策略 μ \mu μ,是指在实际操作中,按照该策略让智能体与环境进行交互时,能够更轻松、快速地获取大量的样本数据。比如在一些复杂的环境中,目标策略 π \pi π可能会陷入某些局部最优的情况,导致采样过程缓慢且难以覆盖所有可能的状态和动作组合;而策略 μ \mu μ可能是一个简单的随机策略,它不追求最优解,只是在环境中随机地选择动作,这样就可以快速地探索环境,产生大量不同的轨迹样本 。然后通过重要性权重来修正,从而更高效地估计 V π ( s ) V^{\pi}(s) Vπ(s)。重要性权重会根据策略 π \pi π和策略 μ \mu μ在相同状态下选择相同动作的概率差异来计算,以此来调整从策略 μ \mu μ采样得到的样本对估计 V π ( s ) V^{\pi}(s) Vπ(s)的贡献程度。

三、判断采样好坏的方法

(一)偏差(Bias)

偏差衡量的是估计值与真实值之间的平均差异。对于重要性采样的估计结果,如果偏差较小,说明采样得到的估计值在多次实验下的平均值接近真实期望。理想情况下,我们希望重要性采样的估计是无偏的,即估计值的期望等于真实值。然而在实际中,由于采样的随机性和分布的复杂性,完全无偏很难实现,但应尽量使偏差控制在可接受范围内。比如在估计城市居民平均收入的例子中,如果多次抽样调查的平均结果与真实平均收入相差甚远,那就说明采样方法存在较大偏差。

(二)方差(Variance)

方差表示估计值的波动程度。方差小意味着多次采样得到的估计值比较稳定,波动不大;方差大则表示估计值的不确定性较高,每次采样得到的结果可能差异较大。在重要性采样中,方差主要受重要性权重的影响。如果重要性权重的变化范围很大,方差就会增大。例如在强化学习的策略评估中,若不同轨迹的重要性权重差异悬殊,那么状态价值函数的估计方差就会较大,导致估计结果不稳定 。

(三)有效样本数量(Effective Sample Size)

有效样本数量是评估采样好坏的另一个重要指标。在重要性采样中,由于不同样本的权重不同,有效样本数量会小于实际采样的样本数量。有效样本数量的计算公式为: E S S = 1 ∑ i = 1 N ( w ( i ) ∑ j = 1 N w ( j ) ) 2 ESS=\frac{1}{\sum_{i = 1}^{N}(\frac{w^{(i)}}{\sum_{j = 1}^{N}w^{(j)}})^2} ESS=i=1N(j=1Nw(j)w(i))21

其中 w ( i ) w^{(i)} w(i)是第 i i i个样本的重要性权重。有效样本数量越大,说明采样的质量越高,样本的利用效率越高;反之,若有效样本数量远小于实际采样数量,表明很多样本的权重过小,对估计结果贡献不大,采样效果不佳。

(四)与真实值对比(如果已知)

在一些情况下,如果目标分布下的期望真实值是已知的(比如前面提到的简单函数积分案例),可以直接将重要性采样的估计值与真实值进行对比。通过计算两者之间的误差,如均方误差(MSE): M S E = 1 N ∑ i = 1 N ( E p [ f ( x ) ] − E ^ p [ f ( x ) ] ) 2 MSE=\frac{1}{N}\sum_{i = 1}^{N}(E_{p}[f(x)]-\hat{E}_{p}[f(x)])^2 MSE=N1i=1N(Ep[f(x)]E^p[f(x)])2

其中 E p [ f ( x ) ] E_{p}[f(x)] Ep[f(x)]是真实期望, E ^ p [ f ( x ) ] \hat{E}_{p}[f(x)] E^p[f(x)]是重要性采样的估计值。误差越小,说明采样估计的效果越好。

四、重要性采样公式推导

假设我们要估计目标分布 p ( x ) p(x) p(x)下函数 f ( x ) f(x) f(x)的期望 E p [ f ( x ) ] E_{p}[f(x)] Ep[f(x)],通过从提议分布 q ( x ) q(x) q(x)采样得到 N N N个样本 x ( 1 ) , x ( 2 ) , . . . , x ( N ) x^{(1)},x^{(2)},...,x^{(N)} x(1),x(2),...,x(N) E p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x E_{p}[f(x)]=\int f(x)p(x)dx=\int f(x)\frac{p(x)}{q(x)}q(x)dx Ep[f(x)]=f(x)p(x)dx=f(x)q(x)p(x)q(x)dx

根据蒙特卡罗估计,我们可以用样本均值来近似这个积分: ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x ≈ 1 N ∑ i = 1 N p ( x ( i ) ) q ( x ( i ) ) f ( x ( i ) ) \int f(x)\frac{p(x)}{q(x)}q(x)dx\approx\frac{1}{N}\sum_{i = 1}^{N}\frac{p(x^{(i)})}{q(x^{(i)})}f(x^{(i)}) f(x)q(x)p(x)q(x)dxN1i=1Nq(x(i))p(x(i))f(x(i))

在强化学习策略评估中,设 π \pi π是目标策略, μ \mu μ是行为策略(用于采样的策略)。对于状态价值函数的估计,我们有: V π ( s ) ≈ 1 N ∑ i = 1 N ∏ t = 0 T π ( a t ( i ) ∣ s t ( i ) ) ∏ t = 0 T μ ( a t ( i ) ∣ s t ( i ) ) ∑ t = 0 T γ t r t ( i ) V^{\pi}(s)\approx\frac{1}{N}\sum_{i = 1}^{N}\frac{\prod_{t = 0}^{T}\pi(a_{t}^{(i)}|s_{t}^{(i)})}{\prod_{t = 0}^{T}\mu(a_{t}^{(i)}|s_{t}^{(i)})}\sum_{t = 0}^{T}\gamma^{t}r_{t}^{(i)} Vπ(s)N1i=1Nt=0Tμ(at(i)st(i))t=0Tπ(at(i)st(i))t=0Tγtrt(i)

其中, s t ( i ) , a t ( i ) , r t ( i ) s_{t}^{(i)},a_{t}^{(i)},r_{t}^{(i)} st(i),at(i),rt(i)是第 i i i条采样轨迹上的状态、动作和奖励。

五、代码示例

下面以简单的一维函数积分估计为例,展示重要性采样的代码实现。假设我们要估计函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2在区间 [ 0 , 1 ] [0,1] [0,1]上的积分,即 ∫ 0 1 x 2 d x \int_{0}^{1}x^{2}dx 01x2dx真实值为 1 3 \frac{1}{3} 31

import numpy as np
import matplotlib.pyplot as plt


# 定义目标函数
def target_function(x):
    return x ** 2


# 定义提议分布(均匀分布)
def proposal_distribution(n):
    return np.random.uniform(0, 1, n)


# 进行重要性采样估计
def importance_sampling_estimate(n):
    samples = proposal_distribution(n)
    # 目标分布在这个简单例子中为均匀分布,权重为1
    weights = np.ones_like(samples)
    estimates = []
    for i in range(1, n + 1):
        estimate = np.sum(weights[:i] * target_function(samples[:i])) / i
        estimates.append(estimate)
    return estimates


# 不同样本数量下的估计
num_samples = [10, 100, 1000, 10000]
for n in num_samples:
    estimate = importance_sampling_estimate(n)
    print(f"样本数量为{n}时,估计值为{estimate[-1]}")


# 绘制估计值随样本数量的变化
n = 1000
estimates = importance_sampling_estimate(n)
plt.plot(range(1, n + 1), estimates)
plt.xlabel('样本数量')
plt.ylabel('积分估计值')
plt.title('重要性采样积分估计')
plt.axhline(y=1 / 3, color='r', linestyle='--', label='真实值')
plt.legend()
plt.show()

在强化学习环境中,以 OpenAI Gym 的 FrozenLake 环境为例,展示如何使用重要性采样进行策略评估:

import gym
import numpy as np


# 定义策略
def random_policy(state, env):
    return env.action_space.sample()


def target_policy(state, env):
    # 简单的确定性策略,这里只是示例,实际可能更复杂
    return 0 if state < env.nS / 2 else 1


# 重要性采样策略评估
def importance_sampling_policy_evaluation(env, target_policy, behavior_policy, num_episodes, gamma=0.99):
    V = np.zeros(env.nS)
    for _ in range(num_episodes):
        state = env.reset()
        states, actions, rewards = [], [], []
        done = False
        while not done:
            states.append(state)
            action = behavior_policy(state, env)
            actions.append(action)
            state, reward, done, _ = env.step(action)
            rewards.append(reward)
        G = 0
        W = 1
        for t in range(len(rewards) - 1, -1, -1):
            G = gamma * G + rewards[t]
            V[states[t]] += W * G
            if actions[t]!= target_policy(states[t], env):
                break
            W *= (1.0 / behavior_policy(states[t], env))
    V /= num_episodes
    return V


env = gym.make('FrozenLake-v1', is_slippery=False)
V = importance_sampling_policy_evaluation(env, target_policy, random_policy, num_episodes=1000)
print("状态价值函数估计值:", V)

六、案例分析

(一)机器人路径规划

在机器人路径规划中,智能体需要找到从起点到终点的最优路径。假设我们有一个目标策略,它试图找到最短路径,但这个策略在某些复杂地形下采样困难。我们可以使用一个行为策略,比如随机探索策略,它更容易采样。通过重要性采样,我们可以从随机探索策略产生的路径样本中,估计目标策略下的路径长度期望,从而评估目标策略的优劣,并进行优化。例如,在一个有障碍物的地图中,随机探索策略可能会产生很多无效路径,但通过重要性采样,我们可以根据目标策略的特点,给不同路径赋予合适的权重,更准确地评估目标策略找到最短路径的能力。

(二)游戏 AI

在游戏中,重要性采样可以用于评估不同的游戏策略。比如在围棋中,我们有一个复杂的目标策略,它试图最大化获胜概率,但直接从这个策略采样棋局很困难。我们可以使用一个简单的行为策略,如随机落子策略,来生成棋局样本。通过重要性采样,计算目标策略和行为策略在这些样本上的差异权重,从而估计目标策略的胜率,进而优化目标策略,让游戏 AI 变得更强。

七、总结

重要性采样在强化学习中是一种强大的工具,它允许我们从一个易于采样的分布中获取样本,来估计目标分布下的期望,解决了强化学习中策略评估和优化过程中的采样难题。


http://www.kler.cn/a/542581.html

相关文章:

  • Hello Robot 推出Stretch 3移动操作机器人,赋能研究与商业应用
  • Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
  • C++ 模板
  • 智慧机房解决方案(文末联系,领取整套资料,可做论文)
  • deepseek+“D-id”或“即梦AI”快速生成短视频
  • Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行
  • 基于springboot+vue的游戏创意工坊与推广平台的设计与实现
  • 关于JVM
  • 前端打包后的dist文件太大怎么办?如何优化处理?
  • c语言判断一个文件的文件格式
  • maven web项目如何定义filter
  • 智能同义词处理与命中优化:提升知识库查询精度
  • 科研自动化实操:用Make工具批量自动进行文献总结
  • C++蓝桥杯基础篇(二)
  • 机器学习(李宏毅)——self-Attention
  • 金媒婚恋交友系统V10.5的CRM操作提示:“您没有权限执行此操作”解决方法
  • 稠密架构和稀疏架构
  • SUNM2改进版GOMSM2晋升2020改进版完整传奇引擎源码及教程
  • 开源的 DeepSeek-R1「GitHub 热点速览」
  • Python3连接MongoDB并写入数据
  • MySQL数据库(八)锁
  • 【前端框架与库】深入解析Vue.js:从Vite到服务端渲染,全面解析Vue的核心特性
  • 测试自动化落地方向
  • 【HUSTOJ 判题机源码解读系列01】判题机架构、判题流程浅析
  • 基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系
  • 在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame)还有什么?