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)的感知,而不是來自一個稍微花哨一點的最佳化器。