Week 3 深度学习与强化学习

Deep Learning & Reinforcement Learning

本周内容概览

理论部分 (3h)

  • DL基础:MLP与反向传播
  • CNN:卷积、池化、架构演进
  • RNN/LSTM/GRU:序列建模
  • Transformer深度解析
  • GAN与扩散模型
  • RL基础:MDP, Bellman, Q-learning
  • Deep RL: DQN, DDPG, PPO
  • LLM+DRL混合架构

实践部分 (1h):5选1

  • 信用评分 —— Logistic vs MLP
  • A股 tick 短期方向预测
  • 自编码器 —— 异常检测 / 因子提取
  • 简化版DeepLOB —— 订单簿方向预测
  • 强化学习 —— 最优执行Toy Problem

3.1 神经网络基础

MLP & Backpropagation

  • 感知机到多层网络
  • 激活函数
  • 损失函数
  • 反向传播
  • 梯度下降优化
  • 正则化与Dropout

从感知机到深度网络

感知机 (Perceptron, 1958)

→ 只能解决线性可分问题(XOR困境)

多层感知机 (MLP)

flowchart LR x1["x₁"]:::input x2["x₂"]:::input x3["x₃"]:::input h1["h₁"]:::hidden h2["h₂"]:::hidden h3["h₃"]:::hidden y["ŷ"]:::output x1 --> h1 x1 --> h2 x1 --> h3 x2 --> h1 x2 --> h2 x2 --> h3 x3 --> h1 x3 --> h2 x3 --> h3 h1 --> y h2 --> y h3 --> y classDef input fill:#EEF2FF,stroke:#6366F1,stroke-width:1.2px,color:#222; classDef hidden fill:#F3E8FF,stroke:#8B5CF6,stroke-width:1.2px,color:#222; classDef output fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

万能近似定理:一个包含足够多神经元的单隐层网络可以逼近任意连续函数。

激活函数

函数 公式 范围 特点 金融应用
Sigmoid (0,1) 梯度饱和,输出概率 违约概率输出层
Tanh (-1,1) 零中心,梯度饱和 特征标准化
ReLU [0, ∞) 稀疏激活,不死问题 隐层默认选择
Leaky ReLU (-∞, ∞) 解决ReLU死亡 替代ReLU
GELU (-∞, ∞) GPT使用,平滑 LLM隐层
Swish (-∞, ∞) 自门控,无界上界 高级网络

金融启示:输出层激活函数由任务决定——回归用linear,分类用sigmoid/softmax

反向传播 (Backpropagation)

链式法则

多层感知机 (MLP)

梯度下降更新

优化器演进

SGD → Momentum → AdaGrad → RMSProp → Adam (最常用)

金融注意

  • 学习率η是关键超参数:η太大不收敛,η太慢收敛慢
  • Adam默认参数(η=0.001)通常效果不错
  • 金融时间序列梯度方差大,可以使用梯度裁剪

正则化与Dropout

Dropout:训练时随机丢弃神经元,强制网络学习冗余表示

model = Sequential([
    Dense(128, activation='relu'),
    Dropout(0.3),       # 30%神经元随机丢弃
    Dense(64, activation='relu'),
    Dropout(0.2),
    Dense(1, activation='sigmoid')
])

早停 (Early Stopping):验证集误差不再下降时停止训练

Batch Normalization

  • 加速收敛
  • 缓解梯度消失/爆炸
  • 有轻微正则化效果

人工神经元:从生物到数学

生物神经元 → 数学抽象

生物神经元:
  树突 (接收信号) → 胞体 (整合) → 轴突 (输出)
     ↓                    ↓              ↓
数学神经元:
  x₁,...,x_p (输入) → Σ w_i x_i + b (加权和) → σ(z) (激活输出)

关键差异

  • 生物神经元是脉冲的(spike),人工神经元是连续的
  • 生物神经元有复杂的树突计算,人工神经元简化为加权和
  • 生物神经元数量(~86B)和连接(~10^15)远超当前最大的ANN

深度学习的核心洞见

多层非线性变换可以学习层次化表示
低层学习简单特征(边缘/纹理),高层学习复杂概念(对象/语义)

神经网络发展史

1943: McCulloch-Pitts 神经元模型 (阈值逻辑单元)
1958: Rosenblatt 感知机 (单层, 可学习)
1969: Minsky & Papert《感知机》— 证明单层感知机局限性
         → 第一次AI冬天
1986: Rumelhart & Hinton 反向传播算法 (多层网络可训练)
         → 连接主义复兴
1998: LeCun LeNet-5 (CNN, 手写数字识别)
2006: Hinton 深度信念网络 (逐层预训练)— "Deep Learning"术语诞生
2012: AlexNet (ImageNet冠军, GPU训练) — 深度学习爆发
2014: GAN (Goodfellow), Seq2Seq (Sutskever)
2015: ResNet (152层, 残差连接), BatchNorm
2017: Transformer (Vaswani "Attention is All You Need")
2020: GPT-3 (175B参数) — 大模型时代
2022: ChatGPT — 生成式AI普及

三条主线:计算力(GPU) ↑ × 数据量(互联网) ↑ × 算法(BP/ReLU/BN/ResNet) ↑

梯度消失与梯度爆炸

问题根源:链式法则 + 深层网络

梯度消失 (Vanishing Gradient)

|∂a^(k)/∂a^(k-1)| < 1 (如sigmoid导数最大0.25)
→ 连乘L次 → 梯度指数衰减
→ 浅层学不到东西
→ 典型症状: 训练很久但浅层权重几乎不变

梯度爆炸 (Exploding Gradient)

|∂a^(k)/∂a^(k-1)| > 1
→ 连乘L次 → 梯度指数增长
→ 权重更新过大 → 损失NaN

解决方案对比

方案 解决消失 解决爆炸 机制
ReLU激活 ✅ 正区间导数为1
梯度裁剪 ✅ 梯度范数超阈值则缩放
残差连接 ✅ 梯度高速公路
BatchNorm ✅ ✅ 稳定每层激活分布
好的初始化 ✅ ✅ Xavier/He确保初始方差

Batch Normalization原理

Internal Covariate Shift:网络参数更新 → 每层输入分布变化 → 训练不稳定

BatchNorm解决方案
对每个mini-batch,标准化每层输入:

其中 为batch均值/方差, 为可学习参数

为什么有效

  1. 稳定输入分布 → 可使用更高学习率
  2. 轻微正则化效果 → 可减少Dropout
  3. 对初始化不那么敏感
  4. 允许梯度更顺畅流动

金融注意:BN假设batch间同分布 — 金融时序不满足→建议用LayerNorm

3.2 卷积神经网络

CNN

  • 卷积操作
  • 池化层
  • 经典架构演进
  • 金融图像应用

卷积操作

一维卷积(金融时间序列)

二维卷积(图像)

  • 卷积核在输入上滑动
  • 局部连接 + 权值共享
  • 提取局部特征

关键参数

  • 卷积核大小 (Kernel Size)
  • 步长 (Stride)
  • 填充 (Padding)
  • 通道数 (Channels)

金融应用

  • 1D-CNN:时间序列模式识别(头肩顶、双底)
  • 2D-CNN:K线图识别、财报文档OCR
  • 时序CNN:捕捉局部价格形态

1D卷积数值示例(金融时序)

输入 (价格序列):  [10, 12, 11, 13, 14, 12, 15]
卷积核 (3日动量): [-1,  0,  1]    ← 检测价格涨跌

步进计算:
  pos 0: -1×10 + 0×12 + 1×11 = -10 + 11 = 1    (涨)
  pos 1: -1×12 + 0×11 + 1×13 = -12 + 13 = 1    (涨)
  pos 2: -1×11 + 0×13 + 1×14 = -11 + 14 = 3    (大涨)
  pos 3: -1×13 + 0×14 + 1×12 = -13 + 12 = -1   (跌)
  pos 4: -1×14 + 0×12 + 1×15 = -14 + 15 = 1    (涨)

输出特征: [1, 1, 3, -1, 1]  ← 每日动量信号

核 [-1, 0, 1] 等价于简单的 "动量因子"——卷积网络通过自动学习卷积核来发现最优因子。

经典CNN架构演进

LeNet-5 (1998) → AlexNet (2012) → VGG (2014) → GoogLeNet/Inception (2014) → ResNet (2015)
  识别手写          ImageNet突破       加深网络         Inception模块       残差连接

残差网络 (ResNet) 核心创新

  • 跳过连接 (Skip Connection) 解决梯度消失
  • 允许训练超深网络(152层)
  • 后被Transformer借鉴(Residual Block)

金融启示:残差连接思想广泛应用于金融时序建模——直接学习"残差"(价格变化)比学习绝对值更容易。

3.2.1 深度学习训练技巧

金融场景下DL训练的注意事项

技巧 描述 金融应用
学习率调度 预热+衰减 先用大LR快速收敛,再用小LR精细调优
梯度裁剪 限制梯度最大值 金融数据极端值多,梯度爆炸常见
早停(Early Stopping) 验证集误差不再下降时停止 防止在噪声上过拟合
学习率重启 Cosine annealing 跳出局部最优,重新探索
混合精度训练 FP16混合FP32 加速训练50-100%
批次归一化 Batch Normalization 稳定训练,允许更大LR
# PyTorch训练配置(金融专用)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
scheduler = torch.optim.lr_scheduler.OneCycleLR(
    optimizer, max_lr=1e-3, 
    steps_per_epoch=len(train_loader), epochs=100
)
# 梯度裁剪(金融重要!)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# 早停
early_stopping = EarlyStopping(patience=10, min_delta=0.0001)

for epoch in range(100):
    for batch in train_loader:
        loss = train_step(batch)
        loss.backward()
        torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
        optimizer.step()
        scheduler.step()
    val_loss = validate(model, val_loader)
    if early_stopping(val_loss):
        break

3.2.2 超参数优化

DL模型的超参数

超参数 范围 影响 推荐
学习率 [1e-5, 1e-2] 最关键 3e-4 (Adam默认)
批次大小 [16, 512] 泛化和速度 32或64
隐层维度 [32, 1024] 模型容量 数据量/10
层数 [1, 10] 深度 金融数据2-3层
Dropout [0, 0.5] 正则化 0.2-0.3
权重衰减 [0, 0.1] L2正则化 0.01

金融数据超参特点

  • 金融数据信噪比低 → 需要更强的正则化
  • 样本量有限 → 容量不宜过大
  • 时间依赖性 → 验证方式应保持时序

3.2.3 迁移学习在金融中的应用

迁移学习:将在大规模数据上预训练的模型适配到金融领域

预训练: 全市场股票数据 → 学习通用市场表示
         ↓
微调: 特定板块/资产 → 适配目标资产
         ↓
在线学习: 持续更新 → 适应市场变化

金融应用场景

场景 预训练数据 微调数据 优势
新股预测 全市场历史数据 新股上市后数据 解决冷启动问题
跨市场迁移 美股数据 A股数据 弥补新兴市场数据不足
因子迁移 大型股票 中小盘股票 提高样本外表现

金融注意:深度学习在金融中的应用需要特别关注正则化、时序验证和迁移学习策略,以应对金融数据低信噪比的挑战。

CNN特征图可视化:模型在看什么?

金融K线图中的CNN模式识别

输入: 60日OHLC K线图 (4×60 矩阵)
        ↓
Conv1 (16个3×3卷积核):
  学习到的滤波器:
  核1: 检测"上升趋势" (价格连续上涨)
  核2: 检测"下降趋势" 
  核3: 检测"头肩顶"形态
  核4: 检测"双底"形态
  核5-8: 检测成交量异常
  ...
        ↓
Feature Maps: 16个58×58的特征图
  → 每个特征图显示"形态出现在哪里"

可解释性价值

  • 验证模型是否在学习有金融意义的模式(而非噪声)
  • 发现意外模式(CNN可能发现人类未知的K线形态)
  • 合规要求:"这个交易决策是基于什么技术形态?"

DeepLOB: CNN用于订单簿分析

限价订单簿 (LOB) 的CNN表示

将最近40层订单簿表示为 40×(4+1) 矩阵:
每层: [买价, 买量, 卖价, 卖量, 成交量]
      → 类似"图像"的网格数据

CNN架构:
  Conv2D(32, (2×1)) → 捕捉相邻价格层的关系
  Conv2D(32, (4×1)) → 捕捉较大范围的价格模式
  Inception Module → 多尺度模式
  FC → 预测: 下一tick的价格方向

为什么CNN适合LOB

  • LOB具有局部空间结构(相邻价格层的行为关联)
  • LOB模式是平移不变的(模式可以在不同价格位置出现)
  • 多尺度特征重要(从1个tick到40层价格跨度)

3.3 循环神经网络

RNN, LSTM, GRU

  • RNN结构与梯度问题
  • LSTM门控机制
  • GRU简化版
  • 双向RNN
  • 堆叠RNN
  • 金融时序建模

RNN与梯度问题

标准RNN

梯度消失/爆炸

  • 反向传播随时间展开,梯度连乘
  • 若权重矩阵的最大奇异值 < 1 → 梯度消失(长期依赖无法学习)
  • 若最大奇异值 > 1 → 梯度爆炸(训练不稳定)

金融问题:金融序列中的长期依赖(如季度财报周期、宏观经济周期)需要模型记忆更长时间的上下文。

LSTM门控机制

LSTM (Long Short-Term Memory) 通过门控机制解决长期依赖问题:

flowchart LR xt["输入 x_t"]:::state hprev["上一时刻隐状态 h_{t-1}"]:::state cprev["上一时刻细胞状态 C_{t-1}"]:::state concat["拼接 [h_{t-1}, x_t]"]:::op xt --> concat hprev --> concat fgate["遗忘门
f_t = σ(W_f[h_{t-1}, x_t] + b_f)"]:::gate igate["输入门
i_t = σ(W_i[h_{t-1}, x_t] + b_i)"]:::gate cand["候选记忆
Ĉ_t = tanh(W_c[h_{t-1}, x_t] + b_c)"]:::gate ogate["输出门
o_t = σ(W_o[h_{t-1}, x_t] + b_o)"]:::gate concat --> fgate concat --> igate concat --> cand concat --> ogate mul1["⊙"]:::op mul2["⊙"]:::op add1["+"]:::op tanh1["tanh"]:::op mul3["⊙"]:::op cprev --> mul1 fgate --> mul1 igate --> mul2 cand --> mul2 mul1 --> add1 mul2 --> add1 ct["当前细胞状态 C_t"]:::state ht["当前隐状态 h_t"]:::state add1 --> ct ct --> tanh1 tanh1 --> mul3 ogate --> mul3 mul3 --> ht classDef gate fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef op fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222;

遗忘门 → 决定保留多少历史信息

输入门 → 决定添加多少新信息

输出门 → 决定输出什么

LSTM vs GRU vs RNN

特性 RNN LSTM GRU
门控机制 3个门 (f, i, o) 2个门 (z, r)
细胞状态 无(简化为隐藏状态)
长期记忆 ❌ ✅ ✅ 较强
参数量 多(约LSTM的75%)
训练速度 中等
金融适用性 ⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐

金融建议

  • 股价/收益率预测:
    LSTM(需要长期依赖)
  • 高频交易信号:
    GRU(更快的训练/推理)
  • 极短时序(<10步):
    RNN足够

LSTM主要变体

变体 结构变化 特点 适用场景
标准LSTM 遗忘门 + 输入门 + 输出门 完整记忆控制 通用时序建模
无遗忘门LSTM 仅输入门 + 输出门 简化的记忆管理 短期时序(<20步)
耦合门LSTM 减少参数量 移动端/轻量部署
Peephole LSTM 门控看到细胞状态 更精确的时序控制 需要精确计时的任务
GRU 重置门 + 更新门 LSTM的简化版 训练速度优先
ConvLSTM 门控用卷积替代全连接 时空序列建模 订单簿动态预测
双向LSTM 正向+反向 利用未来信息 非实时分析(财报)

金融选型:标准LSTM是金融时序建模的默认选择;GRU适合高频场景(训练快);ConvLSTM适合订单簿分析(含空间结构)。

双向与堆叠RNN

双向RNN (BiRNN)

  • 正向 + 反向两个独立RNN
  • 同时看到过去和未来信息
  • 适用于非实时场景(如财报分析)
  • 不适用于实时交易(未来信息泄露)

堆叠RNN (Stacked RNN)

输出层 ↑
  ┌─────┐
  │ LSTM│ ← 第二层:捕获高层级模式
  └─────┘
    ↑ h_t
  ┌─────┐
  │ LSTM│ ← 第一层:捕获基础时间模式
  └─────┘
    ↑ x_t
  输入层

金融注意:堆叠层数不是越多越好,金融数据通常2-3层足够,更深容易过拟合。

BPTT (Backpropagation Through Time)

RNN的时间展开

前向: h_t = tanh(W_h h_{t-1} + W_x x_t + b)
损失: L = Σ_t L_t(ŷ_t, y_t)

反向: ∂L/∂W_h = Σ_t ∂L_t/∂W_h
需要从t=T一直反向传播到t=1
→ 计算图深度 = 序列长度 × 网络层数

截断BPTT (Truncated BPTT)

不分摊到 完整序列(可能数千步)
而是      序列切分为K步的块
每个块内做完整BPTT,块之间隐藏状态传递

典型K=20-50 (金融日频), K=100-200 (分钟频)

梯度裁剪 (Gradient Clipping)

为什么RNN需要梯度裁剪

长序列 + 循环权重 > 1 → 梯度指数爆炸
→ 权重更新 |ΔW| 可达 10^6
→ 损失直接NaN,训练崩溃

两种裁剪方式

# 1. 按范数裁剪 (By Norm)
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)
# 如果 ||g|| > max_norm → g = g * max_norm / ||g||
# 保持梯度方向,限制步长

# 2. 按值裁剪 (By Value)
torch.nn.utils.clip_grad_value_(model.parameters(), clip_value=0.5)
# g[g > 0.5] = 0.5, g[g < -0.5] = -0.5
# 简单粗暴,但破坏梯度方向

金融建议:训练RNN/LSTM时必须使用梯度裁剪。max_norm=1.0是安全默认值。

LSTM门控数值示例

用具体数字走查LSTM

假设: h_{t-1}=[0.5, -0.3], x_t=[1.0, 0.5], 所有门权重=0.5, bias=0

遗忘门: f_t = σ(0.5·[0.5,-0.3,1.0,0.5]) = σ(0.85) = 0.70
  → 保留70%的旧记忆
输入门: i_t = σ(0.5·[0.5,-0.3,1.0,0.5]) = σ(0.85) = 0.70
  → 写入70%的新信息
候选记忆: c̃_t = tanh(0.5·[0.5,-0.3,1.0,0.5]) = tanh(0.85) = 0.69
  → 新候选信息值
新记忆: c_t = f_t·c_{t-1} + i_t·c̃_t = 0.70·0.2 + 0.70·0.69 = 0.62
  → 遗忘旧信息+写入新候选
输出门: o_t = σ(0.5·[0.5,-0.3,1.0,0.5]) = σ(0.85) = 0.70
  → 输出70%的记忆
新隐藏: h_t = o_t·tanh(c_t) = 0.70·tanh(0.62) = 0.70·0.55 = 0.39

数值洞察:
- 所有门共享相同的输入→门值相同(简化版本)
- 实际中每个门有独立的权重→可以学习不同的门行为
- 遗忘门控制记忆保留→设置接近1(不完全遗忘)

Seq2Seq在金融中的应用

Seq2Seq架构

Encoder RNN:
  x₁ → x₂ → ... → x_T → c (上下文向量)

Decoder RNN (训练时):
  c + y₁ → y₂ → ... → y_T' (teacher forcing)
  损失 = Σ L(ŷ_t, y_t)

Decoder RNN (推理时):
  c → ŷ₁ → ŷ₂ → ... (自回归生成)

金融应用场景

应用 Encoder输入 Decoder输出
价格预测 过去60天OHLCV 未来5天价格
波动率预测 过去波动率+宏观 未来波动率期限结构
交易策略生成 市场状态序列 持仓序列(多/空/平)
文本→信号 新闻文本序列 交易信号

Attention + Seq2Seq
在Decoder每步计算与Encoder所有步的注意力权重 → 解决长序列信息瓶颈

3.4 Transformer进阶

Transformer in Finance

  • Transformer架构回顾
  • 位置编码详解
  • 多头注意力的可視化
  • 金融时间序列Transformer
  • 预训练策略

Transformer编码器可视化

输入序列: [x₁, x₂, x₃, ..., xₙ]
         ↓
    [Token Embedding + Position Encoding]
         ↓
    ┌──────────────────────────────────┐
    │    Multi-Head Self-Attention     │
    │  ┌──┐ ┌──┐ ┌──┐      ┌──┐        │
    │  │H1│ │H2│ │H3│ ...  │H8│        │
    │  └──┘ └──┘ └──┘      └──┘        │
    │        Concat + Linear           │
    └──────────────────────────────────┘
         ↓ Add & LayerNorm
    ┌──────────────────────────────────┐
    │      Feed-Forward Network        │
    │     Linear → GELU → Linear       │
    └──────────────────────────────────┘
         ↓ Add & LayerNorm
         ↓ (重复N次)
    [Encoder Output]

金融可视化:注意力权重热力图可以显示时间序列中哪些时间步"关注"了哪些其他时间步——揭示市场联动关系。

位置编码的直觉

为什么需要位置编码?

  • Self-Attention是"词袋"操作(对位置排列不变)
  • 需要显式告诉模型token的顺序

正弦位置编码的性质

  • 不同维度有不同的频率
  • 低维:高频(相邻位置差异大)
  • 高维:低频(长距离位置关系)
  • 任意位置pos+k的编码可以表示为pos编码的线性函数

金融类比:不同频率成分对应不同时间尺度——高频(日频变化)到低频(年频趋势)。

金融时间序列Transformer

flowchart LR hist["历史时间窗
过去 T 步"]:::state feat["多变量输入
价格 / 成交量 / 技术指标"]:::var emb["特征嵌入
Embedding"]:::net pos["时间位置编码
绝对 / 相对"]:::var enc["Transformer Encoder
× N"]:::net rep["时序表示"]:::target head["预测头
MLP / Linear"]:::net out["输出
价格 / 波动率 / 交易信号"]:::result attn["注意力权重
关键时点解释"]:::target hist --> feat --> emb --> pos --> enc --> rep --> head --> out enc -. 可解释性 .-> attn classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef net fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef target fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef var fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

金融Transformer变体

  • Traffic Transformer:时序Transformer的奠基工作
  • Informer:长序列时间序列预测(ProbSparse注意力)
  • PatchTST:将时间序列分片(Patch)输入
  • FinTime:金融专用时间序列Transformer

预训练 + 微调策略

三阶段策略

第一阶段:大规模预训练
  数据:大量市场数据(全市场股票)
  任务:掩码重建(类似BERT的MLM)
  输出:通用市场表示
第二阶段:领域微调
  数据:特定板块/资产数据
  任务:价格预测/波动率预测
  输出:特定领域表示
第三阶段:任务微调
  数据:少量标注数据
  任务:交易信号生成
  输出:最终策略

优势

  • 减少对标注数据的需求
  • 学到通用的市场动态
  • 迁移到新资产时只需少量微调

3.5 GAN与扩散模型

Generative Models in Finance

  • GAN原理
  • 金融时间序列生成
  • 扩散模型
  • 金融应用

GAN (生成对抗网络)

架构:生成器(Generator) vs 判别器(Discriminator)


flowchart LR z["随机噪声 z"]:::input real["真实样本 x"]:::real subgraph GNet["生成器 Generator"] direction LR g["G(z)"]:::gen end fake["生成样本 G(z)"]:::fake subgraph DNet["判别器 Discriminator"] direction LR d["D(x) / D(G(z))"]:::disc end out1["真实概率高"]:::out out2["真实概率低"]:::out z --> g --> fake real --> d --> out1 fake --> d --> out2 d -. 对抗训练反馈 .-> g classDef input fill:#EEF2FF,stroke:#6366F1,stroke-width:1.2px,color:#222; classDef real fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222; classDef fake fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef gen fill:#FEF3C7,stroke:#D97706,stroke-width:1.2px,color:#222; classDef disc fill:#DBEAFE,stroke:#2563EB,stroke-width:1.2px,color:#222; classDef out fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222;

目标函数

金融应用

  • 合成金融时间序列:生成逼真的市场数据
  • 情景生成:生成极端市场情景用于压力测试
  • 数据增强:扩充有限的历史数据
  • GAN-Stress Testing:生成"最糟糕但合理"的市场情景

扩散模型 (Diffusion Models)

前向过程:逐步添加噪声直到纯噪声

逆向过程:学习去噪

vs GAN

特性 GAN 扩散模型
训练稳定性 不稳定(模式崩塌) 稳定
样本质量 更高(但生成慢)
多样性 有限 丰富
计算成本 中等

金融潜力:扩散模型在生成逼真的市场路径方面显示潜力(优于GAN),可用于期权定价和风险管理。

3.5.1 GAN在金融中的应用案例

案例1:合成收益率数据生成

# 用GAN生成逼真的金融时间序列
class FinancialGAN:
    """生成逼真的金融收益率序列"""
    def __init__(self, seq_length=64):
        self.seq_length = seq_length
        self.generator = self._build_generator()
        self.discriminator = self._build_discriminator()
        self.gan = self._build_gan()
    
    def _build_generator(self):
        model = Sequential([
            Dense(128, input_dim=100),
            BatchNormalization(),
            LeakyReLU(0.2),
            LSTM(64, return_sequences=True),
            LSTM(32, return_sequences=True),
            TimeDistributed(Dense(1, activation='tanh'))
        ])
        return model
    
    def train(self, real_returns, epochs=1000):
        # 训练GAN生成与真实数据统计特征匹配的合成数据
        # 关键:不仅要骗过判别器,还要匹配统计特征
        # 如:波动率聚集、厚尾、自相关
        pass

应用场景:

  1. 扩充有限的历史数据(数据增强)
  2. 生成更多极端情景(尾部风险建模)
  3. 模拟"如果"情景(反事实分析)

案例2:市场情景生成

  • 输入:条件变量(利率、波动率、宏观指标)
  • 输出:合成市场路径
  • 用途:压力测试、策略回测

3.5.2 自编码器在金融中的应用

自编码器 (Autoencoder):无监督学习,学习数据的压缩表示

flowchart LR x["高维输入
p维金融特征"]:::state enc["编码器
降维"]:::net z["隐编码
低维表示 k << p"]:::target dec["解码器
重建"]:::net xr["重建输出
x_hat"]:::state loss["重建误差
尽量小"]:::result x --> enc --> z --> dec --> xr x -.对比.-> loss xr -.对比.-> loss classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef net fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef target fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

金融应用

应用 原理 价值
异常检测 重建误差大=异常 市场操纵检测、交易异常
噪声过滤 去噪自编码器 从噪声行情中提取信号
因子提取 隐编码=风险因子 类似PCA但非线性
缺失值填充 从非缺失部分重建缺失 财报数据插补
# 使用自编码器进行金融异常检测
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

input_dim = X_train.shape[1]
encoding_dim = 8  # 压缩维度

# 自编码器
input_layer = Input(shape=(input_dim,))
encoded = Dense(encoding_dim, activation='relu')(input_layer)
decoded = Dense(input_dim, activation='linear')(encoded)

autoencoder = Model(input_layer, decoded)
autoencoder.compile(optimizer='adam', loss='mse')

# 在正常数据上训练
autoencoder.fit(X_normal, X_normal, epochs=50, batch_size=32)

# 计算重建误差
reconstructions = autoencoder.predict(X_test)
mse = np.mean((X_test - reconstructions) ** 2, axis=1)

# 高MSE = 潜在的异常交易行为
threshold = np.percentile(mse, 95)
anomalies = X_test[mse > threshold]

3.5.3 生成模型在金融中的前沿应用

时间序列生成的最新进展

方法 生成质量 训练稳定性 金融适用性
GAN 中等 不稳定 合成数据生成
扩散模型 稳定 情景生成
VAE 中等 稳定 隐含表示学习
自回归模型 稳定 时间序列预测

金融实践:扩散模型在2024-2025年迅速崛起,在生成逼真的金融时间序列方面显著优于GAN,特别适用于压力测试情景生成和期权定价中的路径模拟。

GAN损失函数详解

Minimax博弈

两部分直观理解

判别器D:
  max log D(真实数据) + log(1-D(生成数据))
  → 真实数据给高分,生成数据给低分

生成器G:
  min log(1-D(G(z))) ≈ max log D(G(z))
  → 让D误判生成数据为真实

训练不稳定的根源

  • 原始GAN使用JS散度 → 当生成/真实分布不重叠时梯度为零
  • 等效于两个分布的高维支撑集可能不相交

模式崩塌 (Mode Collapse) 与WGAN

模式崩塌:生成器只能生成少数几种模式

真实数据分布:  [模式A] [模式B] [模式C] [模式D]
GAN生成:       [模式A]        [模式C]
               ↑ B和D完全丢失 (collapse)

检测:生成大量样本 → 聚类 → 聚类数远小于真实数据模式数

Wasserstein GAN (WGAN)解决方案

  • 用Earth Mover's Distance (Wasserstein-1距离)替代JS散度
  • 即使分布不重叠,W距离也能提供有意义的梯度

  • 权重裁剪(WGAN)或梯度惩罚(WGAN-GP)保证Lipschitz约束

金融时间序列生成评估

指标 评估什么 方法
收益率自相关 时序依赖 比较ACF图
波动率聚类 条件异方差 比较GARCH效应
尾部指数 极端值分布 Hill估计量对比
协方差矩阵 多资产关系 比较相关矩阵Frobenius范数
预测效用 有用性 用生成数据训练→真数据评估

3.6 强化学习基础

RL Fundamentals

  • MDP框架
  • Bellman方程
  • 动态规划
  • 时序差分学习
  • Q-learning
  • 探索与利用

MDP (马尔可夫决策过程)

五元组

  • : 状态集合(市场状态、持仓等)
  • : 动作集合(买入、卖出、持有)
  • : 状态转移概率(市场动态)
  • : 奖励函数(收益、风险调整收益)
  • : 折扣因子(当前 vs 未来收益)

策略 : 在状态s下采取动作a的概率

目标:最大化累积折扣奖励

金融映射

  • = {股票价格、持仓量、技术指标、...}
  • = {买入5%、卖出10%、持有、...}
  • = {Portfolio Return - Transaction Cost}

RL在金融中的参数化设计模式

要素 设计原则 反例(应避免)
状态空间 包含可观测变量+可计算特征 包含未来信息(前视偏差)
动作空间 离散(方向)或连续(比例),与执行匹配 动作分辨率与交易约束不匹配
奖励函数 风险调整后收益,考虑交易成本 仅用原始收益(忽略风险)
折扣因子γ 短期任务γ≈0.9,长期γ≈0.99 γ=1.0(无限远收益,训练不稳定)
初始状态分布 覆盖不同市场周期 仅在牛市数据上训练

常见金融RL任务参数化

任务 状态空间(S) 动作空间(A) 奖励(R)
组合优化 价格+持仓+因子值 权重调整[0,1] Sharpe/Sortino Ratio
最优执行 剩余量+时间+价格+波动率 交易比例[0,1] 实现价格 - 基准 - 冲击成本
做市 库存+价差+波动率+订单流 bid/ask报价调整 做市收入 - 库存风险惩罚
期权对冲 标的价格+Greek+持仓 对冲比率调整 PnL波动率惩罚(最小化风险)

Bellman方程

状态价值函数

Bellman期望方程

Bellman最优方程

关键 insight:V和Q通过自举(bootstrap)方式互相定义,构成迭代求解的基础。

Q-learning

核心更新公式

off-policy:使用行为策略产生数据,但学习目标策略(贪心策略)

flowchart LR s["当前状态 s"]:::state qtab["Q表"]:::table policy["行为策略
epsilon-greedy"]:::policy a["动作 a"]:::action env["环境"]:::env r["奖励 r"]:::result sn["下一状态 s'"]:::state maxq["查询下一状态最大Q值
max Q(s', a')"]:::calc update["更新 Q(s, a)
向目标值靠近"]:::update note["off-policy
用探索策略采样
用贪心目标更新"]:::note s --> policy qtab --> policy policy --> a a --> env env --> r env --> sn sn --> maxq qtab --> maxq s --> update a --> update r --> update maxq --> update update --> qtab policy -. 采样策略 .-> note maxq -. 目标策略 .-> note classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef table fill:#F3E8FF,stroke:#8B5CF6,stroke-width:1.2px,color:#222; classDef policy fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef action fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef env fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222; classDef calc fill:#DBEAFE,stroke:#2563EB,stroke-width:1.2px,color:#222; classDef update fill:#FDE68A,stroke:#D97706,stroke-width:1.2px,color:#222; classDef note fill:#F9FAFB,stroke:#6B7280,stroke-width:1px,color:#222;
def q_learning(env, episodes=1000, alpha=0.1, gamma=0.99, epsilon=0.1):
    Q = defaultdict(lambda: np.zeros(env.action_space.n))
    
    for episode in range(episodes):
        s = env.reset()
        done = False
        while not done:
            # ε-greedy探索
            if random.random() < epsilon:
                a = env.action_space.sample()
            else:
                a = np.argmax(Q[s])
            
            s_next, reward, done = env.step(a)
            
            # Q-learning更新
            Q[s][a] += alpha * (reward + gamma * np.max(Q[s_next]) - Q[s][a])
            s = s_next
    return Q

探索 vs 利用 (Exploration vs Exploitation)

核心困境

  • 利用:选择当前已知的最优动作(最大化短期收益)
  • 探索:尝试新动作(获取更多信息,可能找到更好的长期策略)

常见策略

策略 描述 金融类比
-greedy 概率ε随机探索 保留一小部分资金尝试新策略
UCB 置信上界,不确定性高的动作更值得探索 对新资产/策略赋予更高权重
汤普森采样 从后验分布采样 贝叶斯组合优化
熵正则化 在目标函数中加入策略熵 鼓励策略多样化

金融意义:交易中"探索"意味着承担试错成本,"利用"意味着坚持已知有效策略。两者平衡直接影响到实盘表现。

策略梯度定理 (Policy Gradient Theorem)

为什么需要策略梯度?

基于价值的方法 (DQN) 局限:

  • 需要计算所有动作的Q值 → 连续动作空间不可行
  • 确定性策略 → 无法表达随机策略
  • 对价值估计误差敏感

策略梯度直接优化策略

直觉理解

∇log π(a|s) · R:
  如果奖励R>0 → 提升这个动作的概率
  如果奖励R<0 → 降低这个动作的概率
  
  梯度方向 = "往产生高奖励的动作方向调整策略"

REINFORCE算法

对每条轨迹:
  计算每个时间步的回报 G_t
  更新: θ ← θ + α·Σ ∇log π(a_t|s_t)·G_t
  
问题: 高方差(每条轨迹的回报波动大)
解决方案: 引入Baseline (通常是V(s)) → Actor-Critic

Actor-Critic架构详解

为什么需要两个网络?

Actor (策略网络 π_θ):
  给定状态 → 输出动作分布
  学习目标: 最大化期望回报
  更新: θ ← θ + α·∇log π_θ(a|s)·A(s,a)

Critic (价值网络 V_φ):
  给定状态 → 输出状态价值
  学习目标: 准确估计状态价值 (减少Actor的方差)
  更新: φ ← φ - β·∇(V_φ(s) - G)²
  
优势函数:
  A(s,a) = Q(s,a) - V(s)  (动作相对于平均有多好)
  A>0 → 这个动作比平均好 → 提升概率
  A<0 → 这个动作比平均差 → 降低概率
flowchart LR s["状态 s"]:::state subgraph AC["Actor-Critic"] direction TB actor["Actor
策略网络
输入状态 -> 输出动作概率"]:::actor critic["Critic
价值网络
评估当前状态/动作好坏"]:::critic end a["动作 a"]:::action env["环境"]:::env r["奖励 r"]:::reward ns["下一状态 s'"]:::state adv["优势信号 A
比平均更好还是更差"]:::signal s --> actor s --> critic actor --> a a --> env env --> r env --> ns s --> adv r --> adv critic --> adv adv -.指导策略更新.-> actor r -.训练价值网络.-> critic ns -.时序反馈.-> critic classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef actor fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef critic fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef action fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef env fill:#E0F2FE,stroke:#0284C7,stroke-width:1.2px,color:#222; classDef reward fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222; classDef signal fill:#FCE7F3,stroke:#9333EA,stroke-width:1.2px,color:#222;

金融中的Actor-Critic解释

Actor (交易策略): 
  状态=市场特征 → 输出=各仓位概率
  "在当前市场,应该持多少仓位?"

Critic (风险度量):
  状态=市场特征 → 输出=期望累计收益
  "在当前市场状态,未来期望收益是多少?"
  → 用于判断Actor做出的决策是否优于基准

RL金融参数化设计模式

状态空间设计模式

模式 示例 适用场景
原始价格 [S_t, S_{t-1}, ..., S_{t-n}] 端到端学习
技术指标 [RSI, MACD, BB, MA] 特征工程辅助
组合特征 [Delta, Gamma, Vega, Theta] 衍生品对冲
混合状态 [价格 + 指标 + 持仓信息] 完整交易Agent

动作空间设计

离散: {做多, 空仓, 做空}
      {买入10%, 买入5%, 不动, 卖出5%, 卖出10%}
优点: 简单, DQN可用
缺点: 粒度粗

连续: 仓位比例 ∈ [-1, 1]
优点: 精细控制, DDPG/PPO适用
缺点: 需要更复杂的探索策略

奖励函数设计模式

# 1. 收益驱动
reward = portfolio_return

# 2. 风险调整
reward = (portfolio_return - risk_free) / portfolio_vol  # Sharpe-like

# 3. 利润+惩罚
reward = pnl - λ₁·drawdown - λ₂·turnover - λ₃·transaction_cost

# 4. 差异奖励 (Differential Reward)
reward = r_t - baseline_r_t  # 超过基准才有奖励

3.7 深度强化学习

Deep RL: DQN, DDPG, PPO

  • DQN与经验回放
  • DDPG连续控制
  • PPO稳定训练
  • 金融应用案例
  • LLM+DRL混合架构

DQN (Deep Q-Network)

创新1:用神经网络近似Q函数

创新2:经验回放 (Experience Replay)

  • 将经验 存入回放缓冲区
  • 随机采样mini-batch训练
  • 打破数据相关性,提高稳定性

创新3:目标网络 (Target Network)

  • 使用独立的目标网络
  • 定期从在线网络复制参数
  • 稳定训练目标

损失函数

金融应用:离散动作的交易策略(买入/卖出/持有)

DDPG (Deep Deterministic Policy Gradient)

适用于连续动作空间的决策问题(如买卖数量、仓位比例、对冲比例)

DDPG 的 Actor-Critic 结构

  • Actor : 根据状态输出连续动作(策略网络)
  • Critic :评估状态–动作对的价值(价值网络)
flowchart LR s["当前状态 s"]:::state sp["下一状态 s'"]:::state actor["Actor\nμ(s)"]:::net critic["Critic\nQ(s,a)"]:::net targetActor["Target Actor\nμ'(s')"]:::target targetCritic["Target Critic\nQ'(s',a')"]:::target a["动作 a=μ(s)"]:::var ap["目标动作 a'=μ'(s')"]:::var q["当前价值 Q(s,a)"]:::var qp["目标价值 Q'(s',a')"]:::var y["TD目标\ny = r + γ Q'(s',a')"]:::result s --> actor actor --> a s --> critic a --> critic critic --> q sp --> targetActor targetActor --> ap sp --> targetCritic ap --> targetCritic targetCritic --> qp qp --> y classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef net fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef target fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef var fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

核心思想: Actor 负责输出动作,Critic 负责评估动作好坏,并利用目标网络提升训练稳定性。

金融应用

  • 连续仓位管理(做多20%,做空10%等)
  • 最优执行(分批卖出,最小化市场冲击)
  • 动态对冲(连续调整对冲比率)

PPO (Proximal Policy Optimization)

当前最常用的 DRL 算法之一(通过限制策略更新幅度提升训练稳定性)

PPO 的核心思想

  • 用新旧策略的概率比率衡量策略变化
  • 通过 clip 限制更新步长,防止策略一次更新过大
  • 常与 Actor-Critic 和优势函数估计结合使用

裁剪的替代目标(Clipped Surrogate Objective)

表示新旧策略在动作 上的概率比率。

flowchart LR old["旧策略\nπ_old"]:::state env["与环境交互\n收集轨迹 (s_t,a_t,r_t,s_t')"]:::net adv["估计优势\nÂ_t"]:::var ratio["计算概率比\nr_t(θ)=π_θ(a_t|s_t)/π_old(a_t|s_t)"]:::var clip["裁剪目标\nmin(r_t(θ)Â_t, clip(r_t(θ),1-ε,1+ε)Â_t)"]:::target update["更新策略参数 θ"]:::result newp["新策略\nπ_θ"]:::state old --> env --> adv --> ratio --> clip --> update --> newp newp -. 作为下一轮旧策略 .-> old classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef net fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef target fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef var fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

核心思想: PPO 通过裁剪目标函数限制策略更新幅度,在保证学习效率的同时提升训练稳定性。

优点

  • 训练稳定,较少出现策略骤变
  • 实现相对简单,易于与 Actor-Critic 框架结合
  • 广泛应用于机器人控制、游戏智能体和量化交易等任务

PPO vs DDPG vs DQN

特性 DQN DDPG PPO
动作空间 离散 连续 两者均可
训练稳定性 中等 不稳定 最稳定
样本效率 中等
实现复杂度 简单 中等 中等

金融推荐:大多数金融应用首选PPO(稳定性是金融的第一要求)

DRL在金融中的经典应用

应用1:最优执行 (Optimal Execution)

状态: 剩余头寸, 市场成交量, 波动率, 时间
动作: 卖出数量(连续)
奖励: 实现价格 - 基准价格 - 市场冲击成本

应用2:期权动态对冲

状态: 标的资产价格, Delta, Gamma, Vega, 剩余期限
动作: 调整对冲仓位
奖励: PnL波动率惩罚(最小化风险)

应用3:做市商策略

状态: 买卖订单簿, 库存, 风险偏好
动作: 报价价差和深度
奖励: 做市收入 - 库存风险成本

应用4:投资组合管理 (Robo-Advisor)

状态: 宏观经济指标, 资产价格, 当前配置
动作: 各资产权重调整
奖励: 风险调整后收益 (Sharpe Ratio)

LLM+DRL混合架构 (前沿)

为什么需要混合? DRL在金融中的局限性:

  • 状态表示能力有限(无法理解新闻文本、财报)
  • 奖励设计困难(多目标权衡)
  • 可解释性差
  • 泛化能力不足

LLM+DRL架构

flowchart TB txt["新闻 / 财报 / 宏观文本"]:::text mkt["市场数据"]:::state llm["LLM\n文本理解 / 事件提取"]:::llm fusion["状态增强\n市场特征 + 语义特征"]:::fusion drl["DRL Agent\nPPO / DDPG"]:::agent act["交易动作\n买 / 卖 / 持有 / 仓位调整"]:::action env["市场环境"]:::state rew["奖励"]:::result exp["动作解释\n为什么买卖?"]:::explain txt --> llm llm --> fusion mkt --> fusion fusion --> drl drl --> act act --> env env --> rew rew --> drl llm -.辅助解释.-> exp drl -.决策依据.-> exp classDef text fill:#F3E8FF,stroke:#8B5CF6,stroke-width:1.2px,color:#222; classDef llm fill:#EDE9FE,stroke:#7C3AED,stroke-width:1.2px,color:#222; classDef fusion fill:#FEF3C7,stroke:#D97706,stroke-width:1.2px,color:#222; classDef agent fill:#DBEAFE,stroke:#2563EB,stroke-width:1.2px,color:#222; classDef action fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222; classDef state fill:#F3F4F6,stroke:#9CA3AF,stroke-width:1px,color:#222; classDef result fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef explain fill:#FFF7ED,stroke:#EA580C,stroke-width:1.2px,color:#222;

3.7.1 DRL训练稳定技巧

PPO训练中的常见问题与解决

from stable_baselines3 import PPO
from stable_baselines3.common.callbacks import EvalCallback

# 1. 环境规范化
from stable_baselines3.common.vec_env import VecNormalize
env = DummyVecEnv([lambda: TradingEnv(df)])
env = VecNormalize(env, norm_obs=True, norm_reward=True)

# 2. 使用评估回调监控
eval_callback = EvalCallback(
    env, best_model_save_path='./logs/',
    log_path='./logs/', eval_freq=1000,
    deterministic=True, render=False
)

# 3. PPO参数调优
model = PPO(
    "MlpPolicy", env,
    learning_rate=3e-4,
    n_steps=2048,
    batch_size=64,
    n_epochs=10,
    gamma=0.99,
    gae_lambda=0.95,
    clip_range=0.2,
    ent_coef=0.01,
    vf_coef=0.5,
    max_grad_norm=0.5,
    verbose=1
)

DRL金融应用注意事项

  • 奖励设计最关键——需要平衡收益、风险、交易成本
  • 训练/验证/测试三集划分(按时间)
  • 因随机种子差异大 → 多次运行取平均
  • 策略泛化能力远比训练集性能重要

3.7.2 多Agent强化学习 (MARL)在金融中的应用

flowchart TB market["金融市场环境
价格 / 成交量 / 波动率 / 宏观信息"]:::state obs["全局状态 / 共享信息"]:::var subgraph agents["多Agent分工"] direction LR a1["Agent 1
股票策略"]:::net a2["Agent 2
期货策略"]:::net a3["Agent 3
期权策略"]:::net end act1["买入 / 卖出 / 持有"]:::var act2["做多 / 做空"]:::var act3["对冲 / 投机"]:::var portfolio["组合层
聚合各Agent动作"]:::target reward["共享奖励
组合PnL / 风险调整收益"]:::result market --> obs obs --> a1 obs --> a2 obs --> a3 a1 --> act1 a2 --> act2 a3 --> act3 act1 --> portfolio act2 --> portfolio act3 --> portfolio portfolio --> reward reward -. 反馈 .-> a1 reward -. 反馈 .-> a2 reward -. 反馈 .-> a3 classDef state fill:#DDEBFF,stroke:#5B8FF9,stroke-width:1.2px,color:#222; classDef net fill:#FFF4CC,stroke:#C9A227,stroke-width:1.2px,color:#222; classDef target fill:#FCE7F3,stroke:#DB2777,stroke-width:1.2px,color:#222; classDef var fill:#F3F4F6,stroke:#999,stroke-width:1px,color:#222; classDef result fill:#DCFCE7,stroke:#16A34A,stroke-width:1.2px,color:#222;

MARL vs 单Agent

维度 单Agent 多Agent
状态空间 全局+仓位 全局+各Agent仓位
动作空间 所有资产 单个资产
训练难度 中等 高(非平稳)
可扩展性 资产增加导致动作空间爆炸 天然模块化
金融适用性 简单策略 复杂多资产组合

3.7.3 LLM+DRL的三种集成模式

模式1:LLM作为状态编码器

原始文本 → LLM → 语义嵌入 → 拼接数值状态 → DRL策略网络
  • 优点:增强状态表示
  • 缺点:推理延迟可能影响实时交易

模式2:LLM作为奖励信号

DRL动作 + 市场结果 → LLM评估 → 自然语言奖励 → 转化为数值奖励
  • 优点:可以基于复杂语义评判
  • 缺点:奖励信号不稳定

模式3:LLM作为策略先验

LLM分析市场 → 生成粗粒度建议 → DRL精炼为具体动作
  • 优点:结合LLM的推理能力和DRL的优化能力
  • 缺点:系统复杂度高

前沿研究 (2025-2026):

  • LLM指导的DRL探索策略 (LLM-guided exploration)
  • 用LLM生成合成交易经验训练DRL
  • LLM作为DRL的meta-controller

RL在金融中的更多应用

应用1:期权定价 (RL Pricing)

状态: [S_t, τ, σ_imp, moneyness]
动作: 期权价格调整 ΔP
奖励: -|RL价格 - MC价格|² (学习接近真实价格)

优势: 对奇异期权无需解析公式,直接从MC模拟中学习
局限: 不如MC精确,但推理速度快100倍+

应用2:动态资产配置

状态: [经济指标, 市场状态, 当前配置, 剩余期限]
动作: 仓位调整 (股/债/商品/现金)
奖励: 风险调整收益 - 交易成本

关键: 需处理非平稳性(市场状态在变化)

应用3:算法交易执行

问题: 如何在T时间内最优执行V股交易?
状态: [剩余时间, 剩余股数, 当前价格, 市场深度]
动作: 此刻卖出多少股
奖励: -Implementation Shortfall (执行价 vs 决策价)

经典方法: Almgren-Chriss → RL可直接学习更复杂的市场反应

LLM与DL的融合范式

四种融合模式

模式 描述 金融示例
LLM→DL LLM输出作为DL输入特征 LLM情感分数 → LSTM预测
DL→LLM DL输出作为LLM上下文 CNN提取K线特征 → LLM生成分析报告
Co-Training LLM和DL同时训练,共享表示 联合文本+价格嵌入空间
LLM as Controller LLM决策调用哪些DL模型 Agent选择LSTM/CNN/XGBoost

LLM作为数据增强器

# LLM生成训练数据的伪代码
def augment_training_data(financial_texts, labels):
    augmented = []
    for text, label in zip(financial_texts, labels):
        # LLM改写原文 → 保持语义但改变措辞
        variants = llm.generate_variants(
            text, 
            prompt="用不同的金融术语改写,保持含义不变"
        )
        augmented.extend([(v, label) for v in variants])
    return augmented

LLM作为RL的奖励模型

  • 金融中奖励函数难以精确定义(什么是"好的交易"?)
  • LLM可以判断交易决策的文本合理性
  • 例:LLM评估"在当前市场条件下,加仓科技股是否合理?"

3.8 实践环节

课堂实践项目(5选1)

  • CSMAR / DigQuant / Kaggle 数据
  • 1小时左右可完成
  • 可使用 AI Agent / LLM
  • 强调 baseline + 结果分析
  • 鼓励金融解释

课堂实践说明(统一要求)

可选数据源

  • CSMAR:A股日频、财务、因子、行业等数据
  • DigQuant A股 tick:盘口、逐笔、买卖价量等高频数据
  • Kaggle 信用评分:违约预测、客户风险识别

统一要求

  1. 5选1,可个人完成,鼓励2-4人组队
  2. 必须有 baseline(如 Logistic、规则策略、PCA、Buy-and-Hold)
  3. 必须有 结果指标(如 AUC、F1、MSE、收益率、最大回撤)
  4. 必须写出 3条结论:模型是否有效、为什么、金融意义是什么
  5. 可使用 AI Agent / LLM 辅助:

建议最低提交内容

  • 1 个可运行的 Notebook / .py
  • 1 页结果总结(图表 + 表格)
  • 口头汇报 3 分钟:问题、方法、结果、解释

项目1:信用评分 —— Logistic vs MLP

数据:Kaggle 信用评分竞赛数据

任务

  • 预测客户是否违约
  • 比较传统方法与深度学习方法

建议模型

  • Baseline:Logistic Regression
  • 主模型:MLP(2~3层全连接)
  • 可选:XGBoost 作为补充对照

推荐特征处理

  • 缺失值填补
  • 标准化
  • 类别不平衡处理(class weight / 重采样)

建议输出

  • AUC、KS、F1、Recall
  • ROC 曲线
  • 模型对比表

最低完成标准

  1. 跑通 Logistic
  2. 跑通一个 MLP
  3. 比较二者效果并解释差异

可讨论问题

  • MLP 是否显著优于 Logit?
  • Dropout / Early Stopping 是否有效?
  • 金融风控中更看重哪个指标?

项目2:A股 tick 短期方向预测 —— CNN / LSTM 三选一

数据:DigQuant A股 tick 数据

任务

  • 用最近一段 tick 信息预测未来 (5)~(20) 个 tick 的中间价方向
  • 标签可设为:上涨 / 下跌 / 不变

建议输入特征

  • 买一卖一价差、买卖盘量差、最近若干 tick 收益率、rolling volatility、order imbalance

建议模型

  • Baseline:Logistic / XGBoost
  • 主模型:1D-CNN 或 LSTM

建议简化

  • 先只选 1只股票 + 1天或几天数据
  • 用固定窗口构造样本

建议输出

  • Accuracy / F1 / AUC
  • 混淆矩阵
  • 不同窗口长度对比

最低完成标准

  1. 构造时序样本
  2. 跑通一个 baseline
  3. 跑通一个 CNN 或 LSTM
  4. 比较模型效果

项目3:自编码器 —— 异常检测 / 因子提取

数据(任选其一)

  • DigQuant tick 特征
  • CSMAR 财务 / 因子数据
  • Kaggle 信用评分特征

任务方向(任选一个):

  1. 异常检测:用重建误差识别异常样本
  2. 因子提取:比较 Autoencoder 与 PCA 的降维结果
  3. 缺失值填充:用非缺失部分重建缺失值

建议模型

  • Autoencoder
  • Denoising Autoencoder(可选)

建议输出

  • 重建误差分布图
  • Top 异常样本展示
  • AE 与 PCA 对比图

最低完成标准

  1. 跑通一个自编码器
  2. 展示隐编码或重建误差
  3. 结合金融场景做解释

可讨论问题

  • 异常交易是否对应高重建误差?
  • 非线性因子是否优于 PCA 因子?
  • 去噪后特征是否更稳定?

项目4:简化版 DeepLOB —— 订单簿方向预测

数据:DigQuant 盘口 / 订单簿数据

任务

  • 利用最近若干时点的盘口信息
  • 预测下一段时间的价格方向

建议输入形式

  • top 5 档或 top 10 档买卖价量
  • 最近 20~50 个时点
  • 组成一个二维张量输入 CNN

建议模型

  • Baseline:MLP / Logistic
  • 主模型:2D-CNN 或简化 DeepLOB

为什么这个项目有意思?

  • 最贴近真实高频交易
  • 与课程中的 CNN / DeepLOB 内容直接对应
  • 体现“局部结构 + 多尺度模式”

最低完成标准

  1. 取 top 5 档价量特征
  2. 构造二维输入
  3. 跑通一个 CNN
  4. 与简单 baseline 对比

建议指标

  • Accuracy / F1
  • 不同预测 horizon 的效果
  • 不同盘口层数的效果

项目5:强化学习 —— 最优执行 Toy Problem

数据:DigQuant tick 数据

任务

  • 在给定时间内卖出或买入固定数量
  • 目标:尽量降低冲击成本与执行损失

建议状态

  • 剩余库存、剩余时间、当前 bid/ask spread、最近成交量 / 波动率

建议动作

  • 离散版本:本步执行 0%、25%、50%、100%
  • 进阶:连续仓位控制(PPO / Actor-Critic)

建议算法

  • 基础版:Q-learning
  • 进阶版:PPO

baseline

  • TWAP(等时间切分执行)、VWAP(按成交量执行)、随机执行

最低完成标准

  1. 定义状态、动作、奖励
  2. 跑通一个 RL agent
  3. 与 TWAP / VWAP 比较执行成本

建议指标

  • Implementation Shortfall、平均执行价格、收敛曲线

实践建议:如何高效使用 AI Agent / LLM

建议让 AI 帮你做

  • 生成数据清洗与特征工程代码
  • 生成 baseline 与主模型代码
  • 自动画图(ROC、收益曲线、误差分布)
  • 自动整理实验报告初稿

但你必须自己检查

  1. 是否有 未来信息泄露
  2. 标准化是否只在 训练集 fit
  3. 评价指标是否适合该金融任务
  4. 结果是否真的优于 baseline,而不是偶然

推荐汇报结构

1. 我的问题是什么?  
2. 我的数据与标签如何定义?  
3. baseline 和主模型分别是什么?  
4. 结果如何?  
5. 这个结果在金融上意味着什么?  

本周总结

核心收获

  1. 理解MLP到Transformer的深度学习脉络
  2. 掌握RNN/LSTM在序列建模中的核心作用
  3. 理解Transformer在金融时间序列中的潜力
  4. 掌握RL的MDP框架和核心算法
  5. 理解DRL在交易中的具体应用
  6. 了解LLM+DRL混合架构的前沿方向

预习准备

  • 了解文本分析基本概念
  • 了解图像识别基础
  • 安装:pandas, matplotlib, jieba

下周预告
Week 4: 金融大数据分析

  • 文本分析管线
  • 情感分析
  • 主题建模
  • 图像分析
  • 多模态分析
  • 开源数据资源

延伸阅读

经典教材

  • Goodfellow et al. "Deep Learning" (深度学习圣经)
  • Sutton & Barto "Reinforcement Learning: An Introduction"

论文

  • Mnih et al. (2013): "Playing Atari with Deep Reinforcement Learning" (DQN)
  • Lillicrap et al. (2015): "Continuous Control with Deep Reinforcement Learning" (DDPG)
  • Schulman et al. (2017): "Proximal Policy Optimization Algorithms" (PPO)
  • Vaswani et al. (2017): "Attention Is All You Need"

DRL金融应用