LLMs基础学习(八)强化学习专题(6)
文章目录
- LLMs基础学习(八)强化学习专题(6)
- 深度强化学习(DQN)
- DQN 起源:《Playing Atari with Deep Reinforcement Learning》研究
- DQN 算法:逐步骤拆解流程
- DQN 关键性质:on - policy vs off - policy
- DQN 的价值与影响
- DQN 的两个关键技巧
- 目标网络(Target Network)
- 经验回放(Experience Replay)
- 总结
- DQN 和 Q-Learning 有什么不同
- 算法基础与适用场景
- 函数近似与数据表示
- 稳定性机制
- 总结
视频链接:https://www.bilibili.com/video/BV1MQo4YGEmq/?spm_id_from=333.1387.upload.video_card.click&vd_source=57e4865932ea6c6918a09b65d319a99a
深度强化学习(DQN)
DQN 起源:《Playing Atari with Deep Reinforcement Learning》研究
(一)研究背景与突破
- 行业困境:早期强化学习多依赖 “表格存储 Q 值”,面对高维度输入(如游戏画面像素),表格无法存储海量状态,传统方法失效。
- DeepMind 的创新:2013 年,DeepMind 团队提出 **DQN ** (Deep Q - Network) ,首次把深度学习(卷积神经网络)和强化学习(Q - Learning)结合,解决 “高维输入 + 决策学习” 难题,让 AI 能从复杂视觉信息里学策略。
(二)模型与核心逻辑
- 模型结构:用 卷积神经网络(CNN) 做基础,输入是游戏原始像素(高维视觉数据),输出是 “估计未来奖励的值函数 Q ( s , a ) Q(s,a) Q(s,a)” 。简单说,AI 看游戏画面(输入),算每个动作能拿到的 “未来收益”(输出)。
- 算法融合:基于 Q - Learning 框架,但用神经网络替代传统 “Q 表格”。Q - Learning 靠 Bellman 方程更新 Q 值( Q ( s , a ) ← r + γ max a ′ Q ( s ′ , a ′ ) Q(s,a) \leftarrow r + \gamma \max_{a'} Q(s',a') Q(s,a)←r+γmaxa′Q(s′,a′) ),DQN 用 CNN 拟合这个 Q 函数,让 AI 不用手动设计状态特征,直接 “看画面学策略”。
(三)实验验证:Atari 游戏测试
-
测试对象:选 7 款雅达利(Atari 2600)游戏,涵盖 Pong(乒乓球)、Breakout(打砖块)、Space Invaders(太空侵略者)等,这些游戏需处理动态画面、判断动作收益,很考验算法。
-
结果震撼:
-
- 6 款游戏里,DQN 表现碾压此前所有 AI 方法;
- 3 款游戏(如 Breakout )中,AI 得分超过人类专家 。 这证明:DQN 能从高维视觉输入里,自主学到有效控制策略,强化学习 “智能化水平” 大幅提升。
DQN 算法:逐步骤拆解流程
(一)核心组件与初始化
-
双网络设计:
-
- 初始化两个网络:
-
-
- Q 网络(“行动网络”):实时输出当前状态 s 下,各动作 a 的 Q 值(估计收益),指导 AI 选动作;
-
-
-
- Q ^ \hat{Q} Q^ 网络(“目标网络”):初始时和 Q 网络参数完全一样,作用是 “稳定训练过程”(避免 Q 网络更新太频繁,导致学习震荡)。
-
-
- 公式化: Q ^ ← Q \hat{Q} \leftarrow Q Q^←Q(初始化时,让目标网络复制行动网络 )。
(二)“交互 - 存储 - 采样” 循环(核心训练逻辑)
-
1. 智能体与环境交互(采集经验):
-
- 回合与时间步:强化学习以 “回合(Episode)” 为周期,每个回合包含多个 “时间步(Time - step)”。比如玩一局 Atari 游戏是 1 个回合,每帧画面的决策是 1 个时间步。
- 动作选择( ϵ \epsilon ϵ - 贪婪探索):
-
-
- 每个时间步 t ,AI 处于状态 s t s_t st ,要选动作 a t a_t at 。怎么选?
-
-
-
- 用 ϵ \epsilon ϵ - 贪婪策略 平衡 “探索” 和 “利用”:
-
-
-
-
- 以 1 − ϵ 1 - \epsilon 1−ϵ 概率,选当前 Q 网络算出来的 “Q 值最高的动作”(利用已有经验,追求高收益);
-
-
-
-
-
- 以 ϵ \epsilon ϵ 概率,随机选动作(探索新策略,避免 AI 陷入局部最优)。
-
-
-
- 结果反馈:选动作 a t a_t at 后,环境反馈奖励 r t r_t rt ,并进入新状态 s t + 1 s_{t + 1} st+1 。此时,把 “经验四元组” ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t + 1}) (st,at,rt,st+1) 存到 回放缓冲区(Replay Buffer) 里 —— 这步是 DQN 能高效学习的关键!
-
2. 回放缓冲区(经验池)的作用:
-
- 存历史经验:把每个时间步的 ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t + 1}) (st,at,rt,st+1) 存起来,形成一个 “经验池”,里面是 AI 和环境交互的历史数据。
- 解决相关性问题:传统强化学习 “在线学习” 时,数据是连续时间步生成的,状态、动作高度相关,直接用来训练容易让网络学歪(比如连续选同一个动作,网络只记住局部模式)。回放缓冲区让 AI 随机采样历史经验 ,打乱数据相关性,训练更稳定、高效。
-
3. 批量采样与目标计算:
-
- 采样:从回放缓冲区里,随机批量抽取 一组经验 ( s i , a i , r i , s i + 1 ) (s_i, a_i, r_i, s_{i + 1}) (si,ai,ri,si+1)(比如一次抽 32 条、64 条 )。注意:采样的是 “历史数据”,不是当前实时交互的,这是 DQN 属于 off - policy**(离策略)** 的关键(后面讲性质时会细拆)。
- 计算目标 Q 值(y ): 用目标网络 Q ^ \hat{Q} Q^ 算 “未来收益”,公式: y = r i + γ max a Q ^ ( s i + 1 , a ) y = r_i + \gamma \max_{a} \hat{Q}(s_{i + 1}, a) y=ri+γmaxaQ^(si+1,a) 解释:
-
-
- r i r_i ri 是当前动作拿到的 “即时奖励”;
-
-
-
- γ \gamma γ 是 “折扣因子”(0 < γ \gamma γ ≤ 1 ),控制 “未来奖励的权重”(比如 γ = 0.9 \gamma = 0.9 γ=0.9 ,表示未来 1 步的奖励,只值当前 0.9 倍的重要性,鼓励 AI 平衡短期、长期收益 );
-
-
-
- max a Q ^ ( s i + 1 , a ) \max_{a} \hat{Q}(s_{i + 1}, a) maxaQ^(si+1,a) 是目标网络预测的 “下一状态 s i + 1 s_{i + 1} si+1 下,所有动作里最大的 Q 值”,代表 “未来能拿到的最大收益”。 所以,y 是 “当前动作的实际价值”(即时奖励 + 未来最大预期收益),用来指导 Q 网络更新。
-
-
4. 更新 Q 网络(拟合目标): 训练 Q 网络,让它预测的 Q ( s i , a i ) Q(s_i, a_i) Q(si,ai) 尽可能接近目标值 y 。具体说,用 均方误差(MSE) 当损失函数: Loss = 1 N ∑ i = 1 N ( y i − Q ( s i , a i ) ) 2 \text{Loss} = \frac{1}{N} \sum_{i = 1}^{N} \left( y_i - Q(s_i, a_i) \right)^2 Loss=N1∑i=1N(yi−Q(si,ai))2 (N 是批量采样的经验数量 ),然后用梯度下降更新 Q 网络的参数。
-
5. 同步目标网络(稳定训练): 每隔一定步数(比如 C 次更新),把当前 Q 网络的参数,硬拷贝 给 Q ^ \hat{Q} Q^ 网络(即 Q ^ ← Q \hat{Q} \leftarrow Q Q^←Q )。这么做是为了让 “目标 Q 值 y ” 更新频率低一些,避免 Q 网络刚学一点,目标就跟着变,导致训练震荡、不稳定。
DQN 关键性质:on - policy vs off - policy
-
核心区别:
-
- on - policy(同策略):训练用的数据,必须是 “当前策略实时和环境交互产生的”。比如 SARSA 算法,每一步用当前策略选动作、存数据、训练,数据和策略强绑定。
- off - policy(离策略):训练数据可以是 “历史上任意策略产生的”。
-
DQN 为什么是 off - policy? 因为 DQN 用 回放缓冲区存历史经验 ,采样时不管这些经验是哪个策略(甚至随机策略)产生的,都能用来训练当前 Q 网络。换句话说,“生成数据的策略” 和 “当前训练的策略” 可以不一样,所以是 off - policy 。 这带来两大好处:
-
- 数据高效利用:历史经验能反复采样、训练,不用每次都和环境实时交互,节省算力;
- 稳定学习:打乱数据相关性,避免策略更新太激进,训练更平滑。
DQN 的价值与影响
(一)技术突破
- 突破传统 Q - Learning 依赖 “表格存储 Q 值” 的局限,让强化学习能处理 高维、连续状态空间(比如图像、传感器数据 )。以前表格存不下的复杂状态,现在用神经网络拟合 Q 函数,直接 “端到端” 学习。
(二)行业影响
- 打开 “深度强化学习” 大门,后续 AlphaGo、自动驾驶、机器人控制等前沿应用,都受 DQN 启发。可以说,DQN 是现代强化学习从理论到实用的 “里程碑”。
(三)落地潜力
-
只要涉及 “高维输入 + 决策优化” 的场景,比如:
-
- 游戏 AI(不止 Atari ,复杂 3A 游戏、围棋等 );
- 机器人视觉控制(从摄像头画面学抓取、行走 );
- 自动驾驶(处理路况图像,决策加减速、转向 ); DQN 及衍生算法(如 DDQN、DQN 扩展结构 )都能发挥作用,是强化学习落地的重要基石。
总结一下: DQN 是 DeepMind 用 “卷积神经网络 + Q - Learning + 回放缓冲区 + 双网络”,解决高维视觉输入决策问题的开创性算法。它让 AI 能像人类一样 “看画面学策略”,在 Atari 游戏中击败人类,更开启了深度强化学习的浪潮。算法流程里,“交互存经验 → 采样算目标 → 更新双网络” 的循环,既保证学习效率,又稳定训练过程;off - policy 性质让数据利用更灵活,这些设计直到今天,仍是深度强化学习的核心思路~
DQN 的两个关键技巧
目标网络(Target Network)
-
作用:通过固定目标 Q 值的计算网络参数,减少训练过程中的目标波动,缓解因 Q 值高估导致的策略震荡问题。
-
实现方式:
-
- 构建与主网络结构相同的目标网络,其参数定期从主网络同步(如每 N 步更新一次)。
- 计算目标 Q 值时使用目标网络,而非实时更新的主网络,从而稳定贝尔曼方程中的目标值。
在学习 Q 函数的时候,也会用到时序差分方法的概念。我们现在收集到一个数据,比如在状态 s t s_t st 采取动作 a t a_t at 以后,得到奖励 r t r_t rt,进入状态 s t + 1 s_{t+1} st+1 。根据 Q 函数,我们可知 Q π ( s t , a t ) = r t + Q π ( s t + 1 , π ( s t + 1 ) ) Q_\pi(s_t, a_t) = r_t + Q_\pi\bigl(s_{t+1}, \pi(s_{t+1})\bigr) Qπ(st,at)=rt+Qπ(st+1,π(st+1))
所以我们在学习的时候,Q 函数输入 s t s_t st、 a t a_t at 得到的值,与输入 s t + 1 s_{t+1} st+1 、 π ( s t + 1 ) \pi(s_{t+1}) π(st+1) 得到的值之间,我们希望它们相差 r t r_t rt ,这与时序差分方法的概念是一样的。
但实际中这样的输入并不好学习,假设这是一个回归问题,如目标网络图所示, Q π ( s t , a t ) Q_\pi(s_t, a_t) Qπ(st,at) 是网络的输出, r t + Q π ( s t + 1 , π ( s t + 1 ) ) r_t + Q_\pi\bigl(s_{t+1}, \pi(s_{t+1})\bigr) rt+Qπ(st+1,π(st+1)) 是目标,目标是会变动的。
当我们要实现这样的训练,其实会有问题,就是在做反向传播的时候, Q π Q_\pi Qπ 的参数也被更新,我们会把两个更新的结果加在一起(因为它是同一个模型 Q π Q_\pi Qπ ,所以两个更新的结果会加在一起)。但这样会导致训练变得不太稳定,因为假设我们把 Q π ( s t , a t ) Q_\pi(s_t, a_t) Qπ(st,at) 当作模型的输出,把 r t + Q π ( s t + 1 , π ( s t + 1 ) ) r_t + Q_\pi\bigl(s_{t+1}, \pi(s_{t+1})\bigr) rt+Qπ(st+1,π(st+1)) 当作目标,我们要去拟合的目标是一直在变动的,这是不太好训练的。
所以,我们会把其中一个 Q 网络,通常是把图右边的目标 Q 网络固定住。在训练的时候,我们只更新左边的 Q 网络的参数,而右边的 Q 网络的参数会被固定。因为右边的 Q 网络负责产生目标,所以被称为目标网络。
因为目标网络是固定的,所以现在得到的目标 r t + Q π ( s t + 1 , π ( s t + 1 ) ) r_t + Q_\pi\bigl(s_{t+1}, \pi(s_{t+1})\bigr) rt+Qπ(st+1,π(st+1)) 的值也是固定的。我们只调整左边 Q 网络的参数,它就变成一个回归问题。我们希望模型输出的值与目标越接近越好,这样会最小化它的均方误差(mean square error)。
在实现的时候,我们会把左边的 Q 网络更新多次,再用更新过的 Q 网络替换目标网络。但这两个网络不要一起更新,一起更新,结果会很容易不好。
一开始这两个网络是一样的,在训练的时候,我们会把右边的 Q 网络固定住,在做梯度下降的时候,只调整左边 Q 网络的参数。我们可能更新 100 次以后才把参数复制到右边的网络中,把右边网络的参数覆盖,目标值就变了。就好像我们本来在做一个回归问题,训练后把这个回归问题的损失降下去以后,接下来我们把左边网络的参数复制到右边网络,目标值就变了,接下来就要重新训练。
经验回放(Experience Replay)
-
作用:通过存储智能体与环境交互的历史经验(状态、动作、奖励、下一状态),并随机采样小批量数据进行训练,打破数据间的时间相关性,提升训练效率和稳定性。
-
实现方式:
-
- 使用经验回放池(Replay Buffer)存储经验元组,覆盖旧数据以避免内存溢出。
- 随机抽样减少训练中的方差,同时重复利用数据,解决样本利用率低的问题。
经验回放会构建一个回放缓冲区(replay buffer),缓冲区又被称为回放内存(replay memory)。
回放缓冲区是指现在有某一个策略 π \pi π 与环境交互,它会去收集数据,我们把所有的数据放到一个数据缓冲区(buffer)里面,数据缓冲区里面存储了很多数据。比如数据缓冲区可以存储 5 万笔数据,每一笔数据就是记得说,我们之前在某一个状态 s t s_t st ,采取某一个动作 a t a_t at ,得到了奖励 r t r_t rt ,进入状态 s t + 1 s_{t+1} st+1 。
我们用 π \pi π 去与环境交互多次,把收集到的数据放到回放缓冲区里面。
回放缓冲区里面的经验可能来自不同的策略,我们每次用 π \pi π 与环境交互的时候,可能只交互 10000 次,接下来我们就更新 π \pi π 了。但是回放缓冲区里面可以放 5 万笔数据,所以 5 万笔数据可能来自不同的策略。
回放缓冲区只有在它装满的时候,才会把旧的数据丢掉。所以回放缓冲区里面其实装了很多不同的策略的经验。
如上图所示,有了回放缓冲区以后,我们怎么训练 Q 模型、怎么估计 Q 函数呢?
我们会迭代地训练 Q 函数,在每次迭代里面,从回放缓冲区中随机挑一个批量(batch)出来,即与一般的网络训练一样,从训练集里面挑一个批量出来。我们采样该批量出来,里面有一些经验,我们根据这些经验去更新 Q 函数。这与时序差分学习要有一个目标网络是一样的。我们采样一个批量的数据,得到一些经验,再去更新 Q 函数。
补充:经验回放的额外说明
如果某个算法使用了经验回放这个技巧,该算法就变成了一个异策略(off - policy) 的算法。
因为本来 Q 是要观察 π \pi π 的经验的,但实际上存储在回放缓冲区里面的这些经验不是通通来自于 π \pi π ,有些是过去其他的策略所留下来的经验。因为我们不会用某一个 π \pi π 就把整个回放缓冲区装满,拿去测 Q 函数,只是采样一些数据放到回放缓冲区里面,接下来就让 Q 去训练。所以 Q 在采样的时候,它会采样到过去的一些数据。
这么做有两个好处:
- 好处一:在进行强化学习的时候,往往最花时间的步骤是与环境交互,训练网络反而是比较快的。因为我们用 GPU 训练其实很快,真正花时间的往往是与环境交互。
用回放缓冲区可以减少与环境交互的次数,因为在做训练的时候,经验不需要通通来自于某一个策略。一些过去的策略所得到的经验可以放在回放缓冲区里面被使用很多次,被反复的再利用,这样可以比较高效地采样经验。
- 好处二:在训练网络的时候,其实我们希望一个批量里面的数据越多样(diverse)越好。如果批量里面的数据都是同样性质的,我们训练下去,训练结果是容易不好的。如果批量里面都是一样的数据,训练的时候,性能会比较差。
我们希望批量里的数据越多样越好。如果回放缓冲区里面的经验通通来自于不同的策略,我们采样到的一个批量里面的数据会是比较多样的。
总结
DQN 的两个关键技巧
-
目标网络(Target Network)
-
- 作用:通过固定目标 Q 值的计算网络参数,减少训练过程中的目标波动,缓解因 Q 值高估导致的策略震荡问题。
- 实现方式:
-
-
- 构建与主网络结构相同的目标网络,其参数定期从主网络同步(如每 N 步更新一次)。
-
-
-
- 计算目标 Q 值时使用目标网络,而非实时更新的主网络,从而稳定贝尔曼方程中的目标值。
-
-
经验回放(Experience Replay)
-
- 作用:通过存储智能体与环境交互的历史经验(状态、动作、奖励、下一状态),并随机采样小批量数据进行训练,打破数据间的时间相关性,提升训练效率和稳定性。
- 实现方式:
-
-
- 使用经验回放池(Replay Buffer)存储经验元组,覆盖旧数据以避免内存溢出。
-
-
-
- 随机抽样减少训练中的方差,同时重复利用数据,解决样本利用率低的问题。
-
DQN 和 Q-Learning 有什么不同
整体来说,DQN 与 Q-Learning 的目标价值以及价值的更新方式都非常相似。
主要的不同点在于:
- DQN 将 Q-Learning 与深度学习结合,用深度网络来近似动作价值函数,而 Q-Learning 则是采用表格存储;
- DQN 采用了经验回放的训练方法,从历史数据中随机采样,而 Q-Learning 直接采用下一个状态的数据进行学习。
算法基础与适用场景
Q-Learning
- 是一种基于表格的无模型强化学习算法,通过维护一个 Q 值表格(状态 - 动作对的预期奖励)进行学习。
- 适用场景:仅适合离散且低维度的状态和动作空间。
DQN
- 是 Q-Learning 的深度学习扩展,用神经网络替代 Q 值表格来近似 Q 函数,属于深度强化学习范畴。
- 适用场景:可处理高维或连续状态空间(如图像输入),但动作空间仍需离散(如 Atari 游戏)。
函数近似与数据表示
Q-learning
- 无函数近似:直接通过表格存储和更新 Q 值,状态和动作的维度受限。
- 数据效率低:每次更新后丢弃经验,样本间强相关性可能导致训练不稳定。
DQN
- 神经网络近似:通过深度网络提取高维状态特征,解决维度灾难问题。
- 经验回放(Experience Replay):存储历史经验并随机采样训练,打破数据相关性,提高数据利用效率和训练稳定性。
稳定性机制
Q-learning
- 直接更新 Q 值,可能导致 Q 值震荡或发散,尤其在复杂环境中。
DQN
- 目标网络(Target Network):引入与主网络结构相同但参数延迟更新的目标网络,用于计算目标 Q 值,减少训练过程中的波动。
- 通过经验回放和目标网络的结合,显著提升训练的稳定性和收敛性。
总结
- DQN 将 Q-Learning 与深度学习结合,用深度网络来近似动作价值函数,而 Q-Learning 则是采用表格存储;
- DQN 采用了经验回放的训练方法,从历史数据中随机采样,而 Q-Learning 直接采用下一个状态的数据进行学习。