当前位置: 首页 > news >正文

【高级机器学习】 12. 强化学习,Q-learning, DQN

强化学习(Reinforcement Learning)基础入门:从监督学习到 Q-learning, DQN

1. 监督学习与强化学习的本质区别

1.1 监督学习回顾

在监督学习中,我们拥有带标签的训练数据:

S=(xi,yi)i=0k, S = {(x_i, y_i)}_{i=0}^k, S=(xi,yi)i=0k,

其中:

  • xi∈Xx_i \in \mathcal{X}xiX 为特征
  • yi∈Yy_i \in \mathcal{Y}yiY 为标签

目标是学习一个函数:

fS:X→Y, f_S : \mathcal{X} \to \mathcal{Y}, fS:XY,

使得 fff 在新样本上也能预测正确的标签。

核心特点:有“标准答案”可以学习。


1.2 强化学习的核心思想

强化学习中,没有标签。只有:

  • 状态(state)
  • 动作(action)
  • 奖励(reward)

智能体(agent)与环境交互,通过试错学习到一个策略(policy),使得 长期累计奖励 最大。

强化学习要解决的问题是:

如何在不同状态下选择动作,使未来获得尽可能高的累计收益?


2. 强化学习中的基本符号与过程

2.1 基本符号(Notation)

  • A\mathcal{A}A:动作集合
  • S\mathcal{S}S:状态集合
  • ttt:时间步
  • rtr_trt:在时间 ttt 得到的即时奖励
  • π\piπ:策略,即 π(a∣s)\pi(a\mid s)π(as) 表示“在状态 sss 时选择动作 aaa 的概率”

2.2 强化学习的交互过程

智能体与环境交互的基本流程:

  1. 处于某个状态 St=stS_t = s_tSt=st
  2. 根据策略选择动作 At=atA_t = a_tAt=at
  3. 获得奖励 Rt=rtR_t = r_tRt=rt
  4. 转移到下一个状态 St+1=st+1S_{t+1} = s_{t+1}St+1=st+1

三个关键概率分布:

  • 行动选择:π(At∣St)\pi(A_t \mid S_t)π(AtSt)
  • 状态转移:P(St+1∣St,At)P(S_{t+1} \mid S_t, A_t)P(St+1St,At)
  • 奖励生成:P(Rt∣St,At)P(R_t \mid S_t, A_t)P(RtSt,At)

3. 强化学习的目标函数

强化学习希望最大化折扣累计奖励:

∑t≥0γtrt, \sum_{t\ge 0} \gamma^t r_t, t0γtrt,

其中 γ∈(0,1)\gamma \in (0,1)γ(0,1) 是折扣因子。

目标是寻找最优策略 π∗\pi^*π

π∗=arg⁡max⁡πE[∑t≥0γtrt,∣,S0=s0,π]. \pi^* = \arg\max_{\pi} \mathbb{E}\left[ \sum_{t\ge 0} \gamma^t r_t ,\big|, S_0 = s_0, \pi \right]. π=argπmaxE[t0γtrt,,S0=s0,π].

γ\gammaγ 越接近 1,越重视远期收益。


4. 一个具体的强化学习示例环境

我们来看一个具有三个状态、两个动作的简单环境:

  • 状态集合:

S=s1,s2,s3 \mathcal{S} = {s^1, s^2, s^3} S=s1,s2,s3

  • 动作集合:

A=a1,a2 \mathcal{A} = {a^1, a^2} A=a1,a2

环境定义了每个动作从当前状态跳转到哪个状态,并给出即时奖励(正数代表好,负数代表坏)。

在该环境中,不同动作可能:

  • 转移到不同的状态
  • 获得不同的奖励
  • 在达到某些状态后可以反复获得高奖励(如 s3s^3s3 中执行 a2a^2a2 会一直得到 +4+4+4

5. 比较两个策略的优劣

给定初始状态 s0=s1s_0 = s^1s0=s1,比较两个策略 π1\pi^1π1π2\pi^2π2

  • 两个策略会生成不同的状态——动作——奖励序列
  • 长期奖励(累积折扣奖励)不同

根据计算结果:

第二个策略 π2\pi^2π2 获得的长期收益更高,因此是更优的策略

其原因是 π2\pi^2π2 会更倾向进入能重复获得高奖励的状态(例如 s3s^3s3)。


6. Q-value 的定义与意义

6.1 Q-value 的含义

Q-value(行动价值函数)定义为:

在状态 s0s_0s0 下采取动作 a0a_0a0,之后按策略 π\piπ 行动所能获得的期望折扣累计奖励

形式化定义:

Q(s0,a0)=E[∑t≥0γtrt,∣,S0=s0, A0=a0, π]. Q(s_0, a_0) = \mathbb{E}\left[ \sum_{t\ge 0} \gamma^t r_t ,\Big|, S_0 = s_0,\ A_0 = a_0,\ \pi \right]. Q(s0,a0)=E[t0γtrt,,S0=s0, A0=a0, π].

最优的 Q-value:

Q∗(s,a)=max⁡πQ(s,a). Q^*(s,a) = \max_{\pi} Q(s,a). Q(s,a)=πmaxQ(s,a).


6.2 计算一个具体的最优 Q 值

例如计算从状态 s2s^2s2 执行动作 a1a^1a1 的最优 Q-value:

奖励序列如下:

  • 第 0 步得到 +1+1+1
  • 第 1 步得到 γ⋅1\gamma\cdot 1γ1
  • 第 2 步得到 −γ2⋅1-\gamma^2\cdot 1γ21
  • 从第 3 步开始,每一步都得到 +4+4+4,形成无限几何序列

因此:

Q∗(s2,a1)=1+γ−γ2+∑t=3∞4γt. Q^*(s^2, a^1) = 1 + \gamma - \gamma^2 + \sum_{t=3}^{\infty} 4\gamma^t. Q(s2,a1)=1+γγ2+t=34γt.

几何级数的结构说明:

4γt4\gamma^t4γt 表示从到达高回报状态后不断获得稳定奖励。


7. Bellman 最优性方程:Q 的递推关系

最关键的递推公式:

Q∗(s,a)=r+γE∗s′[max⁡∗a′Q∗(s′,a′)]. Q^*(s,a) = r + \gamma \mathbb{E}*{s'} \left[ \max*{a'} Q^*(s', a') \right]. Q(s,a)=r+γEs[maxaQ(s,a)].

表示:

当前的最优价值 = 即时奖励 + 未来最优价值(折扣后)

这是强化学习所有动态规划、Q-learning 等方法的基础。


8. TD 更新:如何根据 Bellman 方程迭代求 Q

Bellman 方程可重新整理为以下形式:

Q(s,a)=Q(s,a)+E∗s′[r+γmax⁡∗a′Q(s′,a′)−Q(s,a)]. Q(s,a) = Q(s,a) + \mathbb{E}*{s'} \left[ r + \gamma \max*{a'}Q(s',a') - Q(s,a) \right]. Q(s,a)=Q(s,a)+Es[r+γmaxaQ(s,a)Q(s,a)].

括号内:

δ=r+γmax⁡a′Q(s′,a′)−Q(s,a) \delta = r + \gamma \max_{a'}Q(s',a') - Q(s,a) δ=r+γamaxQ(s,a)Q(s,a)

称为 TD 误差(Temporal Difference error),代表“新信息与旧估计的差距”。


8.1 实际可用的迭代公式

加入学习率 η∈(0,1)\eta \in (0,1)η(0,1)

Qi+1(s,a)=Qi(s,a)+η(r+γmax⁡a′Qi(s′,a′)−Qi(s,a)). Q_{i+1}(s,a) = Q_i(s,a)+\eta\big(r + \gamma \max_{a'}Q_i(s',a') - Q_i(s,a)\big). Qi+1(s,a)=Qi(s,a)+η(r+γamaxQi(s,a)Qi(s,a)).

意义:

  • r+γmax⁡Qr + \gamma\max Qr+γmaxQ 是“更真实”的估计(包含观测到的奖励)
  • 学习率控制吸收多少新信息

9. Q-table:将 Q 值存到表中

在有限状态–动作空间,可以用一个 Q 表存储所有 Q(s,a)Q(s,a)Q(s,a)

动作/状态s1s^1s1s2s^2s2s3s^3s3
a1a^1a152
a2a^2a2-1-6-4
a3a^3a3523

每次交互后:

  • 根据更新公式更新表中的某个 (s,a)(s,a)(s,a) 的值
  • 不断迭代,使 Q-table 收敛到接近最优 Q-value

10. Q-table 的学习流程

Q-table 的学习包含以下循环:

  1. 初始化 Q-table
  2. 从当前状态选择动作(通常结合 ϵ\epsilonϵ-greedy)
  3. 执行动作
  4. 获得奖励
  5. 更新 Q-table
  6. 回到步骤 2

经过大量迭代后,Q-table 会收敛得到近似最优策略。


11. Q-learning 算法(Off-policy)

Q-learning 更新规则:

Q(s,a)←Q(s,a)+η(r+γmax⁡a′Q(s′,a′)−Q(s,a)) Q(s,a) \leftarrow Q(s,a) + \eta\left(r + \gamma\max_{a'}Q(s',a') - Q(s,a)\right) Q(s,a)Q(s,a)+η(r+γamaxQ(s,a)Q(s,a))

Q-learning 的特点:

  • off-policy
    max⁡Q(s′,a′)\max Q(s',a')maxQ(s,a) 更新,但下一步动作不一定是选择该 a′a'a
  • 因此学习到的是“最优策略”,而不是“实际执行的策略”。

伪代码要点:

  • 初始化 Q-table

  • 重复以下步骤直到 episode 结束:

    1. 选择动作 a=arg⁡max⁡Q(s,a)a=\arg\max Q(s,a)a=argmaxQ(s,a)
    2. 执行动作获得 (r,s′)(r,s')(r,s)
    3. 更新 Q(s,a)Q(s,a)Q(s,a)
    4. 状态 s←s′s \leftarrow s'ss

12. Sarsa 算法(On-policy)

Sarsa 的更新公式:

Q(s,a)←Q(s,a)+η(r+γQ(s′,a′)−Q(s,a)), Q(s,a) \leftarrow Q(s,a) + \eta\left(r + \gamma Q(s', a') - Q(s,a)\right), Q(s,a)Q(s,a)+η(r+γQ(s,a)Q(s,a)),

与 Q-learning 唯一不同:

  • 使用的是执行策略本身选出的动作 a′a'a
  • 因此是 on-policy

学习的是当前策略,而不是最优策略。

伪代码流程:

  1. 初始化 Q
  2. 在状态 sss 下根据当前策略选动作 aaa
  3. 执行动作获得 (r,s′)(r, s')(r,s)
  4. 在新状态 s′s's 下选动作 a′a'a
  5. Q(s′,a′)Q(s',a')Q(s,a) 更新
  6. 状态和动作同时更新为 (s′,a′)(s', a')(s,a)

13. On-policy 和 Off-policy 的核心区别

  • Sarsa 是 on-policy
    使用“实际执行的动作 a′a'a”更新 Q 值
    也用该动作继续执行下一步

  • Q-learning 是 off-policy
    使用“理论最优动作 arg⁡max⁡a′Q(s′,a′)\arg\max_{a'}Q(s',a')argmaxaQ(s,a)”更新
    下一步不要求执行这个动作

简化表达:

算法更新用的动作下一步动作类型
Q-learningmax⁡Q\max QmaxQ不一定执行此动作Off-policy
Sarsa实际动作 a′a'a使用同一个策略On-policy

3. 深度 Q-learning(Deep Q Network, DQN)

在前面我们介绍了 Q-learning、SARSA 等基于表格(Q-table)的方法。但现实中很多任务具有:

  • 连续状态空间(例如机器人位置是实数)
  • 高维状态空间(例如输入是图像)
  • 连续动作空间

此时根本无法构建一个“表格”去存所有 (s,a)(s,a)(s,a) 的 Q 值。

因此,我们用一个 神经网络 来近似 Q 函数:

Q(s,a)≈Qw(s,a) Q(s,a) \approx Q_w(s,a) Q(s,a)Qw(s,a)

其中 www 是神经网络参数。


3.1 为什么需要 DQN?

Q-table 方法的存储方式如下(示例):

Actions1s^1s1s2s^2s2s3s^3s3
a1a^1a152-
a2a^2a2-1-6-4
a3a^3a3523

如果状态是 100010001000 维向量、甚至是 84×8484×8484×84 图像,那么状态空间是 1010010^{100}10100 级别,不可能建表。

因此,DQN 的核心思想是:

用神经网络充当 Q-value 的函数近似器(function approximator)。


3.2 DQN 的目标函数

根据 Bellman 最优方程:

Q∗(s,a)=r+γmax⁡a′Q∗(s′,a′) Q^*(s,a) = r + \gamma \max_{a'} Q^*(s',a') Q(s,a)=r+γamaxQ(s,a)

对于 DQN,我们让网络逼近这一方程。
定义 DQN 的 loss:

L(w)=(r+γmax⁡a′Qw(s′,a′)−Qw(s,a))2 L(w)= \left(r + \gamma \max_{a'} Q_w(s',a') - Q_w(s,a)\right)^2 L(w)=(r+γamaxQw(s,a)Qw(s,a))2

注意:

  • 梯度只对 Qw(s,a)Q_w(s,a)Qw(s,a)
  • 不对 max⁡a′Qw(s′,a′)\max_{a'}Q_w(s',a')maxaQw(s,a) 做反向传播(否则梯度会“穿透未来动作搜索”导致训练不稳定)

3.3 Experience Replay(经验回放)

如果直接用样本 (s,a,r,s′)(s,a,r,s')(s,a,r,s) 在线更新,会有严重问题:

  • 样本之间高度相关(时间序列)
  • 导致训练震荡、不稳定、不收敛

经验回放(Experience Replay)解决此问题。

Replay Buffer 的步骤

  1. 收集经历(transition)
    (s,a,r,s′) (s,a,r,s') (s,a,r,s)

  2. 存入经验池(Experience Bank)

  3. 每次训练时,从经验池随机采样 batch

  4. 对 batch 中样本计算 DQN loss:

(r+γmax⁡a′Qw(s′,a′)−Qw(s,a))2 (r+\gamma \max_{a'} Q_w(s',a') - Q_w(s,a))^2 (r+γamaxQw(s,a)Qw(s,a))2

随机采样能:

  • 打破时间相关性
  • 增强训练稳定性
  • 提升样本利用率

3.4 Prioritised Experience Replay(优先经验回放)

随机采样有个问题:

一些 transition 比其他 transition 更重要。

例如某个样本误差巨大:

δ=r+γmax⁡a′Qw(s′,a′)−Qw(s,a) \delta = r + \gamma \max_{a'} Q_w(s',a') - Q_w(s,a) δ=r+γamaxQw(s,a)Qw(s,a)

说明它对 Q 网络影响非常大。

Priority Replay 的思想:

误差越大的样本,越应该被采样。

因此给每个 transition 一个权重:

w∝δ2 w \propto \delta^2 wδ2

采样概率越高 → 更新越频繁 → 收敛更快。


3.5 优先经验回放算法(简化版)

算法执行流程如下:

  1. 初始化 Q 网络参数 www

  2. 初始化经验池 B=∅B=\varnothingB=

  3. 对每一步:

    • 选动作 a=arg⁡max⁡aQw(s,a)a=\arg\max_a Q_w(s,a)a=argmaxaQw(s,a)
    • 观察 s′,rs',rs,r
    • transition 存入 BBB,附带最高优先级
  4. 每隔 KKK 步:

    • BBB 按优先级采样 (s,a,r,s′)(s,a,r,s')(s,a,r,s)
    • 计算误差
    • 更新当前 transition 优先级
    • 梯度下降更新 www

## 4. Policy Gradient(策略梯度)

DQN 是 先学 Q 函数,再从 Q 推出策略

a=arg⁡max⁡aQ(s,a) a = \arg\max_a Q(s,a) a=argamaxQ(s,a)

但在某些环境下:

  • Q 函数极度复杂(例如输入是高维图像)
  • 动作连续(Q-learning 无法处理连续动作)
  • 学习 Q 远比学习策略更难

因此我们直接学习策略 πθ\pi_\thetaπθ

πθ(a∣s): 给定状态s,采取动作a的概率 \pi_\theta(a|s) :\ 给定状态 s,采取动作 a 的概率 πθ(as): 给定状态s,采取动作a的概率


4.1 策略的优化目标

定义策略的期望回报:

J(θ)=E[∑t≥0γtrt∣πθ] J(\theta) = \mathbb{E}\left[\sum_{t\ge 0} \gamma^t r_t \mid \pi_\theta\right] J(θ)=E[t0γtrtπθ]

目标:

θ∗=arg⁡max⁡θJ(θ) \theta^* = \arg\max_\theta J(\theta) θ=argθmaxJ(θ)

我们希望对 θ\thetaθ 执行 梯度上升

θ←θ+η∇θJ(θ) \theta \leftarrow \theta + \eta \nabla_\theta J(\theta) θθ+ηθJ(θ)


4.2 如何求 ∇θJ(θ)\nabla_\theta J(\theta)θJ(θ)?——难点重点解释

这是策略梯度的数学核心。
从期望形式:

J(θ)=Eτ∼p(τ;θ)[r(τ)] J(\theta) = \mathbb{E}_{\tau \sim p(\tau;\theta)} [r(\tau)] J(θ)=Eτp(τ;θ)[r(τ)]

这里 τ\tauτ 是一条轨迹:

τ=(s0,a0,r0,s1,a1,r1,… ) \tau = (s_0,a_0,r_0,s_1,a_1,r_1,\dots) τ=(s0,a0,r0,s1,a1,r1,)

其概率为:

p(τ;θ)=∏t≥0p(st+1∣st,at),πθ(at∣st) p(\tau;\theta)=\prod_{t\ge 0} p(s_{t+1}|s_t,a_t), \pi_\theta(a_t|s_t) p(τ;θ)=t0p(st+1st,at),πθ(atst)


4.3 直接求梯度是不可能的

如果直接对 p(τ;θ)p(\tau;\theta)p(τ;θ) 求导:

∇θJ(θ)=∫r(τ)∇θp(τ;θ)dτ \nabla_\theta J(\theta)=\int r(\tau)\nabla_\theta p(\tau;\theta) d\tau θJ(θ)=r(τ)θp(τ;θ)dτ

无法 Monte Carlo,因为 这不是期望形式


4.4 Log Derivative Trick(关键技巧)

∇p\nabla pp 改写成 p∇log⁡pp \nabla \log pplogp

∇θp(τ;θ)=p(τ;θ)∇θlog⁡p(τ;θ) \nabla_\theta p(\tau;\theta) = p(\tau;\theta)\nabla_\theta \log p(\tau;\theta) θp(τ;θ)=p(τ;θ)θlogp(τ;θ)

于是:

∇θJ(θ)=∫r(τ)p(τ;θ)∇θlog⁡p(τ;θ)dτ \nabla_\theta J(\theta) = \int r(\tau) p(\tau;\theta) \nabla_\theta \log p(\tau;\theta)d\tau θJ(θ)=r(τ)p(τ;θ)θlogp(τ;θ)dτ

这等价于:

∇θJ(θ)=E∗τ∼p(τ;θ)[r(τ)∇∗θlog⁡p(τ;θ)] \nabla_\theta J(\theta) = \mathbb{E}*{\tau\sim p(\tau;\theta)} \left[ r(\tau)\nabla*\theta\log p(\tau;\theta) \right] θJ(θ)=Eτp(τ;θ)[r(τ)θlogp(τ;θ)]

这是一个 可采样的期望


4.5 Markov 假设下的对数概率展开

由于 Markov 性:

p(τ;θ)=∏t≥0p(st+1∣st,at)πθ(at∣st) p(\tau;\theta)=\prod_{t\ge 0} p(s_{t+1}|s_t,a_t)\pi_\theta(a_t|s_t) p(τ;θ)=t0p(st+1st,at)πθ(atst)

取对数:

log⁡p(τ;θ)=∑t≥0[log⁡p(st+1∣st,at)+log⁡πθ(at∣st)] \log p(\tau;\theta)=\sum_{t\ge 0} \left[ \log p(s_{t+1}|s_t,a_t) + \log \pi_\theta(a_t|s_t) \right] logp(τ;θ)=t0[logp(st+1st,at)+logπθ(atst)]

θ\thetaθ 求梯度:

因为转移概率 p(st+1∣st,at)p(s_{t+1}|s_t,a_t)p(st+1st,at)θ\thetaθ 无关:

∇θlog⁡p(τ;θ)=∑t≥0∇θlog⁡πθ(at∣st) \nabla_\theta \log p(\tau;\theta) = \sum_{t\ge 0}\nabla_\theta \log \pi_\theta(a_t|s_t) θlogp(τ;θ)=t0θlogπθ(atst)


4.6 最终得到策略梯度公式

将上述结果代入:

∇θJ(θ)=E[r(τ)∑t≥0∇θlog⁡πθ(at∣st)] \nabla_\theta J(\theta) = \mathbb{E}\left[ r(\tau)\sum_{t\ge 0}\nabla_\theta\log\pi_\theta(a_t|s_t) \right] θJ(θ)=E[r(τ)t0θlogπθ(atst)]

实际使用时,用 nnn 条轨迹 Monte Carlo 估计:

∇θJ^(θ)=1n∑i=1nr(τi)∑t≥0∇θlog⁡πθ(at∣st) \nabla_\theta \hat J(\theta) = \frac{1}{n}\sum_{i=1}^n r(\tau_i)\sum_{t\ge 0}\nabla_\theta \log \pi_\theta(a_t|s_t) θJ^(θ)=n1i=1nr(τi)t0θlogπθ(atst)

这就是经典的 REINFORCE 算法。


4.7 策略梯度(REINFORCE)算法

算法步骤如下:

  1. 初始化参数 θ\thetaθ

  2. 对每一个 episode:

    • 收集 (s0,a0,r0,…,sT,aT,rT)(s_0,a_0,r_0,\dots,s_T,a_T,r_T)(s0,a0,r0,,sT,aT,rT)
    • 计算累计回报 r=∑t≥0γtrtr=\sum_{t\ge 0}\gamma^t r_tr=t0γtrt
    • 计算梯度累积
      Δθ←Δθ+α∇θlog⁡πθ(at∣st) \Delta\theta \leftarrow \Delta\theta + \alpha \nabla_\theta\log\pi_\theta(a_t|s_t) ΔθΔθ+αθlogπθ(atst)
  3. 最终更新参数:
    θ←θ+ηΔθ \theta\leftarrow \theta + \eta \Delta \theta θθ+ηΔθ

这是最基本的 Policy Gradient 算法。

http://www.dtcms.com/a/609682.html

相关文章:

  • 网站怎么做视频的软件泰安有什么互联网公司
  • uniapp h5 app 小程序获取当前定位
  • 重庆潼南网站建设哪家好沈阳市建设工程安全监督站网站
  • [特殊字符] 嵌入式音频接口全景图解:I2S、TDM、PDM、SPDIF、AC’97 与 PCM 的关系
  • 从 API 到应用:用 Rust 和 SQLx 为 Axum 服务添加持久化数据库
  • 【高级机器学习】 9. 代理损失函数的鲁棒性
  • 测试之测试用例篇
  • 做网站优化推广的好处网站界面设计实验报告
  • 自建node云函数服务器
  • TRO侵权预警|Lauren动物插画发起维权
  • Rust实战:使用Axum和SQLx构建高性能RESTful API
  • 波动率曲面分解法在期货价差套利策略中的应用研究
  • 泌阳县住房建设局网站网站seo排名优化工具在线
  • 电子商务网站建设课北京建设网官方网站
  • vr大空间体验馆,vr大空间是什么意思啊?
  • Node.js实现WebSocket教程
  • 朝阳区搜索优化seosem百度seo关键词排名优化工具
  • C++初阶
  • NFS:K8s集群的跨主机存储方案
  • 动态设计网站制作wordpress
  • 短临 Nowcast 在分布式光伏的落地:分钟级降水与云量对 Irradiance 的影响(工程版)
  • linux centos 防火墙操作命令
  • 破解行业绿电直供痛点:直连架构适配关键技术解析
  • token无感刷新全流程
  • MySQL 数据增删改查
  • 浏阳做网站的公司价格网站设计步骤详解
  • 南京做网站外包试论述网上商城的推广技巧
  • 面试150——二叉树
  • opencv 学习: QA_02 什么是图像中的高频成分和低频成分
  • C++_面试题13_QVector和QList的区别