هدف یادگیری
پس از مطالعهٔ این درس قادر خواهید بود:
- مکانیزم Self-Attention را در بستر دادههای مالی سریزمانی فرموله کنید.
- تفاوت معماری Transformer با LSTM و CNN را در پردازش دنبالههای قیمتی تحلیل کنید.
- مدلهای Temporal Fusion Transformer و Informer را برای پیشبینی قیمت ارز دیجیتال بهکار بگیرید.
- با محاسبهٔ عددی ماتریس توجه، نحوهٔ وزندهی Transformer به لحظات گذشتهٔ بازار را درک کنید.
چرا Transformer؟ محدودیتهای مدلهای کلاسیک
بازارهای کریپتو دنبالههایی با وابستگیهای بلندمدت تولید میکنند. قیمت بیتکوین در روز 300 ممکن است تابع رویدادی در روز 12 باشد — نه صرفاً روزهای اخیر. مدلهای LSTM با vanishing gradient در انتقال اطلاعات دور به دور ضعیف عمل میکنند. RNN ذاتاً ترتیبی است؛ موازیسازی ندارد و آموزش آن روی دادههای تیک با فرکانس بالا گرانقیمت است.
Transformer در 2017 توسط Vaswani و همکاران معرفی شد و با حذف بازگشت (recurrence)، کل دنباله را همزمان پردازش میکند. هر گام زمانی میتواند مستقیماً با هر گام دیگری «صحبت کند» — بدون محدودیت فاصله.
مکانیزم Self-Attention: ریاضیات توجه
فرض کنید دنبالهٔ قیمت بستهشدن 4 شمع داریم:
$$X = [x_1, x_2, x_3, x_4]$$
هر عنصر $x_i$ به سه بردار تبدیل میشود:
$$Q_i = x_i W^Q, \quad K_i = x_i W^K, \quad V_i = x_i W^V$$
که $W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}$ پارامترهای قابل یادگیری هستند. سپس امتیاز توجه:
$$\text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
مثال عددی ساده با $d_k = 2$:
فرض کنید:
$$Q_1 = [1.0, 0.5], \quad K_1 = [1.0, 0.5], \quad K_2 = [0.2, 0.8]$$
امتیاز خام:
$$s_{11} = \frac{1.0 \times 1.0 + 0.5 \times 0.5}{\sqrt{2}} = \frac{1.25}{1.414} \approx 0.884$$
$$s_{12} = \frac{1.0 \times 0.2 + 0.5 \times 0.8}{\sqrt{2}} = \frac{0.60}{1.414} \approx 0.424$$
پس از Softmax:
$$\alpha_{11} \approx 0.614, \quad \alpha_{12} \approx 0.386$$
یعنی گام اول بازار 61% «توجه» خود را به خود و 39% را به گام دوم معطوف میکند. همین مکانیزم بهصورت موازی برای تمام جفتها محاسبه میشود.
Multi-Head Attention
بهجای یک ماتریس توجه، $h$ ماتریس موازی آموزش میبینند:
$$\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\, W^O$$
هر head میتواند یک الگوی متفاوت بیاموزد: یک head وابستگی کوتاهمدت، دیگری ساختار هفتگی، سومی واکنش به حجم. در آزمایشهای عملی روی دادههای ساعتی BTC/USDT، مدلها با $h=8$ و $d_{model}=128$ به همگرایی پایدار رسیدهاند.
کدگذاری موقعیتی (Positional Encoding): حس زمان به ماشین
Transformer ذاتاً ترتیب را درک نمیکند. برای حل این مشکل، بردار موقعیت به هر گام زمانی اضافه میشود:
$$PE_{(t,\,2i)} = \sin\!\left(\frac{t}{10000^{2i/d_{model}}}\right)$$
$$PE_{(t,\,2i+1)} = \cos\!\left(\frac{t}{10000^{2i/d_{model}}}\right)$$
برای دادههای مالی، Learnable Positional Encoding اغلب بهتر عمل میکند چون مدل میتواند اهمیت نسبی فاصلههای زمانی مشخص (مثلاً 24 ساعت، 7 روز) را یاد بگیرد.
نکتهٔ کوانتی: در بازارهای کریپتو که 24/7 فعال هستند، چرخههای دورهای ندارند — برخلاف بازار سهام با ساعات بسته. این تفاوت ساختاری Learnable Encoding را برای کریپتو ارجح میکند.
مدلهای تخصصی برای سریزمانی مالی
Temporal Fusion Transformer (TFT)
معماری TFT که توسط Google در 2021 منتشر شد، برای پیشبینی چندگامهٔ مالی بهینه شده است. ویژگیهای کلیدی:
- Variable Selection Network: اهمیت هر ورودی (OHLCV، شاخصهای فنی، دادههای on-chain) را بهصورت خودکار وزندهی میکند.
- Gated Residual Networks: برای ورودیهای نامرتبط گیت صفر میدهد.
- Interpretable Multi-Head Attention: خروجی توجه بهصورت وزنهای تفسیرپذیر ارائه میشود.
python
مثال پیادهسازی TFT با PyTorch Forecasting
from pytorch_forecasting import TemporalFusionTransformer, TimeSeriesDataSet
tft = TemporalFusionTransformer.from_dataset(
dataset,
learning_rate=3e-3,
hidden_size=32,
attention_head_size=4,
dropout=0.1,
hidden_continuous_size=16,
output_size=7, # کوانتایلهای 10% تا 90%
loss=QuantileLoss(),
)
Informer: برای دنبالههای بسیار بلند
Transformer استاندارد پیچیدگی $O(L^2)$ دارد — برای دنبالههای طولانی مانند دادههای دقیقهای یک سال ($L \approx 525{,}000$) ناکارآمد است. مدل Informer با ProbSparse Attention این را به $O(L \log L)$ کاهش میدهد:
$$\text{ProbSparse Attention}: \quad \tilde{A}(Q,K,V) = \text{Softmax}\!\left(\frac{\bar{Q}K^T}{\sqrt{d_k}}\right)V$$
که $\bar{Q}$ فقط $u = O(\log L)$ کوئری منتخب را نگه میدارد — آنهایی که بیشترین اطلاعات توجه (KL divergence از uniform) دارند.
پیادهسازی عملی: پیشبینی قیمت BTC با Transformer
آمادهسازی داده
python
import pandas as pd
import numpy as np
import torch
فیچرهای ورودی
features = [
'close', 'volume', 'rsi_14', 'atr_14',
'funding_rate', 'open_interest', # دادههای on-chain
'btc_dominance'
]
SEQ_LEN = 168 # 7 روز × 24 ساعت
PRED_LEN = 24 # پیشبینی 24 ساعت آینده
نرمالسازی Z-score بهجای Min-Max (مقاومتر در برابر outlier)
def zscore_normalize(series):
return (series - series.mean()) / (series.std() + 1e-8)
معماری سادهٔ Encoder-Only برای طبقهبندی روند
python
import torch.nn as nn
class MarketTransformer(nn.Module):
def init(self, d_model=128, nhead=8, num_layers=3,
seq_len=168, n_features=7):
super().init()
self.input_proj = nn.Linear(n_features, d_model)
self.pos_embed = nn.Embedding(seq_len, d_model) # Learnable
encoder_layer = nn.TransformerEncoderLayer(
d_model=d_model, nhead=nhead,
dim_feedforward=512, dropout=0.1,
batch_first=True
)
self.encoder = nn.TransformerEncoder(encoder_layer, num_layers)
self.head = nn.Linear(d_model, 3) # Long / Short / Neutral
def forward(self, x):
# x: [batch, seq_len, n_features]
t = torch.arange(x.size(1), device=x.device)
x = self.input_proj(x) + self.pos_embed(t)
x = self.encoder(x)
return self.head(x[:, -1, :]) # آخرین گام زمانی
نکات تنظیم هایپرپارامتر
| پارامتر | مقدار پیشنهادی | دلیل |
|---|---|---|
d_model | 64–256 | متناسب با تعداد فیچر |
nhead | 4–8 | $d_k = d_{model}/nhead \geq 16$ |
dropout | 0.1–0.2 | بازار نویزی است |
lr | 1e-4 با Warmup | از oscillation جلوگیری میکند |
seq_len | 24–336 | بسته به تایمفریم |
Learning Rate Warmup برای Transformer حیاتی است:
$$lr_t = d_{model}^{-0.5} \cdot \min(t^{-0.5},\; t \cdot warmup\_steps^{-1.5})$$
در 4000 گام اول آموزش نرخ یادگیری افزایش مییابد سپس کاهش مییابد.
چالشها، ریسکها و محدودیتها
1. Non-stationarity بازار: توزیع آماری قیمت در طول زمان تغییر میکند. راهحل: پنجرهٔ rolling normalization یا Reversible Instance Normalization (RevIN).
2. Overfitting به رژیمهای گذشته: مدل ممکن است الگوی بازار گاوی 2021 را بیاموزد اما در بازار خرسی 2022 کاملاً ناکارآمد شود. Walk-Forward Validation ضروری است — هرگز از K-Fold تصادفی استفاده نکنید.
3. هزینهٔ محاسباتی: آموزش Transformer روی دادههای دقیقهای 3 ساله با GPU V100 ممکن است 6–12 ساعت طول بکشد. از Gradient Checkpointing و Mixed Precision (fp16) استفاده کنید.
4. تفسیرپذیری: ماتریسهای توجه اطلاعات ارزشمندی دربارهٔ وابستگیها میدهند، اما تفسیر مستقیم آنها بهعنوان «اهمیت فیچر» گمراهکننده است.
5. Look-ahead bias: در پیادهسازی Encoder-Decoder، Causal Masking الزامی است تا مدل از اطلاعات آینده در آموزش استفاده نکند:
python
Causal mask برای decoder
causal_mask = torch.triu(
torch.ones(tgt_len, tgt_len), diagonal=1
).bool()
نتیجهگیری
Transformerها با مکانیزم Self-Attention امکان یادگیری وابستگیهای بلندمدت را در دنبالههای قیمتی فراهم میکنند — چیزی که RNN و LSTM از آن عاجز بودند. مدلهایی مانند TFT و Informer این معماری را برای واقعیتهای خاص دادههای مالی (چندمتغیره بودن، نویز بالا، توزیع ناپایدار) بهینه کردهاند. با این حال، Transformer یک ابزار است — نه یک جعبهٔ سیاه جادویی. کیفیت فیچرها، صحت اعتبارسنجی و مدیریت رژیم بازار همچنان تعیینکنندهترین عوامل باقی میمانند.
خلاصهٔ نقطهای
- Self-Attention با فرمول $\text{softmax}(QK^T/\sqrt{d_k})V$ وابستگی مستقیم بین هر دو گام زمانی را بدون محدودیت فاصله محاسبه میکند.
- Multi-Head Attention با موازیسازی $h$ ماتریس توجه، الگوهای متنوع (کوتاهمدت، هفتگی، واکنش به حجم) را همزمان یاد میگیرد.
- Learnable Positional Encoding برای کریپتو (24/7، بدون ساعت بسته) بر Sinusoidal ارجح است.
- TFT با Variable Selection و Multi-Head Interpretable Attention برای پیشبینی چندگامهٔ مالی طراحی شده است.
- Informer پیچیدگی را از $O(L^2)$ به $O(L \log L)$ کاهش میدهد و برای دادههای با فرکانس بالا مناسب است.
- Walk-Forward Validation تنها روش اعتبارسنجی صحیح در دادههای زمانی است — K-Fold تصادفی در مالی ممنوع.
- Causal Masking در decoder الزامی است تا از نشت اطلاعات آینده جلوگیری شود.
- Learning Rate Warmup (فرمول اصلی مقالهٔ Attention is All You Need) برای پایداری آموزش Transformer حیاتی است.