目录
一、前言
Deep Deterministic Policy Gradient (DDPG)
算法是DeepMind
团队提出的一种专门用于解决连续控制问题的在线式(on-line)
深度强化学习算法,它其实本质上借鉴了Deep Q-Network (DQN)算法里面的一些思想。论文和源代码如下:
论文:https://arxiv.org/pdf/1509.02971.pdf
代码:https://github.com/indigoLovee/DDPG
本文将会介绍其基本原理,并实现DDPG
算法来训练游戏的例子
二、基本原理
DDPG(Deep Deterministic Policy Gradient)
是一种用于解决连续动作空间问题的深度强化学习算法,结合了确定性策略和经验回放的思想。下面是DDPG
算法的主要特点和步骤:
-
Actor-Critic架构:
DDPG
算法基于Actor-Critic
框架,其中Actor
负责学习确定性策略,即在给定状态下直接输出动作值;Critic
负责学习值函数,评估当前状态的价值。 -
确定性策略:与传统的策略梯度方法不同,
DDPG
使用确定性策略,即直接输出动作值而不是动作的概率分布。这有助于在连续动作空间中更好地学习策略。 -
经验回放:为了解决样本相关性和稳定性问题,
DDPG
引入了经验回放机制,将Agent
与环境交互得到的经验存储在经验回放缓冲区中,然后从中随机采样进行训练。 -
目标网络:为了稳定训练,
DDPG
使用目标网络来估计目标Q值和目标策略。目标网络的参数是通过软更新的方式从主网络的参数逐渐更新得到的。 -
噪声探索:确定性策略输出的动作为确定性动作,缺乏对环境的探索。在训练阶段,给
Actor
网络输出的动作加入噪声,从而让智能体具备一定的探索能力。
为什么引入目标网络?
在深度强化学习中,引入目标网络是为了解决训练过程中的不稳定性和提高算法的收敛性。具体来说,引入目标网络主要有以下两个作用:
稳定训练:在训练深度强化学习模型时,目标网络的引入可以减少训练过程中的“moving target”问题。在训练Q网络或者Actor网络时,如果每次更新都直接影响到当前的网络参数,会导致目标值的变化,从而使得训练不稳定。通过引入目标网络,可以固定目标网络的参数一段时间,使得目标值更加稳定,有利于训练的收敛。
减少估计误差:在深度强化学习中,通常会使用TD目标来更新Q值或者Actor策略。而直接使用当前的网络来估计TD目标可能会引入较大的估计误差,导致训练不稳定。通过引入目标网络,可以使用目标网络来估计TD目标,减少估计误差,从而提高算法的稳定性和收敛性。
DDPG
算法的原理如下图所示:
2.1、经验回放
经验回放就是一种让经验概率分布变得稳定的技术,可以提高训练的稳定性。经验回放主要有“存储”和“回放”两大关键步骤:
存储:将经验以 ( s t , a t , r t + 1 , s t + 1 , d o n e ) (s_{t},a_{t},r_{t+1},s_{t+1},done) (st,at,rt+1,st+1,done)形式存储在经验池中。
回放:按照某种规则从经验池中采样一条或多条经验数据。
本质上就是与DQN
算法一样的经验回放操作
2.2、更新过程
DDPG
共包含 4 个神经网络,用于对 Q 值函数和策略的近似表示。
由于DDPG
算法是基于AC
框架,因此算法中必然含有Actor
和Critic
网络。另外每个网络都有其对应的目标网络,所以DDPG
算法中包括四个网络,分别是Actor
网络 μ ( ⋅ ∣ θ μ ) μ(·| θ^μ) μ(⋅∣θμ),Critic
网络 Q ( ⋅ ∣ θ Q ) Q(·| θ^Q) Q(⋅∣θQ),Target Actor
网络 μ ′ ( ⋅ ∣ θ u ′ ) μ^{'}(·| θ^{u'}) μ′(⋅∣θu′)和Target Critic
网络 Q ′ ( ⋅ ∣ θ Q ′ ) Q^{'}(·| θ^{Q'}) Q′(⋅∣θQ′) 。
算法更新主要更新的是Actor
和Critic
网络的参数,其中Actor
网络通过最大化累积期望回报来更新,Critic
网络通过最小化评估值与目标值之间的误差来更新。在训练阶段,我们从Replay Buffer
中采样一个批次的数据,假设采样到的一条数据为,Actor
和Critic
网络更新过程如下。
2.2.1、Critic网络更新过程
1、利用Target Actor
网络计算出状态 s ′ s^{'} s′(下一个状态)下的动作:
a ′ a^{'} a′ = μ ′ ( s ′ ∣ θ u ′ ) μ^{'}(s^{'}| θ^{u'}) μ′(s′∣θ