深度强化学习(DRL)学习笔记(1 - 4章)

前言

  • 学习笔记源于王树森、张志华教授的《深度强化学习》
  • 目前因为毕业设计,暂时学习到第10章(DDPG网络),我刚学(深度强化学习)DRL刚开始,我觉得我学得很乱,其中一个重要原因就是我基本上对各种符号很生疏,因此大家浏览的时候能够重点记忆常用符号
  • 这是我第三次浏览,希望能够通过前两次的学习经验,整理有用的DRL笔记帮助大家,欢迎关注我的微信公众号右转的第二排架子,里面(将)有深度强化学习的笔记
  • 假设大家有一点深度学习的基础,如果啥都没有的话,推荐一个很棒的视频《PyTorch深度学习实践》完结合集,保姆级教程,当然如果你python都不会那就先学python吧
  • 如果大家还有什么建议的话,欢迎提出,大家互相学习
  • 后续章节:5-章

常用符号

摘自课本

  • (后面因为懒得打英文了,而且这英文用的也不多,直接开摆)
符号中文英文
S   o r   s S~or~s S or s状态state
A   o r   a A~or~a A or a动作action
R   o r   r R~or~r R or r奖励reward
U   o r   u U~or~u U or u回报return
γ \gamma γ折扣率discount factor
S \mathcal{S} S状态空间state space
A \mathcal{A} A动作空间action space
π ( a ∣ s ) \pi(a \vert s) π(as)随机策略函数
μ ( s ) \mu(s) μ(s)确定策略函数
p ( s ′ ∣ s , a ) p(s' \vert s, a) p(ss,a)转移函数
Q π ( s , a ) Q_\pi(s,a) Qπ(s,a)动作价值函数
Q ∗ ( s , a ) Q_*(s,a) Q(s,a)最优动作价值函数
V π ( s ) V_\pi(s) Vπ(s)状态价值函数
V ∗ ( s ) V_*(s) V(s)最优状态价值函数
D π ( s ) D_\pi(s) Dπ(s)优势函数
D ∗ ( s ) D_*(s) D(s)最优优势函数
π ( a ∣ s ; θ ) \pi(a \vert s ;\theta) π(as;θ)随机策略函数
μ ( s ; θ ) \mu(s; \theta) μ(s;θ)确定策略函数
Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)深度Q网络
q ( s , a ; w ) q(s,a;w) q(s,a;w)价值网络

概念、参数出处或者定义(方便理解和查阅)

  • 第二章— w ∗ , b ∗ w^*,b^* w,b:通过历史数据训练模型得到的参数
  • 第二章—随机梯度下降(SGD):在集合里面随机一个值,然后计算这里的梯度,做随机梯度下降
  • 第二章—回报和奖励:回报是未来奖励的加权之和
  • 第二章—动作价值函数 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at):对 U t U_t Ut求期望,消除未知的未来奖励,与策略函数 π \pi π,当前状态 s t s_t st和当前动作 a t a_t at有关
  • 第二章—最优动作价值函数 Q ∗ ( s t , a t ) Q_*(s_t,a_t) Q(st,at):计算某个状态 s t s_t st下,采取某个动作 a t a_t at,采取最优的策略函数 π \pi π,所打出的最高分数。最优价值函数只跟 t t t时刻的状态 s t s_t st a t a_t at有关
  • 第二章—状态价值函数 V π ( s t ) V_\pi(s_t) Vπ(st):用来判断当前状态 s t s_t st(如上述棋盘的局面)是否对自己有利,以及自己和对手的胜算多大,只依赖于策略 π \pi π和当前状态 s t s_t st
  • 第三章—TD目标 y ^ \widehat{y} y :根据一定事实依据计算的估计值,通过TD目标进行更新模型
  • 第三章—TD误差 δ \delta δ:模型估计值与真实值之间的误差
  • 第四章—行为策略:让智能体与环境交互,记录下观测到的状态、动作、奖励,用这些经验来学习一个策略函数,用这个策略函数 π \pi π去控制智能体与环境交互,这个 π \pi π就叫行为策略
  • 第四章—经验回放数组:把一条轨迹划分成 n n n ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)这种,存入数组,这玩意就叫经验回放数组
  • 第四章—目标策略:结束训练之后,用某个策略函数来控制智能体,这个函数就叫目标策略
  • 第四章—经验回放:行为策略收集经验记录经验回放数组,使用数组中的经验进行训练目标策略,只存在异策略中

第一章 概率论基础与蒙特卡洛

概率论基础(具体自己补)

  • 强化学习经常用到随机变量和观测值两个概念
  • 随机变量:举个栗子就是你抛硬币的结果记为 X X X,这玩意就是随机变量( X X X取值是正面和反面),具有随机性
  • 观测值:抛硬币后,你看到的结果就是观测值 x x x没有随机性
  • 有个叫离散概率分布,有个叫连续概率分布,有个概念叫期望,这玩意挺重要的,列个公式吧
  • 连续概率分布和离散分布概率分布, f ( x ) f(x) f(x)的期望分别是
    E X ∼ p ( ⋅ ) [ f ( x ) ] = ∑ x ∈ X p ( x ) ⋅ f ( x ) E X ∼ p ( ⋅ ) [ f ( x ) ] = ∫ X p ( x ) ⋅ f ( x ) d x 其中这个 p ( x ) 的求和是 1 \mathbb{E}_{X \sim p(\cdot)}[f(x)] = \sum_{x \in \mathcal{X}}p(x) \cdot f(x)\\ \mathbb{E}_{X \sim p(\cdot)}[f(x)] = \int_\mathcal{X} p(x) \cdot f(x)dx\\ 其中这个p(x)的求和是1 EXp()[f(x)]=xXp(x)f(x)EXp()[f(x)]=Xp(x)f(x)dx其中这个p(x)的求和是1
  • 二元函数的期望就不多说了
  • 强化学习常用的有个概念叫随机抽样,大概不用多说

蒙特卡洛

  • 蒙特卡洛是一大类随机算法的总称,它们通过随机样本来估计真实值。举个例子,假设在一个 1 × 1 1 \times 1 1×1正方形里面有个半径 r = 1 r = 1 r=1的圆。显然一个点落在圆里面的概率是 p = a 2 a 1 = π 4 p = \frac{a_2}{a_1} = \frac{\pi}{4} p=a1a2=4π如果我们在正方形里面随机生成 n n n个点,设圆内的点数量为随机变量 M M M M M M的期望等于 E [ M ] = p n = π n 4 \mathbb{E}[M] = pn = \frac{\pi n}{4} E[M]=pn=4πn若发现有 m m m个点落在圆里面( m m m是真实观测值),则有 m ≈ E [ M ] = π n 4 m \approx \mathbb{E}[M] = \frac{\pi n}{4} mE[M]=4πn得到 π ≈ 4 m n \pi \approx \frac{4m}{n} πn4m
    大数定律保证了蒙特卡洛的正确性,可以使用Bernstein不等式证明
  • 中间举了挺多例子的,这里直接讲重点的例子,近似期望
    定义 X X X d d d维随机变量,它的取值范围是集合 Ω ⊂ R d \Omega \subset \mathbb{R}^d ΩRd,函数 p ( x ) = P ( X = x ) p(x) = \mathbb{P}(X = x) p(x)=P(X=x) X X X的概率密度函数,它描述变量 X X X在取值点 x x x的可能性,设 f : Ω → R f: \Omega \rightarrow \mathbb{R} f:ΩR是任意的多元函数,它关于变量 X X X的期望 E X ∼ p ( ⋅ ) [ f ( X ) ] = ∫ Ω p ( x ) ⋅ f ( x ) d x \mathbb{E}_{X \sim p(\cdot)}\big[f(X) \big] = \int_\Omega p(x) \cdot f(x)dx EXp()[f(X)]=Ωp(x)f(x)dx 其中一个办法是可以对集合 Ω \Omega Ω上做均匀抽样,得到近似的期望,下面会介绍更好的做法。我们已知了概率密度函数 p ( x ) p(x) p(x),最好是按照 p ( x ) p(x) p(x)做非均匀抽样,具体步骤如下:
    1.按照 p ( x ) p(x) p(x)在集合 Ω \Omega Ω上做非均匀抽样,得到 n n n个样本,记作向量 x 1 , . . . , x n ∼ p ( ⋅ ) x_1,...,x_n \sim p(\cdot) x1,...,xnp(),其中 n n n越大,近似越准确
    2.对函数值 f ( x 1 ) , . . . , f ( x n ) f(x_1),...,f(x_n) f(x1),...,f(xn)求平均 q n = 1 n ∑ i = 1 n f ( x i ) q_n = \frac{1}{n}\sum_{i=1}^nf(x_i) qn=n1i=1nf(xi)3.返回 q n q_n qn作为期望 E X ∼ p ( ⋅ ) [ f ( x ) ] \mathbb{E}_{X \sim p(\cdot)}[f(x)] EXp()[f(x)]的估计值。上述过程,为了减小内存开销。初始化 q 0 = 0 q_0 = 0 q0=0,从 t = 1 t = 1 t=1 n n n,依次计算 q t = ( 1 − 1 t ) ⋅ q t − 1 + 1 t ⋅ f ( x t ) (1.6) q_t = (1 - \frac{1}{t}) \cdot q_{t - 1} + \frac{1}{t} \cdot f(x_t) \tag{1.6} qt=(1t1)qt1+t1f(xt)(1.6)显然这样无须存储所有的 f ( x 1 ) , . . . , f ( x n ) f(x_1),...,f(x_n) f(x1),...,f(xn),可以进一步把公式(1.6)中的 1 t \frac{1}{t} t1替换 α t \alpha_t αt,得到公式 q t = ( 1 − α t ) ⋅ q t − 1 + α t ⋅ f ( x t ) q_t = (1 - \alpha_t) \cdot q_{t-1} + \alpha_t \cdot f(x_t) qt=(1αt)qt1+αtf(xt)这个公式叫做Robbins-Monro算法,其中 α n \alpha_n αn称作学习率,其中需要保证 lim ⁡ n → ∞ ∑ t = 1 n α t = ∞ lim ⁡ n → ∞ ∑ t = 1 n α t 2 < ∞ \lim_{n \rightarrow \infty} \sum_{t=1}^n \alpha_t = \infty\\\lim_{n \rightarrow \infty} \sum_{t=1}^n \alpha^2_t < \infty nlimt=1nαt=nlimt=1nαt2<显然 α t = 1 t \alpha_t = \frac{1}{t} αt=t1满足上述性质,因此该算法可以应用于Q学习算法中
  • 例子其二,随机梯度。设随机变量 X X X为一个数据点,设 w w w为神经网络的参数,函数 p ( x ) = P ( X = x ) p(x) = \mathbb{P}(X = x) p(x)=P(X=x) X X X的概率密度函数,定义损失函数 L ( X ; w ) L(X;w) L(X;w),损失函数值越小,意味着模型预测的越准确,因此我们需要调整 w w w使得损失函数的期望尽量小。神经网络的训练可以定义为这样一个优化问题 min ⁡ w   E X ∼ p ( ⋅ ) [ L ( X ; w ) ] \min_w~\mathbb{E}_{X \sim p(\cdot)}\Big[L(X;w) \Big] wmin EXp()[L(X;w)]目标函数 E X [ L ( X ; w ) ] \mathbb{E}_X[L(X;w)] EX[L(X;w)]关于 w w w的梯度是 g ≜ ▽ w E X ∼ p ( ⋅ ) [ L ( X ; w ) ] = E X ∼ p ( ⋅ ) [ ▽ w L ( X ; w ) ] g \triangleq \bigtriangledown_w \mathbb{E}_{X \sim p(\cdot)}\Big[L(X;w) \Big] = \mathbb{E}_{X \sim p(\cdot)}\Big[\triangledown_w L(X;w) \Big] gwEXp()[L(X;w)]=EXp()[wL(X;w)]梯度下降: w ← w − α ⋅ g w \leftarrow w - \alpha \cdot g wwαg对梯度 g g g做蒙特卡洛近似,把近似的梯度 g ~ \tilde{g} g~随机梯度,用 g ~ \tilde{g} g~来替代 g g g更新w(具体和近似期望那个过程差不多,反正能得到) g ~ = 1 b ∑ j = 1 b ▽ w L ( x ~ j ; w ) g ~ 是随机梯度 \tilde{g} = \frac{1}{b}\sum_{j = 1}^{b}\bigtriangledown_wL(\tilde{x}_j;w)\\ \tilde{g}是随机梯度 g~=b1j=1bwL(x~j;w)g~是随机梯度然后这个蒙特卡洛的样本数量 b b b就称作批量大小(Batch Size)

第二章 深度学习基础

  • 建议观看上面的那个视频,这里就大概简略说一下

线性模型

线性回归

  • 以房价预测问题讲解,设一个房屋有 d d d种属性,记作向量 x = [ x 1 , x 2 , ⋯   , x d ] T x = [x_1,x_2,\cdots,x_d]^T x=[x1,x2,,xd]T(ps:这个 x x x这里我懒得管要不要加转置了,后面我也不管,自己觉得怎么样就怎么样吧。下面开始正题)
  • 然后就引出了最简单的线性模型 f ( x ; w , b ) ≜ x T w + b x :特征,这玩意在这就是变量 w :权重 b :偏移量 f(x;w,b) \triangleq x^Tw + b\\ x:特征,这玩意在这就是变量\\ w:权重\\ b:偏移量 f(x;w,b)xTw+bx:特征,这玩意在这就是变量w:权重b:偏移量所以要算 f ( x ; w , b ) f(x;w,b) f(x;w,b),我们得知道 w , b w,b w,b,这玩意可以从历史数据来,记作 w ∗ w^* w b ∗ b^* b,然后就可以拿来做预测了
    f ( x ; w ∗ , b ∗ ) ≜ x T w ∗ + b ∗ y ^ ′ = f ( x ′ ; w ∗ , b ∗ ) x ′ 表示你要卖的房屋属性 , y ^ ′ 为预测值 f(x;w^*, b^*) \triangleq x^Tw^* + b^*\\ \widehat{y}' = f(x';w^*, b^*)\\ x'表示你要卖的房屋属性,\widehat{y}'为预测值 f(x;w,b)xTw+by =f(x;w,b)x表示你要卖的房屋属性,y 为预测值下面就是使用最小二乘法训练这个模型
    1.准备训练数据表示成 ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x n , y n ) (x_1, y_1),(x_2,y_2)...(x_n,y_n) (x1,y1),(x2,y2)...(xn,yn)
    2.对第 i i i个房屋价格的预测是 y ~ ′ = f ( x ′ ; w ∗ , b ∗ ) \tilde{y}' = f(x';w^*, b^*) y~=f(x;w,b),定义损失函数:
    L ( w ; b ) = 1 2 n ∑ i = 1 n [ f ( x i ; w , b ) − y i ] 2 L(w;b) = \frac{1}{2n}\sum_{i=1}^n \Big[f(x_i;w,b) - y_i\Big]^2 L(w;b)=2n1i=1n[f(xi;w,b)yi]23.定义优化模型和最优解(最小二乘回归)
    优化模型 : min ⁡ w , b L ( w , b ) + R ( w ) 最优解 : ( w ∗ , b ∗ ) = a r g m i n w , b   L ( w , b ) + R ( w ) L ( w , b ) + R ( w ) 是目标函数 R ( w ) 是正则项,如 R ( w ) = λ ∣ w ∣ 2 2  或  R ( w ) = λ ∣ ∣ w ∣ ∣ 1 优化模型:\min_{w,b} L(w,b) + R(w)\\ 最优解:(w^*,b^*) = \underset{w,b}{argmin}~L(w,b) + R(w)\\ L(w,b) + R(w)是目标函数\\ R(w)是正则项,如R(w) = \lambda |w|^2_2~或~R(w)=\lambda||w||_1 优化模型:w,bminL(w,b)+R(w)最优解:(w,b)=w,bargmin L(w,b)+R(w)L(w,b)+R(w)是目标函数R(w)是正则项,如R(w)=λw22  R(w)=λ∣∣w14.用数值优化算法求解模型(如梯度下降)

逻辑斯蒂回归

  • 假设上面预测值 y ~ \tilde{y} y~是二元变量,即0和1,那么可以用逻辑斯蒂回归解决
  • 实际上这玩意就是要引入一个激活函数,最经典的就是 S i g m o i d Sigmoid Sigmoid函数
    s i g m o i d ( z ) ≜ 1 1 + e − z sigmoid(z) \triangleq \frac{1}{1 + e^{-z}} sigmoid(z)1+ez1就是要把上一节的预测值 f ( ⋯   ) f(\cdots) f(),代入到这个激活函数里面,计算得到 y ^ \widehat{y} y ,就能保证最终的预测值在0和1之间,这玩意也叫置信率(概率论知识,自便,因为我也不会hhh)
  • 然后还要用一个概念叫交叉熵,它用来衡量两个概率分布的差别
    P = [ p 1 , . . . , p m ] T ∑ j = 1 m p j = 1 Q = [ q 1 , . . . , q m ] T ∑ j = 1 m q j = 1 交叉熵 H ( P , Q ) = − ∑ j = 1 m p j ⋅ l n   q j P = [p_1,...,p_m]^T\\ \sum_{j=1}^{m}p_j = 1\\ Q = [q_1,...,q_m]^T\\ \sum_{j=1}^{m}q_j = 1\\ 交叉熵H(P, Q) = -\sum_{j=1}^{m}p_j \cdot ln~q_j P=[p1,...,pm]Tj=1mpj=1Q=[q1,...,qm]Tj=1mqj=1交叉熵H(P,Q)=j=1mpjln qj两个概率分布越接近,交叉熵越小
  • 然后就可以训练模型了
    1.准备数据,收集 n n n份二元标签的向量
    2.表示成向量
    [ y i 1 − y i ] 和 [ f ( x i ; w , b ) 1 − f ( x i ; w , b ) ] \left[ \begin{matrix} y_i\\ 1 - y_i \end{matrix} \right] 和 \left[ \begin{matrix} f(x_i;w,b)\\ 1 - f(x_i;w,b) \end{matrix} \right] [yi1yi][f(xi;w,b)1f(xi;w,b)]3.定义损失函数为平均交叉熵
    L ( w , b ) = 1 n ∑ i = 1 n H ( [ y i 1 − y i ] , [ f ( x i ; w , b ) 1 − f ( x i ; w , b ) ] ) L(w,b) = \frac{1}{n}\sum_{i=1}^nH \Bigg( \left[ \begin{matrix} y_i\\ 1 - y_i \end{matrix} \right] , \left[ \begin{matrix} f(x_i;w,b)\\ 1 - f(x_i;w,b) \end{matrix} \right] \Bigg) L(w,b)=n1i=1nH([yi1yi],[f(xi;w,b)1f(xi;w,b)])4.定义优化问题
    min ⁡ w , b L ( w , b ) + R ( w ) 和 ( w ∗ , b ∗ ) \min_{w,b} L(w,b) + R(w)和(w^*, b^*) w,bminL(w,b)+R(w)(w,b)5.用数值优化算法求解

Softmax分类器

  • ps:我累了,自己看视频吧

神经网络

全连接神经网络(多层感知层)

  • 全连接层:记输入层向量为 x ∈ R d x \in \mathbb{R}^d xRd,神经网络的一个层为 x x x映射到 x ′ ∈ R d ′ x' \in \mathbb{R}^{d'} xRd
    x ′ = σ ( z ) z = W x + b 权重矩阵 W ∈ R d ′ × d ′ 偏置向量 b ∈ R d ′ x' = \sigma(z)\\ z = Wx + b\\ 权重矩阵W \in \mathbb{R}^{d' \times d'}\\ 偏置向量b \in \mathbb{R}^{d'} x=σ(z)z=Wx+b权重矩阵WRd×d偏置向量bRd在这里插入图片描述
  • 全连接神经网络:说人话就是把多个全连接层连接起来,就是上图灰色背景和紫色的迭代

卷积神经网络(CNN)

  • 原理这里不多阐述。这里只需要知道,卷积神经网络的输入是矩阵或者三阶张量;卷积网络从张量提取特征,最终输出提取的特征向量。

反向传播和梯度下降

  • w ( 1 ) , . . . , w ( l ) w^{(1)},...,w^{(l)} w(1),...,w(l)为优化变量,线性模型和神经网络训练都可以变成这样一个优化问题
    min ⁡ w ( 1 ) , . . . , w ( l ) L ( w ( 1 ) , . . . , w ( l ) ) \min_{w^{(1)},...,w^{(l)}} L(w^{(1)},...,w^{(l)}) w(1),...,w(l)minL(w(1),...,w(l))最常用的算法是梯度下降

梯度下降

  • 梯度:目标函数 L L L关于一个变量 w ( i ) w^{(i)} w(i)的梯度记作
    ▽ w ( i ) L ( w ( 1 ) , . . . , w ( l ) ) ≜ ∂ L ( w ( 1 ) , . . . , w ( l ) ) ∂ w ( i ) , ∀ i = 1 , . . . , l w ( i ) 的大小,类型和 ▽ w ( i ) L 一样 \bigtriangledown_{w^{(i)}}L(w^{(1)},...,w^{(l)}) \triangleq \frac{\partial L(w^{(1)},...,w^{(l)})}{\partial w^{(i)}},\forall i =1,...,l \\ w^{(i)}的大小,类型和\triangledown_{w{(i)}}L一样 w(i)L(w(1),...,w(l))w(i)L(w(1),...,w(l)),i=1,...,lw(i)的大小,类型和w(i)L一样
  • 梯度下降(GD):目标是最小化函数值,因此沿着梯度反方向走就叫做梯度下降 (GD)
    w n e w ( i ) ← w n o w ( i ) − α   ⋅   L ( w n o w ( 1 ) , . . . , w n o w ( l ) ) w_{new}^{(i)} \leftarrow w_{now}^{(i)} - \alpha~\cdot~L \bigg(w_{now}^{(1)},...,w_{now}^{(l)} \bigg) wnew(i)wnow(i)α  L(wnow(1),...,wnow(l))
  • 随机梯度下降(SGD):如果目标函数可以写成连加或者期望的形式,那就可以用这个方法求解。假设目标函数可以写成 n n n项连加形式
    L ( w ( 1 ) , . . . , w ( l ) ) = 1 n ∑ j = 1 n F j ( w ( 1 ) , . . . , w ( l ) ) L \bigg(w^{(1)},...,w^{(l)} \bigg) = \frac{1}{n}\sum_{j=1}^{n}F_j \bigg(w^{(1)},...,w^{(l)} \bigg) L(w(1),...,w(l))=n1j=1nFj(w(1),...,w(l))函数 F j F_j Fj隐含第 j j j个训练样本 ( x j , y j ) (x_j, y_j) (xj,yj),每次会从集合 { 1 , 2 , ⋯   , n } \lbrace 1,2,\cdots,n \rbrace {1,2,,n}抽一个整数,这里记作 j j j,计算这里的随机梯度,然后做SGD
    w n e w ( i ) ← w n o w ( i ) − α   ⋅   ▽ w ( i ) F j ( w n o w ( 1 ) , . . . , w n o w ( l ) ) , ∀ i = 1 , . . . , l w_{new}^{(i)} \leftarrow w_{now}^{(i)} - \alpha~\cdot~ \triangledown_{w^{(i)}} F_j \bigg(w_{now}^{(1)},...,w_{now}^{(l)} \bigg),\forall i =1,...,l wnew(i)wnow(i)α  w(i)Fj(wnow(1),...,wnow(l)),i=1,...,l实际训练训练神经网络的时候,总是用SGD(及其变体,这里不重点讲),原因就看视频

反向传播

  • 本质是链式求导法则,这里懒得说了,自己找资料吧

第三章 马尔可夫决策过程(MDP)

基本概念(一定要牢记)

  • 状态:当前环境的一个概括,即超级玛丽的屏幕画面
  • 状态空间:指所有可能存在的状态的集合,即棋盘上的格局,记作 S \mathcal{S} S
  • 动作:指做出的决策,即超级玛丽的某个动作
  • 动作空间:指所有可能动作的集合,例如 A = { u p , l e f t , r i g h t } \mathcal{A} = \lbrace up, left, right \rbrace A={up,left,right}
  • 智能体:做动作的主体,即马里奥
  • 策略函数:是根据观测到的状态做出决策,控制智能体动作
    π ( a ∣ s ) = P ( A = a ∣ S = s ) \pi(a|s) = \mathbb{P}(A=a|S=s) π(as)=P(A=aS=s)输入:状态 s s s和动作 a a a,输出是一个0到1的数。强化学习就是学这个策略函数 π \pi π,举个例子
    π ( l e f t ∣ s ) = 0.2 π ( u p ∣ s ) = 0.3 π ( r i g h t ∣ s ) = 0.5 \pi(left|s) = 0.2\\ \pi(up|s) = 0.3\\ \pi(right|s) = 0.5 π(lefts)=0.2π(ups)=0.3π(rights)=0.5
  • 奖励: 是在智能体执行一个动作之后,环境返回给智能体的一个数值,往往是自己定义的
  • 状态转移: s n o w → s n e w ′ s_{now} \rightarrow s'_{new} snowsnew环境给出下一时刻的状态 s ′ s' s s ′ s' s是由下面的状态转移函数生成的
  • 环境:游戏规则,谁能生成新的状态,谁就是环境
  • 状态转移函数:环境用于生成新的状态 s ′ s' s时用到的函数,随机状态转移函数记作 p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a)
    p ( s ′ ∣ s , a ) = P ( S ′ = s ′ ∣ S = s , A = a ) p(s'|s,a) = \mathbb{P}(S'=s'|S=s,A=a) p(ss,a)=P(S=sS=s,A=a)状态转移函数是确定的,但是状态转移是随机的,随机性是从环境来的
  • 智能体与环境交互:是指智能体观测到环境的状态 s s s,做出动作 a a a动作会改变环境的状态,环境反馈给智能体奖励 r r r以及新的状态 s ′ s' s

随机性的来源

  • 动作的随机性来自于策略函数,给定状态 s s s,策略函数会计算出动作空间 A \mathcal{A} A中每个动作 a a a的概率值
  • 状态的随机性来自于状态转移函数,状态 s s s和动作 a a a都被确定下列,下一个状态仍然有随机性
  • 奖励 r r r可以看作是状态和动作的函数,假如已知当前状态 s t s_t st和动作 a t a_t at,奖励是唯一的,但是智能体尚未做决策之前,即 t t t时刻动作未知,那么该时刻奖励未知
  • 轨迹: 是指一回合 (Episode) 游戏中,智能体观测到的所有的状态、动作、 奖励 s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s t − 1 , a t − 1 , r t − 1 , s t s_1,a_1,r_1,s_2,a_2,r_2,...,s_{t-1},a_{t-1},r_{t-1},s_t s1,a1,r1,s2,a2,r2,...,st1,at1,rt1,st,而随机变量(尚未被观察到的) A t , R t , S t + 1 , A t + 1 , R t + 1 , S t + 2 , A t + 2 , R t + 2 A_t,R_t,S_{t+1},A_{t+1},R_{t+1},S_{t+2},A_{t+2},R_{t+2} At,Rt,St+1,At+1,Rt+1,St+2,At+2,Rt+2

回报与折扣回报

回报

  • 回报:是从当前时刻开始到一回合结束的所有奖励的总和, t t t时刻的回报 U t = R t + R t + 1 + R t + 2 + R t + 3 + . . . U_t = R_t + R_{t+1}+R_{t+2} + R_{t+3}+... Ut=Rt+Rt+1+Rt+2+Rt+3+...强化学习的目标是最大化回报,而不是最大化奖励,举个例子,你下棋目标时赢得比赛(目标),而不是吃掉对方一个棋子(奖励)

折扣回报

  • 折扣率: γ \gamma γ,在0和1之间的数,顾名思义,给未来的奖励做折扣
  • 折扣回报: U t = R t + γ ⋅ R t + 1 + γ 2 ⋅ R t + 2 + γ 3 ⋅ R t + 3 + . . . U_t = R_t + \gamma \cdot R_{t+1}+\gamma^2 \cdot R_{t+2} + \gamma^3 \cdot R_{t+3}+... Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+...

回报中的随机性

在这里插入图片描述

  • 分析一下上图,已知 U t U_t Ut依赖于奖励 R t , R t + 1 , ⋯   , R n R_t,R_{t+1},\cdots,R_n Rt,Rt+1,,Rn,而奖励 R t R_t Rt依赖于状态 s t s_t st(已观测到)与动作 A t A_t At(未知变量),奖励 R t + 1 R_{t+1} Rt+1依赖于 S t + 1 S_{t+1} St+1 A t + 1 A_{t+1} At+1(未知变量),以此类推,可以知道 U t U_t Ut的随机性来自于这些动作和状态
    A t , S t + 1 , A t + 1 , S t + 2 , ⋯   , S n , A n A_t,S_{t+1},A_{t+1},S_{t+2},\cdots,S_n,A_n At,St+1,At+1,St+2,,Sn,An动作的随机性来自于策略函数,状态随机性来资源状态转移函数

价值函数

  • 本节介绍动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a),最优动作价值函数 Q ∗ ( s , a ) Q_*(s,a) Q(s,a),状态价值函数 V π ( s ) V_\pi(s) Vπ(s),它们都是回报的期望

动作价值函数

  • 上一节介绍(折扣)回报 U t U_t Ut,假如我在 t t t时刻知道了这个值,(那我岂不是起飞?)我就知道我这游戏是寄了还是赢了。但是很明显我们无法得知未来的奖励,咋办?解决方法就是 U t U_t Ut求期望,消除其中的随机性
  • 为什么求期望可以消除随机性?可以想一想,你如果掷硬币,你很难100%知道下一次是正面(1)还是反面(0),但是你求个期望,就是一个确定值0.5,然后引出了动作价值函数
  • U t U_t Ut的随机性来自于 t + 1 t + 1 t+1时刻之后的状态和动作 S t + 1 , A t + 1 , S t + 2 , A t + 2 , . . . , S n , A n S_{t+1},A_{t+1},S_{t+2},A_{t+2},...,S_{n},A{n} St+1,At+1,St+2,At+2,...,Sn,An,求平均得到动作价值函数
    Q π ( s t , a t ) = E S t + 1 , A t + 1 , . . . , S n , A n [ U t ∣ S t = s t , A t = a t ] Q_\pi(s_t,a_t)=\mathbb{E}_{S_{t+1},A_{t+1},...,S_n,A_n}\Big[U_t\big|S_t=s_t,A_t=a_t\Big] Qπ(st,at)=ESt+1,At+1,...,Sn,An[Ut St=st,At=at]期望中的 S t = s t , A t = a t S_t = s_t,A_t=a_t St=st,At=at是条件(其实就是 x = 常数 C x=常数C x=常数C这个意思)
  • 至于为什么 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at)值依赖于 s t s_t st a t a_t at,而不依赖与 t t t时刻以后的状态和动作,我觉得不影响理解,就懒得说了(其实是我没看到推导是啥玩意),直接说这个推导式的结论吧。 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at)依赖于策略函数 π ( a ∣ s ) \pi(a|s) π(as) π \pi π是动作的概率密度函数,用不同的 π \pi π,连加的结果是不一样的,因此动作价值函数 Q π Q_\pi Qπ下标要带 π \pi π
  • 综上所述, t t t时刻的动作价值函数 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at)依赖于这三个因素
    1.当前状态 s t s_t st
    2.当前动作 a t a_t at
    3.策略函数 π \pi π,策略会决定未来的动作 A t + 1 , A t + 2 , ⋯ A_{t+1},A_{t+2},\cdots At+1,At+2,

最优动作价值函数

  • 为了要消除策略 π \pi π的影响,引入最优动作价值函数
    Q ∗ ( s t , a t ) = max ⁡ π   Q π ( s t , a t ) ∀ s t ∈ S , a t ∈ A Q_*(s_t,a_t) = \max_\pi~Q_\pi(s_t,a_t)\\ \forall s_t \in \mathcal{S}, a_t \in \mathcal{A} Q(st,at)=πmax Qπ(st,at)stS,atA这公式的意思是,在多种策略函数 π \pi π中选择最好的策略函数
    π ∗ = a r g m a x π   Q π ( s t , a t ) ,       ∀ s t ∈ S , a t ∈ A \pi^* = \underset{\pi}{argmax}~Q_\pi(s_t,a_t),~~~~~\forall s_t \in S,a_t \in A π=πargmax Qπ(st,at),     stS,atA Q ∗ , Q π ∗ Q_*,Q_{\pi^*} Q,Qπ指的都是最优动作价值函数,这玩意用处可大了。可以想一想,这个最优价值函数只跟 t t t时刻的状态 s t s_t st a t a_t at有关。假如我们在下一盘棋,当前局面代表状态 s t s_t st我们是知道的,假设我们已知 Q ∗ Q_* Q函数,我们能从动作空间 A \mathcal{A} A把所有的动作 a t a_t at取出来算一遍,给它们都打分,看到这些打分,我们是不是很容易做判断选哪个动作对赢下这局最好?这里再举例子解释一下 Q ∗ Q_* Q代表的具体含义,我们再理解一下, Q ∗ ( s t , l e f t ) = − 10 Q_*(s_t,left) = -10 Q(st,left)=10,代表在如果现在智能体选择left的动作,那不管以后智能体用什么策略函数 π \pi π,回报 U t U_t Ut的期望最多不会超过130

状态价值函数

  • 用来判断当前状态 s t s_t st(如上述棋盘的局面)是否对自己有利,以及自己和对手的胜算多大,状态价值函数定义为
    V π ( s t ) = E A t ∼ π ( ⋅ ∣ s t ) [ Q π ( s t , A t ) ] = ∑ a ∈ A π ( a ∣ s t ) ⋅ Q π ( s t , a ) V_\pi(s_t) = \mathbb{E}_{A_t \sim \pi(\cdot |s_t)}\Big[Q_\pi(s_t,A_t)\Big]=\sum_{a \in A}\pi(a|s_t) \cdot Q_\pi(s_t,a) Vπ(st)=EAtπ(st)[Qπ(st,At)]=aAπ(ast)Qπ(st,a)这公式把动作 A t A_t At作为随机变量,关于 A t A_t At求期望,就把 A t A_t At消掉了,因此得出的状态价值函数 V π ( s t ) V_\pi(s_t) Vπ(st)只依赖于策略 π \pi π和当前状态 s t s_t st,因此它也是回报 U t U_t Ut的期望
    V π ( s t ) = E A t , S t + 1 , A t + 1 , . . . , S n , A n [ U t ∣ S t = s t ] V_\pi(s_t)=\mathbb{E}_{A_t,S_{t+1},A_{t+1},...,S_n,A_n}\Big[U_t\Big|S_t=s_t\Big] Vπ(st)=EAt,St+1,At+1,...,Sn,An[Ut St=st]状态价值 V π ( s t ) V_\pi(s_t) Vπ(st)越大,意味着回报 U t U_t Ut的期望越大

策略学习和价值学习

  • 强化学习方法主要分为两类:基于模型的方法和无模型的方法,这里主要介绍后者。而无模型方法又可以分为价值学习和策略学习
  • 价值学习:通常是指学习最优价值函数 Q ∗ ( s , a ) Q_*(s,a) Q(s,a)(或者 Q π ( s t , a t ) 、 V π ( s t ) Q_\pi(s_t,a_t)、V_\pi(s_t) Qπ(st,at)Vπ(st)),假如我们已知 Q ∗ Q_* Q函数,智能体就可以根据 Q ∗ Q_* Q来做决策(其实就是我上面最优动作价值函数的例子)。智能体的决策可以用这个公式
    a t = a r g m a x a ∈ A   Q ∗ ( s t , a ) a_t = \underset{a \in A}{argmax}~Q_*(s_t,a) at=aAargmax Q(st,a)怎么去学习 Q ∗ Q_* Q函数,需要用智能体收集到的状态、动作、奖励,用它们作为训练数据,学习一个表格或者一个神经网络,用于近似 Q ∗ Q_* Q。最有名的方法就是深度Q网络
  • 策略学习:指的是学习策略函数 π ( a ∣ s ) \pi(a|s) π(as),假如有了策略函数,就可以直接用它计算所有动作的概率值,然后根据概率随机抽取一个动作执行,每观测到一个状态 s t s_t st,让 π \pi π对所有动作做评价,得到概率值

实验环境

  • 看视频怎么用gym库来跑Pendulum就行了

第四章DQN与Q学习

DQN

  • 上面说了最优动作价值函数有啥用,而深度Q网络(DQN)就是用来近似学习 Q ∗ Q_* Q最有效的方法,记作 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)。大概流程是,一开始初始化神经网络的参数 w w w,然后用“经验”学习 w w w,学习的目的是,对于所有的 s s s a a a,DQN的预测 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)尽量接近 Q ∗ ( s , a ) Q_*(s,a) Q(s,a)。可以这么理解DQN的表达式,DQN输出的是离散动作空间 A \mathcal{A} A上每个动作的Q值,就是给每个动作打分,分越高,动作越好,例如
    A = { l e f t , r i g h t , u p } q ^ 1 = Q ( s , l e f t ; w ) = 370 q ^ 2 = Q ( s , r i g h t ; w ) = − 21 q ^ 3 = Q ( s , u p ; w ) = 610 \mathcal{A} = \lbrace left, right, up\rbrace\\ \widehat{q}_1 = Q(s,left;w) = 370\\ \widehat{q}_2 = Q(s,right;w) = -21\\ \widehat{q}_3 = Q(s,up;w) = 610\\ A={left,right,up}q 1=Q(s,left;w)=370q 2=Q(s,right;w)=21q 3=Q(s,up;w)=610注意DQN输出的是 A \mathcal{A} A维的向量 q ^ \widehat{q} q ,常用的符号 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w)是标量,是向量 q ^ \widehat{q} q 中的一个元素
  • DQN的梯度公式:
    ▽ w Q ( s , a ; w ) ≜ ∂ Q ( s , a ; w ) ∂ w \bigtriangledown_wQ(s,a;w) \triangleq \frac{\partial Q(s,a;w)}{\partial{w}} wQ(s,a;w)wQ(s,a;w)其中 w w w的形状和上述梯度完全相同

时间差分(TD)算法

  • 因为这玩意不太好理解所以书上举个例子(但是我觉得挺好理解的)

例子

  • 假设有个模型 Q ( s , d ; w ) Q(s,d;w) Q(s,d;w)其中 s , d , w s,d,w s,d,w分别是起点、终点和参数,我们要训练这个模型。在出发之前,用户告诉起点 s s s和终点 d d d,这个模型先做一个预测 q ^ = Q ( s , d ; w ) \widehat{q} = Q(s,d;w) q =Q(s,d;w),在用户结束行程的时候把实际驾车时间 y y y反馈给模型,通过两者比较计算误差来更新模型
  • 假设我从北京到上海实际花费16个小时,模型的估计值是14小时,即 s = B e i j i n g , d = S h a n g h a i , q ^ = 14 , y = 16 s=Beijing,d = Shanghai, \widehat{q} = 14, y = 16 s=Beijing,d=Shanghai,q =14,y=16,然后就训练一次(具体流程后面再说)

TD算法

  • 假设我从北京到上海估计需要 q ^ = 14 \widehat{q} = 14 q =14小时,中间路过了济南。假设我从北京到济南的实际时间是 r = 4.5 r = 4.5 r=4.5小时,而我到达济南后模型再一次估计,从济南到上海估计需要 q ^ ′ = 11 \widehat{q}' = 11 q =11小时。到达济南的时候,显然根据模型最新的估计值,整个旅途的总时间是
    y ^ ≜ r + q ^ ′ = 4.5 + 11 = 15.5 \widehat{y} \triangleq r + \widehat{q}' = 4.5 + 11 = 15.5 y r+q =4.5+11=15.5TD算法将这个 y ^ \widehat{y} y 称为TD目标,很显然这个 y ^ = 15.5 \widehat{y} = 15.5 y =15.5比单纯的 q ^ = 14 \widehat{q} = 14 q =14靠谱,因为前者是有事实的推断,后者纯粹是瞎猜的。
  • 根据上面的阐述,所以可以使用 y ^ \widehat{y} y 对模型做“修正”,我们希望估计值 q ^ \widehat{q} q 尽量接近TD目标 y ^ \widehat{y} y 。然后定义一个TD误差
    δ = q ^ − y ^ \delta = \widehat{q} - \widehat{y} δ=q y 这玩意是计算损失函数(估计值 q ^ \widehat{q} q 和TD目标 y ^ \widehat{y} y 差值的平方)求导得到的一个差值,在上述例子的含义就是:根据两次模型的估计做差值,我可以得知,该模型估计我从北京到济南的时间是 q ^ − q ^ ′ = 3 \widehat{q} - \widehat{q}' = 3 q q =3小时,但是我实际上花费了 r = 4.5 r = 4.5 r=4.5小时,这个TD误差就是 δ = 3 − 4.5 = − 1.5 \delta = 3 - 4.5 = -1.5 δ=34.5=1.5,即模型的估计与我的真实观测之差

用TD训练DQN

算法推导

  • 回报的定义变式
    U t = R t + γ ⋅ ∑ k = t + 1 n γ k − t − 1 ⋅ R k ⏟ U t + 1 U_t = R_t + \underbrace{\gamma \cdot \sum_{k = t+1}^n\gamma^{k-t-1} \cdot R_k}_{U_{t+1}} Ut=Rt+Ut+1 γk=t+1nγkt1Rk
  • 最优动作价值函数可以写成
    Q ∗ ( s t , a t ) = max ⁡ π   E [ U t ∣ S t = s t , A t = a t ] Q_*(s_t,a_t) = \max_\pi~\mathbb{E}\Big[U_t | S_t = s_t, A_t = a_t \Big] Q(st,at)=πmax E[UtSt=st,At=at]
  • 从上面两个公式出发,可以得到定理最优贝尔曼方程
    Q ∗ ( s t , a t ) ⏟ U t 的期望 = E S t + 1 ∼ p ( ⋅ ∣ s t , a t ) [ R t + γ ⋅ max ⁡ A ∈ A Q ∗ ( S t + 1 , A ) ⏟ U t + 1 的期望 ∣ S t = s t , A t = a t ] \underbrace{Q_*(s_t,a_t)}_{U_t的期望} = \mathbb{E}_{S_{t+1} \sim p(\cdot|s_t,a_t)}\Big[R_t + \gamma \cdot \underbrace{\max_{A \in \mathcal{A}}Q_*(S_{t+1}, A)}_{_{U_{t+1}的期望}} | S_t = s_t,A_t = a_t\Big] Ut的期望 Q(st,at)=ESt+1p(st,at)[Rt+γUt+1的期望 AAmaxQ(St+1,A)St=st,At=at]当智能体执行动作 a t a_t at之后,环境通过状态转移函数 p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at)计算出新状态 s t + 1 s_{t+1} st+1,然后反馈给智能体,奖励 R t R_t Rt最多依赖于 S t , A t , S t + 1 S_t,A_t,S_{t+1} St,At,St+1,因此当观测到 s t , a t , s t + 1 s_t,a_t,s_{t+1} st,at,st+1,则奖励 R t R_t Rt也被观测到,记作 r t r_t rt,因此有了四元组
    ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)然后就有了贝尔曼方程右边期望的一个蒙特卡洛近似
    Q ∗ ( s t , a t ) = r t + γ ⋅ max ⁡ a ∈ A Q ( s t + 1 , a ) (4.1) Q_*(s_t,a_t) = r_t + \gamma \cdot \max_{a \in \mathcal{A}}Q(s_{t+1}, a) \tag{4.1} Q(st,at)=rt+γaAmaxQ(st+1,a)(4.1)左边 Q ∗ ( s t , a t ) Q_*(s_t,a_t) Q(st,at)就像北京到上海的时间, r t r_t rt像是实际观测的北京到济南时间, γ ⋅ max ⁡ a ∈ A Q ( s t + 1 , a ) \gamma \cdot \max_{a \in \mathcal{A}}Q(s_{t+1}, a) γmaxaAQ(st+1,a)像是模型估计剩余路程耗费的时间,把公式(4.1)替换长城神经网络的形式得到
    Q ( s t , a t ; w ) ⏟ 预测 q ^ t ≈ r t + γ ⋅ max ⁡ a ∈ A Q ( s t + 1 , a ) ⏟ T D 目标 y ^ t \underbrace{Q(s_t,a_t;w)}_{预测\widehat{q}_t} \approx \underbrace{r_t + \gamma \cdot \max_{a \in \mathcal{A}}Q(s_{t+1}, a)}_{TD目标\widehat{y}_t} 预测q t Q(st,at;w)TD目标y t rt+γaAmaxQ(st+1,a)然后定义损失函数
    L ( w ) = 1 2 [ Q ( s t , a t ; w ) − y ^ t ] 2 L(w) = \frac{1}{2} \Big[Q(s_t,a_t;w) - \widehat{y}_t \Big]^2 L(w)=21[Q(st,at;w)y t]2,假装 y ^ t \widehat{y}_t y t是常数(实际上是依赖于 w w w),计算 L L L关于 w w w的梯度
    ▽ w L ( w ) = q ^ t − y ^ t ⏟ T D 误差 δ t ⋅ ▽ w Q ( s t , a t ; w ) \bigtriangledown_w L(w) = \underbrace{\widehat{q}_t - \widehat{y}_t}_{TD误差\delta_t} \cdot \bigtriangledown_w Q(s_t,a_t;w) wL(w)=TD误差δt q ty twQ(st,at;w)然后梯度下降,让 q ^ t \widehat{q}_t q t更接近 y ^ t \widehat{y}_t y t
    w ← w − α ⋅ δ t ⋅ ▽ w Q ( s t , a t ; w ) w \leftarrow w - \alpha \cdot \delta_t \cdot \bigtriangledown_w Q(s_t,a_t;w) wwαδtwQ(st,at;w)上面这个公式就是训练DQN的TD算法

训练流程

  • 算法所需数据维 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)这个四元组,与控制智能体运动的策略 π \pi π无关,因此可以用任何策略控制智能体,同时记录下算法轨迹,作为DQN的训练数据,因此训练分为两个独立的部分,收集训练数据、更新参数 w w w
  • 收集训练数据:用策略函数 π \pi π去控制智能体与环境交互,这个 π \pi π就叫行为策略,常用的是 ϵ − g r e e d y \epsilon-greedy ϵgreedy
    a t = { a r g m a x a Q ( s t , a ; w ) 以概率 ( 1 − ε ) 均匀抽取 A 中的一个动作 以概率 ε a_t = \begin{cases} \underset{a}{argmax}Q(s_t,a;w) & 以概率(1-\varepsilon) \\ 均匀抽取A中的一个动作 & 以概率\varepsilon \\ \end{cases} at= aargmaxQ(st,a;w)均匀抽取A中的一个动作以概率(1ε)以概率ε把智能体在一局游戏中的轨迹记作
    s 1 , a 1 , r 2 , ⋯   , s n , a n , r n s_1,a_1,r_2,\cdots,s_n,a_n,r_n s1,a1,r2,,sn,an,rn把一条轨迹划分成 n n n ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)这种,存入数组,这玩意就叫经验回放数组
  • 更新DQN参数 w w w
    1.对DQN做正向传播
    q ^ j = Q ( s j , a j ; w n o w ) q ^ j + 1 = max ⁡ a ∈ A Q ( s j + 1 , a ; w n o w ) \widehat{q}_j = Q(s_j,a_j;w_{now})\\ \widehat{q}_{j+1} = \max_{a \in \mathcal{A}}Q(s_{j+1},a;w_{now}) q j=Q(sj,aj;wnow)q j+1=aAmaxQ(sj+1,a;wnow)2.计算TD目标和TD误差
    y ^ j = r j + γ ⋅ q ^ j + 1 δ j = q ^ j − y ^ j \widehat{y}_j=r_j+\gamma \cdot \widehat{q}_{j+1}\\ \delta_j = \widehat{q}_j - \widehat{y}_j y j=rj+γq j+1δj=q jy j3.对DQN做方向传播得到梯度
    g j = ▽ w Q ( s j , a , ; w n o w ) g_j = \triangledown_wQ(s_j,a,;w_{now}) gj=wQ(sj,a,;wnow)4.做梯度下降更新DQN的参数:
    w n e w ← w n o w − α ⋅ δ j ⋅ g j w_{new} \leftarrow w_{now} - \alpha \cdot \delta_j \cdot g_j wnewwnowαδjgj智能体收集数据、更新DQN参数这两者可以同时进行

Q学习算法

  • 上一节准确的说,使用的TD算法叫做Q学习算法(Q-learning),TD算法是一大类算法,常见的有Q学习算法和SARSA算法,前面是学到最优的动作价值函数 Q ∗ Q_* Q,后面是为了学习动作价值函数 Q π Q_\pi Qπ
  • 用表格表示 Q ∗ Q_* Q,假设状态空间 S \mathcal{S} S和动作空间 A \mathcal{A} A都是有限集,如图所示
    在这里插入图片描述
    做决策使用的公式为
    a t = a r g m a x a ∈ A   Q ∗ ( s t , a ) a_t = \underset{a \in \mathcal{A}}{argmax}~Q_*(s_t,a) at=aAargmax Q(st,a)(选哪些动作就不说废话了)
  • 我们要通过智能体的轨迹来学习这样的一个表格,即使用一个表格 Q ~ \tilde{Q} Q~来近似 Q ∗ Q_* Q,首先初始化 Q ~ \tilde{Q} Q~,然后使用表格形式的Q学习算法更新 Q ~ \tilde{Q} Q~,每次更新表格的一个元素,最终 Q ~ \tilde{Q} Q~会收敛于 Q ∗ Q_* Q
  • 算法推导:由贝尔曼方程可知
    Q ∗ ( s t , a t ) = E S t + 1 ∼ p ( ⋅ ∣ s t , a t ) [ R t + γ ⋅ max ⁡ A ∈ A Q ∗ ( S t + 1 , A ) ∣ S t = s t , A t = a t ] Q_*(s_t,a_t) = \mathbb{E}_{S_{t+1} \sim p(\cdot|s_t,a_t)}\Big[R_t + \gamma \cdot \max_{A \in \mathcal{A}}Q_*(S_{t+1}, A) | S_t = s_t,A_t = a_t\Big] Q(st,at)=ESt+1p(st,at)[Rt+γAAmaxQ(St+1,A)St=st,At=at]1.方程左边 Q ∗ ( s t , a t ) Q_*(s_t,a_t) Q(st,at)可以近似成 Q ~ ( s t , a t ) \tilde{Q}(s_t,a_t) Q~(st,at) Q ~ ( s t , a t ) \tilde{Q}(s_t,a_t) Q~(st,at)是表格在 t t t时刻对 Q ∗ ( s t , a t ) Q_*(s_t,a_t) Q(st,at)做出的估计(也就是对表格所有元素做估计)。
    2.蒙特卡洛近似得到
    r t + γ ⋅ max ⁡ a ∈ A Q ( s t + 1 , a ) r_t + \gamma \cdot \max_{a \in \mathcal{A}}Q(s_{t+1}, a) rt+γaAmaxQ(st+1,a)进一步近似可得到TD目标
    y ^ t ≜ r t + γ ⋅ max ⁡ a ∈ A Q ~ ( s t + 1 , a ) \widehat{y}_t \triangleq r_t + \gamma \cdot \max_{a \in \mathcal{A}} \tilde{Q}(s_{t+1},a) y trt+γaAmaxQ~(st+1,a)它是表格在 t + 1 t+1 t+1时刻对 Q ∗ ( s t , a t ) Q_*(s_t,a_t) Q(st,at)做出的估计,虽然 Q ~ \tilde{Q} Q~ y ^ t \widehat{y}_t y t都是对 Q ∗ Q_* Q的估计,但是 y ^ t \widehat{y}_t y t更加真实一点,因此鼓励 Q ~ \tilde{Q} Q~接近 y ^ t \widehat{y}_t y t,然后更新表格 Q ~ \tilde{Q} Q~ ( s t , a t ) (s_t,a_t) (st,at)位置上的元素
    Q ~ ( s t , a t ) ← ( 1 − α ) ⋅ Q ~ ( s t , a t ) + α ⋅ y ^ t \tilde{Q}(s_t,a_t) \leftarrow (1 - \alpha) \cdot \tilde{Q}(s_t,a_t) + \alpha \cdot \widehat{y}_t Q~(st,at)(1α)Q~(st,at)+αy tQ学习的目的就是让 Q ~ \tilde{Q} Q~更加趋近于 Q ∗ Q_* Q
  • 收集训练数据:就是上面说的搞一个轨迹,划为四元组,使用 ϵ − g r e e d y \epsilon - greedy ϵgreedy行为策略,事后用经验回放更新表格 Q ~ \tilde{Q} Q~
  • 经验回放更新表格 Q ~ \tilde{Q} Q~:随机从经验回放数组抽一个四元组,更新当前表格 Q ~ n o w \tilde{Q}_{now} Q~now ( s j , a j ) (s_j,a_j) (sj,aj)位置上的元素后表格记作 Q ~ n e w \tilde{Q}_{new} Q~new
    1.把表格中 Q ~ n o w \tilde{Q}_{now} Q~now中第 ( s j , a j ) (s_j,a_j) (sj,aj)位置上的元素记作:
    q ^ j = Q ~ n o w ( s j , a j ) \widehat{q}_j = \tilde{Q}_{now}(s_j,a_j) q j=Q~now(sj,aj)2.查看表格 Q ~ n o w \tilde{Q}_{now} Q~now的第 s j + 1 s_{j+1} sj+1行,把该行的最大值记作:
    q ~ j + 1 = max ⁡ a Q ~ n o w ( s j + 1 , a ) \tilde{q}_{j+1} = \max_a\tilde{Q}_{now}(s_{j+1},a) q~j+1=amaxQ~now(sj+1,a)3.计算TD目标和TD误差
    y ^ j = r j + γ ⋅ q ^ j + 1 δ j = q ^ j − y ^ j \widehat{y}_j = r_j + \gamma \cdot \widehat{q}_{j+1}\\ \delta_j= \widehat{q}_j - \widehat{y}_j y j=rj+γq j+1δj=q jy j4.更新表格中 ( s j , a j ) (s_j,a_j) (sj,aj)位置上的元素:
    Q ~ n e w ( s j , a j ) ← Q ~ n o w ( s j , a j ) − α ⋅ δ j \tilde{Q}_{new}(s_j,a_j) \leftarrow \tilde{Q}_{now}(s_j,a_j) - \alpha \cdot \delta_j Q~new(sj,aj)Q~now(sj,aj)αδj收集经验与更新表格 Q ~ \tilde{Q} Q~可以同时进行,每当智能体执行一次动作,我们可以用经验回放对 Q ~ \tilde{Q} Q~做几次更新,也可以完成一局游戏,对 Q ~ \tilde{Q} Q~做几次更新

同策略(On-policy)与异策略(Off-policy)

  • 这节很重要,一定要重点理解行为策略和目标策略是干嘛的
  • 行为策略:让智能体与环境交互,记录下观测到的状态、动作、奖励,用这些经验来学习一个策略函数。在这一过程中,控制智能体与环境交互的策略被称作行为策略(又说了一遍),行为策略作用就是第一句所说的,换个意思就叫收集经验
  • 目标策略:训练的目的是得到一个策略函数,在结束训练之后,用这个策略函数来控制智能体;这个策略函数就叫做目标策略,在本章中,目标策略是一个确定性的策略,即使用DQN控制智能体
    a t = a r g m a x a   Q ( s t , a ; w ) a_t = \underset{a}{argmax}~Q(s_t,a;w) at=aargmax Q(st,a;w)本章中Q学习算法用任意的行为策略 ϵ − g r e e d y \epsilon - greedy ϵgreedy收集四元组,然后拿来训练目标策略。
  • 行为策略和目标策略可以相同,也可以不同。同策略是指用相同的行为策略和目标策略,异策略(本章的DQN)则用不同的行为策略和目标策略
  • 异策略的好处就是可以使用行为策略收集经验,记录到经验回放数组,然后使用这些经验去更新目标策略,这种训练方式叫作经验回放(只适合异策略)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值