深度强化学习 ①(DRL)

参考视频:📺王树森教授深度强化学习

前言

  • 最近在学习深度强化学习,学的一知半解😢😢😢,这是我的笔记,欢迎和我一起学习交流~

  • 这篇博客目前还相对比较乱,后面有时间会整理一次~
    由于 CSDN 目前有单篇博客字数限制,故分成两篇博客来展示 😁,这是第一篇

第二篇在这里:深度强化学习 ②(DRL)

文章目录

    • 1. 常见名词
      • 1.1 强化学习目标
      • 1.2 policy 函数
      • 1.3 状态转移
      • 1.4 强化学习中的随机性来源
      • 1.5 强化学习的过程
      • 1.6 Return
      • 1.7 value function
        • 1.7.1 Action-value function
        • 1.7.2 Optimal action-value function
        • 1.7.3 State-value function
        • 1.7.4 Optimal state-value function
      • 1.8 如何用 AI 控制 agent
    • 2. Deep Q Network(DQN)
      • 2.1 Temporal difference(TD) learning
        • 2.1.1 传统走完全程更新
        • 2.1.2 TD 无需走完全程也能更新
      • 2.2 用 TD 算法学习 DQN
        • 2.2.1 相邻两个折扣回报之间的关系
        • 2.2.2 使用 TD learning 训练 DQN
    • 3. Policy Network
    • 4. Actor-Critic Methods
      • 4.1 训练
    • 5. Monte Carlo Algorithms
      • 5.1 近似求积分
      • 5.2 近似期望
    • 6. 随机排列
    • 7. TD Learning
      • 7.1 Sarsa 算法
        • 7.1.1 表格
        • 7.1.2 价值网络
      • 7.2 Q-Learning
        • 7.2.1 表格形式
        • 7.2.2 DQN
      • 7.3 Multi-Step TD target
        • 7.3.1 m-step TD target for Sarsa:
        • 7.3.2 one-step TD target for Sarsa
        • 7.3.3 m-step TD target for Q-Learning
        • 7.3.4 one-step TD target for Q-Learning
    • 8. Experience Replay(经验回放)
      • 8.1 原始 TD 算法的缺点
      • 8.2 经验回放
      • 8.3 对经验回放的改进

1. 常见名词

1.1 强化学习目标

获得的奖励总和尽量要高

1.2 policy 函数

π ( a ∣ s ) = P ( A = a ∣ S = s ) \pi(a|s)=P(A=a|S=s) π(as)=P(A=aS=s)

计算动作的概率值,从而控制 agent 运动

1.3 状态转移

可以是确定的,也可以是随机的,通常认为状态转移是随机的,随机性是从环境中来的

用概率密度函数来表示状态转移
p ( s ′ ∣ s , a ) = P ( S ′ = s ′ ∣ S = s , A = a ) p(s^{'}|s,a)=P(S^{'}=s^{'}|S=s,A=a) p(ss,a)=P(S=sS=s,A=a)

1.4 强化学习中的随机性来源

  1. agent 动作

    动作是根据 policy 函数给出的概率随机抽样得到的

  2. 状态转移

    环境根据状态转移函数给出的概率随机抽样来得到某个状态

1.5 强化学习的过程

  1. 观察状态 s
  2. 根据 policy 函数得到动作 a,并执行
  3. 环境进入状态 s2,并给 agent 一个奖励 r1
  4. 执行动作 a2

1.6 Return

回报,cumulative future reward
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+...

未来的奖励比当前的奖励价值低,故应当给予未来的奖励较低的权重

Discounted return:折扣回报,cumulative discounted future reward。由于未来的奖励没有现在的奖励值钱,故强化学习中普遍使用 Discounted return,折扣率为 γ \gamma γ (超参),若未来奖励和现在奖励一样,则值为 1。
U t = R t + γ R t + 1 + γ R t + 2 + γ R t + 3 + . . . U_{t}=R_{t}+\gamma R_{t+1}+\gamma R_{t+2}+\gamma R_{t+3}+... Ut=Rt+γRt+1+γRt+2+γRt+3+...

在任务未结束时,Ut 是随机变量,随机性来源于 policy 函数 和 状态转移函数(跟从 t 时刻开始未来所有的动作和状态都有关)。对于任意时刻 i,奖励 Ri 取决于状态 Si 和动作 Ai

Ut 依赖于未来所有的动作和未来所有的状态

1.7 value function

1.7.1 Action-value function

Ut 是随机变量,在 t 时刻并不知道 Ut 是什么,如何评估当前的形式,对 Ut 求期望(关于未来所有状态和动作求期望,消除了随机变量),将里面的随机性用积分积掉,就得到了一个实数。求期望得到 动作价值函数(Action-value function) Q π Q_\pi Qπ,除了 St 和 At (被作为观测到的数值来对待),其余的随机变量都被积掉了。
Q π ( S t , a t ) = E [ U t ∣ S t = s t , A t = a t ] Q_\pi(S_t,a_t)=E[U_t|S_t=s_t,A_t=a_t] Qπ(St,at)=E[UtSt=st,At=at]

Q π Q_\pi Qπ 除了依赖于 st 和 at,还与 policy 函数有关,因为积分的时候会用到 policy 函数,若 policy 函数不一样,则积分得到的 Q π Q_\pi Qπ 也就不一样

直观意义:若使用某个 policy 函数,在状态 st 下,做动作 at 是好还是坏。在使用某个 policy 函数时,用 Q π Q_\pi Qπ 给当前状态下所有动作打分,由此便能知道哪个动作更好。

1.7.2 Optimal action-value function

Q π Q_\pi Qπ 关于 π \pi π 求最大化,便可去掉其中的 π \pi π。(使用最好的那个 policy 函数);
Q ⋆ ( S t , a t ) = m a x π Q π ( S t , a t ) Q^\star (S_t,a_t)=max_\pi Q_\pi(S_t,a_t) Q(St,at)=maxπQπ(St,at)
直观意义:在状态 st 时,评价动作 at 好不好。agent 可以根据 Q ⋆ Q^\star Q 对动作的评价来做决策

1.7.3 State-value function

V π ( S t ) = E A ∼ π [ Q π ( s t , A ) ] V π ( S t ) = E A [ Q π ( s t , A ) ] = ∑ a π ( a ∣ s t ) ∗ Q π ( s t , a ) V π ( S t ) = E A [ Q π ( s t , A ) ] = ∫ π ( a ∣ s t ) ∗ Q π ( s t , a ) d a V_\pi(S_t)=E_{A\sim\pi}[Q_{\pi} (s_t,A)]\\ V_\pi(S_t)=E_A[Q_\pi (s_t,A)]=\sum_a \pi(a|s_t)*Q_\pi(s_t,a)\\ V_\pi(S_t)=E_A[Q_\pi (s_t,A)]=\int \pi(a|s_t)*Q_\pi(s_t,a)da\\ Vπ(St)=EAπ[Qπ(st,A)]Vπ(St)=EA[Qπ(st,A)]=aπ(ast)Qπ(st,a)Vπ(St)=EA[Qπ(st,A)]=π(ast)Qπ(st,a)da

V π V_\pi Vπ Q π Q_\pi Qπ 的期望。 Q π Q_\pi Qπ 和 状态 st、动作 A 都有关,将动作 A 作为随机变量,关于 A 求期望,将 A 消掉,则得到 V π V_\pi Vπ,只和 policy 函数以及状态 St 有关

直观意义

  1. 评价当前状态的好坏,快赢了还是快输了
  2. 评价 policy 函数的好坏,policy 函数越好, V π V_\pi Vπ 的平均值 E S [ V π ( S ) ] E_S[V_\pi(S)] ES[Vπ(S)]
1.7.4 Optimal state-value function

V ⋆ ( s ) = max ⁡ a V π ( s ) . V^\star(s)=\max_aV_\pi(s). V(s)=amaxVπ(s).

评价状态的好坏程度

1.8 如何用 AI 控制 agent

  1. 学习 policy 函数,将当前状态作为 policy 函数的输入,输出每个动作的概率,根据这个概率随机抽样得到下一步要执行的动作

  2. 学习最优动作价值函数,将当前状态作为输入,对每个动作都做一个评价,选出 Q 值最高的动作,最高评价的动作在未来获得的奖励更多
    a t = a r g m a x a Q ⋆ ( s t , a ) a_t=argmax_a Q^\star(s_t,a) at=argmaxaQ(st,a)

强化学习最常用的标准库 OpenAI Gym,Gym 有几大类控制问题

  1. 经典控制问题
  2. Atari games
  3. MuJoCo 连续控制问题

2. Deep Q Network(DQN)

状态 s
Conv
Dense
输出每个动作的打分

强化学习目标:最终的奖励尽可能的大

Q ⋆ Q^\star Q 作为一个先知,不能给出确定的答案,只能给出每个动作带来的平均回报,给出的值和实际会发生的并不一样,但我们还是选择平均回报最高的那个动作

DQN 是一种价值学习的方法,用一个神经网络去近似 Q ⋆ Q^\star Q 函数。神经网络为 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w),s 为输入,w 为神经网络的参数,a 为输出(对所有可能动作的打分),通过奖励来学习神经网络,神经网络的打分会逐渐改进,越来越准

应用:通过 DQN 打分,执行分数最高的动作,然后环境会更新状态,并给 agent 一个奖励,接着继续 DQN 打分…

价值学习:学习一个函数来近似 Q ⋆ Q^\star Q

2.1 Temporal difference(TD) learning

模型无需走完整个过程,也能进行更新

2.1.1 传统走完全程更新
estimate 1000 minutes
A
B

从 A 地到 B 地,模型 Q ( w ) Q(w) Q(w) 预测需要 1000 分钟,实际走完全程花费的时间是 q = 860 q=860 q=860,损失为 L = 1 / 2 ( q − y ) 2 L=1/2(q-y)^2 L=1/2(qy)2,计算梯度 $ \frac{\partial L}{\partial w}=\frac{\partial q}{\partial w} * \frac{\partial L}{\partial q}=(q-y)*\frac{\partial Q(w)}{\partial w} ,更新梯度: ,更新梯度: ,更新梯度:w_{t+1}=w_t -\alpha * \frac {\partial L}{\partial w}|_{w=w_t}$,这种方式必须完成整个过程才能对模型进行一次更新

2.1.2 TD 无需走完全程也能更新
actual 300 minutes
estimate 600 minutes
A
C
B

模型预测从 A 到 B 需要 Q ( w ) = 1000 m i n u t e s Q(w)=1000 minutes Q(w)=1000minutes,而实际只走到了 C,用了 300 minutes,则更新估计,从 A 到 B 预计需要 300 + 600 = 900 m i n u t e s 300 + 600 = 900minutes 300+600=900minutes,称为 TD target,比之前预测的 1000 minutes 更加可靠。损失为 L = 1 2 ( Q ( w ) − y ) 2 L=\frac{1}{2}(Q(w)-y)^2 L=21(Q(w)y)2,计算梯度 $ \frac{\partial L}{\partial w}=\frac{\partial q}{\partial w} * \frac{\partial L}{\partial q}=(q-y)\frac{\partial Q(w)}{\partial w}=(1000-900)\frac{\partial Q(w)}{\partial w}$,其中 $ q-y$ 即 1000 − 900 1000-900 1000900 为 TD error,接着用梯度下降更新模型参数。

TD 算法的目标就是让 TD error 尽量接近 0

2.2 用 TD 算法学习 DQN

2.1.2 中,用到公式 T A − > B ≈ T A − > C + T C − > B T_{A->B}\approx T_{A->C} + T_{C->B} TA>BTA>C+TC>B, 理想情况下左右两边应该相等,存在这样的公式才能使用 TD 算法(右边有一项是真是观测到的)

2.2.1 相邻两个折扣回报之间的关系

U t = R t + γ ∗ R t + 1 + γ 2 ∗ R t + 2 + γ 3 ∗ R t + 3 + γ 4 ∗ R t + 4 = R t + γ ∗ ( R t + 1 + γ ∗ R t + 2 + γ 2 ∗ R t + 3 + γ 3 ∗ R t + 4 U_t=R_t + \gamma * R_{t+1} + \gamma^2 * R_{t+2} + \gamma^3 * R_{t+3} + \gamma^4 * R_{t+4}\\ =R_t + \gamma *(R_{t+1} + \gamma * R_{t+2} + \gamma^2 * R_{t+3} + \gamma^3 * R_{t+4}\\ Ut=Rt+γRt+1+γ2Rt+2+γ3Rt+3+γ4Rt+4=Rt+γ(Rt+1+γRt+2+γ2Rt+3+γ3Rt+4

U t = R t + γ ∗ U t + 1 U_t =R_t+ \gamma * U_{t+1} Ut=Rt+γUt+1

两边同时求期望可得:
Q ( s t , a t ; w ) ≈ r t + γ ∗ Q ( s t + 1 , a t + 1 ; w ) P r e d i c t i o n ≈ T D t a r g e t Q(s_t,a_t;w)\approx r_t+\gamma*Q(s_{t+1},a_{t+1};w)\\ Prediction \approx TD\ target Q(st,at;w)rt+γQ(st+1,at+1;w)PredictionTD target

2.2.2 使用 TD learning 训练 DQN

价值网络对期望回报的估计: Q t = Q ( s t , a t ; w ) Q_t=Q(s_t,a_t;w) Qt=Q(st,at;w)

TD target

也是对期望回报的估计,由于用到了真实值 r t r_t rt,故比 Q t Q_t Qt 更靠谱
y t = r t + γ ∗ Q ( s t + 1 , a t + 1 ; w t ) = r t + γ ∗ m a x a Q ( s t + 1 , a ; w t ) y_t=r_t+\gamma*Q(s_{t+1},a_{t+1};w_t)=r_t+\gamma*max_a Q(s_{t+1},a;w_t) yt=rt+γQ(st+1,at+1;wt)=rt+γmaxaQ(st+1,a;wt)
Loss
L t = 1 2 [ Q ( s t , a t ; w ) − y t ] 2 L_t=\frac{1}{2}[Q(s_t,a_t;w)-y_t]^2 Lt=21[Q(st,at;w)yt]2
Gradient descent
w t + 1 = w t − α ∗ ∂ L t ∂ w ∣ w = w t w_{t+1}=w_t-\alpha*\frac{\partial L_t}{\partial w}|_{w=w_t} wt+1=wtαwLtw=wt

找到 w w w,使得 L ( w ) L(w) L(w) 尽量小。 L ( w ) = 1 T ∑ t = 1 T δ t 2 2 L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta_t^2}{2} L(w)=T1t=1T2δt2.

3. Policy Network

状态 s
Conv
Dense
Softmax
动作空间概率分布

使用神经网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ)去近似 policy 函数 π ( a ∣ s ) \pi(a|s) π(as)。输出动作空间上的概率分布,即每个动作的概率值,根据动作做抽样,让 agent 执行这个动作。
V π ( s t ; θ ) = E A ∼ π [ Q π ( s , A ) ] = ∑ a π ( a ∣ s t ; θ ) ∗ Q π ( s t , a ) \begin{aligned} V_\pi(s_t;\theta) &=E_{A\sim\pi}[Q_{\pi}(s,A)]\\ &=\sum_a \pi(a|s_t;\theta)*Q_\pi(s_t,a) \end{aligned} Vπ(st;θ)=EAπ[Qπ(s,A)]=aπ(ast;θ)Qπ(st,a)
V ( s t ; θ ) V(s_t;\theta) V(st;θ) 可以用来评价策略网络以及状态 s 的好坏,给定状态 s,策略网络越好, V ( s t ; θ ) V(s_t;\theta) V(st;θ) 越大。

3.1 目标函数

通过改进 θ \theta θ,让 V 的值越来越大,故目标函数可以定义如下,关于状态 s 求期望,目标函数就只与 θ \theta θ 有关
J ( θ ) = E S [ V ( S ; θ ) ] J(\theta)=E_S[V(S;\theta)] J(θ)=ES[V(S;θ)]

使用策略函数 π \pi π,agent 的平均胜算有多大,策略函数越好,目标函数越大。agent 的平均胜算也就越大。

3.2 Policy gradient ascent

通过策略梯度上升来改进 θ \theta θ
θ ← θ + β ∗ ∂ V ( s ; θ ) ∂ θ \theta \leftarrow \theta + \beta*\frac{\partial V(s;\theta)}{\partial \theta} θθ+βθV(s;θ)

∂ V ( s ; θ ) ∂ θ \frac{\partial V(s;\theta)}{\partial \theta} θV(s;θ) 称为策略梯度

形式一: ∂ V ( s ; θ ) ∂ θ = ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ ∗ Q π ( s , a ) = ∑ a π ( a ∣ s ; θ ) ∗ ∂ l o g π ( a ∣ s ; θ ) ∂ θ ∗ Q π ( s , a ) 形式二: = E A ∼ π [ ∂ l o g π ( A ∣ s ; θ ) ∂ θ ∗ Q π ( s , A ) ] 形式一:\frac{\partial V(s;\theta)}{\partial \theta}=\sum_a\frac{\partial \pi(a|s;\theta)}{\partial \theta}*Q_\pi(s,a)\\ =\sum_a\pi(a|s;\theta)*\frac{\partial log \pi(a|s;\theta)}{\partial \theta}*Q_\pi(s,a)\\ 形式二:=E_{A\sim\pi}[\frac{\partial log \pi(A|s;\theta)}{\partial \theta}*Q_\pi(s,A)] 形式一:θV(s;θ)=aθπ(as;θ)Qπ(s,a)=aπ(as;θ)θlogπ(as;θ)Qπ(s,a)形式二:=EAπ[θlogπ(As;θ)Qπ(s,A)]

3.2.1 求策略梯度
  • 若动作是离散的,使用形式一,直接求所有动作的策略梯度并求和

  • 若动作是连续的,使用形式二,求期望需要定积分,但无法求,因为 π \pi π 函数是神经网络,非常复杂,无法直接用数学公式计算积分,故做蒙特卡洛近似(对离散的动作同样适用),将期望近似算出来

    蒙特卡洛近似:抽一个或多个随机样本,用随机样本(观测值)来近似期望

    根据 π \pi π 函数随机采样得到 a ^ \hat a a^,令 g ( a ^ , θ ) = ∂ l o g π ( a ^ ∣ s ; θ ) ∂ θ ∗ Q π ( s , a ^ ) ] g(\hat a,\theta)=\frac{\partial log \pi(\hat a|s;\theta)}{\partial \theta}*Q_\pi(s,\hat a)] g(a^,θ)=θlogπ(a^s;θ)Qπ(s,a^)],则 E A [ g ( A , θ ) ] = ∂ V ( s ; θ ) ∂ θ E_A[g(A,\theta)]=\frac{\partial V(s;\theta)}{\partial \theta} EA[g(A,θ)]=θV(s;θ) g ( a ^ , θ ) g(\hat a,\theta) g(a^,θ) ∂ V ( s ; θ ) ∂ θ \frac{\partial V(s;\theta)}{\partial \theta} θV(s;θ) 的无偏估计(是这个期望的蒙特卡洛近似),故其可以来近似策略梯度

    故更新模型参数的时候,用 g ( a ^ , θ ) g(\hat a,\theta) g(a^,θ) 作为近似梯度,无需计算精确梯度

3.2.2 求 Q π Q_\pi Qπ
  1. 用观测到的 u t u_t ut 来代替 Q π Q_\pi Qπ 函数。用策略网络 π \pi π 控制 agent 运动,完成一个过程之后(完成一局游戏),记录整个轨迹,计算 u t u_t ut,用 u t u_t ut 来近似 Q π = E [ U t ] Q_\pi=E[U_t] Qπ=E[Ut]
  2. 用另一个神经网络来近似价值函数 Q π Q_\pi Qπ,则共有两个网络,actor 和 critic,即 actor-critic 方法

4. Actor-Critic Methods

状态价值函数 V π ( S t ) = ∑ a π ( a ∣ s ) ∗ Q π ( s , a ) V_\pi(S_t)=\sum_a \pi(a|s)*Q_\pi(s,a) Vπ(St)=aπ(as)Qπ(s,a) π \pi π 函数和 Q π Q_\pi Qπ 都不知道,可以用两个神经网络分别近似这两个函数,用 Actor-Critic 方法同时学习这两个网络。用神经网络 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ) 来近似 π \pi π 函数,用神经网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 近似价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a),则状态价值函数可用 V ( s ; θ , w ) = ∑ a π ( a ∣ s ; θ ) ∗ q ( s , a ; w ) V(s;\theta,w)=\sum_a \pi(a|s;\theta)*q(s,a;w) V(s;θ,w)=aπ(as;θ)q(s,a;w) 来近似。然后同时训练这两个网络

目的:让 actor 的回报越来越高,让 critic 的打分越来越精准

  • 更新策略网络:为了让状态价值函数的值越来越高

  • 更新价值网络:为了对动作的打分更加精准,从而更好的估计未来奖励的总和

用 Sarsa 训练

4.1 训练

  1. 观测到当前状态 s t s_t st,将 s t s_t st 作为输入,根据策略函数 π \pi π 来计算动作概率分布,通过随机采样来获得要执行的动作 a t a_t at
  2. agent 执行动作 a t a_t at, 环境会更新状态 s t + 1 s_t+1 st+1,并给出奖励 r t r_t rt
  3. 随机采用动作 a ~ t + 1 \tilde a_{t+1} a~t+1,但不执行
  4. 计算价值网络 q t = q ( s t , a t ; w t ) q_t=q(s_t,a_t;w_t) qt=q(st,at;wt) q t + 1 = q ( s t + 1 , a ~ t + 1 ; w t ) q_{t+1}=q(s_{t+1},\tilde a_{t+1};w_t) qt+1=q(st+1,a~t+1;wt)
  5. 计算 TD error: δ t = q t − ( r t + γ ∗ q t + 1 ) \delta_t=q_t-(r_t+\gamma*q_{t+1}) δt=qt(rt+γqt+1)
  6. 求导: d w , t = ∂ q ( s t , a t ; w ) ∂ w ∣ w = w t d_{w,t}=\frac{\partial q(s_t,a_t;w)}{\partial w}|w=w_t dw,t=wq(st,at;w)w=wt
  7. 更新价值网络 w t + 1 = w t − α ∗ δ ∗ d w , t w_{t+1}=w_t-\alpha * \delta * d_{w,t} wt+1=wtαδdw,t
  8. 求导: d θ , t = ∂ l o g π ( a t ∣ s t ; θ ) ∂ θ ∣ θ = θ t d_{\theta,t}=\frac{\partial log \pi(a_t|s_t;\theta)}{\partial \theta}|\theta=\theta_t dθ,t=θlogπ(atst;θ)θ=θt
  9. 更新策略网络: θ t + 1 = θ t + β ∗ q t ∗ d θ , t \theta_{t+1}=\theta_t+\beta*q_t*d_{\theta,t} θt+1=θt+βqtdθ,t

behavior 泛化能力不好,错误还可能会累加,不如强化学习效果好

5. Monte Carlo Algorithms

蒙特卡洛算法是一大类随机算法,通过随机样本来估算真实值

5.1 近似求积分

求多元函数 f ( x ) f(x) f(x) 的积分 I = ∫ Ω f ( x ) d x I=\int_\Omega f(x)dx I=Ωf(x)dx

  1. 在积分区域随机均匀采样 n 个样本点 X 1 , . . . X n X_1, ... X_n X1,...Xn
  2. 计算积分区域的体积 V = ∫ Ω d x V=\int_\Omega dx V=Ωdx
  3. 计算 Q n = V ∗ 1 n ∑ i = 1 n f ( X i ) Q_n=V*\frac{1}{n}\sum_{i=1}^{n}f(X_i) Qn=Vn1i=1nf(Xi)
  4. Q n Q_n Qn 作为对积分的近似

5.2 近似期望

E X ∼ p [ f ( X ) ] = ∫ R d f ( x ) ∗ p ( x ) d x E_{X\sim p}[f(X)]=\int_{R^d}f(x)*p(x)dx EXp[f(X)]=Rdf(x)p(x)dx

  1. 根据概率密度函数 p ( x ) p(x) p(x) 随机采样 n 个样本 x 1 , . . . x n x_1,...x_n x1,...xn
  2. 计算 Q n = 1 n ∑ i = 1 n f ( x i ) Q_n=\frac{1}{n}\sum_{i=1}^{n}f(x_i) Qn=n1i=1nf(xi)
  3. Q n Q_n Qn 作为对期望的近似

6. 随机排列

均匀随机排列:所有排列被选中的概率相同。一个元素出现在任何位置的概率都相同。任何位置上出现 n 个元素中任何一个元素的概率都是 1 n \frac{1}{n} n1

7. TD Learning

U t U_t Ut 和 $U_{t+1} 之间的关系为 KaTeX parse error: Can't use function '$' in math mode at position 27: …gamma * U_{t+1}$̲,通常认为 $R_t$ 依赖于…
\begin{aligned}
Q_\pi(s_t,a_t)
&=E[U_t|s_t,a_t]\
&=E[R_t+\gammaU_{t+1}|s_t,a_t]\
&=E[R_t|s_t,a_t]+\gamma
E[U_{t+1}|s_t,a_t]\
&=E[R_t|s_t,a_t]+\gammaE[Q_\pi(S_{t+1},A_{t+1})|s_t,a_t]\
&=E[R_t+\gamma
Q_\pi(S_{t+1},A_{t+1})]\
\end{aligned}
$$
期望是关于 S t + 1 S_{t+1} St+1 A t + 1 A_{t+1} At+1 求的,直接求期望很困难,故对期望做蒙特卡洛近似,将 R t R_t Rt 近似为观测到的奖励 r t r_t rt,将 S t + 1 S_{t+1} St+1 A t + 1 A_{t+1} At+1 用观测到的 s t + 1 s_{t+1} st+1 a t + 1 a_{t+1} at+1 近似,得到 Q π ( s t + 1 , a t + 1 ) Q_\pi(s_{t+1},a_{t+1}) Qπ(st+1,at+1),从而得到近似的期望 r t + γ ∗ Q π ( s t + 1 , a t + 1 ) r_t+\gamma*Q\pi(s_{t+1},a_{t+1}) rt+γQπ(st+1,at+1),称为 TD target y t y_t yt

TD Learning 是为了让动作价值 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at) 接近 y t y_t yt,因为前者完全是估计值,而后者部分是真实的奖励,更可靠,将其作为观测到的值,让前者更接近后者

TD 算法有 Sarsa 算法和 Q-Learning 算法

7.1 Sarsa 算法

目的:学习动作价值函数 Q π Q_\pi Qπ

7.1.1 表格

状态和动作较少的问题,可以使用表格形式的 Sarsa(State-Action-Reward-State-Action)

Action a1Action a2
State s1
State s2

需要做的就是用 Sarsa 算法更新表格

  • 观测到一个四元组 transition ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)
  • 用策略函数 π \pi π 计算下一个动作 a t + 1 a_{t+1} at+1
  • 计算 TD target: y t = r t + γ ∗ Q π ( s t + 1 , a t + 1 ) y_t=r_t+\gamma*Q\pi(s_{t+1},a_{t+1}) yt=rt+γQπ(st+1,at+1)
  • 计算 TD error: δ t = Q π ( s t , a t ) − y t \delta_t=Q_\pi(s_t,a_t)-y_t δt=Qπ(st,at)yt
  • 更新表格: Q π ( s t , a t ) ← Q π ( s t , a t ) − α ∗ δ t Q_\pi(s_t,a_t) \leftarrow Q_\pi(s_t,a_t)-\alpha*\delta_t Qπ(st,at)Qπ(st,at)αδt
7.1.2 价值网络

用神经网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 近似动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a)

在 Action-Critic 中,用 Sarsa 来更新价值网络

  • TD target: y t = r t + γ ∗ q ( s t + 1 , a t + 1 ; w ) y_t=r_t+\gamma*q(s_{t+1},a_{t+1};w) yt=rt+γq(st+1,at+1;w)
  • TD error: δ t = q ( s t , a t ; w ) − y t \delta_t=q(s_t,a_t;w)-y_t δt=q(st,at;w)yt
  • Loss: δ t 2 / 2 \delta_t^2/2 δt2/2
  • Gradient: ∂ δ t 2 / 2 ∂ w = δ t ∗ ∂ q ( s t , a t ; w ) ∂ w \frac{\partial \delta_t^2/2}{\partial w}=\delta_t*\frac{\partial q(s_t,a_t;w)}{\partial w} wδt2/2=δtwq(st,at;w)
  • Gradient descent: w ← w − α ∗ δ ∗ ∂ q ( s t , a t ; w ) ∂ w w\leftarrow w-\alpha * \delta * \frac{\partial q(s_t,a_t;w)}{\partial w} wwαδwq(st,at;w)

7.2 Q-Learning

学习最优动作价值函数 Q ⋆ Q^\star Q

对于任何策略 π \pi π,以下公式都成立 Q π ( s t , a t ) = E [ R t + γ ∗ Q π ( S t + 1 , A t + 1 ) ] Q_\pi(s_t,a_t)=E[R_t+\gamma*Q_\pi(S_{t+1},A_{t+1})] Qπ(st,at)=E[Rt+γQπ(St+1,At+1)],因此对于最优动作价值函数也成立,即 Q ⋆ ( s t , a t ) = E [ R t + γ ∗ Q ⋆ ( S t + 1 , A t + 1 ) ] Q^\star(s_t,a_t)=E[R_t+\gamma*Q^\star(S_{t+1},A_{t+1})] Q(st,at)=E[Rt+γQ(St+1,At+1)],将等式右边的 Q ⋆ Q^\star Q 项替换为对动作 a 的最大化 Q ⋆ ( s t , a t ) = E [ R t + γ ∗ max ⁡ a Q ⋆ ( S t + 1 , a ) ] Q^\star(s_t,a_t)=E[R_t+\gamma*\max_a Q^\star(S_{t+1},a)] Q(st,at)=E[Rt+γmaxaQ(St+1,a)],对右边的期望进行蒙特卡洛近似得 r t + γ ∗ max ⁡ a ∗ Q ⋆ ( s t + 1 , a ) r_t+\gamma*\max_a*Q^\star(s_{t+1},a) rt+γmaxaQ(st+1,a),记为 TD target y t y_t yt y t y_t yt 部分基于真实观测,比直接的预测 Q ⋆ ( s t , a t ) Q^\star(s_t,a_t) Q(st,at) 靠谱,让 Q ⋆ ( s t , a t ) Q^\star(s_t,a_t) Q(st,at) 接近 y t y_t yt

7.2.1 表格形式
  • 观测到一个四元组 transition ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)
  • 计算 TD target: y t = r t + γ ∗ max ⁡ a Q ⋆ ( s t + 1 , a ) y_t=r_t+\gamma*\max_a Q^\star(s_{t+1},a) yt=rt+γmaxaQ(st+1,a)
  • 计算 TD error: δ t = Q ⋆ ( s t , a t ) − y t \delta_t=Q^\star(s_t,a_t)-y_t δt=Q(st,at)yt
  • 更新表格: Q ⋆ ( s t , a t ) ← Q ⋆ ( s t , a t ) − α ∗ δ t Q^\star(s_t,a_t) \leftarrow Q^\star(s_t,a_t)-\alpha*\delta_t Q(st,at)Q(st,at)αδt
7.2.2 DQN

用神经网络 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w) 来近似最优动作价值函数 Q ⋆ Q^\star Q

输入:状态 s

输出:对所有动作的打分

DQN 控制 agent 执行动作 a t = a r g m a x a Q ( s t , a ; w ) a_t=argmax_a\ Q(s_t,a;w) at=argmaxa Q(st,a;w)

用收集到的 transition 更新参数 w

  • 观测到一个四元组 transition ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1). (相当于一条训练数据)

  • 计算 TD target: y t = r t + γ ∗ max ⁡ a Q ( s t + 1 , a ; w ) y_t=r_t+\gamma*\max_a Q(s_{t+1},a;w) yt=rt+γmaxaQ(st+1,a;w)

    y t y_t yt 部分基于实际观测到的奖励 r t r_t rt,部分基于 DQN 在 t+1 时刻的估计

  • 计算 TD error: δ t = Q ( s t , a t ; w ) − y t \delta_t=Q(s_t,a_t;w)-y_t δt=Q(st,at;w)yt

  • 更新参数: w ← w − α ∗ δ t ∗ ∂ Q ( s t , a t ; w ) ∂ w w \leftarrow w-\alpha*\delta_t*\frac{\partial Q(s_t,a_t;w)}{\partial w} wwαδtwQ(st,at;w)

7.3 Multi-Step TD target

前面的 TD target 都是只包含一个奖励 r t r_t rt,即标准 TD target(One-Step TD target),若用多个奖励,则称为 Multi-Step TD target,效果会更好

对折扣回报的推导得到多步回报
$$
\begin{aligned}
U_t&=R_t+\gammaU_{t+1}\
&=R_t+\gamma
R_{t+1}+\gamma^2U_{t+2}\
…\
&=\sum_{i=0}{m-1}\gammai
R_{t+i}+\gamma^m*U_{t+m}

\end{aligned}
$$

7.3.1 m-step TD target for Sarsa:

y t = ∑ i = 0 m − 1 γ i ∗ r t + i + γ m ∗ Q π ( s t + m , a t + m ) (当 m = 1 时,就是标准的 T D t a r g e t ) y_t=\sum_{i=0}^{m-1}\gamma^i*r_{t+i}+\gamma^m*Q_\pi(s_{t+m},a_{t+m})(当 m=1 时,就是标准的 TD target) yt=i=0m1γirt+i+γmQπ(st+m,at+m)(当m=1时,就是标准的TDtarget

7.3.2 one-step TD target for Sarsa

y t = r t + γ ∗ Q π ( s t + 1 , a t + 1 ) y_t=r_t+\gamma*Q_\pi(s_{t+1},a_{t+1}) yt=rt+γQπ(st+1,at+1)

7.3.3 m-step TD target for Q-Learning

y t = ∑ i = 0 m − 1 γ i ∗ r t + i + γ m ∗ max ⁡ a Q ⋆ ( s t + m , a ) (当 m = 1 时,就是标准的 T D t a r g e t ) y_t=\sum_{i=0}^{m-1}\gamma^i*r_{t+i}+\gamma^m*\max_a Q^\star(s_{t+m},a)(当 m=1 时,就是标准的 TD target) yt=i=0m1γirt+i+γmamaxQ(st+m,a)(当m=1时,就是标准的TDtarget

r t + i r_{t+i} rt+i 是多步折扣公式中 R t + i R_{t+i} Rt+i 的观测值, max ⁡ a Q ⋆ ( s t + m , a ) \max_a Q^\star(s_{t+m},a) maxaQ(st+m,a) 是多步折扣公式中 U t + m U_{t+m} Ut+m 的期望

7.3.4 one-step TD target for Q-Learning

y t = r t + γ ∗ max ⁡ a Q ⋆ ( s t + 1 , a ) y_t=r_t+\gamma*\max_a Q^\star(s_{t+1},a) yt=rt+γamaxQ(st+1,a)

m 是超参,需要调整,如果 m 大小合适,则多步会比一步的表现更好

多步的 TD target 可以让 TD Learning 的效果变得更好

8. Experience Replay(经验回放)

8.1 原始 TD 算法的缺点

原始的 TD 算法的实现中,将用于训练的四元组 ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) 训练完一轮之后就丢弃掉了,找到 w w w,使得 L ( w ) L(w) L(w) 尽量小。 L ( w ) = 1 T ∑ t = 1 T δ t 2 2 L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta_t^2}{2} L(w)=T1t=1T2δt2.

经验:从开始到结束所有的 transition

原始的 TD 算法缺点

  1. 用完一个 transition 之后就丢弃掉了,会造成对经验的浪费。

    这些经验是可以被重复利用的,因此可以使用经验回放来改进

  2. 相邻两条 transition 之间有很强的相关性,这种相关性是有害的。

    若把序列打散,消除相关性,则有利于将 DQN 训练的更好

8.2 经验回放

经验回放可以克服这个缺点,既可以重复利用经验,避免浪费,也可以把序列打散,消除相关性

将最新的 transition 存放到一个队列中(Replay Buffer),队列容量为 n,队列存满之后,再继续往进存时,需要删除最老的一条 transition。n 是一个超参数,通常设置在 1 0 5 ∼ 1 0 6 10^5\sim 10^6 105106,n 的设置取决于具体应用。

DQN 的目标函数为 L ( w ) = 1 T ∑ t = 1 T δ t 2 2 L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta_t^2}{2} L(w)=T1t=1T2δt2.

训练过程

使用随机梯度下降(SGD)最小化 L ( w ) L(w) L(w)

  1. 每次从队列中随机抽取一个 transition, ( s i , a i , r i , s i + 1 ) (s_i,a_i,r_i,s_{i+1}) (si,ai,ri,si+1)

  2. 计算 TD error, δ i \delta_i δi

  3. 计算随机梯度: g i = ∂ δ i 2 / 2 ∂ w = δ i ⋅ ∂ Q ( s i , a i ; w ) ∂ w g_i=\frac{\partial \delta_i^2/2}{\partial w}=\delta_i \cdot \frac{\partial Q(s_i,a_i;w)}{\partial w} gi=wδi2/2=δiwQ(si,ai;w)

  4. 参数更新: w ← w − α ⋅ g i w\leftarrow w-\alpha \cdot g_i wwαgi

    这里只用了一个 transition 来更新 w,实践中通常使用 mini batch SGD,每次随机抽取多个 transition,算出多个随机梯度,用梯度的平均来更新 w

8.3 对经验回放的改进

**Prioritized Experience Replay(优先经验回放)**是对经验回放改进中的一种,用非均匀抽样代替均匀抽样

  • buffer 中有很多 transition,但它们的重要性不一样。可以用 TD error 来判断 transition 的重要性, ∣ δ t ∣ |\delta_t| δt 越大,transition 越重要,transiton 被抽样的概率越大。

    1. p t ∝ ∣ δ t ∣ + ϵ p_t\propto |\delta_t| + \epsilon ptδt+ϵ
    2. p t ∝ 1 r a n k ( t ) p_t\propto \frac{1}{rank(t)} ptrank(t)1
  • 若是均匀抽样,所有的 transition 都应该有相同的学习率,若是非均匀抽样,应根据抽样概率来调整学习率。若一条 transition 有较大的抽样概率,那么应该将学习率设置的小一些。用 ( n ⋅ p t ) − β (n\cdot p_t)^{-\beta} (npt)β 来缩放学习率, β ∈ ( 0 , 1 ) \beta \in(0,1) β(0,1) (均匀抽样时, p 1 = p 2 = . . . = p n = 1 n p_1=p_2=...=p_n=\frac{1}{n} p1=p2=...=pn=n1)。

    β \beta β 是超参,建议一开始让它小一点,逐渐增长到 1

    一条 transition 越重要,抽样概率越大,用小的学习率抵消大抽样概率造成的偏差

  • 要实现优先经验回放,需要给每条 transition 标上 δ t \delta_t δt,决定了这条数据的重要性,若一条 transition 刚刚收集到,还没用来训练,不知道 δ t \delta_t δt,那么就直接设置为最大值,即最高的优先级。

    每次使用 transtion 都要重新计算 δ t \delta_t δt,并更新它

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web服务器搭建练习

练习要求: 搭建一个web服务器,客户端通过www.haha.com访问该网站时能够看到内容:this is haha 完成过程: 1. 创建新ip,重启ens [rootlocalhost ~]# nmtui [rootlocalhost ~]# nmcli connection up ens1602.创建目录&#xff0…

Java面试八股之Spring boot的自动配置原理

Spring boot的自动配置原理 Spring Boot 的自动配置原理是其最吸引人的特性之一,它大大简化了基于 Spring 框架的应用程序开发。以下是 Spring Boot 自动配置的基本原理和工作流程: 1. 启动类上的注解 Spring Boot 应用通常会在主类上使用 SpringBoot…

微信支付v3

查看证书序列号 引用&#xff1a;https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/zheng-shu-xiang-guan https://myssl.com/cert_decode.html # 查看证书序列号openssl x509 -in apiclient_cert.pem -noout -serial 微信支付java <dependency>…

2.3 openCv -- 对矩阵执行掩码操作

在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显&#xff0c;通过回显来判断是否存在注入&#xff0c;以及用什么方式进行注入&#xff0c;直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显&#xff0c;所以我们可以使用联合查询。联合查询原理简单说一下&…

中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?

你是一个程序员&#xff0c;你用代码写了一个博客应用服务&#xff0c;并将它部署在了云平台上。 但应用服务太过受欢迎&#xff0c;访问量太大&#xff0c;经常会挂。 所以你用了一些工具自动重启挂掉的应用服务&#xff0c;并且将应用服务部署在了好几个服务器上&#xff0c;…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

FPGA实现LVDS接口(3)--ODDR原语的介绍及使用(仿真/源码)

目录 1、ODDR是什么? 2、ODDR的使用 2.1、OPPOSITE_EDGE模式 2.2、SAME_EDGE模式 3、对ODDR的仿真分析 3.1、OPPOSITE_EDGE模式的仿真结果 3.2、SAME_EDGE模式的仿真结果 4、ODDR在FPGA底层的布局和布线 5、源码下载 总目录点这里:《FPGA接口与协议》专栏的…

复制带有随机指针的链表(哈希表实现)

// 定义一个Node类&#xff0c;表示链表的节点 public static class Node{ int value; // 节点的值 Node next; // 指向下一个节点的引用 Node rand; // 指向随机节点的引用 // 构造函数&#xff0c;用于创建一个新的节点并初始化其值 Node(int data){ …

达梦数据库激活

SSH登录 192.168.0.148 账号&#xff1a;root 密码&#xff1a;xxx 1.上传 dm.key 文件到安装目录 /bin 目录下 cd /home/dmdba/dmdbms/bin rz -E dm.key2.修改 dm.key 文件权限 chown -R dmdba.dinstall dm.key3.打开数据库工具&#xff0c;新建查询&#xff0c;输入 cd /…

Macbook - MacOS14连接WIFI但无法打开部门网页或应用

现象&#xff1a; 遇到MacBook部分网页可以打开&#xff0c;部分网页不行。包括应用也是同个现象&#xff0c;重启路由器连接手机热点也无法解决。 解决方案&#xff1a; 系统设置/网络/位置&#xff0c;默认是【自动】&#xff0c;添加并选择新的位置即可解决。&#xff08;具…

实验2-1-5 输出带框文字

#include<stdio.h> int main(){printf("************\n");printf(" Welcome \n");printf("************\n");}

SMO算法,platt论文的原始算法及优化算法

platt论文&#xff1a;[PDF] Sequential Minimal Optimization : A Fast Algorithm for Training Support Vector Machines | Semantic Scholar 算法优化&#xff1a;[PDF] Improvements to Platts SMO Algorithm for SVM Classifier Design | Semantic Scholar 包含个人实现…

2024年【危险化学品生产单位安全生产管理人员】最新解析及危险化学品生产单位安全生产管理人员考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员最新解析参考答案及危险化学品生产单位安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品生产单位安全生产管理人员操作证已考过的学员汇总&#xff0c;…

export在linux中的作用

在某些项目中常常使用export命令。该命令的作用是设置环境变量&#xff0c;并且该环境变量为当前shell进程与其启动的子进程共享。 export MODEL_NAME"stable-diffusion-v1-4"比如以上命令&#xff0c;如果不采用export&#xff0c;设置的变量仅在当前shell命令/进程…

基于JSP的毕业生就业信息管理系统

你好&#xff0c;我是专注于信息系统开发的码农小野&#xff01;如果你对毕业生就业信息管理有需求&#xff0c;欢迎联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 SSM框架 工具&#xff1a;Eclipse、Maven、Navicat 系统展示 首页…

nhdeep电子档案长期保存系统

nhdeep电子档案长期保存系统&#xff0c;用于导入管理系统中的著录项信息&#xff0c;并安装档案相关规范&#xff0c;转换为适合长期保存的电子文件格式和封装包结构&#xff0c;进行管理和存储。 著录信息列表页面&#xff0c;用于导入著录项&#xff0c;挂接原文文件&#…

【漏洞复现】CmsEasy crossall_act.php SQL注入漏洞

漏洞描述 CmsEasy存在SQL注入漏洞,通过文件service.php加密SQL语句执行即可执行任何SQL命令 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资…

protobuf2.5升级protobuf3.14.0

这个升级搞得心力憔悴&#xff0c;我VS2010升级到了VS2017&#xff0c;所有的库都要编译一下&#xff0c;想着顺便把其他的三方库也升级了。搞了好几天&#xff0c;才升级完&#xff0c;因为不仅要搞windows还要搞linux版本各种库的升级。hpsocket的升级&#xff0c;jsoncpp的升…