10 深度学习

深度学习

深度学习:机器学习的革命性分支

深度学习已在金融风控、量化投资、自然语言处理等领域取得突破性进展。

  • 量化投资:资产价格预测、因子挖掘、算法交易策略
  • 金融风控:信用评分、欺诈检测、反洗钱监控
  • 自然语言处理:财经新闻情感分析、公告信息提取
  • 时间序列预测:股价走势、波动率预测、宏观经济指标预测

核心优势:深度学习模型可自动从原始数据中学习特征,无需人工特征工程。

深度学习的历史与“寒冬”趣谈

深度学习的发展历程充满波折:

  • 1958年,感知机模型首次提出,点燃了神经网络的希望。
  • 1969年,Minsky和Papert证明感知机无法解决XOR问题,神经网络研究陷入第一次“AI寒冬”。
  • 1986年,反向传播算法(Backpropagation)被Hinton等人系统化,神经网络复兴。
  • 2012年,AlexNet横扫ImageNet竞赛,GPU+大数据+深层网络引爆深度学习新浪潮。
  • 2016年,AlphaGo击败李世石,深度学习登上世界舞台。
  • 2022年后,ChatGPT等大模型引发AI新热潮。

神经网络的普适逼近定理

定理内容:只要有足够的隐藏单元,单隐层前馈神经网络可以逼近任意连续函数。

直观解释

  • 神经网络就像“乐高积木”,每个神经元是一个小积木块,通过组合可以拼出任意复杂的形状。
  • 只要网络足够宽(隐藏单元足够多),理论上可以拟合任何数据分布。

金融案例

  • 在A股市场,复杂的非线性关系(如宏观经济指标与股价的关系)难以用线性模型描述,但深度神经网络可以自动捕捉这些复杂模式。

趣味类比:神经网络调参就像炒菜

调参=“加盐加糖”:

  • 学习率太大=火太猛,容易糊锅;太小=火太小,煮不熟。
  • 层数太多=食材堆太高,容易夹生或糊底。
  • Dropout=偶尔“少放点料”,防止味道太重(过拟合)。
  • BatchNorm=“搅拌均匀”,让每一口味道都合适。

经济金融领域的深度学习典型案例

  • 蚂蚁集团智能风控:利用深度神经网络对数亿用户的信贷违约风险进行实时评分,极大提升了风控准确率。
  • JPMorgan LOXM系统:采用深度学习优化大宗股票交易执行路径,实现最佳成交。
  • A股年报文本情感分析:用BERT等NLP模型自动解读上市公司年报,预测未来股价走势。
  • 卫星图像预测零售销售:CNN分析商场停车场卫星图像,提前预测季度销售额。
  • BloombergGPT:专为金融领域训练的大型语言模型,支持自动化报告生成、风险预警等。

深度学习为何在21世纪崛起?

三大推动力:

驱动因素 20世纪 21世纪
数据 MB级 TB~PB级(互联网+IoT)
算力 CPU GPU/TPU(并行计算)
算法 浅层网络 深层架构+Dropout+BN

核心思想:通过层层抽象自动学习特征表示

  • 传统ML:人工设计特征 → 模型学习映射
  • 深度学习:原始数据 → 模型同时学习特征和映射

在金融中的应用趋势

  • 量化选股:替代传统因子模型
  • 风险管理:异常交易检测
  • 自然语言处理:年报情感分析、新闻舆情

反向传播算法:深度学习的灵魂

核心思想:利用链式法则高效计算多层网络的梯度。

推导步骤

  1. 前向传播:计算每层的激活值和输出。
  2. 计算损失函数对输出的偏导数。
  3. 反向逐层递推,利用链式法则计算每一层参数的梯度。
  4. 用梯度下降法更新参数。

举例

假设有两层网络:输入\(x\),隐藏层\(h=g(W_1x+b_1)\),输出\(y=Vh+b_2\)

损失\(L\)\(W_1\)的梯度:

\[ \frac{\partial L}{\partial W_1} = \frac{\partial L}{\partial y} \cdot \frac{\partial y}{\partial h} \cdot \frac{\partial h}{\partial W_1} \]

每一项都可以递推计算,极大提升了多层网络的训练效率。

梯度下降的多种变体与对比

常见优化器

  • SGD(随机梯度下降):每次用小批量样本更新参数,收敛慢但泛化好。
  • Momentum:引入“惯性”,加速收敛,减少震荡。
  • RMSprop:自适应调整每个参数的学习率,适合稀疏梯度。
  • Adam:结合Momentum和RMSprop优点,当前主流选择。

可视化对比

不同优化器收敛轨迹对比 展示SGD、Momentum、Adam三种优化器在损失曲面上的收敛路径差异 损失曲面 最优点 SGD Momentum Adam 参数空间 收敛方向

批量归一化(BatchNorm):训练更快更稳

原理:对每一层的输入做标准化处理,使其均值为0、方差为1。

作用

  • 缓解梯度消失/爆炸
  • 加速收敛
  • 降低对初始化和学习率的敏感性

公式

\[ ext{BN}(x) = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta \]

其中\(\mu\)\(\sigma^2\)为小批量均值和方差,\(\gamma\)\(\beta\)为可学习参数。

残差连接(ResNet):让网络“更深更稳”

核心思想:引入“跳跃连接”,让信息可以跨层直接传递。

公式

\[ ext{输出} = F(x) + x \]

优点

  • 缓解深层网络的梯度消失问题
  • 允许训练上百层甚至更深的网络

金融应用

  • 用于高频交易中的超深网络,捕捉微秒级市场信号

注意力机制与Transformer架构

注意力机制:让模型自动“关注”输入中最重要的部分。

自注意力公式

\[ ext{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

Transformer结构

  • 编码器-解码器架构
  • 多头自注意力机制
  • 完全基于注意力,无需循环或卷积

金融案例

  • BloombergGPT、FinGPT等金融大模型均基于Transformer
  • A股年报文本情感分析、新闻舆情预测

从单层神经网络说起:感知机

考虑一个具有 \(p\) 个输入和 \(K\) 个输出的问题,单层神经网络模型为:

\[ f(X) = \beta_0 + \sum_{k=1}^{K} \beta_k A_k \]

其中隐藏单元 \(A_k\) 通过激活函数计算:

\[ A_k = g\left(w_{k0} + \sum_{j=1}^{p} w_{kj} X_j\right) \]

  • \(g(\cdot)\)激活函数(如 Sigmoid、ReLU)
  • \(w_{kj}\):连接输入 \(X_j\) 到隐藏单元 \(A_k\)权重
  • \(\beta_k\):连接隐藏单元到输出的权重

感知机到多层网络的演进

感知机(Perceptron)的数学表示:

\[ \hat{y} = \sigma\left(\beta_0 + \sum_{j=1}^p \beta_j X_j\right) = \sigma(\boldsymbol{\beta}^T X) \]

感知机的局限:只能处理线性可分问题

经典反例:XOR问题——两个特征的异或关系

Dropout:防止过拟合的“集成”思想

原理:训练时随机丢弃部分神经元,相当于对多个子网络取平均。

数学解释

  • Dropout等价于对2^n个子网络的集成,极大提升泛化能力。
  • 测试时使用全部神经元,但权重缩放。

金融案例

  • 在A股因子挖掘中,Dropout可防止模型过度记忆历史行情,提升未来表现。

权重初始化策略:Xavier与He初始化

问题:权重初始化不当会导致梯度消失或爆炸。

常用方法

  • Xavier初始化:适合Sigmoid/Tanh激活,保持前后层方差一致。
  • He初始化:适合ReLU激活,进一步缓解梯度消失。

公式

\[ W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right) \]

实操建议:金融大数据建模时,优先选用He初始化配合ReLU。

GRU与LSTM的对比与选择

LSTM:引入遗忘门、输入门、输出门,能捕捉长期依赖。

GRU:结构更简单,只有重置门和更新门,参数更少。

对比

  • LSTM适合超长序列(如宏观经济月度数据预测)
  • GRU适合中短序列(如日度股价预测)

金融案例

  • 高频交易中,GRU因计算快常用于毫秒级信号建模
  • LSTM常用于年报文本、宏观经济序列分析

趣味历史:AlphaGo与深度学习的“高光时刻”

2016年,AlphaGo击败围棋世界冠军李世石,成为AI史上的里程碑。

  • AlphaGo采用深度卷积神经网络+蒙特卡洛树搜索,展现了深度学习的强大推理能力。
  • 这一事件极大推动了全球对深度学习的关注,也带动了金融、医疗等行业的AI投资热潮。
\(X_1\) \(X_2\) \(Y\)
0 0 0
0 1 1
1 0 1
1 1 0

解决方案:加一个隐藏层 → 多层感知机(MLP)

  • 隐藏层将原始特征变换到新的空间
  • 在新空间中,原本不可分的数据变得可分

激活函数:引入非线性的关键

激活函数 公式 输出范围 特点
Sigmoid \(g(z) = \frac{1}{1+e^{-z}}\) \((0, 1)\) 二分类输出层
tanh \(g(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}\) \((-1, 1)\) 零中心化
ReLU \(g(z) = \max(0, z)\) \([0, +\infty)\) 计算简单,缓解梯度消失
Softmax \(g(z)_k = \frac{e^{z_k}}{\sum_j e^{z_j}}\) \((0, 1)\), 和为1 多分类输出层

为什么需要非线性激活?\(g(z) = z\)(恒等函数),则无论多少层都等价于单层线性模型:

\[ f(X) = \tilde{\beta}_0 + \sum_{j=1}^{p} \tilde{\beta}_j X_j \]

激活函数的数学性质比较

为什么需要激活函数?

如果没有激活函数,多层网络退化为线性模型:

\[ W_2(W_1 X) = (W_2 W_1)X = W'X \]

无论多少层,都只是线性变换

常用激活函数

名称 公式 优点 缺点
Sigmoid \(\frac{1}{1+e^{-z}}\) 输出(0,1) 梯度消失
Tanh \(\frac{e^z - e^{-z}}{e^z + e^{-z}}\) 零中心 梯度消失
ReLU \(\max(0, z)\) 计算快、不消失 Dead neuron
Leaky ReLU \(\max(0.01z, z)\) 解决dead neuron 多一个超参

实操建议:隐藏层默认用ReLU,输出层根据任务选择

深度神经网络:堆叠多个隐藏层

一个具有 \(L\) 个隐藏层的深度网络:

\[ f(X) = \beta_0 + \sum_{k=1}^{K} \beta_k A^{(L)}_k \]

其中每一层的激活递归计算:

\[ A^{(l)}_k = g\left(w^{(l)}_{k0} + \sum_{j=1}^{K_{l-1}} w^{(l)}_{kj} A^{(l-1)}_j\right), \quad l = 1, \ldots, L \]

  • 输入层:\(A^{(0)}_j = X_j\)
  • 越深的层学习越抽象的特征
  • “深度”正是”深度学习”名称的由来

卷积神经网络 (CNN)

CNN的特征层次结构:从边缘到对象

每一层“看到”的内容

  • 第一层:检测简单边缘、线条
  • 第二层:组合边缘形成纹理、角点
  • 第三层:组合纹理形成局部形状
  • 更深层:识别复杂对象(如K线形态、图表结构)
CNN特征层次结构 展示卷积神经网络各层从边缘到对象的特征提取过程 边缘 纹理 形状 对象

1D CNN在金融时间序列中的应用

原理:用一维卷积核在时间轴上滑动,提取局部时序模式。

优势

  • 参数量远小于RNN,训练速度快
  • 能自动发现短期和中期的价格波动模式

案例

  • 用1D CNN对A股日度收盘价序列做涨跌预测,效果优于传统技术指标

卫星图像+CNN:预测零售销售的创新实践

案例:美国对冲基金利用CNN分析商场停车场卫星图像,提前预测季度销售额。

  • 卷积网络自动识别停车位数量、车辆密度等特征
  • 结合历史销售数据,建立端到端的销售预测模型

启示

  • 金融数据不再局限于表格,图像、文本、传感器数据都可用深度学习建模

最新进展:CNN与自监督学习、视觉Transformer

自监督学习:无需人工标注,模型通过“拼图”、“遮挡还原”等任务自学特征。

视觉Transformer(ViT):用Transformer结构替代卷积,提升大规模图像建模能力。

金融前沿

  • ViT已被用于K线图、财报图像的自动解读
  • 自监督学习让模型能利用海量未标注金融图表数据

网络架构设计的实用原则

隐藏层数和神经元数的选择

  • 层数:通常2-5层足够处理大部分结构化数据
  • 宽度:常见模式是”漏斗形”——逐层缩小

经典架构示例(输入100维特征):

输入(100) → 隐藏1(256) → 隐藏2(128) → 隐藏3(64) → 输出(1)

过拟合控制三板斧

  1. Dropout:训练时随机”关闭”一部分神经元(通常50%)
  2. 权重衰减(L2正则化):\(\lambda \sum w^2\)
  3. 早停(Early Stopping):验证集误差开始上升时停止训练

类比:Dropout就像考试时随机让一半同学缺席——剩下的人必须都学会,不能只依赖”学霸”

CNN:专为图像设计的神经网络

卷积神经网络的核心思想:

  • 局部连接:每个神经元只连接输入的一小部分区域
  • 权重共享:同一个卷积核在整个图像上滑动扫描
  • 平移不变性:无论特征在图像哪个位置,都能被检测到

典型 CNN 由以下几种层组成:

  1. 卷积层 (Conv):使用卷积核提取局部特征(边缘、纹理等)
  2. 池化层 (Pool):降低特征维度,引入形变容忍度
  3. 全连接层 (FC):在最后进行分类或回归

金融应用:K线图模式识别、财务报表图表分析

CNN的核心创新:局部连接与权值共享

全连接网络处理图像的问题

  • 一张 \(224 \times 224 \times 3\) 的彩色图片有 150,528 个像素
  • 第一个全连接层如果有1000个神经元 → 1.5亿个参数!
  • 参数太多 → 过拟合、计算量爆炸

CNN的两个核心设计

  1. 局部感受野:每个神经元只看图像的一小块区域(如 \(3 \times 3\)
  2. 权值共享:同一个”滤波器”在整个图像上滑动扫描

效果:参数量从亿级降到千级

层类型 作用 类比
卷积层 提取局部特征 用放大镜逐区域观察
池化层 降低维度,增加不变性 总结大意,忽略细节
全连接层 综合判断 汇总所有线索做决策

卷积操作与池化操作

卷积操作:使用 \(H \times W\) 的滤波器 \(K\) 对输入 \(I\) 进行特征提取

\[ (I * K)_{i,j} = \sum_{m=0}^{H-1} \sum_{n=0}^{W-1} I_{i+m, j+n} \cdot K_{m,n} \]

最大池化:选择局部区域内的最大值,降低维度

\[ \text{MaxPool}(I)_{i,j} = \max_{(m,n) \in R_{i,j}} I_{m,n} \]

卷积层作用

  • 自动提取局部特征
  • 边缘 → 纹理 → 形状
  • 参数量远少于全连接

池化层作用

  • 降低特征图维度
  • 减少计算量
  • 增强平移不变性

实战:CNN 手写数字识别 (MNIST)

MNIST 数据集:60,000 个训练样本 + 10,000 个测试样本,每张 \(28 \times 28\) 灰度图像。

Code
import numpy as np  # 导入numpy用于数值计算
import matplotlib.pyplot as plt  # 导入matplotlib用于数据可视化
from tensorflow import keras  # 导入keras深度学习框架
from tensorflow.keras import layers, models  # 导入神经网络层和模型构建工具
plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei', 'Arial Unicode MS']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

mnist_dataset = keras.datasets.mnist  # 获取MNIST数据集对象
(train_images, train_labels), (test_images, test_labels) = mnist_dataset.load_data()  # 解包训练集和测试集

# 预处理:reshape为(样本数, 28, 28, 1)并归一化至[0,1]
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255  # 训练集预处理
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255  # 测试集预处理
Figure 1

构建并训练 CNN 模型

# 构建CNN:两组卷积+池化,最后全连接输出
cnn_model = models.Sequential([  # 创建顺序模型
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 第一卷积层:32个3×3滤波器
    layers.MaxPooling2D((2, 2)),  # 第一池化层:2×2最大池化
    layers.Conv2D(64, (3, 3), activation='relu'),  # 第二卷积层:64个3×3滤波器
    layers.MaxPooling2D((2, 2)),  # 第二池化层:2×2最大池化
    layers.Conv2D(64, (3, 3), activation='relu'),  # 第三卷积层:64个3×3滤波器
    layers.Flatten(),  # 展平层:将多维特征图转为一维向量
    layers.Dense(64, activation='relu'),  # 全连接层:64个神经元
    layers.Dense(10, activation='softmax')  # 输出层:10个类别的softmax概率
])  # 模型构建完成

cnn_model.compile(optimizer='adam',  # Adam自适应学习率优化器
                  loss='sparse_categorical_crossentropy',  # 稀疏分类交叉熵损失
                  metrics=['accuracy'])  # 监控准确率指标

# 训练模型(为节省时间仅训练3个epoch;生产环境建议10-20个epoch)
cnn_history = cnn_model.fit(train_images, train_labels, epochs=3,  # 训练3轮
                            batch_size=64, validation_split=0.2, verbose=0)  # 批大小64,20%验证集

CNN 模型评估:MNIST 测试准确率

Code
test_loss, test_accuracy = cnn_model.evaluate(test_images, test_labels, verbose=0)  # 在测试集评估模型
print(f'MNIST 测试集准确率: {test_accuracy:.4f}')  # 打印测试集准确率

plt.figure(figsize=(12, 4))  # 创建宽幅画布

plt.subplot(1, 2, 1)  # 左图:准确率曲线
plt.plot(cnn_history.history['accuracy'], label='训练集准确率', linewidth=2)  # 训练准确率
plt.plot(cnn_history.history['val_accuracy'], label='验证集准确率', linewidth=2)  # 验证准确率
plt.xlabel('Epoch', fontsize=12)  # x轴标签
plt.ylabel('准确率', fontsize=12)  # y轴标签
plt.title('模型准确率', fontsize=14)  # 子图标题
plt.legend(fontsize=10)  # 添加图例
plt.grid(True, alpha=0.3)  # 半透明网格

plt.subplot(1, 2, 2)  # 右图:损失曲线
plt.plot(cnn_history.history['loss'], label='训练集损失', linewidth=2)  # 训练损失
plt.plot(cnn_history.history['val_loss'], label='验证集损失', linewidth=2)  # 验证损失
plt.xlabel('Epoch', fontsize=12)  # x轴标签
plt.ylabel('损失', fontsize=12)  # y轴标签
plt.title('模型损失', fontsize=14)  # 子图标题
plt.legend(fontsize=10)  # 添加图例
plt.grid(True, alpha=0.3)  # 半透明网格

plt.tight_layout()  # 自动调整间距
plt.show()  # 显示图形
MNIST 测试集准确率: 0.9871
Figure 2: CNN 在 MNIST 上的训练过程:准确率和损失变化曲线

循环神经网络 (RNN)

RNN/GRU/LSTM在金融时序中的典型应用

案例1:高频交易信号建模

  • 用GRU对毫秒级盘口数据建模,捕捉微观流动性变化
  • LSTM用于分钟级波动率预测,提升风险管理精度

案例2:年报文本与股价联动分析

  • LSTM对A股上市公司年报文本做情感分析,预测未来股价走势

案例3:多资产相关性建模

  • RNN建模多只股票的价格序列,捕捉行业联动效应

注意力机制vs循环网络:谁更适合金融文本?

RNN/LSTM:适合短文本、结构化序列

Transformer/自注意力

  • 处理长文本、异构数据能力更强
  • 支持并行计算,训练效率高

案例

  • A股公告、新闻、社交媒体情感分析,Transformer效果优于LSTM

趣味历史:深度学习“冷冬”与复兴

AI寒冬

  • 1969-1986年,神经网络因理论和算力瓶颈陷入低谷
  • 1986年反向传播算法复兴神经网络
  • 2012年AlexNet引爆深度学习新浪潮

启示

  • 技术进步离不开理论、算力和数据的共同推动

最新进展:神经ODE与金融动态建模

神经常微分方程(Neural ODE)

  • 用连续时间模型描述金融市场动态
  • 能拟合高频数据的连续变化

金融应用

  • 高频交易、利率曲线建模、风险管理等

RNN:给网络装上”记忆”

当数据变成时间序列(股价、文本、语音),需要网络具备记忆能力。

RNN 隐藏层递归公式

\[ A_{\ell k} = g\left(w_{k0} + \sum_{j=1}^{p} w_{kj} X_{\ell j} + \sum_{s=1}^{K} u_{ks} A_{\ell-1, s}\right) \]

  • \(X_{\ell j}\):时间步 \(\ell\) 的输入特征
  • \(A_{\ell-1, s}\)前一个时间步的隐藏状态(“记忆”)
  • \(u_{ks}\):隐藏层到隐藏层的递归权重

输出\(O_\ell = \beta_0 + \sum_{k=1}^{K} \beta_k A_{\ell k}\)

为什么金融时序需要RNN?

传统方法处理时序数据的局限

  • 全连接网络:输入必须固定长度,忽略时间顺序
  • CNN:虽然能用1D卷积处理时序,但感受野有限
  • ARIMA:线性假设,难以捕捉复杂的非线性动态

RNN的核心优势

  • 可变长度输入:处理任意长度的序列
  • 参数共享:不同时间步用相同的权重矩阵
  • 记忆机制:隐藏状态 \(h_t\) 传递历史信息

RNN的前向传播

\[ h_t = \sigma(W_{hh} h_{t-1} + W_{xh} x_t + b_h) \] \[ \hat{y}_t = W_{hy} h_t + b_y \]

  • \(h_t\):时刻 \(t\)隐藏状态(“记忆”)
  • \(x_t\):时刻 \(t\)输入
  • \(W_{hh}\):隐藏到隐藏的权重(记忆的传递方式

RNN 的结构:紧凑与展开形式

循环神经网络结构示意图 左侧展示RNN的紧凑循环表示,右侧展示按时间步展开的完整结构 紧凑表示 X_t RNN A_{t-1} O_t 展开形式 X_1 A_1 O_1 X_2 A_2 O_2 X_3 A_3 O_3 X_4 A_4 Y 输入 隐藏层 输出 记忆传递

LSTM:解决长期依赖问题

标准 RNN 存在梯度消失问题 → 难以学习长期依赖

LSTM 引入三个门控机制

作用 关键公式
遗忘门 \(f_t\) 控制丢弃多少旧的细胞状态 \(f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)\)
输入门 \(i_t\) 控制写入多少新信息 \(i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)\)
输出门 \(o_t\) 控制输出多少细胞状态 \(o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)\)

核心思想:细胞状态 \(C_t\) 可在多个时间步上保持信息不变,门控机制实现选择性记忆与遗忘。

深度学习的训练

正则化技巧与金融建模实践

常用正则化方法

  • Dropout:防止过拟合,提升泛化能力
  • L1/L2正则化:控制模型复杂度
  • 数据增强:扩充训练样本,提升鲁棒性
  • 早停(Early Stopping):防止训练过度

金融案例

  • 在A股因子模型、信贷风控等任务中,正则化是提升模型稳定性的关键

可解释性AI(XAI)在金融监管中的应用

背景:金融行业对模型可解释性有严格要求

主流方法

  • SHAP、LIME等工具可解释深度模型的决策依据
  • 可视化特征贡献,辅助合规审查

案例

  • 银行信贷审批、保险定价等场景,XAI帮助解释模型输出,满足监管要求

趣味讨论:量化投资年薪百万?

现实与幻想

  • 顶级量化基金确实高薪,但竞争极其激烈
  • 深度学习工程师需兼具金融、编程、数学三重能力
  • 绝大多数岗位更看重团队协作与持续学习能力

建议

  • 关注AI+金融交叉领域,提升综合素养

最新优化算法与训练趋势

趋势1:自适应优化器

  • AdamW、Ranger等新一代优化器提升收敛速度和泛化能力

趋势2:大规模分布式训练

  • 金融大模型训练需用多GPU/TPU并行,提升效率

趋势3:混合精度训练

  • 用float16/float32混合,节省显存、加速训练

LSTM的门控机制详解

LSTM = Long Short-Term Memory

普通RNN的梯度消失问题:经过多个时间步后,早期信息的梯度指数衰减

LSTM通过三个门解决这个问题:

公式 功能 金融类比
遗忘门 \(f_t\) \(\sigma(W_f[h_{t-1}, x_t])\) 决定丢弃多少旧信息 去年的业绩还重要吗?
输入门 \(i_t\) \(\sigma(W_i[h_{t-1}, x_t])\) 决定存储多少新信息 今天的财报数据有多重要?
输出门 \(o_t\) \(\sigma(W_o[h_{t-1}, x_t])\) 决定输出多少信息 哪些信息用于决策?

细胞状态 \(C_t\)——LSTM的”高速公路”:

\[ C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t \]

  • 信息沿 \(C_t\) 几乎无损传递 → 解决梯度消失!

反向传播:深度学习训练的数学核心

反向传播本质是链式法则在计算图上的高效实现。

核心步骤

  1. 输出层误差\[ \delta^{(L)} = \nabla_{A^{(L)}} J \odot g'(Z^{(L)}) \]

  2. 误差逆向传播(对任意隐藏层 \(l\)): \[ \delta^{(l)} = \left((W^{(l+1)})^T \delta^{(l+1)}\right) \odot g'(Z^{(l)}) \]

  3. 计算权重梯度\[ \frac{\partial J}{\partial W^{(l)}} = \delta^{(l)} (A^{(l-1)})^T \]

关键问题:连续乘以权重矩阵 → 梯度消失或爆炸

梯度下降的变体:从SGD到Adam

为什么需要不同的优化器?

基本梯度下降:\(\theta \leftarrow \theta - \eta \nabla L(\theta)\)

优化器 核心思想 优点
SGD 随机选mini-batch计算梯度 简单、泛化好
Momentum 加入”惯性”,平滑震荡 加速收敛
RMSprop 自适应调节每个参数的学习率 处理稀疏梯度
Adam 结合Momentum + RMSprop 默认首选

关键超参数

  • 学习率 \(\eta\):最重要的超参数!
    • 太大 → 震荡不收敛
    • 太小 → 收敛太慢
    • 常见策略:先用 \(10^{-3}\),训练中逐步衰减

解决训练难题:正则化与优化

正则化技术 — 防止过拟合

  • Dropout:随机丢弃神经元输出
  • L1/L2 正则化:权重惩罚项
  • 数据增强:随机变换训练数据
  • 早停:验证集性能不再提升时停止

优化算法 — 加速收敛

  • SGD:随机梯度下降
  • Momentum:动量法(加速收敛)
  • Adam:自适应矩估计(最常用)
  • RMSprop:均方根传播

梯度问题的解决方案

  • ReLU 激活函数(缓解梯度消失)
  • 批量归一化(Batch Normalization)
  • 残差连接(ResNet)
  • 梯度裁剪(RNN 常用)

文档分类与自然语言处理

BloombergGPT与金融大模型革命

BloombergGPT:专为金融领域训练的大型语言模型

  • 支持自动化报告生成、风险预警、市场解读等任务
  • 能处理金融表格、公告、新闻等多模态数据

启示

  • 金融NLP正从小模型走向大模型时代,行业专属大模型将成为主流

A股年报情感分析实战

任务:用BERT等深度NLP模型自动解读上市公司年报文本,预测未来股价走势

  • 先用分词、嵌入层将文本转为向量
  • 用Transformer提取情感特征,结合历史股价做回归预测

案例

  • 某券商用年报情感分数预测次年超额收益,显著优于传统因子

社交媒体舆情与股价预测

任务:用深度学习分析微博、微信等社交媒体情绪,预测短期股价波动

  • 用LSTM/Transformer建模文本序列,提取情感趋势
  • 结合成交量、资金流等特征提升预测精度

案例

  • 某基金用微博情绪指数做择时,提升了短线收益

趣味案例:深度假新闻与金融风险

深度伪造(DeepFake):用GAN等生成模型伪造新闻、公告,带来金融欺诈新风险

  • 金融监管机构正用深度学习检测假新闻、假公告,防范市场操纵

启示

  • 技术进步带来新风险,金融AI需与监管协同发展

最新进展:多模态学习与金融NLP

多模态学习:同时处理文本、图像、表格等多种数据

  • 金融大模型已能自动解读公告、图表、新闻等异构信息
  • 未来投资决策将依赖多模态AI分析

案例

  • FinGPT、蚂蚁大模型等已支持多模态输入,提升投资洞察力

词嵌入:让机器理解语义

词袋模型 (Bag of Words):高维稀疏,无语义信息

词嵌入 (Word Embeddings):低维稠密,语义相似的词距离更近

  • 每个词被映射为一个 \(d\) 维实数向量
  • “好看” 和 “精彩” 在嵌入空间中距离很近
  • 常见预训练词嵌入:Word2Vec、GloVe

在 Keras 中Embedding 层将词索引映射为密集向量

# 词嵌入层示例
layers.Embedding(
    input_dim=10000,   # 词汇表大小
    output_dim=32,     # 嵌入维度
    input_length=200   # 序列长度
)

情感分析:IMDb 电影评论分类

Code
import numpy as np  # 导入numpy用于数值计算
import matplotlib.pyplot as plt  # 导入matplotlib用于数据可视化
from tensorflow import keras  # 导入keras深度学习框架
from tensorflow.keras import layers, models  # 导入层和模型构建工具
plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei', 'Arial Unicode MS']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

VOCAB_SIZE = 10000  # 词汇表大小:保留频率最高的10000个词
MAX_SEQUENCE_LENGTH = 200  # 每条评论截取或填充至200个词
EMBEDDING_DIM = 32  # 词嵌入维度

# 创建模拟数据(演示用;实际应用中应使用真实IMDb数据)
num_train_samples = 2000  # 训练样本数
num_test_samples = 500  # 测试样本数
train_sequences = np.random.randint(1, VOCAB_SIZE, size=(num_train_samples, MAX_SEQUENCE_LENGTH))  # 模拟训练集词索引
train_labels = np.random.randint(0, 2, size=num_train_samples)  # 模拟训练标签(0=负面,1=正面)
test_sequences = np.random.randint(1, VOCAB_SIZE, size=(num_test_samples, MAX_SEQUENCE_LENGTH))  # 模拟测试集词索引
test_labels = np.random.randint(0, 2, size=num_test_samples)  # 模拟测试标签
Figure 3

情感分析模型训练与评估

# 构建情感分类模型
sentiment_model = models.Sequential([  # 创建顺序模型
    layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM, input_length=MAX_SEQUENCE_LENGTH),  # 词嵌入层
    layers.Flatten(),  # 展平嵌入矩阵为一维向量
    layers.Dense(16, activation='relu'),  # 隐藏层:16个神经元
    layers.Dense(1, activation='sigmoid')  # 输出层:Sigmoid输出正面概率
])  # 模型构建完成

sentiment_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])  # 编译模型

sentiment_history = sentiment_model.fit(  # 训练模型
    train_sequences, train_labels, epochs=5,  # 训练5轮
    batch_size=128, validation_split=0.2, verbose=0)  # 批大小128,20%验证集

sentiment_test_loss, sentiment_test_acc = sentiment_model.evaluate(test_sequences, test_labels, verbose=0)  # 评估
print(f'测试集准确率: {sentiment_test_acc:.4f}')  # 打印准确率
测试集准确率: 0.5100

结果解读:模拟数据上准确率接近 50%(随机水平),说明模型未学到有意义的特征——这正是预期结果。实际应用中使用真实语料 + 预训练词向量可显著提升性能。

金融时间序列预测

深度学习的前沿进展

大型语言模型(LLM)与金融智能化

GPT系列演化:从GPT-1到GPT-4,模型规模和能力指数级提升

  • Emergent abilities:大模型自动学会推理、归纳、复杂对话
  • 金融应用:自动化报告、智能投研、风险预警

案例

  • FinGPT、BloombergGPT等专用金融大模型已落地券商、银行

扩散模型:合成金融数据与风险仿真

原理:通过逐步“加噪声-去噪声”生成高质量数据

  • 可用于合成稀缺的极端行情、压力测试数据

案例

  • 某银行用扩散模型生成极端市场情景,提升风险管理能力

图神经网络(GNN)与公司关系建模

原理:用图结构建模公司、供应链、股东等复杂关系

  • 能捕捉行业联动、传染效应

案例

  • 某券商用GNN分析A股产业链,发现关键节点公司

物理知识神经网络(PINN)与金融建模

原理:将金融领域的已知物理/经济规律嵌入神经网络

  • 结合数据驱动与理论约束,提升模型可解释性和泛化能力

案例

  • PINN用于利率曲线、衍生品定价等任务,兼顾理论与数据

深度学习在期权定价中的应用

传统方法:Black-Scholes等解析模型假设过于理想

深度神经网络

  • 用历史价格、波动率等特征训练神经网络,直接拟合期权价格
  • 能捕捉市场微观结构、隐含波动率等复杂因素

案例

  • 某量化私募用深度网络替代Black-Scholes,提升了期权定价精度

因子挖掘与深度学习:超越Fama-French

传统因子模型:线性假设,难以捕捉非线性关系

深度因子模型

  • 用多层神经网络自动提取非线性因子
  • 能发现传统模型遗漏的复杂驱动因素

案例

  • 某券商用深度因子模型提升了A股选股策略的超额收益

强化学习在金融中的创新应用

原理:智能体通过与市场环境交互,学习最优投资策略

  • 适合高频交易、资产配置、市场做市等场景

案例

  • 某对冲基金用深度强化学习做高频交易,自动调整下单策略

联邦学习:隐私保护下的金融AI协作

原理:多家银行/机构在不共享原始数据的前提下协同训练AI模型

  • 保护用户隐私,提升模型泛化能力

案例

  • 多家银行联合用联邦学习训练信贷风控模型,提升了小样本场景下的表现

LSTM 预测海康威视股价

使用双层 LSTM 基于过去 60 个交易日预测下一天收盘价。

关键步骤

  1. 加载海康威视(002415.XSHE)后复权股价数据
  2. MinMaxScaler 归一化到 [0, 1]
  3. 滑动窗口法构造序列样本(窗口 = 60 天)
  4. 按时间顺序 80/20 分割(不可随机打乱!)
  5. 双层 LSTM + Dropout 防过拟合
import numpy as np  # 导入numpy用于数值计算
import pandas as pd  # 导入pandas用于数据处理
import os  # 导入os用于跨平台路径处理
from sklearn.preprocessing import MinMaxScaler  # 导入归一化工具
from tensorflow import keras  # 导入keras框架
from tensorflow.keras import layers, models  # 导入层和模型工具

DATA_DIR = 'C:/qiufei/data' if os.name == 'nt' else '/home/ubuntu/r2_data_mount/qiufei/data'  # 跨平台数据路径
stock_price_path = os.path.join(DATA_DIR, 'stock/stock_price_post_adjusted.h5')  # 后复权股价文件路径
stock_price_history = pd.read_hdf(stock_price_path).reset_index()  # 读取股价数据
haikang_data = stock_price_history[stock_price_history['order_book_id'] == '002415.XSHE'].copy()  # 筛选海康威视
haikang_data = haikang_data.sort_values('date')  # 按日期排序
closing_prices = haikang_data['close'].values.reshape(-1, 1)  # 提取收盘价为二维数组

数据预处理:归一化与滑动窗口

price_scaler = MinMaxScaler(feature_range=(0, 1))  # 创建归一化器(范围0-1)
scaled_prices = price_scaler.fit_transform(closing_prices)  # 对收盘价归一化

def create_sliding_window_sequences(data, window_length):  # 定义滑动窗口函数
    """将时间序列转换为(特征序列, 目标值)对"""
    features_list, targets_list = [], []  # 初始化特征和目标列表
    for i in range(len(data) - window_length):  # 滑动窗口遍历
        features_list.append(data[i:i + window_length])  # 窗口内数据作为特征
        targets_list.append(data[i + window_length])  # 窗口后一天作为目标
    return np.array(features_list), np.array(targets_list)  # 转为numpy数组

LOOKBACK_WINDOW = 60  # 使用过去60个交易日预测下一天
sequence_features, sequence_targets = create_sliding_window_sequences(scaled_prices, LOOKBACK_WINDOW)  # 构造序列

# 按时间顺序80/20分割(时间序列不可随机打乱)
split_point = int(len(sequence_features) * 0.8)  # 计算分割点
train_x, test_x = sequence_features[:split_point], sequence_features[split_point:]  # 特征分割
train_y, test_y = sequence_targets[:split_point], sequence_targets[split_point:]  # 目标分割

构建双层 LSTM 模型并训练

# 构建双层LSTM模型
lstm_model = models.Sequential([  # 创建顺序模型
    layers.LSTM(50, return_sequences=True, input_shape=(LOOKBACK_WINDOW, 1)),  # 第一层LSTM:50单元,返回序列
    layers.Dropout(0.2),  # 20%随机丢弃防止过拟合
    layers.LSTM(50, return_sequences=False),  # 第二层LSTM:50单元,只返回最后时间步
    layers.Dropout(0.2),  # 再次20%随机丢弃
    layers.Dense(25),  # 全连接层:25个神经元
    layers.Dense(1)  # 输出层:预测1个值
])  # 模型构建完成

lstm_model.compile(optimizer='adam', loss='mean_squared_error')  # Adam优化器+MSE损失

# 训练模型(为节省时间训练20个epoch;生产环境建议50-100个epoch)
lstm_history = lstm_model.fit(train_x, train_y, epochs=20,  # 训练20轮
                              batch_size=64, validation_split=0.1, verbose=0)  # 批大小64,10%验证集

LSTM 股价预测结果

Code
import matplotlib.pyplot as plt  # 导入绘图库
plt.rcParams['font.sans-serif'] = ['Source Han Serif SC', 'SimHei', 'Arial Unicode MS']  # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

predicted_prices = lstm_model.predict(test_x)  # 在测试集上预测
actual_prices = price_scaler.inverse_transform(test_y)  # 真实价格反归一化
predicted_prices_original = price_scaler.inverse_transform(predicted_prices)  # 预测价格反归一化

# 展示最近365天的预测对比
display_days = min(365, len(actual_prices))  # 展示天数
plt.figure(figsize=(14, 5))  # 创建画布
plt.plot(actual_prices[-display_days:], label='真实股价', linewidth=2)  # 真实股价曲线
plt.plot(predicted_prices_original[-display_days:], label='预测股价', linewidth=2, linestyle='--')  # 预测曲线
plt.title('海康威视股价预测 (LSTM)', fontsize=14)  # 标题
plt.xlabel('时间 (天)', fontsize=12)  # x轴
plt.ylabel('收盘价 (元)', fontsize=12)  # y轴
plt.legend(fontsize=11)  # 图例
plt.grid(True, alpha=0.3)  # 网格
plt.tight_layout()  # 调整间距
plt.show()  # 显示
 1/24 ━━━━━━━━━━━━━━━━━━━━ 3s 149ms/step

12/24 ━━━━━━━━━━━━━━━━━━━━ 0s 5ms/step  

23/24 ━━━━━━━━━━━━━━━━━━━ 0s 5ms/step

24/24 ━━━━━━━━━━━━━━━━━━━━ 0s 11ms/step

24/24 ━━━━━━━━━━━━━━━━━━━━ 0s 11ms/step
Figure 4: LSTM 模型对海康威视股价预测结果。实线为真实价格,虚线为模型预测。

LSTM 预测的局限性

预测滞后效应:预测曲线往往”追随”真实价格,存在时间滞后

对突变的捕捉有限:股价剧烈波动时,模型反应不够灵敏

不代表投资建议:股价受宏观经济、政策、市场情绪等多重因素影响

改进方向

  • 融合多源信息(基本面、技术指标、新闻情绪)
  • 使用注意力机制(Transformer)替代 LSTM
  • 增加特征维度(成交量、换手率、资金流向)
  • 结合时域与频域分析

本章小结

深度学习的未来展望与挑战

机遇

  • 非结构化数据(文本、图像、音频)将成为金融AI主战场
  • 多模态、跨领域大模型将推动智能投研、自动化风控
  • AI+金融将催生新职业、新业态

挑战

  • 数据隐私与合规压力加大
  • 模型可解释性、稳健性要求提升
  • 超参数调优、算力消耗等工程难题

趣味总结:深度学习的“冷知识”

  • 神经网络的“激活函数”最早灵感来自生物神经元的“阈值反应”
  • AlphaGo的核心算法其实是深度卷积网络+蒙特卡洛树搜索
  • 量化投资年薪百万,但真正的“高薪”岗位极度稀缺
  • 深度学习调参像炒菜,经验和直觉同样重要

深度学习知识图谱

主题 核心内容 关键应用
神经网络基础 激活函数、多层网络、反向传播 所有深度学习任务的基石
CNN 卷积、池化、权重共享 图像分类、K线图识别
RNN / LSTM 递归结构、门控机制 时间序列、文本处理
训练技巧 Dropout、BatchNorm、Adam 防过拟合、加速收敛
NLP 词嵌入、情感分析 财经新闻分析
金融应用 LSTM 股价预测 量化投资、风险管理

何时使用深度学习:大量数据 + 复杂模式 + 充足算力 + 传统方法瓶颈

深度学习的挑战:数据需求大、计算资源多、可解释性差、超参数调优复杂

深度学习在金融中的前景与局限

前景

  • 非结构化数据:年报文本分析、卫星图像(停车场车流→零售预测)
  • 高频交易:微秒级别的模式识别
  • 生成模型:合成金融数据用于压力测试

局限

  • 可解释性:监管要求模型可解释(如EU AI Act)
  • 小样本:金融数据量远不如图像/文本
  • 非平稳性:金融数据的分布随时间变化
  • 过拟合风险:参数远多于样本

现实态度

对于结构化金融数据(财务报表、行情数据),树模型(XGBoost)仍然是更好的选择。深度学习在处理文本、图像等非结构化数据时优势明显。