学习RL(六)

DDPG与TD3:连续动作空间的深度确定性策略梯度 Open AI Spinning Up - DDPG - DDPG(Deep Deterministic Policy Gradient) Deep Deterministic Policy Gradient (DDPG) is an algorithm which concurrently learns a Q-function and a policy. It uses off-policy data and the Bellman equation to learn the Q-function, and uses the Q-function to learn the policy. 本文记录我在学习DDPG(Deep Deterministic Policy Gradient)和TD3(Twin Delayed DDPG)的过程,梳理清楚他们产生的背景,核心思想,特点以及我在实现过程中遇到的问题记录和解决。 1. 背景与动机 DQN在离散动作空间表现出色。然而,在许多实际控制任务中(如机器人控制、自动驾驶等),动作空间是连续的。DQN无法计算所有的$Q(s,a)$,代价太大。随着动作空间维度的提升,离散化动作空间带来的成本增加呈指数级别。 DDPG正是为解决连续动作空间控制问题而设计的。 2. DDPG核心思想 参考Policy Gradient和PPO,DDPG和TD3想要通过梯度下降的方法对Policy做优化(调节$\theta$),在训练结束的时候,具有一个最优化的$\theta$,使得$Q(s,a)$$\big(a=\mu_\theta(s)\big )$最大化,还要借鉴DQN当中使用到的replay buffer: $\mathcal D$和target network等技术,来提升训练的稳定性和效率。DQN通过Q网络1和target_Q网络2分别近似$Q^\star(s,a)$和$Q^\star(s’,a’)$, 根据Bellman Optimality Equation: ...

2026年3月16日 · 45 分钟 · Yang

学习RL(五)

积累奖励(状态价值)对策略的梯度与环境动力学无关 在写两个算法之后,再明确一下基于优化策略梯度的核心思想。在RL_5中推导了策略梯度是一个期望,具体形式如下: $$ \begin{equation} \nabla _\theta J(\theta) = \mathbb{E} _{a \sim \pi _\theta, s \sim d _{\theta}} \sum _{t=0}^{T} A^{\pi _{\theta}}(s_t,a_t)\nabla _\theta \ln \pi _{\theta}(a_t|s_t) \label{eq1}\tag{1} \end{equation} $$ $$ \begin{equation} \begin{aligned} \nabla _{\theta} J(\theta) &= \mathbb{E} _{s \sim d _{\theta}}\sum _{a \in \mathcal A} A^{\pi}(s,a) \nabla _{\theta} \pi(a|s) \\ &= \mathbb{E} _{s \sim d _{\theta}}\sum _{a \in \mathcal A} \pi(a|s)A^{\pi}(s,a) \frac {\nabla _{\theta} \pi(a|s)}{\pi(a|s)} \\ &= \mathbb{E} _{s \sim d _{\theta},a \sim \pi} A^\pi(s,a) \nabla _{\theta} \ln \pi(a|s) \end{aligned} \label{eq2}\tag{2} \end{equation} $$ ...

2026年1月15日 · 45 分钟 · Yang

学习RL(四)

更新记录 2025-12-15:从策略下的系统演进路径$\tau$推导PG为什么不需要对环境迁移概率求导$p(\boldsymbol s_{t},r|\boldsymbol s_{t-1},\boldsymbol a_{t-1})$从而引入baseline。 1. 为什么要有Policy Gradient 学习RL(三)当中提到,相比策略评估和策略迭代分开进行的方法,GPI已经有了进步,能够在策略评估的阶段就先把actions: $\mathcal{A}$(离散的)遍历一遍,找到使得action-value$:Q_\pi(s,a)$ (为了把概念表达清晰,这里我想纠正我之前的blog当中对action-value采用的符号:$q(s,a)$)最大的那个$a$ : $\arg\max_{a \in \mathcal{A}} Q_\pi(s, a)$。之前在写blog的时候,脑子里面一直就藏着一个大问号:如果是控制电机的转速这种连续的场景,该怎么遍历 $\mathcal{A}$呢?当时我的想法是将 $\mathcal{A}$分段考虑,但是直到我知道有Policy Gradient。 2. 什么是函数的Gradient 梯度一般是在函数自变量空间当中的一个向量(假设函数的自变量是一个向量),坐标系统是在一个垂直正交的系统中,$\nabla$就是一个在坐标系统中有方向有大小的向量,方向代表了自变量沿着该方向移动微小距离$dr$,函数变化最大。$df=||f(\boldsymbol x + dr\cdot \nabla f(\boldsymbol x))-f(\boldsymbol x)|| \geq || f(\boldsymbol x + dr\cdot \boldsymbol \alpha)-f(\boldsymbol x)|| \boldsymbol (\alpha \text{ is any vector in } \boldsymbol X$)。 图1: 梯度方向示意。$\nabla f(\boldsymbol x)$ 指向函数值变化最快的方向。 3. 从价值函数推导 $$ J(\theta) = \sum_{s \in \mathcal{S}} d_\pi(s) V_\pi(s) = \sum_{s \in \mathcal{S}} d_\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \vert s) Q_\pi(s, a) \tag{1} $$ 对比之前的依据action-value$:Q_\pi(s,a)$寻找$s$上的$a_{best}$,本方法依旧会使用$:Q_\pi(s,a)$,但是并不在每次的迭代中(GDI)去直接做action的选择,而是参与到对(1)的梯度计算当中。 ...

2025年6月9日 · 63 分钟 · Yang

学习RL(二)

动态规划 在环境动力学模型$p(s’, r|s, a)$已知的情况下,学习状态价值或者是动作价值。 策略评估–Policy Evaluation 讨论的是如何在已知策略的情况下计算状态价值函数,从而得到采用该策略的价值有多大。 在DP当中policy evaluation就是计算状态价值函数,也就做prediction problem。 这里讨论的是如何计算状态价值函数,该函数是从初始的状态(不准)迭代计算的,迭代的终止条件是状态价值的更新幅度小于一个预设的阈值$\theta$,也就是说当状态价值函数的更新幅度小于$\theta$的时候,就认为状态价值函数已经收敛了。 还有一个具体的细节:提到了两种状态价值迭代的方式,一种是维护上一次所有状态价值的数组和当前状态价值的数组,计算当前的状态价值的时候只参考上一个状态的数组,还有一种是直接将上一次的数组某个状态价值更新了,其他状态价值的计算直接用更新了的。后面的讨论默认都是基于第二种方式。 明显地,想要实现上面的计算过程有一个概率需要知道,那就是状态转移概率$p(s’, r|s, a)$,也就是在状态$s$下采取行动$a$之后,转移到状态$s’$并且得到奖励$r$的概率,这也是叫做环境模型已知。这个概率在DP当中是已知的,在后续的MC和TD当中是未知的。 策略改进–Policy Improvement 讨论的是在已有一个策略,且该策略所对应的状态价值已经确定的情况下,如何调整$a=\pi(s)$为$a’=\pi’(s)$,使得改进了的策略在将来与环境交互中获得更多的奖励。 想法的来源是在状态为$s$的情况下,我们知道,继续沿用策略$\pi$, 所得到的后续收益就是$V(s)=\mathbb{E}(G|S=s)$。那么,一个问题来了:有没有可能,在状态为$s$的情况下,采取一个不同于$\pi(s)$的行动$a’$, 从而得到一个更大的收益$\mathbb{E}(G|S=s, A=a’)$,也就是说,是否存在一个行动$a’$使得$Q(s, a’) > V(s)$。如果存在这样的行动,那么我们就可以把当前状态下的策略改进为$\pi’(s)=a’$, 也就是说,在状态为$s$的时候,不再按照之前的策略$\pi(s)$来选择行动,而是按照新的策略$\pi’(s)=a’$来选择行动:因为采取$a’$获得了更多的收益。这种单个状态下的动作改变,其实是更普遍的情况下的一个特例,普遍地,在已知策略$\pi$和状态价值$V _{\pi}(s)$的情况下,我们可以通过计算$Q _{\pi}(s,a)=\mathbb {E}(r _{t+1}+ \gamma V _{\pi}(s’)|S=s,A=a)=\sum _{r _{t+1},s’}p(s’,r _{t+1}|s,a)\big ( r _{t+1}+ \gamma V _{\pi}(s’)\big )$来找到一个行动$a’$使得$Q _{\pi}(s,a’) > V _{\pi}(s)$,从而把当前状态下的策略改进为$\pi’(s)=a’$。 贪心策略:对于任意一个状态$s$,遍历所有可能采取的行动,看看哪种行动的状态-行动价值最高,那么,当后面遇到状态为$s$的时候,就直接采取行动$\pi’(s)$。 $$ \pi’(s) = \arg \max _a Q _{\pi}(s,a) = \arg \max _a \sum _{r _{t+1},s’}p(s’,r|s,a)\big ( r _{t+1}+ \gamma V _{\pi}(s’)\big ) $$ ...

2024年10月18日 · 57 分钟 · Yang

学习RL(一)

基础概念 智能体和环境交互 图1: Agent 与环境交互的基本结构。Agent 根据当前状态 $s_t$ 选择动作 $a_t$,环境依据状态转移概率 $p(s’,r|s,a)$ 返回下一状态 $s_{t+1}$ 和奖励 $r_t$。 上面的图展示了RL智能体与环境交互的结构。这个示意图是很广义和普遍的:action可以是加载在机械臂电机上的控制电压或者是PWM信号,也可以是高级别的决策,例如是否要变道;state也比较灵活,可以看作是传感器回传的数据,也可以看作是在空间中特定符号描述的物体信息。 奖励 奖励这个概念我认为比较模糊,或者说它的来源可以是人为设计,也可以是环境给出。在机器人领域,奖励稀疏是一个常见问题,没有奖励的情况下,智能体很难学到真实的状态价值或者动作价值,那么策略的优化就很难进行下去。针对这个问题,后续专门讨论。 策略 策略$\pi$是智能体在状态$s$下对动作$a$的选择,或者是一个从状态到动作的映射关系。它可以是一个确定性的函数,例如DDPG和TD3那样输出准确的动作,也可以是一个随机的概率分布,例如PPO输出的是动作的高斯分布期望,可以利用这个期望生成一个分布,然后从分布中采样出来一个具体的动作。 状态价值$V(s)$ 系统在状态$s$下,根据某个策略$\pi$采取行动,在后续和环境交互的过程中,得到的收益$G$的期望。 $$ \begin{aligned} & V(s)=\mathbb{E} _{\pi}(G|S=s) \\ & G=R _{t+1} + \gamma R _{t+2}+ \gamma ^2 R _{t+3} \cdots =\sum _{k=0}^{\infty}\gamma ^k R _{t+k+1} \end{aligned} $$ 行动价值$Q(s,a)$ 在状态$s$下,采取行动$a$之后,在后续和环境交互的过程中,得到的收益$G$的期望。 $$ \begin{aligned} & Q(s,a)=\mathbb{E} _{\pi}(G|S=s,A=a) \\ & G=R _{t+1} + \gamma R _{t+2}+ \gamma ^2 R _{t+3} \cdots =\sum _{k=0}^{\infty}\gamma ^k R _{t+k+1} \end{aligned} $$ ...

2024年7月26日 · 27 分钟 · Yang