GaiaEx AcademyGaiaEx Academy
PyTorch 基础:构建与训练模型
开发者AI 与机器学习13 min read

PyTorch 基础:构建与训练模型

最流行的深度学习框架——动手入门

分享文章

即时执行与研究速度

PyTorch 默认采用即时执行(eager execution):张量在 Python 运算之间流动,你可以像处理普通数据一样打印、切片和调试。这在金融领域很重要,因为这份工作有一半是在重塑杂乱的特征面板,并验证你喂给模型的张量里没有偷偷混入未来信息(look-ahead)。

把它和旧的「先构建静态计算图,再运行一个 session」工作流对比一下。研究者仍会导出模型用于部署,但日常工作受益于即时性:改一层、重跑一个单元格、检查激活值。

动态图:每一次前向传播都可以不同 x f g loss .backward 分支和 Python 控制流可以改变每个 batch 实际运行哪些运算——计算图跟随代码而变。 金融小贴士:如果你的序列长度因资产而异,请对填充部分做掩码,而不是悄悄 把缺失的天数平均进损失里。
前向传播时各个运算连成一张计算图;autograd 在反向传播时将其展开。

张量、设备与 Autograd

张量(tensor)是一个多维数组;requires_grad=True 标记出你想求导的叶子节点。Autograd 会记录运算以构建一张反向计算图,从而让 loss.backward() 把梯度填充到参数的 .grad 上。

import torch
x = torch.randn(32, 10, requires_grad=True)
w = torch.randn(10, 1, requires_grad=True)
y = (x @ w).mean()
y.backward()
print(w.grad.shape)

在可用时把张量放到 cudamps 上;保持设备放置一致,这样你就不会在每一步中不小心把小张量来回搬动。

把 nn.Module 当作组合来用

继承 nn.Module,在 __init__ 中定义各层,并在 forward 中把它们连接起来。注册机制确保参数会出现在 model.parameters() 中,供优化器使用。

import torch.nn as nn

class MLP(nn.Module):
    def __init__(self, n):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(n, 64), nn.ReLU(), nn.Linear(64, 1)
        )
    def forward(self, x):
        return self.net(x)

对于序列模型,nn.LSTMnn.TransformerEncoder 层很常见;对于表格型 alpha,MLP 和梯度提升(gradient boosting)依然各有胜负——靠验证纪律来选,而不是靠跟风。

四行循环(外加一些卫生习惯)

训练之所以重复,是刻意为之:前向、损失、清零梯度、反向、更新。那些额外的细节同样重要:model.train()model.eval() 会切换 dropout 和 batch norm 的行为;torch.no_grad() 包裹验证过程以节省内存。

一个训练步骤(监督学习) forward loss zero_grad backward → step 优化器用存好的梯度更新权重;如果你的任务会让损失突然飙升,就裁剪梯度范数。 对时间序列做前向滚动验证(walk-forward)——绝不要把未来打乱混入过去。 GaiaEx / Hyperliquid 特征:标签泄漏是一个 bug,不是值得炫耀的本事。
同一个循环对每个 batch 重复进行,直到验证曲线不再改善为止。

Dataset、DataLoader 与信息泄漏

继承 Dataset 来实现特征和标签的物化;再用 DataLoader 包装以进行分批。对于按时间顺序排列的数据,验证集通常保持 shuffle=False;如果你切的是连续窗口,训练集也常常如此——否则你会把信息跨时间抹开。

如果你用来自 GaiaEx 或类似数据源的 tick 数据来训练,请把所有 K 线对齐到同一个时钟,明确处理缺失的成交记录,并把你的特征代码和模型检查点(checkpoint)一起做版本管理。

TorchScript 与服务边界

为了低延迟推理,团队往往会对模型做 trace 或 script,然后在 C++ 运行时或一个 sidecar 服务里运行它。把训练环境(库的版本)固定为你导出时所用的那一套。

PyTorch Lightning 之类的框架能减少多 GPU 训练和日志记录的样板代码;但它们替代不了精心的特征设计。交易中的优势通常来自数据卫生和对市场状态(regime)的感知,而不是来自一个稍微花哨一点的优化器。