强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)

由于平台字数限制,上文:https://blog.csdn.net/ooblack/article/details/144198538

4. PPO算法

近端策略优化(proximal policy optimization,PPO)算法是OpenAI的默认强化学习算法,在RLHF中也用到了这个算法,说明这个算法还是很强的,那它到底解决了一个什么问题呢?

先介绍两个概念,同策略学习(On-Policy Learning)和异策略学习(Off-Policy Learning),在强化学习里面,要学习的是一个智能体。如果要学习的智能体和与环境交互的智能体是相同的,我们称之为同策略。如果要学习的智能体和与环境交互的智能体不是相同的,我们称之为异策略。

PPO的主要解决的问题是什么呢?

无论是A2C算法还是REINFOCE算法,都有一个问题,数据在采样完成,更新模型一次之后就丢弃了,前文不止一次强调过,数据采样是很昂贵且费事的,只用一次就丢显然是不合理的,但是数据用一次之后模型已经更新了,旧的数据是旧的模型产生的不能用来更新新的模型,PPO就是用来解决这个问题的。

它的思路是这样的,我们用梯度下降去降低损失,由于学习率的问题,我们可能方向对了,但是步子迈小了,所以用旧数据再去更新一次,再迈一步,但是直觉告诉我们不能一直用旧数据,因为模型参数多迭代几次之后可能跟产生旧数据的旧模型完全不一样了,PPO最大的贡献就在于它告诉模型什么时候旧数据不能再用了,定量分析了新模型与旧模型的差距。

这里先介绍重要性采样的概念。

4.1 重要性采样

假设我们有一个函数 f ( x ) f(x) f(x),要计算从分布 p p p 采样 x x x,再把 x x x 代入 f f f,得到 f ( x ) f(x) f(x)。我们该怎么计算 f ( x ) f(x) f(x) 的期望值呢?假设我们不能对分布 p p p 做积分,但可以从分布 p p p 采样一些数据 x i x^i xi。把 x i x^i xi 代入 f ( x ) f(x) f(x),取它的平均值,就可以近似 f ( x ) f(x) f(x)​ 的期望值。
E x ∼ p [ f ( x ) ] ≈ 1 N ∑ i = 1 N f ( x i ) \mathbb{E}_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^{N} f(x^i) Exp[f(x)]N1i=1Nf(xi)

现在有另外一个问题,假设我们不能从分布 p p p 采样数据,只能从另外一个分布 q q q 采样数据 x i x^i xi q q q 可以是任何分布。如果我们从 q q q 采样 x i x^i xi,就不能使用刚刚的方法。因为刚刚的方法需要从 p p p里面采样。

但是我硬要从 q q q里面采,神奇的数学会给出解决方案:
E x ∼ p [ f ( x ) ] = ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \begin{align} \mathbb{E}_{x \sim p}[f(x)] &= \int f(x)p(x)dx \\ &= \int f(x) \frac{p(x)}{q(x)} q(x) dx \\&= \mathbb{E}_{x \sim q} \left[ f(x) \frac{p(x)}{q(x)} \right] \end{align} Exp[f(x)]=f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]
我们就可以写成对 q q q里面所采样出来的 x 取期望值。我们从 q q q里面采样 x x x,再计算 f ( x ) p ( x ) q ( x ) f(x){\frac{p(x)}{q(x)}} f(x)q(x)p(x),再取期望值。所以就算我们不能从 p p p里面采样数据,但只要能从 q q q里面采样数据,就可以计算从 p p p采样 x x x代入 f f f​以后的期望值。

其中 f ( x ) p ( x ) q ( x ) f(x){\frac{p(x)}{q(x)}} f(x)q(x)p(x)称作重要性权重。它主要用来修正两个分布之间的差异,但是它也不是万能的,通过上面的式子我们能看出它只能保证两种采样方法的期望相同,没说方差相同,如果方差巨大的话,也达不到我们想要的效果,两个分布的方差如下( Var [ X ] = E [ X 2 ] − ( E [ X ] ) 2 \text{Var}[X] = \mathbb{E}[X^2] - \left(\mathbb{E}[X]\right)^2 Var[X]=E[X2](E[X])2
Var x ∼ p [ f ( x ) ] = E x ∼ p [ f ( x ) 2 ] − ( E x ∼ p [ f ( x ) ] ) 2 Var x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ q [ ( f ( x ) p ( x ) q ( x ) ) 2 ] − ( E x ∼ q [ f ( x ) p ( x ) q ( x ) ] ) 2 = E x ∼ p [ f ( x ) 2 p ( x ) q ( x ) ] − ( E x ∼ p [ f ( x ) ] ) 2 \begin{align*} \text{Var}_{x \sim p}[f(x)] &= \mathbb{E}_{x \sim p} \left[ f(x)^2 \right] - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \\ \text{Var}_{x \sim q} \left[f(x) \frac{p(x)}{q(x)} \right] &= \mathbb{E}_{x \sim q} \left[ \left(f(x) \frac{p(x)}{q(x)}\right)^2 \right] - \left(\mathbb{E}_{x \sim q} \left[ f(x) \frac{p(x)}{q(x)}\right] \right)^2 \\ &= \mathbb{E}_{x \sim p} \left[ f(x)^2 \frac{p(x)}{q(x)} \right] - \left(\mathbb{E}_{x \sim p}[f(x)]\right)^2 \end{align*} Varxp[f(x)]Varxq[f(x)q(x)p(x)]=Exp[f(x)2](Exp[f(x)])2=Exq[(f(x)q(x)p(x))2](Exq[f(x)q(x)p(x)])2=Exp[f(x)2q(x)p(x)](Exp[f(x)])2
可以看到对 q q q分布采样的方差比对 p p p分布采样的方差多乘了一个 p ( x ) q ( x ) \frac{p(x)}{q(x)} q(x)p(x),所以就一件事, p p p q q q的分布要尽量相似用这个方法才能有一个很好的效果。下面举个例子来说明这一点:

例如,当 p ( x ) p(x) p(x) q ( x ) q(x) q(x) 差距很大时,就会有问题。如图所示,假设蓝线是 p ( x ) p(x) p(x) 的分布,绿线是 q ( x ) q(x) q(x) 的分布,红线是 f ( x ) f(x) f(x)。如果我们要计算 f ( x ) f(x) f(x) 的期望值,从分布 p ( x ) p(x) p(x) 做采样,显然 E x ∼ p [ f ( x ) ] \mathbb E_{x \sim p}[f(x)] Exp[f(x)] 是负的。这是因为左边区域 p ( x ) p(x) p(x) 的概率很高,所以采样会到这个区域,而 f ( x ) f(x) f(x) 在这个区域是负的,所以理论上这一项算出来会是负的。

接下来我们改成从 q ( x ) q(x) q(x) 采样,因为 q ( x ) q(x) q(x) 在右边区域的概率比较高,所以如果我们的采样点不够多,可能只会采样到右侧。如果我们只采样到右侧,可能 E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \mathbb E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)] 是正的。我们这边采样到这些点,去计算它们的 f ( x ) p ( x ) q ( x ) f(x)\frac{p(x)}{q(x)} f(x)q(x)p(x) 都是正的。我们采样到这些点都是正的,取期望值以后也是正的,这是因为采样的次数不够多。假设我们采样次数很少,只能采样到右边。左边虽然概率很低,但也有可能被采样到。假设我们好不容易采样到左边的点,因为左边的点的 p ( x ) p(x) p(x) q ( x ) q(x) q(x) 差是很多的,这边 p ( x ) p(x) p(x) 很大, q ( x ) q(x) q(x) 很小。 f ( x ) f(x) f(x) 好不容易终于采样到一个负的,这个负的就会被乘上一个非常大的权重,这样就可以平衡刚才那边一直采样到正的值的情况。最终我们算出这一项的期望值,终究还是负的。但前提是我们要采样足够多次,这件事情才会发生。但有可能采样次数不够多, E x ∼ p [ f ( x ) ] \mathbb E_{x \sim p}[f(x)] Exp[f(x)] E x ∼ q [ f ( x ) p ( x ) q ( x ) ] \mathbb E_{x \sim q}[f(x)\frac{p(x)}{q(x)}] Exq[f(x)q(x)p(x)]​ 可能就有很大的差距,这就是重要性采样的问题。

有了重要性采样,就可以使用旧模型参数 θ ′ {\theta'} θ采集到的数据来更新新的模型参数 θ \theta θ,旧模型记作 π θ \pi_{\theta} πθ,新模型记作 π θ ′ \pi_{\theta'} πθ

梯度公式:
∇ R ˉ θ = E τ ∼ p θ ( τ ) [ p θ ( τ ) p θ ′ ( τ ) R ( τ ) ∇ log ⁡ p θ ( τ ) ] \nabla \bar{R}_{\theta} = \mathbb{E}_{\tau \sim p^{\theta}(\tau)} \left[ \frac{p^{\theta}(\tau)}{p^{\theta'}(\tau)} R(\tau) \nabla \log p^{\theta}(\tau) \right] Rˉθ=Eτpθ(τ)[pθ(τ)pθ(τ)R(τ)logpθ(τ)]
这个公式是由REINFORCE的梯度公式加了一个重要性权重变换过来的。

状态动作对概率分开算:
E ( s t , a t ) ∼ π θ [ A θ ( s t , a t ) ∇ log ⁡ p θ ( a t ∣ s t ) n ] \mathbb{E}_{(s_t, a_t) \sim \pi_{\theta}} \left[ A^{\theta}(s_t, a_t) \nabla \log p_{\theta}(a_t|s_t)^n \right] E(st,at)πθ

内容概要:本文详细介绍了一个基于Java和Vue的迁移学习与少样本图像分类系统的设计与实现,涵盖项目背景、目标、技术架构、核心算法、前后端代码实现、数据库设计、部署方案及应用领域。系统通过融合迁移学习与少样本学习技术,解决实际场景中样本稀缺、标注成本高、模型泛化能力差等问题,支持数据增强、预训练模型微调、原型网络(ProtoNet)等算法,并实现前后端分离、模块化设计、可视化监控与自动化工作流。项目提供完整的代码示例、API接口规范、数据库表结构及GUI界面,具备高扩展性、安全性和易用性,适用于医疗、工业、农业等多个领域。; 适合人群:具备一定Java、Vue和深度学习基础的研发人员、AI算法工程师、计算机相关专业学生及从事智能图像分析的科研人员。; 使用场景及目标:①在样本极少的场景下实现高精度图像分类,如医疗影像、工业缺陷检测;②构建可扩展、可视化的AI训练与推理平台;③学习如何将Python深度学习模型与Java后端集成,掌握前后端分离的AI系统开发流程;④了解迁移学习、少样本学习在实际工程中的落地方法。; 阅读建议:建议结合文档中的代码示例与流程图,搭建本地开发环境进行实践,重点关注前后端交互逻辑、Python模型服务调用机制及数据库设计,同时可基于项目结构扩展联邦学习、多模态融合等高级功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值