Q 值不是收益承诺,它只是模型根据环境和经验做出的价值估计。

从 Q-learning 到 DQN

约 12 分钟1 个动手实验4 道小题

学完你能说清楚从六房间 Q 表走到 DQN,并学会检查训练是否只记住历史。

01学完这一课,你能做到什么

学完这一课,你应该能:

  1. 在六房间环境里区分奖励表 R 和价值表 Q;
  2. 手算一次 更新,理解学习率 α 与折扣 γ 的区别;
  3. 解释为什么连续金融状态难以直接用 Q 表,以及 如何用网络近似 Q 函数;
  4. 说清经验回放、目标网络和 ε-greedy 各自解决什么问题;
  5. 将训练、验证和测试按时间分开,检查与未来信息泄漏。

本课先用六个房间把决策过程变简单,再把同样的逻辑迁移到股票。示例中的收益、参数和日期用于理解检查方法,不代表可以复现的实盘表现。

一句话记住先理解价值传播,再评估交易结果。

02六个房间:先把决策变成表格

设房间编号为 0、1、2、3、4、5,目标是到达房间 5。可通行的通道包括 0—4、1—3、1—5、2—3、3—4、4—5。到达终点后可以保持在终点。

从房间 2 出发,可以走 2→3→1→5,也可以走 2→3→4→5。先制作奖励表 R:通向终点的动作奖励设为 100;其他可通行动作奖励设为 0;不可通行动作在教学例子中标为 −1。

R 表是环境规则,Q 表是学习结果。R 只回答“这一步立即得到多少”;Q 估计“现在做这个动作,再按策略继续走,未来累计奖励大约多少”。6 个状态乘 6 个候选动作,就是 36 个 Q 值格子。实现时应使用动作掩码排除不可行动作,不能只靠 −1 让模型自己猜哪些动作根本不能执行。

终点奖励会先提高相邻房间动作的价值,再逐渐向更远的房间传播。不同学习率、折扣因子和训练随机性会产生不同数值;某些格子出现同值时,要预先规定平局处理,例如随机选择。

价值从终点向前传播
  1. 1终点 5进入后得到 100
  2. 2相邻房间先学会直达终点
  3. 3更远房间再沿通道更新
  4. 4当前动作选择估计价值最高的合法动作

一句话记住R 是规则,Q 是对未来的估计。

03手算一次 Q-learning 更新

Q-learning 的更新式是:

Q(s,a) ← Q(s,a) + α × [r + γ × max Q(s′,a′) − Q(s,a)]

s 和 a 是当前状态与动作,s′ 是动作后的状态,r 是即时奖励。α 是学习率,控制本次经验替换旧估计的幅度;γ 是折扣因子,控制未来奖励在当前有多大权重。终止状态不再加入后续价值。

假设旧 Q 值是 20,即时奖励是 0,下一状态最高 Q 值是 100,α=0.2,γ=0.8。先算更新目标:0+0.8×100=80;再算新 Q 值:20+0.2×(80−20)=32。如果 α=1,新 Q 值会直接变为 80。学习率和折扣因子承担不同职责,不能混为一谈。

把 γ 想成未来反馈的权重:假设最终奖励是 1 亿元,向前一步按 0.8 折算就是 8000 万元,再往前就是 8000万×0.8=6400万元。这是理解价值传播的类比,不是把 γ 当作金融估值利率。γ 越接近 1,越重视远期反馈;持续任务不能未经检查就使用 γ=1。

训练时要探索,部署时通常读取当前状态下的 Q 值并选动作。Q 值是基于环境和经验的估计,不是未来收益保证。

Q-learning 把新经验写回旧估计

新Q = 旧Q + α × (更新目标 − 旧Q)

先算 r + γ×下一状态最高价值,再按 α 取一部分差距。

一句话记住α 管更新幅度,γ 管未来权重。

04从迷宫迁移到股票

教学上可以把市场状态简化为低位、高位和震荡,把动作简化为买入、卖出和持有。位置应由当时可获得的历史价格分位数定义。

假设价值表给出:低位买入 15000、低位卖出 −3000、低位持有 2000;高位买入 −5000、高位卖出 12000、高位持有 1000。按这张表,低位会选择买入,高位会选择卖出。

这些数是讲解用的价值估计,不是实际收益表。它们的单位取决于奖励函数,不能直接读成人民币。真实市场的价格、和指标是连续变量,状态组合数量会迅速膨胀。把每个连续值都列成表格几乎无法存储,粗暴离散化又会损失信息,这正是 DQN 要解决的问题。

一句话记住简化状态便于理解,不能伪装成真实市场。

05DQN:用网络替代表格

DQN 用神经网络近似 Q 函数:输入状态向量 s,输出每个动作的 Q 值。教学例子使用过去 5 天每天的开、高、低、收,共 5×4=20 维;输出买入、卖出、持有三个值。示例网络约有 6000 个参数,定位是轻量教学网络,不等于完整生产模型。

使用时,先用和训练一致的规则处理 20 维状态,再从合法动作中选择最高 Q 值。还要确认观测是否包含现金、持仓和可卖数量;只有行情没有账户状态,可能让同一行情对应不同的可执行动作。

环境里“无持仓仍选择卖出”可以被记录为一次动作,但不能被算成真实成交。动作次数、有效成交次数、费用和持仓天数应分开统计。

DQN 的一次决策
  1. 120维状态过去 5 天 OHLC
  2. 2神经网络近似 Q 函数
  3. 3动作价值输出三个 Q 值
  4. 4合法选择屏蔽不能执行的动作

一句话记住网络输出的是动作价值,不是买卖指令本身。

06经验回放打散连续经历

连续市场数据相邻时点高度相关。如果模型只用最近一次经历更新,可能把一段上涨中的“买入有效”误当成通用规律。

经验回放把每次经历保存为 (s, a, r, s′, done),训练时从经验池随机抽取一批样本。这样可以减少一个批次里的顺序相关性,也能重复利用历史经历。经验池不是只保存亏损样本的错题本,成功和失败都要保留。

教学配置的经验池上限为 10000 条,每次抽取 64 条训练;代码还应明确要先积累多少条经历才开始训练。随机抽样只能发生在训练区间内,未来测试区间的数据不能混入经验池。

一句话记住回放打散相关性,但不能打乱时间边界。

07目标网络让学习目标慢一点变化

DQN 同时维护在线网络和目标网络。在线网络每次训练都更新;目标网络暂时固定,用来计算下一状态的参考价值。目标通常写成:

y = r + γ × (1−done) × max Q_target(s′,a′)

损失比较在线网络对当前动作的预测和 y,再反向传播更新在线网络。done=1 时,后面不应再加未来价值。

目标网络开始时通常只是在线网络参数的复制,并不天然更聪明。硬更新可以每隔 100 步整体复制一次;软更新则每一步按较小比例混合参数。二者应明确选择一种及其参数,不能当成同一步骤。

假设在线网络预测 1.9,参考值 1.8,二者差距是 1.9−1.8=0.1,不是 0.3。目标网络和经验回放能改善训练稳定性,但不能保证每轮都变好,更不能保证盈利。

在线网络与目标网络

在线网络

频繁更新,用来学习当前估计。

目标网络

暂时固定,生成变化较慢的参考目标。

一句话记住目标网络的作用是稳定目标,不是提供正确答案。

08探索、训练与评估要分开

ε-greedy 的规则是:以 ε 的概率随机探索,以 1−ε 的概率按当前 Q 值选择动作。比如 ε=0.1,就是约 10% 随机探索、约 90% 利用当前估计。训练初期可以从 ε=1.0 开始,再逐渐衰减到设定下限;衰减速度和最低探索率都应记录。

完整训练循环可以写成:

  1. 初始化环境、在线网络、目标网络和经验池,确定训练时间范围;
  2. 读取状态,按 ε-greedy 从合法动作中选择;
  3. 环境返回奖励、下一状态和终止信息;
  4. 保存经历;
  5. 满足预热条件后抽取批次,计算目标并更新在线网络;
  6. 按硬更新或软更新规则处理目标网络,调整 ε;
  7. 记录回报、回撤、成交和奖励,开始下一回合;
  8. 用独立验证区间选择模型,最后在测试区间评估。

示例曾训练 500 回合,查看后 100 回合平均奖励,并保存名为 DQN best 的模型。训练区间示例为 2022 年 1 月至 2025 年 6 月,区间为 2025 年 7 月 1 日至 2026 年 4 月 9 日,标的是 510050。另一次运行记录过 289 个决策步骤、44 次买入动作和 219 次卖出动作。卖出动作多不等于有效卖出多,空仓卖出可能无效,必须同时统计有效成交和费用。

这些运行参数和结果只能作为检查线索,不应拼成统一绩效报告。曾出现约 27%、约 15%、约 13% 等不同结果,持有基准曾记录约 14.62%;不同运行配置不能直接比较。九个月累计 15% 与通常定义的年化 10% 也不能直接视为一致,应回到净值和日期重算。

DQN 训练闭环
  1. 1探索ε-greedy 产生经历
  2. 2回放随机抽取训练批次
  3. 3更新训练在线网络
  4. 4同步更新目标网络
  5. 5评估验证后再看测试集

一句话记住训练可以探索,测试必须冻结并关闭探索。

动手试试

Q-learning 参数探索

调整学习率 α 和折扣因子 γ,观察六房间环境中的 Q 值如何向目标传播与收敛。

动手试试

调整学习率与折扣因子,看 Q 值如何向目标传播

教学样本
更新目标80.00
第 8 次 Q 值69.93
距目标差距10.07
Q 值收敛轨迹
30113.57142857142857197.14285714285714280.71428571428567364.2857142857143447.8571428571429531.4285714285713615
完成条件
把 α 调到 0.5 以上,观察收敛更快
把 γ 调到 0.8 以上,看到目标更重视未来奖励

网格世界沿用 6 个房间、终点奖励 100;更新过程是确定性的简化演示。

09分别检查过拟合和未来信息泄漏

过拟合是模型记住训练样本里的偶然细节,换一段行情就失效;未来信息泄漏是决策时用了当时不可能知道的数据。两者不是一回事。

检查输入是否只用过去 5 天还不够,还要问:标准化参数是不是用全样本拟合;当日收盘价是否被拿来决定当日收盘成交;奖励计算、、停牌和交易时间是否正确;训练和测试是否有重叠。未来价格用于动作后的奖励计算属于环境反馈,不等于可以提前放入输入。

示例可以扩展到 60 天窗口或加入中证 800 等其他标的,但维度增加会改变模型复杂度、样本需求和尺度差异,不能自动带来更好效果。

评估时应加载冻结模型,设置 ε=0,关闭训练,不更新训练参数。输出数据日期、有效样本数、模型版本、累计净收益、、成交次数和持有基准,并核对基准能否独立计算。比较 50、100、150、500 回合时,应在验证集选择,最后一段测试集不能参与选优。提高费用、改变成交时点、换一段行情,还可以做压力测试。

一句话记住测试集只负责最后验收,不负责挑参数。

检验
检验一下

4 道小题

全部答对,这一课就算真正读懂了。答错了会告诉你为什么。

01R 表和 Q 表的区别是什么?
02旧 Q=20、r=0、下一状态最高 Q=100、α=0.2、γ=0.8 时,新 Q 是多少?
03经验回放的主要作用是什么?
04选择训练回合数后,最后一段测试集应该怎样处理?
知识卡

这一课,浓缩成一张卡

学完可以保存或分享给朋友。保存成图片的功能会在下一版加上。

AI+金融投资训练营 · 从 Q-learning 到 DQN怎样判断 DQN 的交易结果值得相信?

冻结模型在独立时间段评估,并核对泄漏、费用、成交、回撤和持有基准。

  • 训练与测试分开
  • 环境反馈可核对
  • 压力测试
quant.jtxaionline.com
这一课的要点

记住这 5 句话

  1. 01R 表描述即时奖励规则,Q 表估计动作带来的未来累计价值。
  2. 02α 决定新经验写入旧 Q 的幅度,γ 决定未来奖励的权重;一次更新要能手算核对。
  3. 03DQN 用网络近似连续状态下的 Q 函数,经验回放减少相关性,目标网络稳定训练目标。
  4. 04ε-greedy 训练时探索、利用并存;评估时应冻结模型、设置 ε=0 并关闭训练。
  5. 05训练、验证、测试按时间切开,分别检查过拟合、未来信息泄漏、费用和成交规则。
完成这一课

完成这一课

读完讲义、动手做一次实验、答对小题,这一课就算学完了。

  • 读完讲义
  • 完成一次 Q-learning 参数探索
  • 通过随堂自测

实验数据AI+金融投资训练营教学样本。固定教学样本

固定教学样本只用于解释量化研究方法,不代表任何真实标的未来表现,也不构成投资建议。