
พื้นฐาน PyTorch: การสร้างและฝึกฝนโมเดล
เฟรมเวิร์ก deep learning ที่ได้รับความนิยมสูงสุด — แนะนำแบบลงมือทำ
Eager Execution กับความเร็วในการวิจัย
PyTorch ใช้ eager execution เป็นค่าเริ่มต้น: tensor ไหลผ่านคำสั่ง Python และคุณสามารถ print, slice และดีบักได้เหมือนข้อมูลทั่วไป เรื่องนี้สำคัญมากในงานการเงิน เพราะครึ่งหนึ่งของงานคือการจัดรูปแบบ feature panel ที่ยุ่งเหยิง และตรวจสอบว่าไม่มี look-ahead แอบเล็ดลอดเข้าไปใน tensor ที่คุณป้อนให้โมเดล
เทียบกับ workflow แบบเก่าที่ "สร้างกราฟแบบ static ก่อน แล้วค่อยรัน session" นักวิจัยยังคงต้อง export โมเดลเพื่อนำไป deploy แต่งานประจำวันได้ประโยชน์จากความฉับไว: แก้ layer หนึ่งชั้น รันเซลล์ใหม่ ตรวจสอบ activation ได้ทันที
Tensor, Device และ Autograd
Tensor คืออาร์เรย์หลายมิติ; requires_grad=True เป็นการระบุ leaf ที่คุณต้องการคำนวณอนุพันธ์ให้ Autograd จะบันทึกการประมวลผลเพื่อสร้างกราฟย้อนกลับ (backward graph) ทำให้ 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)
วาง tensor ไว้บน cuda หรือ mps เมื่อมีให้ใช้; รักษาการวาง device ให้สม่ำเสมอ เพื่อไม่ให้เผลอย้าย tensor ขนาดเล็กไปมาในทุกขั้นตอนโดยไม่ตั้งใจ
nn.Module ในฐานะการประกอบส่วนย่อย
สร้างคลาสย่อยจาก nn.Module กำหนด layer ต่าง ๆ ไว้ใน __init__ แล้วเชื่อมต่อกันใน forward การลงทะเบียนแบบนี้ทำให้พารามิเตอร์ปรากฏใน model.parameters() สำหรับตัว optimizer
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)
สำหรับโมเดลลำดับข้อมูล (sequence model) layer อย่าง nn.LSTM และ nn.TransformerEncoder เป็นที่นิยม; ส่วนงาน alpha แบบข้อมูลตาราง MLP และ gradient boosting ยังคงแข่งกันอยู่ — เลือกใช้จากความเข้มงวดในการ validate ไม่ใช่จากเทรนด์
ลูปสี่บรรทัด (บวกสุขลักษณะที่ดี)
การ training ทำซ้ำโดยตั้งใจ: forward, loss, zero grad, backward, step ส่วนเสริมก็สำคัญ: model.train() กับ model.eval() ใช้สลับ dropout และ batch norm; torch.no_grad() ครอบการ validation เพื่อประหยัดหน่วยความจำ
Dataset, DataLoader และการรั่วไหลของข้อมูล
สร้างคลาสย่อยจาก Dataset เพื่อสร้าง feature และ label ให้เป็นข้อมูลจริง แล้วห่อด้วย DataLoader เพื่อทำ batching สำหรับข้อมูลตามลำดับเวลา มักคง shuffle=False ไว้ในชุด validation และบ่อยครั้งในชุด training ด้วยหากคุณตัดข้อมูลเป็นหน้าต่างต่อเนื่อง (contiguous window) — ไม่เช่นนั้นข้อมูลจะเกลี่ยข้ามช่วงเวลาโดยไม่ตั้งใจ
ถ้าคุณ train บนข้อมูล tick จาก GaiaEx หรือฟีดที่คล้ายกัน ให้จัดแท่งข้อมูลให้อยู่บนนาฬิกาเดียวกัน จัดการข้อมูลที่ขาดหายอย่างชัดเจน และเก็บเวอร์ชันของโค้ด feature ควบคู่กับ checkpoint ของโมเดล
TorchScript และขอบเขตการให้บริการ
สำหรับการ inference ที่ต้องการ latency ต่ำ ทีมงานมักจะ trace หรือ script โมเดล แล้วรันมันในรันไทม์ C++ หรือบริการ sidecar รักษาสภาพแวดล้อมของการ training (เวอร์ชันของไลบรารี) ให้ตรงกับตอนที่คุณ export ไว้เสมอ
PyTorch Lightning และเฟรมเวิร์กที่คล้ายกันช่วยลดโค้ดซ้ำ ๆ สำหรับการ training แบบหลาย GPU และการ log; แต่มันไม่ได้แทนที่การออกแบบ feature อย่างพิถีพิถัน ความได้เปรียบในการเทรดมักมาจากสุขลักษณะของข้อมูลและการรู้จัก regime มากกว่ามาจาก optimizer ที่ดูล้ำกว่าเล็กน้อย