DDPG(Deep Deterministic Policy Gradient)算法

881 阅读5分钟

1、算法思想

DDPG我们可以拆开来看Deep Deterministic Policy Gradient

Deep:首先Deep我们都知道,就是更深层次的网络结构,我们之前在DQN中使用两个网络与经验池的结构,在DDPG中就应用了这种思想。 PolicyGradient:顾名思义就是策略梯度算法,能够在连续的动作空间根据所学习到的策略(动作分布)随机筛选动作 Deterministic : 它的作用就是用来帮助Policy Gradient不让他随机选择,只输出一个动作值

  • 随机性策略, ∑ π ( a ∣ s ) = 1 \sum\pi(a|s)=1 ∑π(a∣s)=1 策略输出的是动作的概率,使用正态分布对动作进行采样选择,即每个动作都有概率被选到;优点,将探索和改进集成到一个策略中;缺点,需要大量训练数据。
  • 确定性策略, π ( s ) S → A \pi(s) S→A π(s)S→A 策略输出即是动作;优点,需要采样的数据少,算法效率高;缺点,无法探索环境。然而因为我们引用了DQN的结构利用offPolicy采样,这样就解决了无法探索环境的问题

从DDPG网络整体上来说:他应用了 Actor-Critic 形式的, 所以也具备策略 Policy 的神经网络 和基于 价值 Value 的神经网络,因为引入了DQN的思想,每种神经网络我们都需要再细分为两个, Policy Gradient 这边,我们有估计网络和现实网络,估计网络用来输出实时的动作, 供 actor 在现实中实行,而现实网络则是用来更新价值网络系统的。再看另一侧价值网络, 我们也有现实网络和估计网络, 他们都在输出这个状态的价值, 而输入端却有不同, 状态现实网络这边会拿着从动作现实网络来的动作加上状态的观测值加以分析,而状态估计网络则是拿着当时 Actor 施加的动作当做输入。

DDPG 在连续动作空间的任务中效果优于DQN而且收敛速度更快,但是不适用于随机环境问题。

2、公式推导

再来啰唆一下前置公式 s t s_t st​:在t时刻,agent所能表示的环境状态,比如观察到的环境图像,agent在环境中的位置、速度、机器人关节角度等; a t a_t at​:在t时刻,agent选择的行为(action) r ( s t , a t ) r(s_t,a_t) r(st​,at​):函数: 环境在状态st 执行行为at后,返回的单步奖励值; R t R_t Rt​:是从当前状态直到将来某个状态中间所有行为所获得奖励值的之和当然下一个状态的奖励值要有一个衰变系数 γ \gamma γ 一般情况下可取0到1的小数 R t = ∑ i = t γ i − t r ( s i , a i ) R_t=∑_{i=t}γ^{i−t}r(s_i,a_i) Rt​=∑i=t​γi−tr(si​,ai​)

Policy Gradient: 通过概率的分布函数确定最优策略,在每一步根据该概率分布获取当前状态最佳的动作,产生动作采取的是随机性策略 a t ∼ π θ ( s t ∣ θ π ) a_t ∼π_θ(s_t|θ^π) at​∼πθ​(st​∣θπ) 目标函数: J ( π θ ) = ∫ S ρ π ( s ) ∫ A π θ ( s , a ) r ( s , a ) d a d s = E s ∼ ρ π , a ∼ π θ [ r ( s , a ) ] J(\pi_\theta)=∫_Sρ^\pi(s)∫_A\pi_\theta(s,a)r(s,a)dads=E_{s∼ρ^\pi,a∼\pi_\theta}[r(s,a)] J(πθ​)=∫S​ρπ(s)∫A​πθ​(s,a)r(s,a)dads=Es∼ρπ,a∼πθ​​[r(s,a)](注意dads不是什么未知的符号,而是积分的 da ds) 梯度: ∇ θ J ( π θ ) = ∫ S ρ π ( s ) ∫ A ∇ θ π θ ( s , a ) Q π ( s , a ) d a d s = E s ∼ ρ π , a ∼ π θ [ ∇ θ l o g π θ ( a ∣ s ) Q π ( s , a ) ] ∇_θJ(π_θ)=∫_Sρ^\pi(s)∫_A∇_θ\pi_\theta(s,a)Q^\pi(s,a)dads=E_{s∼ρ^\pi,a∼\pi_\theta}[∇_θlog\pi_\theta(a|s)Q^\pi(s,a)] ∇θ​J(πθ​)=∫S​ρπ(s)∫A​∇θ​πθ​(s,a)Qπ(s,a)dads=Es∼ρπ,a∼πθ​​[∇θ​logπθ​(a∣s)Qπ(s,a)]

Deterministic Policy Gradient: 因为Policy Gradient是采取随机性策略,所以要想获取当前动作action就需要对最优策略的概率分布进行采样,而且在迭代过程中每一步都要对整个动作空间进行积分,所以计算量很大 在PG的基础上采取了确定性策略,根据行为直接通过函数μ确定了一个动作,可以吧μ理解成一个最优行为策略

a t = μ ( s t ∣ θ μ ) a_t=μ(s_t|θ^μ) at​=μ(st​∣θμ)

performance objective为 J ( μ θ ) = ∫ S ρ μ ( s ) r ( s , μ θ ( s ) ) d s J(μ_\theta)=∫_Sρ^μ(s)r(s,μ_\theta(s))ds J(μθ​)=∫S​ρμ(s)r(s,μθ​(s))ds J ( μ θ ) = E s ∼ ρ μ [ r ( s , μ θ ( s ) ) ] J(μ_\theta)=E_{s∼ρ^μ}[r(s,μ_\theta(s))] J(μθ​)=Es∼ρμ​[r(s,μθ​(s))] deterministic policy梯度 ▽ θ J ( μ θ ) = ∫ S ρ μ ( s ) ▽ θ μ θ ( s ) Q μ ( s , a ) ∣ a = μ θ d s = E s ∼ ρ β [ ▽ θ μ θ ( s ) Q μ ( s , a ) ∣ a = μ θ ] ▽_\theta J(μ_\theta)=∫_Sρ^μ(s)▽\theta μ_\theta(s)Q^μ(s,a)|{a=μ\theta}ds=E_{s∼ρ^β}[▽\theta μ_\theta(s)Q^μ(s,a)|{a=μ\theta}] ▽θ​J(μθ​)=∫S​ρμ(s)▽θμθ​(s)Qμ(s,a)∣a=μθ​​ds=Es∼ρβ​[▽θμθ​(s)Qμ(s,a)∣a=μθ​​]

DDPG就是用了确定性策略在DPG基础上结合DQN的特点建议改进出来的算法

Deep Deterministic Policy Gradient 所以基于上述两种算法 DDPG采用确定性策略μ来选取动作 a t = μ ( s t ∣ θ μ ) a_t=μ(s_t|θ^μ) at​=μ(st​∣θμ) 其中 θ μ θ^μ θμ是产生确定性动作的策略网络的参数。根据之前提到过的AC算与PG算法我们可以想到,使用策略网络μ来充当actor,使用价值网络来拟合(s,a)函数,来充当critic的角色,所以将DDPG的目标函数就可以定义为

J ( θ μ ) = E θ μ [ r 1 + γ r 2 + γ 2 r 3 + ⋯ ] J(θ^μ)=E_{θ^μ}[r_1+γr_2+γ^2r_3+⋯] J(θμ)=Eθμ​[r1​+γr2​+γ2r3​+⋯]

此时Q函数表示为在采用确定性策略μ下选择动作的奖励期望值,在DDPG我们就采用DQN的结构使用Q网络来拟合Q函数

Q μ ( s t , a t ) = E [ r ( s t , a t ) + γ Q μ ( s t + 1 , μ ( s t + 1 ) ) ] Q^μ(s_t,a_t)=E [r(s_t,a_t)+γQ^μ(s_{t+1},μ(s_{t+1}))] Qμ(st​,at​)=E[r(st​,at​)+γQμ(st+1​,μ(st+1​))]

Q网络中的参数定义为 θ Q \theta^Q θQ, Q μ ( s , μ ( s ) ) Q^μ(s,μ(s)) Qμ(s,μ(s))表示使用μ策略在s状态选选取动作所获取的回报期望值,又因为是在连续空间内所以期望可用积分来求,则可以使用下式来表示策略μ的好坏

J β ( μ ) = ∫ S ρ β ( s ) Q μ ( s , μ ( s ) ) d s = E s ∼ ρ β [ Q μ ( s , μ ( s ) ] J_β(μ)=∫_Sρ^β(s)Q^μ(s,μ(s))ds=E_{s∼ρ^β}[Q^μ(s,μ(s)] Jβ​(μ)=∫S​ρβ(s)Qμ(s,μ(s))ds=Es∼ρβ​[Qμ(s,μ(s)]