深度强化学习笔记

暂时完结

蒙特卡洛

近似期望

  1. 离散型

E(f(X))=i=1nf(xi)piE(f(X)) = \sum_{i=1}^{n} f(x_i) p_i

  1. 连续型

E(f(X))=f(x)p(x)dxE(f(X)) = \int f(x)·p(x) dx

用如下方式减少内存开销:
初始化q0=0q_{0}=0,从t=1t=1开始,依次更新qtq_t

qt=(11/t)qt1+1/tf(xt)q_t = (1 - 1/t)·q_{t-1} + 1/t·f(x_t)

1/t1/t替换为αt\alpha_t,则有:

qt=(1αt)qt1+αtf(xt)q_t = (1 - α_t)·q_{t-1} + α_t·f(x_t)

该式称为Robbinson-Monro算法,其中αn\alpha_n为学习率

随机梯度下降

随机梯度下降(Stochastic Gradient Descent, SGD)是一种常用的优化算法,用于最小化目标函数。我们可以用蒙特卡洛方法的思想来理解随机梯度下降。
神经网络的训练可以定义为这样的优化问题:

minwEXp()[L(X;w)]\min_{w} \mathbb{E}_{X \sim p(·)}[L(X;w)]

其中,ww是神经网络的参数,p()p(·)是输入数据的分布,LL是损失函数。
目标函数的梯度\mathbb{E}_{X \sim p(·)}[L(X;w)]关于参数ww的梯度可以表示为:

gwEXp()[L(X;w)]=EXp()[wL(X;w)]g \triangleq \nabla_w \mathbb{E}_{X \sim p(·)}[L(X;w)] = \mathbb{E}_{X \sim p(·)}[\nabla_w L(X;w)]

可以做梯度下降更新w,以减小目标函数的值:

wwαgw \leftarrow w - \alpha g

其中,α\alpha是学习率。直接计算全部样本的梯度g的期望会非常耗时,因此做蒙特卡洛方法近似,把得到的近似梯度g^\hat{g}作为w的更新量。

  1. 根据p(x)随机采样得到B个样本,记作x^1,x^2,,x^B\hat{x}_1, \hat{x}_2, \ldots, \hat{x}_B
  2. 计算每个样本的梯度g^i=wL(x^i;w)\hat{g}_i = \nabla_w L(\hat{x}_i;w)
  3. 计算B个样本的梯度的平均值g^=1Bi=1Bg^i\hat{g} = \frac{1}{B} \sum_{i=1}^B \hat{g}_i
  4. 更新w:wwαg^w \leftarrow w - \alpha \hat{g}
    样本数量B称作batch size(批大小),通常是比较小的正整数,比如1、8、16、32等。所以称之为小批量SGD。
    在实际应用中,p(x)一般未知,训练神经网络时通常收集一个训练集X=x1,x2,,xn\mathcal{X} = {x_1, x_2, \ldots, x_n},并求解下面这样一个经验风险最小化问题:

minw1ni=1nL(xi;w)\min_{w} \frac{1}{n} \sum_{i=1}^n L(x_i;w)

这相当于用下面这个概率密度函数来代替 p(x)p(x)

p(x)={1nif xX0otherwisep(x) = \begin{cases} \frac{1}{n} & \text{if } x \in \mathcal{X} \\ 0 & \text{otherwise} \end{cases}

强化学习基本概念

回合episode和epoch的区别

  • episode
    回合指示一个完整的交互过程,包括一系列的状态、动作和奖励。一个回合可以包含多个交互步骤,直到达到终止状态或达到最大步数。就是打完一把游戏。
  • epoch
    一个epoch表示在整个训练数据集上进行一次完整的前向传播和反向传播过程。一个epoch通常包含多个回合,每个回合都包含多个交互步骤。

回报return

return是从当前时刻开始,到回合结束的所有奖励之和,也叫为累计奖励。
强化学习的目标是最大化回报,而不是最大化当前奖励。

折扣率γ\gamma

使用折扣率小于1,无限期MDP的回报是有界的。

动作价值函数Qπ(s,a)Q_{\pi}(s,a)

动作价值函数是指在给定状态ss和动作aa的情况下,根据策略π\pi,未来可能获得的累计奖励的期望值。

Qπ(s,a)=Eπ[Rt+1+γRt+2+St=s,At=a]Q_{\pi}(s,a) = \mathbb{E}_{\pi}[R_{t+1} + \gamma R_{t+2} + \cdots | S_t = s, A_t = a]

最优动作价值函数Q(st,at)Q^*(s_t,a_t)

最优动作价值函数是指在给定状态sts_t和动作ata_t的情况下,在最优策略下未来可能获得的累计奖励的期望值。

Q(st,at)=maxaQπ(st,a)Q^*(s_t,a_t) = \max_{a} Q_{\pi}(s_t,a)

意思就是有多种策略π\pi可以选择,选择最优策略π\pi^*,在最优策略π\pi^*下未来可能获得的累计奖励的期望值。

状态价值函数Vπ(s)V_{\pi}(s)

状态价值函数是指根据策略π\pi,在给定状态ss的情况下,未来可能获得的累计奖励的期望值。

Vπ(st)=Eπ[Qπ(st,at)St=st]=aAπ(ast)Qπ(st,a)V_{\pi}(s_t) = \mathbb{E}_{\pi}[Q_{\pi}(s_t,a_t) | S_t = s_t] = \sum_{a \in \mathcal{A}} \pi(a|s_t) Q_{\pi}(s_t,a)

只依赖于状态sts_t,不依赖于动作ata_t。也是回报的期望值。

DQN与Q-Learning

QQ^*最优动作价值函数使用最大化消除策略π\pi
可以这样理解QQ^*:已知状态sts_t和动作ata_t,不论未来采取什么样的策略π\pi,回报的期望不可能超过QQ^*
所以要训练一个近似的QQ^*

深度Q网络(Deep Q Network, DQN)

记作Q(s,a;w),其结构如下:

  1. 输入:状态ss
  2. 卷积层:提取特征
  3. 全连接层:映射到动作空间
  4. 输出:离散动作空间A\mathcal{A}上的每个动作aa的Q值,即输出是一个A\mathcal{A}维的向量

DQN的梯度:

wQ(s,a;w)Q(s,a;w)w\nabla_w Q(s,a;w) \triangleq \frac{\partial Q(s,a;w)}{\partial w}

TD算法

训练DQN最常用的算法是TD(Temporal Difference, 时序差分)算法。
损失函数:

L(w)=12[Q(s,a;w)y]2L(w) = \frac{1}{2}[Q(s,a;w) - y]^2

梯度:

wL(w)=w12[Q(s,a;w)y]2=(q^y)wQ(s,a;w)\nabla_w L(w) = \nabla_w \frac{1}{2} [Q(s,a;w) - y]^2 = (\hat{q} - y)·\nabla_w Q(s,a;w)

然后梯度下降更新w。
TD算法就是把预测到中途的数据也利用上。
把到中途的q记作r(训练时是一个状态上的奖励),中途之后的路程q^\hat{q},则TD目标为y^r+q^\hat{y} \triangleq r + \hat{q},新的梯度为:

wL(w)=(q^y^)wQ(s,a;w)\nabla_w L(w) = (\hat{q} - \hat{y})·\nabla_w Q(s,a;w)

δ=q^y^\delta = \hat{q} - \hat{y} 称为TD误差。做一次梯度下降更新w:

wwαwL(w)=wα(q^y^)wQ(s,a;w)=wαδwQ(s,a;w)w \leftarrow w - \alpha \nabla_w L(w) = w - \alpha (\hat{q} - \hat{y})·\nabla_w Q(s,a;w) = w - \alpha · \delta ·\nabla_w Q(s,a;w)

TD误差δ\delta就是模型的估计与真实值之间的差距。

用TD算法训练DQN

近似可得:

Q(st,at)rt+γmaxaAQ(st+1,a)Q^*(s_t,a_t) \approx r_t + \gamma · \max_{a \in \mathcal{A}}Q^*(s_{t+1},a)

把上式中的Q()Q^*(·)替换为神经网络Q(s,a;w)Q(s,a;w),则有:

Q(s,a;w)rt+γmaxaAQ(st+1,a;w)Q(s,a;w) \approx r_t + \gamma · \max_{a \in \mathcal{A}}Q(s_{t+1},a;w)

做梯度下降:

wwαδtwQ(st,at;w)w \leftarrow w - \alpha · \delta_{t} ·\nabla_w Q(s_t,a_t;w)

训练流程

收集训练数据
用任意策略π\pi与环境交互,收集训练数据,此时称为行为策略π\pi。比较常用的是ϵ\epsilon-贪婪策略。

at={argmaxaQ(st,a;w)with probability 1ϵA中的随机动作with probability ϵa_t = \begin{cases} argmax_{a} Q(s_t,a;w) & \text{with probability } 1 - \epsilon \\ \mathcal{A} 中的随机动作 & \text{with probability } \epsilon \end{cases}

把一个回合的数据称为一个轨迹,记作:

T={s1,a1,r1,s2,a2,r2,,sT,aT,rT}\mathcal{T} = \{s_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_T,a_T,r_T\}

把一条轨迹分为n个(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1})这样的四元组,存入缓存,这个缓存称为回放缓冲区。

更新参数w
从经验回放缓冲区中随机采样一个小批量的四元组(st,at,rt,st+1)(s_t,a_t,r_t,s_{t+1}),当前参数wnoww_{now},执行以下步骤对参数做一次更新,得到新参数wneww_{new}

  1. 对DQN做正向传播,得到Q值:

q^j=Q(sj,aj;wnow)\hat{q}_j = Q(s_j,a_j;w_{now})

q^j+1=maxaAQ(sj+1,a;wnow)\hat{q}_{j+1} = \max_{a \in \mathcal{A}} Q(s_{j+1},a;w_{now})

  1. 计算TD目标和TD误差:

y^j=rj+γq^j+1\hat{y}_j = r_j + \gamma · \hat{q}_{j+1}

δj=q^jy^j\delta_j = \hat{q}_j - \hat{y}_j

  1. 对DQN进行反向传播,计算梯度:

gj=wQ(sj,aj;wnow)g_j = \nabla_w Q(s_j,a_j;w_{now})

  1. 梯度下降更新参数:

wnew=wnowαδjgjw_{new} = w_{now} - \alpha · \delta_j · g_j

收集数据和更新参数可以同时进行。

Q-Learning

TD目标

y^j=rj+γmaxaAQ(sj+1,a)\hat{y}_j = r_j + \gamma · \max_{a \in \mathcal{A}} \overset{\sim}{Q}(s_{j+1},a)

更新表格Q\overset{\sim}{Q}(st,at)(s_t,a_t)位置上的元素:

Q(st,at)Q(st,at)+α(y^jQ(st,at))\overset{\sim}{Q}(s_t,a_t) \leftarrow \overset{\sim}{Q}(s_t,a_t) + \alpha · (\hat{y}_j - \overset{\sim}{Q}(s_t,a_t))

训练流程

收集训练数据
与DQN一致
经验回放更新表格Q\overset{\sim}{Q}
随机从经验回放缓冲区中采样一个小批量的四元组(sj,aj,rj,sj+1)(s_j,a_j,r_j,s_{j+1}),记作QnowQ_{now},执行以下步骤对表格Q\overset{\sim}{Q}做一次更新:

  1. QnowQ_{now}(sj,aj)(s_j,a_j)位置上的元素记作qjq_j:

qj=Q(sj,aj)q_j = \overset{\sim}{Q}(s_j,a_j)

  1. 把第sj+1s_{j+1}行的最大Q值记作q^j+1\hat{q}_{j+1}

q^j+1=maxaAQnow(sj+1,a)\hat{q}_{j+1} = \max_{a \in \mathcal{A}} \overset{\sim}{Q}_{now}(s_{j+1},a)

  1. 计算TD目标和TD误差:

y^j=rj+γq^j+1\hat{y}_j = r_j + \gamma · \hat{q}_{j+1}

δj=q^jy^j\delta_j = \hat{q}_j - \hat{y}_j

  1. 更新表格Q\overset{\sim}{Q}(sj,aj)(s_j,a_j)位置上的元素:

Qnew(sj,aj)Qnow(sj,aj)αδj\overset{\sim}{Q}_{new}(s_j,a_j) \leftarrow \overset{\sim}{Q}_{now}(s_j,a_j) - \alpha · \delta_j

同策略与异策略

同策略(on-policy)
收集经验的行为策略和更新参数的策略是同一个策略。

异策略(off-policy)
收集经验的行为策略和更新参数的策略是不同的策略。
经验。经验回放只适用于异策略。DQN与Q-Learning都是异策略。

SARSA算法

表格形式的SARSA

学习动作价值函数Qπ(s,a)Q_{\pi}(s,a)
TD目标:

y^jrj+γq(sj+1,aj+1)\hat{y}_j \triangleq r_j + \gamma · q (s_{j+1},\overset{\sim}{a}_{j+1})

更新表格ss中的(st,at)(s_t,a_t)位置上的元素:

q(st,at)q(st,at)+α(y^tq(st,at))q(s_t,a_t) \leftarrow q(s_t,a_t) + \alpha · (\hat{y}_t - q(s_t,a_t))

训练流程
设当前表格qq,当前策略为πnow{\pi}_{now},每一轮更新表格中的一个元素,把更新之后的表格记为qnewq_{new},执行以下步骤:

  1. 观测到当前状态sts_t,根据当前策略做抽样:

atπnow(st)a_t \sim \pi_{now}(·|s_t)

  1. qnowq_{now}(st,at)(s_t,a_t)位置上的元素记作:

q^t=qnow(st,at)\hat{q}_t = q_{now}(s_t,a_t)

  1. 执行动作ata_t,得到奖励rtr_t和下一个状态st+1s_{t+1}
  2. 根据当前策略做抽样:at+1πnow(st+1)\overset{\sim}{a}_{t+1} \sim \pi_{now}(·|s_{t+1})at+1\overset{\sim}{a}_{t+1}并不执行,是假想的动作。
  3. qnowq_{now}(st+1,at+1)(s_{t+1},\overset{\sim}{a}_{t+1})位置上的元素记作:

q^t+1=qnow(st+1,at+1)\hat{q}_{t+1} = q_{now}(s_{t+1},\overset{\sim}{a}_{t+1})

  1. 计算TD目标和TD误差:

y^t=rt+γq^t+1\hat{y}_t = r_t + \gamma · \hat{q}_{t+1}

δt=q^ty^t\delta_t = \hat{q}_t - \hat{y}_t

  1. 更新表格qnewq_{new}(st,at)(s_t,a_t)位置上的元素:

qnew(st,at)qnow(st,at)αδtq_{new}(s_t,a_t) \leftarrow q_{now}(s_t,a_t) - \alpha · \delta_t

  1. 用某种算法更新策略πnew\pi_{new}。该算法与SARSA算法无关。

SARSA算法是同策略的,近似QπQ_{\pi}
Q学习算法是异策略的,近似QQ^*

神经网络形式的SARSA

用神经网络q(s,a;w)q(s,a;w)来近似Qπ(s,a)Q_{\pi}(s,a),也称为价值网络,首先随机初始化w,然后用SARSA算法更新w。

梯度下降

wwαδtwq(st,at;w)w \leftarrow w - \alpha · \delta_t · \nabla_w q(s_t,a_t;w)

训练流程

  1. 观测到当前状态sts_t,根据当前策略做抽样:

atπnow(st)a_t \sim \pi_{now}(·|s_t)

  1. 用神经网络q(st,at;w)q(s_t,a_t;w)做正向传播,得到Q值:

q^t=q(st,at;wnow)\hat{q}_t = q(s_t,a_t;w_{now})

  1. 执行动作ata_t,得到奖励rtr_t和下一个状态st+1s_{t+1}
  2. 根据当前策略做抽样:at+1πnow(st+1)\overset{\sim}{a}_{t+1} \sim \pi_{now}(·|s_{t+1})at+1\overset{\sim}{a}_{t+1}并不执行,是假想的动作。
  3. 用神经网络q(st+1,at+1;w)q(s_{t+1},\overset{\sim}{a}_{t+1};w)做正向传播,得到Q值:

q^t+1=q(st+1,at+1;w)\hat{q}_{t+1} = q(s_{t+1},\overset{\sim}{a}_{t+1};w)

  1. 计算TD目标和TD误差:

y^t=rt+γq^t+1\hat{y}_t = r_t + \gamma · \hat{q}_{t+1}

δt=q^ty^t\delta_t = \hat{q}_t - \hat{y}_t

  1. 用神经网络q(st,at;w)q(s_t,a_t;w)做反向传播,计算梯度:

gt=wq(st,at;w)g_t = \nabla_w q(s_t,a_t;w)

  1. 梯度下降更新参数:

wnew=wnowαδtgtw_{new} = w_{now} - \alpha · \delta_t · g_t

  1. 用某种算法更新策略πnew\pi_{new}。该算法与SARSA算法无关。

多步TD目标

m步TD目标(到中途前走了m步):

y^tk=0m1γkrt+k+γmq^t+m\hat{y}_t \triangleq \sum_{k=0}^{m-1} \gamma^k r_{t+k} + \gamma^m · \hat{q}_{t+m}

训练流程
需要注意的是更新价值网络参数((nm)(n-m)表示回到中途需要这么多步):

wwαk=0nmγkδtgtw \leftarrow w - \alpha · \sum_{k=0}^{n-m} \gamma^k \delta_t · g_t

蒙特卡洛方法与自举

蒙特卡洛方法
用实际观测值近似期望。
好处:无偏性。
坏处:方差大。

自举(bootstraping)
TD目标。
好处:方差小,收敛快。
坏处:有偏差,会让偏差从(st+1,at+1)(s_{t+1},a_{t+1})传播到(st,at)(s_t,a_t)

价值学习高级技巧

经验回放

把智能体与环境交互的记录(即经验)存储在经验回放缓存中。实践中要等待经验回放缓存中有足够多的四元组才开始做经验回放更新DQN。

经验回放的优点

  1. 收集经验时相邻两个四元组有很强的相关性,经验回放每次从缓存里随机抽取一个四元组,可以打破相关性,提高训练效率。
  2. 重复利用收集到的经验,可以用更少的样本数量达到同样的效果。

局限性
不适用于on-policy算法。

优先经验回放
优先经验回放是指在经验回放时,根据经验的重要性(TD误差大的),给经验赋予不同的权重,从而使得重要经验被重复利用的概率更大。做非均匀抽样会导致DQN的预测有偏差。应该根据抽样概率调整学习率:

αj=α1(bpj)β\alpha_j = \alpha · \frac{1}{(b · p_{j})^\beta}

b是经验回放缓存中样本的总数,β(0,1)\beta \in (0,1)是一个需要调整的超参数。

高估问题及解决方法

Q学习算法训练出来的DQN会高估真实的价值:

  1. 自举导致偏差传播。
  2. 最大化导致高估。

想要解决高估,要么切断自举,要么避免最大化

使用目标网络
使用目标网络可以切断自举。
用另一个神经网络,即目标网络来计算TD目标,记作:

Q(s,a;w)Q(s,a;w^-)

设DQN和目标网络当前的参数分别为wnoww_{now}wnoww_{now}^-,执行以下步骤:

  1. 对DQN做正向传播,得到:

q^t=Q(st,at;wnow)\hat{q}_t = Q(s_t,a_t;w_{now})

  1. 对目标网络做正向传播,得到:

q^t+1=maxaAQ(st+1,a;wnow)\hat{q}_{t+1}^- = \max_{a \in \mathcal{A}} Q(s_{t+1},a;w_{now}^-)

  1. 计算TD目标和TD误差:

y^t=rt+γq^t+1\hat{y}_t = r_t + \gamma · \hat{q}_{t+1}^-

δt=q^ty^t\delta_t = \hat{q}_t - \hat{y}_t^-

  1. 对DQN做反向传播,计算梯度:

gt=wQ(st,at;wnow)g_t = \nabla_w Q(s_t,a_t;w_{now})

  1. 梯度下降更新参数:

wnew=wnowαδtgtw_{new} = w_{now} - \alpha · \delta_t · g_t

  1. τ(0,1)\tau \in (0,1)是需要手动调节的超参数,做加权平均:

wneewτwnew+(1τ)wnoww_{neew}^- \leftarrow \tau · w_{new} + (1-\tau) · w_{now}^-

这种方法只是减轻自举,不能完全避免自举。

使用双Q网络
使用双Q网络可以避免最大化。
双Q学习算法,也就是double DQN,缩写DDQN。

训练流程

  1. 对DQN做正向传播,得到:

q^t=Q(st,at;wnow)\hat{q}_t = Q(s_t,a_t;w_{now})

  1. 选择:

a=arg maxaAQ(st+1,a;wnow)a^* = \argmax_{a \in \mathcal{A}} Q(s_{t+1},a;w_{now})

  1. 求值:

q^t+1=Q(st+1,a;wnow)\hat{q}_{t+1} = Q(s_{t+1},a^*;w_{now}^-)

  1. 计算TD目标和TD误差:

yt=rt+γq^t+1\overset{\sim}{y}_t = r_t + \gamma · \hat{q}_{t+1}

δt=q^tyt\delta_t = \hat{q}_t - \overset{\sim}{y}_t

  1. 对DQN做反向传播,计算梯度:

gt=wQ(st,at;wnow)g_t = \nabla_w Q(s_t,a_t;w_{now})

  1. 梯度下降更新参数:

wnew=wnowαδtgtw_{new} = w_{now} - \alpha · \delta_t · g_t

  1. τ(0,1)\tau \in (0,1)是需要手动调节的超参数,做加权平均:

wnewτwnew+(1τ)wnoww_{new}^- \leftarrow \tau · w_{new} + (1-\tau) · w_{now}^-

对决网络(dueling network)

最优优势函数
定义:

D(s,a)Q(s,a)V(s)D^*(s,a) \triangleq Q^*(s,a) - V^*(s)

回顾:Q(s,a)=maxπQπ(s,a)Q^*(s,a) = \max\limits_{\pi}Q_{\pi}(s,a),最优价值函数是给定一个状态和动作后,选择最优的策略得到的Q值。

定理:

Q(s,a)=V(s)+D(s,a)maxaD(s,a)Q^*(s,a) = V^*(s) + D^*(s,a) - \max\limits_{a}D^*(s,a)

其中,

maxaD(s,a)0\max\limits_{a}D^*(s,a) \equiv 0

dueling network结构

Q(s,a;w)V(s;wV)+D(s,a;wD)maxaD(s,a;wD)Q(s,a;w) \triangleq V(s;w^V) + D(s,a;w^D) - \max\limits_{a}D(s,a;w^D)

解决不唯一性
V变大100,D变小100,不唯一,参数不稳定。加入maxD\max{D},解决不唯一性。

训练流程

  1. ϵ\epsilon-greedy算法控制智能体,收集经验。四元组存入经验回放缓存
  2. 用双Q学习算法更新参数
  3. 完成训练后,基于当前状态用对决网络给所有动作打分,选择得分最高的动作。

噪声网络

可以用于几乎所有RL方法。

噪声网络的原理
把神经网络的参数w替换成:μ+σξ\mu + \sigma \circ \xi。其中,μ\muσ\sigma分别表示均值和标准差,是参数,需要从经验中学习。ξ\xi是随机噪声,它的每个元素独立从正态分布N(0,1)\mathcal{N}(0,1)中采样。符号:\circ表示逐元素相乘。即:

wi=μi+σiξiw_i = \mu_i + \sigma_i · \xi_i

噪声DQN

Q(s,a,ξ;μ,σ)=Q(s,a;μ+σξ)\overset{\sim}{Q}(s,a,\xi;\mu,\sigma) = Q(s,a;\mu + \sigma \circ \xi)

噪声DQN参数量比标准DQN多一倍,因为μ\muσ\sigma需要从经验中学习。

  1. 收集经验
    噪声DQN本身就具有随机性,因此不用ϵ\epsilon-greedy算法。直接用:

at=arg maxaAQ(s,a,ξ;μ,σ)a_t = \argmax\limits_{a \in \mathcal{A}} \overset{\sim}{Q}(s,a,\xi;\mu,\sigma)

  1. Q-learning
    TD目标:y^t=rt+γmaxaAQ(st+1,a,ξ;μ,σ)\hat{y}_t = r_t + \gamma · \max\limits_{a \in \mathcal{A}} \overset{\sim}{Q}(s_{t+1},a,\xi^{'};\mu,\sigma)
    损失函数:L(μ,σ)=12[Q(st,at,ξ;μ,σ)y^t]2L(\mu,\sigma) = \frac{1}{2} [\overset{\sim}{Q}(s_t,a_t,\xi;\mu,\sigma) - \hat{y}_t]^2
    这里的ξ\xi^{'}ξ\xi是不同的。梯度下降更新μ\muσ\sigma
  2. 做决策
    做决策不需要噪声。把σ\sigma置0即可。

噪声迫使DQN容忍对参数的扰动,训练出来DQN具有健壮性。

训练流程
用到双Q学习、优先经验回放。
开始随机初始化μ\muσ\sigma,收集经验,赋值给目标网络参数:μμ\mu^- \leftarrow \muσσ\sigma^- \leftarrow \sigma。然后重复以下步骤更新参数:

  1. 优先经验回放,从经验回放缓存中采样一个小批量的四元组(sj,aj,rj,sj+1)(s_j,a_j,r_j,s_{j+1})
  2. 用标准正态分布生成噪声ξ\xi,对噪声DQN做正向传播,得到:

q^j=Q(sj,aj,ξ;μnow,σnow)\hat{q}_j = \overset{\sim}{Q}(s_j,a_j,\xi;\mu_{now},\sigma_{now})

  1. 用噪声DQN选出最优动作:

aj+1=arg maxaAQ(sj+1,a,ξ;μnow,σnow)a^*_{j+1} = \argmax\limits_{a \in \mathcal{A}} \overset{\sim}{Q}(s_{j+1},a,\xi;\mu_{now},\sigma_{now})

  1. 用标准正态分布生成噪声ξ\xi^{'},对目标网络做正向传播,得到:

q^j+1=Q(sj+1,aj+1,ξ;μnow,σnow)\hat{q}_{j+1}^- = \overset{\sim}{Q}(s_{j+1},a^*_{j+1},\xi^{'};\mu_{now}^-,\sigma_{now}^-)

  1. 计算TD目标和TD误差:

y^j=rj+γq^j+1\hat{y}_j^- = r_j + \gamma · \hat{q}_{j+1}^-

δj=q^jy^j\delta_j = \hat{q}_j - \hat{y}_j^-

  1. 对噪声DQN做反向传播,梯度下降更新参数:

μnewμnowαμδjμQ(sj,aj,ξ;μnow,σnow)\mu_{new} \leftarrow \mu_{now} - \alpha_\mu · \delta_j · \nabla_{\mu} \overset{\sim}{Q}(s_j,a_j,\xi;\mu_{now},\sigma_{now})

σnewσnowασδjσQ(sj,aj,ξ;μnow,σnow)\sigma_{new} \leftarrow \sigma_{now} - \alpha_\sigma · \delta_j · \nabla_{\sigma} \overset{\sim}{Q}(s_j,a_j,\xi;\mu_{now},\sigma_{now})

  1. τ(0,1)\tau \in (0,1)是需要手动调整的超参数,做加权平均更新目标网络参数:

μnewτμnew+(1τ)μnow\mu_{new}^- \leftarrow \tau · \mu_{new} + (1-\tau) · \mu_{now}^-

σnewτσnew+(1τ)σnow\sigma_{new}^- \leftarrow \tau · \sigma_{new} + (1-\tau) · \sigma_{now}^-

Rainbow DQN
优先经验回放,双Q学习,噪声网络,dueling network,噪声网络,多步TD目标,distributional learning。

策略梯度方法

本章假设动作空间是离散的。用神经网络π(as;θ)\pi(a|s;\theta)近似策略函数π(as)\pi(a|s),称为策略网络。结构为:

  1. 输入:状态ss
  2. 卷积神经网络
  3. 全连接层
  4. softmax激活函数

策略学习的目标函数

回报UtU_t是从t时刻开始的所有奖励之和,依赖于t时刻开始的所有状态和动作,它的不确定性来自于未来未知的状态和动作。动作价值函数是确定当前t时刻状态和动作的回报的期望。
状态价值函数既依赖于当前状态sts_t,也依赖于策略网络π\pi的参数θ\theta

当前状态sts_t越好,则状态价值函数Vπ(st)V_{\pi}(s_t)越大。
策略网络π\pi越好,则状态价值函数Vπ(st)V_{\pi}(s_t)越大。
如果一个策略很好,那么状态价值Vπ(S)V_{\pi}(S)的均值应当很大。因此定义目标函数:

J(θ)=Eπ[Vπ(S)]J(\theta) = \mathbb{E}_{\pi} [V_{\pi}(S)]

这个目标函数排除了状态S的因素,只依赖于参数θ\theta,策略越好,J(θ)J(\theta)。所以策略学习可以描述成这样一个优化问题:

maxθJ(θ)\max_{\theta} J(\theta)

要求解最大化问题,用梯度上升更新参数θ\theta

θnewθnow+βθJ(θnow)\theta_{new} \leftarrow \theta_{now} + \beta · \nabla_\theta J(\theta_{now})

其中,β\beta是学习率。梯度θJ(θ)J(θ)θ\nabla_\theta J(\theta) \triangleq \frac{\partial J(\theta)}{\partial \theta}称为策略梯度(policy gradient)。

策略梯度定理

J(θ)θ=ES[EAπ(AS;θ)[θlnπ(AS;θ)Qπ(S,A)]]\frac{\partial J(\theta)}{\partial \theta} = \mathbb{E}_S[\mathbb{E}_{A \sim \pi(A|S;\theta)} [\nabla_\theta \ln \pi(A|S;\theta) · Q_{\pi}(S,A)]]

近似策略梯度
蒙特卡洛,根据当前策略网络随机抽样得出一个动作:

aπ(s;θ)a \sim \pi(·|s;\theta)

计算随机梯度:

g(s,a;θ)θlnπ(as;θ)Qπ(s,a)g(s,a;\theta) \triangleq \nabla_\theta \ln \pi(a|s;\theta) · Q_{\pi}(s,a)

显然,g(s,a;θ)g(s,a;\theta)是策略梯度θJ(θ)\nabla_\theta J(\theta)的无偏估计:

θJ(θ)=ES[EAπ(S;θ)[g(S,A;θ)]]\nabla_\theta J(\theta) = \mathbb{E}_S[\mathbb{E}_{A \sim \pi(·|S;\theta)} [g(S,A;\theta)]]

随机梯度上升更新{\theta}:

θnewθnow+βg(s,a;θnow)\theta_{new} \leftarrow \theta_{now} + \beta · g(s,a;\theta_{now})

REINFORCE

REINFORCE用蒙特卡洛方法近似QπQ_\pi(因为未知),把它替换成回报u。

训练流程

  1. 用策略网络θnow\theta_{now}得到一条轨迹:

{s1,a1,r1,s2,a2,r2,,sn,an,rn}\{s_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_n,a_n,r_n\}

  1. 计算回报:

ut=k=tnγktrku_t = \sum_{k=t}^n \gamma^{k-t} · r_k

  1. (st,at)t=1n{(s_t,a_t)}_{t=1}^n作为数据,做反向传播计算:

θlnπ(atst;θnow)\nabla_\theta \ln \pi(a_t|s_t;\theta_{now})

  1. 随机梯度上升:

θnewθnow+βt=1nγt1utθlnπ(atst;θnow)\theta_{new} \leftarrow \theta_{now} + \beta · \sum_{t=1}^n \gamma^{t-1}·u_t · \nabla_\theta \ln \pi(a_t|s_t;\theta_{now})

actor-critic

随机梯度:

g(s,a;θ)θlnπ(as;θ)Qπ(s,a)g(s,a;\theta) \triangleq \nabla_\theta \ln \pi(a|s;\theta) · Q_{\pi}(s,a)

用神经网络近似QπQ_\pi

价值网络
critic。近似动作价值函数Qπ(s,a)Q_\pi(s,a),记作q(s,a;w)q(s,a;w)。价值网络的训练用的是SARSA算法,属于同策略,不能用经验回放。

算法推导
策略网络π(as;θ)\pi(a|s;\theta),actor,基于状态s做出动作a。
价值网络q(s,a;w)q(s,a;w),critic,基于状态s和动作a给出价值q。

  1. 训练actor
    近似策略梯度:g^(s,a;θ)θlnπ(as;θ)q(s,a;w)\hat{g}(s,a;\theta) \triangleq \nabla_\theta \ln \pi(a|s;\theta) · q(s,a;w)
    梯度上升:θnewθnow+βg^(s,a;θnow)\theta_{new} \leftarrow \theta_{now} + \beta · \hat{g}(s,a;\theta_{now})
    更新参数后,评委critic打出的分数会越来越高。
  2. 训练critic
    TD目标:y^trt+γq(st+1,at+1;w)\hat{y}_t \triangleq r_t + \gamma · q(s_{t+1},a_{t+1};w)
    TD误差:δq(s,a;w)y^t\delta \triangleq q(s,a;w) - \hat{y}_t
    梯度下降:wnewwnowαδwq(s,a;w)w_{new} \leftarrow w_{now} - \alpha · \delta · \nabla_w q(s,a;w)

训练流程

  1. 观测到当前状态sts_t,根据策略网络actor做决策,并执行动作;
  2. 观测到奖励和新的状态;
  3. 根据策略网络做决策,但不执行at+1a_{t+1};
  4. 用TD目标和TD误差更新价值网络critic;
  5. 更新actor。

用目标网络改进训练
与上面的区别就是让critic只打分(st,at)(s_t,a_t),目标网络打分(st+1,at+1)(s_{t+1},a_{t+1}),并且最后做加权平均更新目标网络的参数。

带基线的策略梯度方法

基线(baseline)

把b作为动作价值函数Qπ(S,A)Q_\pi(S,A)的基线,用Qπ(S,A)bQ_\pi(S,A)-b替换QπQ_\pi。设b是任意函数,只要不依赖于动作A就可以。

带基线的策略梯度定理
设b是任意函数,但是b不依赖于A。把b作为动作价值函数Qπ(S,A)Q_\pi(S,A)的基线,对策略梯度没有影响。

θJ(θ)=ES[EAπ(S;θ)[(Qπb)θlnπ(AS;θ)]]\nabla_\theta J(\theta) = \mathbb{E}_S[\mathbb{E}_{A \sim \pi(·|S;\theta)} [(Q_\pi - b) · \nabla_\theta ln \pi(A|S;\theta)]]

b=Vπ(s)b = V_\pi(s)是很好的基线。

带基线的REINFORCE

训练流程

  1. 用策略网络θnow\theta_{now}控制智能体从头开始一个回合,得到一条轨迹:
  2. 计算所有的回报:

ut=k=tnγktrku_t = \sum_{k=t}^n \gamma^{k-t} · r_k

  1. 让价值网络做预测:

v^t=v(st;wnow)\hat{v}_t = v(s_t;w_{now})

  1. 计算误差δt=v^tut\delta_t = \hat{v}_t - u_t
  2. {st}t=1n\{s_t\}_{t=1}^n作为价值网络输入,做反向传播计算:

wv(st;wnow)\nabla_w v(s_t;w_{now})

  1. 更新价值网络参数:

wnewwnowαt=1nδtwv(st;wnow)w_{new} \leftarrow w_{now} - \alpha · \sum_{t=1}^n \delta_t · \nabla_w v(s_t;w_{now})

  1. {(st,at)}t=1n\{(s_t,a_t)\}_{t=1}^n作为数据,做反向传播计算:

θlnπ(atst;θnow)\nabla_\theta \ln \pi(a_t|s_t;\theta_{now})

  1. 随机梯度上升:

θnewθnowβt=1nγt1δtθlnπ(as;θnow)\theta_{new} \leftarrow \theta_{now} - \beta · \sum_{t=1}^n \gamma^{t-1}·\delta_t · \nabla_\theta \ln \pi(a|s;\theta_{now})

advantage actor-critic(A2C)

训练流程

  1. 观测到当前状态sts_t,根据策略网络做决策:at π(st;θnow)a_t ~ \pi(·|s_t;\theta_{now}),并让智能体执行动作ata_t
  2. 从环境中观测到奖励rtr_t和新的状态st+1s_{t+1}
  3. 让价值网络打分:v^t=v(st;wnow)\hat v_t = v(s_t;w_{now})v^t+1=v(st+1;wnow)\hat v_{t+1} = v(s_{t+1};w_{now})
  4. 计算误差:yt=rt+γv^t+1y_t = r_t + \gamma · \hat{v}_{t+1}δt=v^tyt\delta_t = \hat{v}_t - y_t
  5. 更新价值网络:

wnewwnowαδtwv(st;wnow)w_{new} \leftarrow w_{now} - \alpha · \delta_t · \nabla_w v(s_t;w_{now})

  1. 更新策略网络:

θnewθnowβδtθlnπ(atst;θnow)\theta_{new} \leftarrow \theta_{now} - \beta · \delta_t · \nabla_\theta \ln \pi(a_t|s_t;\theta_{now})

这里训练策略网络和价值网络的方法属于同策略,不能使用经验回放。

用目标网络改进训练
用目标网络给st+1s_{t+1}打分。

策略学习高级技巧

置信域策略优化

置信域策略优化(trust region policy optimization,TRPO)是一种策略学习方法,跟策略梯度方法相比,表现更稳定,收敛曲线不会剧烈波动,对学习率不敏感,用更少的经验就能达到相同表现。

置信域方法
优化问题:maxθJ(θ)max_\theta J(\theta)
几乎所有的数值优化算法都做了这样的迭代:

θnewUpdate(Data;θnow)\theta_{new} \leftarrow Update(Data;\theta_{now})

置信域
构造一个函数L(θθnow)L(\theta|\theta_{now}),如果这个函数满足条件:L(θθnow)L(\theta|\theta_{now})很接近J(θ)J(\theta)θN(θnow)\forall \theta \in N(\theta_{now})
,则称θ\thetaθnow\theta_{now}的置信域。

状态价值可以写成:

Vπ(s)=aAπ(as;θ)Qπ(s,a)=aAπ(as;θnow)π(as;θ)π(as;θnow)Qπ(s,a)=EAπ(s;θnow)[π(as;θ)π(as;θnow)Qπ(s,A)]V_\pi(s) = \sum_{a \in \mathcal{A}} \pi(a|s;\theta) · Q_\pi(s,a) \\ = \sum_{a \in \mathcal{A}} \pi(a|s;\theta_{now}) · \frac {\pi(a|s;\theta)} {\pi(a|s;\theta_{now})} · Q_\pi(s,a) = \mathbb{E}_{A \sim \pi(·|s;\theta_{now})} [\frac {\pi(a|s;\theta)} {\pi(a|s;\theta_{now})} · Q_\pi(s,A)]

目标函数的等价形式

J(θ)=ES[EAπ(S;θ)[π(AS;θ)π(AS;θnow)Qπ(S,A)]]J(\theta) = \mathbb{E}_S[\mathbb{E}_{A \sim \pi(·|S;\theta)} [\frac {\pi(A|S;\theta)} {\pi(A|S;\theta_{now})} · Q_\pi(S,A)]]

上面QπQ_\pi中的π\pi指的是π(AS;θ)\pi(A|S;\theta)

算法推导

  1. 第一步——做近似
    用策略网络π(AS;θnow)\pi(A|S;\theta_{now})完成一个回合,观测到一条轨迹。
    π(atst;θ)π(atst;θnow)Qπ(st,at)\frac {\pi(a_t|s_t;\theta)} {\pi(a_t|s_t;\theta_{now})} · Q_\pi(s_t,a_t)求均值:

L(θθnow)=1nt=1nπ(atst;θ)π(atst;θnow)Qπ(st,at)L(\theta|\theta_{now}) = \frac{1}{n} \sum_{t=1}^n \frac {\pi(a_t|s_t;\theta)} {\pi(a_t|s_t;\theta_{now})} · Q_\pi(s_t,a_t)

L作为目标函数J的近似。由于不知道动作价值Q,无法直接对L进行最大化,因此做两次近似:

Qπ(st,at)Qπold(st,at)utQ_\pi(s_t,a_t) \Rightarrow Q_{\pi_{old}}(s_t,a_t) \Rightarrow u_t

L(θθnow)L(\theta|\theta_{now})可以写成:

L(θθnow)=1nt=1nπ(atst;θ)π(atst;θnow)utL(\theta|\theta_{now}) = \frac{1}{n} \sum_{t=1}^n \frac {\pi(a_t|s_t;\theta)} {\pi(a_t|s_t;\theta_{now})} · u_t

  1. 第二步——最大化
    求解这个带约束的最大化问题:

maxθL(θθnow)s.t.θN(θnow)\max_{\theta} L(\theta|\theta_{now}) \\ s.t. \quad \theta \in \mathcal{N}(\theta_{now})

一种置信域是以θnow\theta_{now}为中心的一个半径为\triangle的球。另一种使用KL散度衡量π(si;θnow)\pi(·|s_i;\theta_{}now)π(si;θ)\pi(·|s_i;\theta)的距离。

策略学习中的熵正则

我们希望策略网络的输出的概率不要集中在一个动作上,至少要让其他动作有一些非零的概率,能被探索到。用熵来衡量概率分布的不确定性。熵大说明随机性很大。

带熵正则的策略梯度
概率分布的熵定义为:

H(s;θ)Entropy[π(s;θ)]=aAπ(as;θ)lnπ(as;θ)H(s;\theta) \triangleq Entropy[\pi(·|s;\theta)] = - \sum_{a \in \mathcal{A}} \pi(a|s;\theta) · \ln \pi(a|s;\theta)

目标函数加上熵正则:

maxθJ(θ)+λES[H(S;θ)]\max_\theta J(\theta) + \lambda · \mathbb{E}_S[H(S;\theta)]

优化

g(θ)θ[J(θ)+λθES[H(S;θ)]]g(\theta) \triangleq \nabla_\theta [J(\theta) + \lambda · \nabla_\theta \mathbb{E}_S[H(S;\theta)]]

观测到状态s,按照策略网络做随机抽样,得到动作aπ(s;θ)a \sim \pi(·|s;\theta)

g(s,a;θ)[Qπ(s,a)λlnπ(as;θ)λ]θlnπ(as;θ)g(s,a;\theta) \triangleq [Q_\pi(s,a) - \lambda · ln \pi(a|s;\theta) - \lambda] · \nabla_\theta \ln \pi(a|s;\theta)

更新参数:

θnewθnow+βg(s,a;θnow)\theta_{new} \leftarrow \theta_{now} + \beta · g(s,a;\theta_{now})

连续控制

深度确定性策略梯度(deep deterministic policy gradient,DDPG)

深度说明它使用深度神经网络。确定性说明它的输出是确定性的动作。策略梯度说明它用策略梯度学习策略网络。
DDPG属于一种actor-critic方法。基于状态s做出动作a。

策略网络和价值网络
确定性策略网络μ(s;θ)\mu(s;\theta)的输出是d维向量a,作为动作。
结构:卷积神经网络、全连接层。
确定性策略可以看作是随机性策略的一个特例。确定性策略μ(s;θ)\mu(s;\theta)的输出是d维向量。它的第i个元素记作μ^i=[μ(s;θ)]i\hat \mu_i = [\mu(s;\theta)]_i。定义下面这个而随机性策略:

π(as;θ,σ)=i=1d12πσiexp((aiμ^i)22σi2)\pi(a|s;\theta,\sigma) = \prod_{i=1}^d \frac 1 {\sqrt{2 \pi}\sigma_i} \exp \left( -\frac {(a_i - \hat \mu_i)^2} {2 \sigma_i^2} \right)

这个随机性策略是均值为μ(s;θ)\mu(s;\theta)、协方差矩阵为diag(σ1,,σd)diag (\sigma_1,\dots,\sigma_d)的多元正态分布。本节的确定性策略可以看作上述随机性策略在σ=[σ1,,σd]\sigma = [\sigma_1,\dots,\sigma_d]为全零向量时的特例。

价值网络是对动作价值函数Qπ(s,a)Q_\pi(s,a)的近似。

算法推导

  1. 行为策略收集经验 由于是异策略方法,行为策略可以任意,收集到的经验存入经验回放缓存,训练的时候重复利用。
  2. 训练策略网络 价值网络根据当前状态s的打分为q(s,μ(s,θ;w))q(s,\mu(s,\theta;w))。我们希望打分的期望尽量高,所以把目标函数定义为打分的期望:J(θ)=ES[q(S,μ(S,θ;w))]J(\theta) = \mathbb{E}_S[q(S,\mu(S,\theta;w))],关于S求期望消除了S的影响。不管面对什么样的状态S,策略网络都应该做出很好的动作,使得平均分J(θ)J(\theta)尽量高。用梯度上升来增大J(θ)J(\theta)。每次用随机变量S的一个观测值(记作sjs_j)来计算梯度:g(sj;θ)θq(sj,μ(sj;θ);w)=θμ(sj;θ)aq(sj,a^j;w) g(s_j;\theta) \triangleq \nabla_\theta q(s_j,\mu(s_j;\theta);w) = \nabla_\theta \mu(s_j;\theta) · \nabla_a q(s_j,\hat a_j;w)
    每次从经验回放缓存里随机抽取一个状态,记作sjs_j,计算a^j=μ(sj;θ)\hat a_j = \mu(s_j;\theta)。用梯度上升更新一次thetatheta

θnewθnow+βθμ(sj;θ)aq(sj,a^j;w)\theta_{new} \leftarrow \theta_{now} + \beta · \nabla_\theta \mu(s_j;\theta) · \nabla_a q(s_j,\hat a_j;w)

  1. 训练价值网络 价值网络拟合TD目标。每次取出一个四元组sj,aj,rj,sj+1s_j,a_j,r_j,s_{j+1},用它更新一次参数w。
    首先让价值网络做预测:q^j=q(sj,aj;w)\hat q_j = q(s_j,a_j;w)q^j+1=q(sj+1,μ(sj+1;θ);w)\hat q_{j+1} = q(s_{j+1},\mu(s_{j+1};\theta);w)
    然后计算TD目标:y^j=rj+γq^j+1\hat y_j = r_j + \gamma · \hat q_{j+1}
    定义损失函数:L(w)=12[q^jy^j]2L(w) = \frac{1}{2} [\hat q_j - \hat y_j]^2
    计算梯度:g(w)wL(w)=(q^jy^j)wq(sj,aj;w)g(w) \triangleq \nabla_w L(w) = (\hat q_j - \hat y_j) · \nabla_w q(s_j,a_j;w)
    梯度下降更新参数:wnewwnowαg(w)w_{new} \leftarrow w_{now} - \alpha · g(w)

深入分析DDPG

DDPG的高估问题

  1. 最大化造成高估 求解下面的优化模型来学习策略网络:
    θ=arg maxθES[q(S,A^;w)],s.t.A^=μ(S;θ)\theta^* = \argmax_\theta \mathbb{E}_S[q(S,\hat A;w)], s.t. \hat A = \mu(S;\theta)
    这个式子的意思是μ(s;θ)\mu(s;\theta^*)是最优的确定性策略网络。
    训练价值网络q时用的TD目标是:
    y^j=rj+γq^(sj+1,μ(sj+1;θ);w)rj+γmaxaj+1q(sj+1,aj+1;w)\hat y_j = r_j + \gamma · \hat q(s_{j+1},\mu(s_{j+1};\theta);w) \approx r_j + \gamma · \max_{a_{j+1}}q(s_{j+1},a_{j+1};w)
    max会导致y^j\hat y_j高估真实动作价值Qπ(sj,aj;w)Q_\pi(s_j,a_j;w)
  2. 自举造成偏差传播

双延迟深度确定性策略梯度(twin delayed deep deterministic policy gradient,TD3)

高估问题的解决方案——目标网络
使用两个目标网络:q(s,a;w)μ(s;θ)q(s,a;w^-)和\mu(s;\theta^-)
TD目标用目标网络计算。可以一定程度上缓解高估,但高估仍然很严重。

高估问题的解决方案——截断双Q学习
clipped double learning,可以更好地解决高估问题。截断双Q学习使用两个价值网络和一个策略网络:q(s,a;w1),q(s,a;w2),μ(s;θ)q(s,a;w_1),q(s,a;w_2),\mu(s;\theta)
三个神经网络各对应一个目标网络。
用目标策略网络计算动作。用两个目标价值网络计算TD目标,取较小者。

在动作中加噪声 目标策略网络计算动作为:
a^j+1=μ(sj+1;θ)+ξ\hat a_{j+1}^- = \mu(s_{j+1};\theta^-) + \xi
其中ξ\xi从截断正态分布CN(0,σ2,c,c)\mathcal{CN}(0,\sigma^2,-c,c)中独立随机抽取。截断正态分布的意思是变量落在区间[c,c][-c,c]之外的概率是零。防止噪声过大。

降低更新策略网络和目标网络的频率 让策略网络以及三个目标网络更新的频率比价值网络低,每隔k轮更新一次,k是超参数。

随机高斯策略

随机正态分布(也叫高斯分布)。

基本思路
最简单的情形:假设自由度等于1,动作a是实数。用正态分布的概率密度函数作为策略函数。定义两个神经网络:μ(s;θ)ρ(s;θ)\mu(s;\theta)和\rho(s;\theta),分别用于预测均值和方差对数。实践中不直接近似标准差σ\sigma而是近似方差对数lnsigma2ln sigma^2是因为标准差必须非负,会让优化模型有约束条件,给求解造成困难。

  1. 观测到当前状态s,计算均值和方差对数:μ^=μ(s;θ)ρ^=ρ(s;θ)\hat \mu = \mu(s;\theta),\hat \rho = \rho(s;\theta),以及方差σ^2=exp(ρ^)\hat \sigma^2 = exp(\hat \rho);
  2. 从正态分布中随机抽样:aN(μ^,σ^2)a \sim \mathcal{N}(\hat \mu,\hat \sigma^2),然后智能体执行动作a。
    π(as;θ)=12πσ^exp((aμ^)22σ^2)\pi(a|s;\theta) = \frac 1 {\sqrt{2 \pi} \hat \sigma} \exp \left( -\frac {(a - \hat \mu)^2} {2 \hat \sigma^2} \right)
    实际做控制的时候,只需要神经网络μ\muρ\rho,用不到真正的策略网络π(as;θ)\pi(a|s;\theta)

随机高斯策略网络
实际中自由度d大于1,那么动作a是d维向量。用标量aia_i表示动作向量a的第i个元素,用函数μi(s;θ)\mu_i(s;\theta)ρi(s;θ)\rho_i(s;\theta)分别预测aia_i的均值和方差对数。用特殊的多元正态分布的概率密度函数作为策略网络:
π(as;θ)=i=1d12πσ^iexp((aiμ^i)22σ^i2) \pi(a|s;\theta) = \prod_{i=1}^d \frac 1 {\sqrt{2 \pi} \hat \sigma_i} \exp \left( -\frac {(a_i - \hat \mu_i)^2} {2 \hat \sigma_i^2} \right)
训练的时候不需要用到π(as;θ)\pi(a|s;\theta),而是要用辅助网络:
f(s,a;θ)f(s,a;\theta)f(s,a;θ)=12i=1d(ρi(s;θ)+[aiμi(s;θ)]2exp[ρi(s;θ)])f(s,a;\theta) = -\frac {1} 2\sum_{i=1}^d(\rho_i(s;\theta) + \frac {[a_i-\mu_i(s;\theta)]^2} {exp[\rho_i(s;\theta)]})
辅助网络和策略网络的关系:f(s,a;θ)=lnπ(as;θ)+常数f(s,a;\theta) = \ln \pi(a|s;\theta) + 常数


深度强化学习笔记
https://xjtu-mjj.asia/posts/33517/
作者
mjj
发布于
2025年2月25日
许可协议