Advancedml

Transformer — توجه به دنبالهٔ بازار

15 min
Transformer — توجه به دنبالهٔ بازار

Time-Series Transformers.

Transformer — توجه به دنباله‌ٔ بازار

هدف یادگیری

پس از مطالعه‌ٔ این درس قادر خواهید بود:
- مکانیزم Self-Attention را در بستر داده‌های مالی سری‌زمانی فرموله کنید.
- تفاوت معماری Transformer با LSTM و CNN را در پردازش دنباله‌های قیمتی تحلیل کنید.
- مدل‌های Temporal Fusion Transformer و Informer را برای پیش‌بینی قیمت ارز دیجیتال به‌کار بگیرید.
- با محاسبه‌ٔ عددی ماتریس توجه، نحوه‌ٔ وزن‌دهی Transformer به لحظات گذشته‌ٔ بازار را درک کنید.

---

چرا Transformer؟ محدودیت‌های مدل‌های کلاسیک

بازارهای کریپتو دنباله‌هایی با وابستگی‌های بلندمدت تولید می‌کنند. قیمت بیت‌کوین در روز ۳۰۰ ممکن است تابع رویدادی در روز ۱۲ باشد — نه صرفاً روزهای اخیر. مدل‌های LSTM با vanishing gradient در انتقال اطلاعات دور به دور ضعیف عمل می‌کنند. RNN ذاتاً ترتیبی است؛ موازی‌سازی ندارد و آموزش آن روی داده‌های تیک با فرکانس بالا گران‌قیمت است.

Transformer در ۲۰۱۷ توسط Vaswani و همکاران معرفی شد و با حذف بازگشت (recurrence)، کل دنباله را هم‌زمان پردازش می‌کند. هر گام زمانی می‌تواند مستقیماً با هر گام دیگری «صحبت کند» — بدون محدودیت فاصله.

---

مکانیزم Self-Attention: ریاضیات توجه

فرض کنید دنباله‌ٔ قیمت بسته‌شدن ۴ شمع داریم:

$$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$$

یعنی گام اول بازار ۶۱٪ «توجه» خود را به خود و ۳۹٪ را به گام دوم معطوف می‌کند. همین مکانیزم به‌صورت موازی برای تمام جفت‌ها محاسبه می‌شود.

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 اغلب بهتر عمل می‌کند چون مدل می‌تواند اهمیت نسبی فاصله‌های زمانی مشخص (مثلاً ۲۴ ساعت، ۷ روز) را یاد بگیرد.

نکته‌ٔ کوانتی: در بازارهای کریپتو که ۲۴/۷ فعال هستند، چرخه‌های دوره‌ای ندارند — برخلاف بازار سهام با ساعات بسته. این تفاوت ساختاری Learnable Encoding را برای کریپتو ارجح می‌کند.

---

مدل‌های تخصصی برای سری‌زمانی مالی

Temporal Fusion Transformer (TFT)

معماری TFT که توسط Google در ۲۰۲۱ منتشر شد، برای پیش‌بینی چندگامه‌ٔ مالی بهینه شده است. ویژگی‌های کلیدی:

  • 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, # کوانتایل‌های ۱۰٪ تا ۹۰٪
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 # ۷ روز × ۲۴ ساعت
PRED_LEN = 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})$$

در ۴۰۰۰ گام اول آموزش نرخ یادگیری افزایش می‌یابد سپس کاهش می‌یابد.

---

چالش‌ها، ریسک‌ها و محدودیت‌ها

۱. Non-stationarity بازار: توزیع آماری قیمت در طول زمان تغییر می‌کند. راه‌حل: پنجره‌ٔ rolling normalization یا Reversible Instance Normalization (RevIN).

۲. Overfitting به رژیم‌های گذشته: مدل ممکن است الگوی بازار گاوی ۲۰۲۱ را بیاموزد اما در بازار خرسی ۲۰۲۲ کاملاً ناکارآمد شود. Walk-Forward Validation ضروری است — هرگز از K-Fold تصادفی استفاده نکنید.

۳. هزینه‌ٔ محاسباتی: آموزش Transformer روی داده‌های دقیقه‌ای ۳ ساله با GPU V100 ممکن است ۶–۱۲ ساعت طول بکشد. از Gradient Checkpointing و Mixed Precision (fp16) استفاده کنید.

۴. تفسیرپذیری: ماتریس‌های توجه اطلاعات ارزشمندی درباره‌ٔ وابستگی‌ها می‌دهند، اما تفسیر مستقیم آن‌ها به‌عنوان «اهمیت فیچر» گمراه‌کننده است.

۵. 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 برای کریپتو (۲۴/۷، بدون ساعت بسته) بر 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 حیاتی است.

Transformer — توجه به دنبالهٔ بازار | TradeyAR Academy | TradeyAR