السلاسل الزمنية2023متوسط12 دقيقة قراءة
سلسلة زمنية تساوي 64 كلمة: التنبؤ طويل المدى باستخدام المحوِّلات
A Time Series Is Worth 64 Words: Long-Term Forecasting with Transformers
Nie, Y. · Nguyen, N. H. · Sinthong, P. · Kalagnanam, J. — ICLR
المشكلة
في عام 2022 كانت نماذج المُصمَّمة بالسلاسل الزمنية تعاني من مشكلتين جوهريتين. المشكلة الأولى أنها كانت تُحوِّل كل خطوة زمنية إلى رمز مستقل، وهذا يُضيّع الأنماط الزمنية المحلية ويُنتج تسلسلات مدخلة طويلة جداً تتصاعد تكلفتها الحسابية تربيعياً بسبب . المشكلة الثانية أنها كانت تدمج جميع القنوات (المتغيرات) في رمز واحد عند كل خطوة زمنية، فينتهي النموذج بحفظ التشويش بين القنوات بدلاً من تعلّم أنماط حقيقية مفيدة. النتيجة كانت صادمة: نموذج خطي بسيط من طبقة واحدة اسمه DLinear تفوّق على جميع المحوِّلات — Informer وAutoformer وFEDformer — في المعايير القياسية المعتمدة. وهذا طرح سؤالاً محورياً: هل المحوِّلات مفيدة فعلاً للسلاسل الزمنية؟
الإسهام
قدّم الباحثون PatchTST: محوِّل للسلاسل الزمنية يقوم على فكرتين تصميميتين بسيطتين لكنهما فعّالتان جداً. الفكرة الأولى هي الرُّقَع — أي تقسيم كل سلسلة زمنية أحادية المتغير إلى مقاطع فرعية تكون هي رموز الإدخال للمحوِّل، وهذا يحفظ الأنماط المحلية ويُخفّض تكلفة الانتباه تربيعياً. الفكرة الثانية هي — أي معالجة كل متغير على حدة عبر هيكل محوِّل مشترك، بدلاً من خلط كل القنوات في رمز واحد. بهاتين الفكرتين معاً حقّق النموذج انخفاضاً بنسبة 21% في مقارنةً بأفضل المحوِّلات، وتفوّق على DLinear في مجموعات البيانات الكبيرة، وفتح الباب للتدريب المسبق ذاتي الإشراف بتقنيع الرُّقَع الذي تجاوز أداء الموجَّه.
الأثر
أنقذ PatchTST المحوِّلات في مجال السلاسل الزمنية، وأثبت أن المشكلة لم تكن في آلية الانتباه نفسها بل في طريقة تمثيل البيانات كرموز وفي تصميم القنوات. بعده أصبح التقسيم إلى رُقَع هو الطريقة الافتراضية في كل نماذج السلاسل الزمنية اللاحقة تقريباً، بما فيها TimesFM. وانتقل مبدأ استقلال القنوات إلى بُنى معمارية أخرى أيضاً. بذلك رسّخ PatchTST نفسه كلَبِنة أساسية في بناء نماذج الأساس للسلاسل الزمنية.
تخيّل أنك قارئ سريع أمامك فقرة طويلة. لو حاولت قراءتها حرفاً حرفاً، ستكون العملية بطيئة للغاية وكل حرف بمفرده لا يحمل أي معنى. لكن حين تقرأ كلمةً كلمة، تصبح القراءة طبيعية — كل كلمة وحدة دلالية مفهومة، وتستطيع استيعاب الفقرة كلها بسرعة أكبر. الآن انقل الفكرة نفسها إلى السلاسل الزمنية: تخيّل أنك خبير أرصاد أمامك قراءات حرارة كل ساعة لمدة سنة كاملة — أي 8,760 نقطة. لو أدخلت كل نقطة كرمز مستقل إلى المحوِّل، فأنت تقرأ «حرفاً حرفاً». ما يفعله PatchTST هو تجميع هذه النقاط في رُقَع — كالكلمات تماماً — فيقرأ النموذج أسرع، ويرى سياقاً أوسع، ويستوعب فعلاً الأنماط المحلية مثل «الارتفاع التدريجي في حرارة الصباح».
المشكلة: الرموز النقطية تُضيّع المعنى المحلي
قبل PatchTST، كانت معظم نماذج المحوِّل المبنية للسلاسل الزمنية — مثل Informer وAutoformer وFEDformer — تتعامل مع كل خطوة زمنية كرمز إدخال مستقل. الفكرة أشبه بأن تُحوّل نصاً عربياً إلى رموز حرفاً حرفاً: ستُدمّر المعنى المحلي بالكامل.
خُذ مثالاً بسيطاً: قراءة حرارة واحدة مقدارها 23.5 درجة لا تقول لك شيئاً بمفردها. لكن لو نظرت إلى مجموعة قراءات متتالية [22.1, 22.8, 23.2, 23.5]، ستلاحظ فوراً أن الحرارة ترتفع بثبات. هذا النمط المحلي — الاتجاه والشكل — هو بالضبط ما يضيع حين تُرمَّز كل نقطة على حدة.
والمشكلة لا تقتصر على فقدان المعنى، بل التكلفة الحسابية أيضاً كارثية. آلية في المحوِّل تعمل بتعقيد O(N²) في الزمن والذاكرة، حيث N عدد المدخلة. بالنسبة لـ من 336 خطوة زمنية، هذا يعني 336² = 112,896 عملية انتباه. في بيانات حركة المرور (862 قناة)، استغرق التدريب بالرموز النقطية أكثر من 10,000 ثانية — وهذا غير عملي في أي تطبيق حقيقي.
ثم جاءت الضربة القاضية من Zeng وزملائه (2022): نموذج خطي بطبقة واحدة اسمه DLinear تفوّق على كل المحوِّلات في المعايير القياسية المعتمدة. لم يكن الفارق هامشياً — بل كان تشكيكاً حقيقياً في جدوى استخدام المحوِّلات مع السلاسل الزمنية أصلاً.
الفكرة الأولى: الرُّقَع — من الحروف إلى الكلمات
فكرة مستوحاة مباشرةً من . محوِّل الرؤية (ViT) يُقسّم الصورة إلى رُقَع بحجم 16×16 بكسل ويُعامل كل رُقعة كرمز إدخال. PatchTST يأخذ الفكرة نفسها ويُطبّقها على السلاسل الزمنية: بدلاً من رمز لكل نقطة، تُجمَّع P نقطة متتالية في رمز رُقعة واحد.
تخيّل شريطاً طويلاً من قراءات الحرارة. تأخذ مقصاً وتقطعه إلى مقاطع بطول P = 16 نقطة، مع خطوة S = 8 (أي تتداخل كل رُقعتين متجاورتين بـ8 نقاط). كل مقطع يتحوّل إلى رمز إدخال واحد يدخل المحوِّل. هذه العملية تُعطيك ثلاث فوائد فورية:
1. الحفاظ على المعنى المحلي. كل رُقعة تلتقط شكلاً محلياً — اتجاهاً صاعداً، أو تذبذباً دورياً، أو فترة استقرار. الرُقعة هنا هي «الكلمة» التي تحمل معنى، بينما النقطة المفردة مجرد «حرف» لا يقول شيئاً وحده.
2. انخفاض هائل في تكلفة الانتباه. بخطوة S = 8 ونافذة ماضية L = 336، ينخفض عدد الرموز من 336 إلى نحو 42 فقط. تكلفة الانتباه التربيعية تهبط من 336² إلى 42² — أي تقليص بمقدار 64 ضعفاً. عملياً، في بيانات حركة المرور مثلاً انخفض زمن التدريب من 10,040 ثانية إلى 464 ثانية — تسريع 22 ضعفاً.
3. النموذج يرى تاريخاً أطول. بما أن كل رمز يُلخّص P خطوة زمنية، فإن 42 رمزاً تُغطّي 336 خطوة بدلاً من 42 فقط. بل يمكنك التوسّع إلى 512 خطوة (64 رُقعة) بالميزانية الحسابية نفسها، فيحصل النموذج على سياق أوسع بكثير للتنبؤ طويل المدى.
الفكرة الثانية: استقلال القنوات — كل آلة على حدة
السلسلة الزمنية متعددة المتغيرات تحتوي على M (متغير) — مثلاً 862 مستشعر طرق في بيانات حركة المرور، أو 21 قياساً جوياً (حرارة، رطوبة، ضغط جوي...). النماذج السابقة المبنية على المحوِّل كانت تستخدم ما يُسمّى : عند كل خطوة زمنية تُكدَّس قيم جميع القنوات الـM في متجه واحد ويُسقَط في فضاء . النتيجة أن النموذج مُجبَر على تعلّم العلاقات بين جميع القنوات في كل طبقة.
تخيّل الأمر كفرقة أوركسترا: خلط القنوات يعني أنك تُجبر جميع العازفين على القراءة من نوتة واحدة، فتمتزج أصواتهم قبل أن تفهم كل آلة على حدة.
PatchTST يسير في الاتجاه المعاكس تماماً ويتبنّى مبدأ استقلال القنوات. كل سلسلة أحادية المتغير تمرّ عبر هيكل المحوِّل بشكل منفصل. أوزان المحوِّل مشتركة بين جميع القنوات (كمعلّم واحد يُدرّس جميع الطلاب)، لكن كل سلسلة تُنتج خرائط انتباه خاصة بها. في النهاية تُجمَع تنبؤات جميع القنوات عند المخرج.
لماذا ينجح هذا النهج؟ لثلاثة أسباب عملية:
- المرونة: القنوات المختلفة غالباً تملك أنماطاً زمنية مختلفة تماماً. في بيانات الكهرباء مثلاً، بعض السلاسل ناعمة ودورية وأخرى مليئة بالتشويش. مع استقلال القنوات، كل سلسلة تتعلّم نمط انتباه يناسبها.
- مقاومة : نماذج خلط القنوات تحتاج لتعلّم M×M تفاعل بين القنوات، وهذا يتطلب كمّاً كبيراً من البيانات. النماذج المستقلة القنوات تتقارب أسرع ببيانات تدريب أقل.
- عزل التشويش: إن كانت قناة واحدة مُشوَّشة، فمع خلط القنوات ينتشر تشويشها إلى بقية القنوات عبر التضمين. أما مع الاستقلال، فالتشويش يبقى محصوراً في قناته.
البنية: محوِّل كلاسيكي بتصميم ذكي
بنية PatchTST بسيطة عن قصد — تعتمد على المحوِّل الكلاسيكي دون أي آلية انتباه مُخصَّصة. كل الابتكار يكمن في كيفية تحضير المدخلات (الرُّقَع + استقلال القنوات)، وليس في المحوِّل ذاته.
كل سلسلة أحادية المتغير تمرّ بالمراحل التالية:
1. . تُسوَّى كل سلسلة بحيث يصبح وسطها صفراً وانحرافها المعياري واحداً. الهدف هو التعامل مع بين بيانات التدريب والاختبار. يُحفَظ الوسط والانحراف المعياري ثم يُعادان إلى تنبؤات المخرج لاحقاً.
2. التقسيم إلى رُقَع. تُقسَّم السلسلة المُسوّاة إلى N رُقعة متداخلة بطول P وخطوة S، فتتشكّل مصفوفة رُقَع بأبعاد P × N.
3. الإسقاط + . كل رُقعة تُسقَط خطياً إلى الفضاء الكامن للمحوِّل (بأبعاد D) عبر مصفوفة إسقاط قابلة للتعلّم. ثم تُضاف تضمينات موضعية قابلة للتعلّم حتى يعرف النموذج الترتيب الزمني.
4. مرمِّز المحوِّل. الرُّقَع المُسقَطة تمرّ عبر طبقات المرمِّز القياسية: ، ، بدالة تنشيط GELU، و.
5. التسطيح + الرأس الخطي. يُسطَّح ناتج المرمِّز ثم تُحوّله طبقة خطية إلى أفق التنبؤ T.
المعاملات الفوقية الافتراضية: 3 طبقات ترميز، 16 رأس انتباه، D = 128، بُعد الشبكة الأمامية = 256، = 0.2، طول الرُّقعة P = 16، الخطوة S = 8.
التعلّم ذاتي الإشراف: قنّع الرُّقَع لا النقاط
PatchTST ليس مجرد نموذج تنبؤ موجَّه — بل يدعم أيضاً التدريب المسبق بأسلوب ، وذلك عبر إعادة بناء الرُّقَع المُقنَّعة. الفكرة مستوحاة من في الرؤية الحاسوبية ونمذجة اللغة المُقنَّعة في معالجة اللغة الطبيعية.
الآلية بسيطة ومباشرة: نختار عشوائياً 40% من الرُّقَع غير المتداخلة ونستبدلها بأصفار، ثم نُدرّب النموذج على استعادة القيم الأصلية لهذه الرُّقَع باستخدام خسارة متوسط مربع الخطأ. بما أن رُقَعاً كاملة تُقنَّع (وليس نقاطاً منفردة)، لا يستطيع النموذج الاكتفاء بالاستكمال من الجيران — بل يُضطر لتعلّم تمثيلات زمنية عالية المستوى فعلاً.
لماذا هذا مهم؟ تخيّل أنك تقرأ فقرة حُجبت منها كلمات كاملة بدلاً من حروف منفردة. لن تستطيع تخمين الكلمة المحجوبة بمجرد النظر إلى الحروف حولها — بل تحتاج لفهم بنية الجملة والسياق العام. هذا بالضبط ما يحصل مع تقنيع الرُّقَع.
بعد التدريب المسبق، يمكن للتنبؤ بطريقتين:
- : نُجمّد المرمِّز ونُدرّب رأس التنبؤ فقط لمدة 20 حقبة. والمفاجئ أن هذا وحده يُنافس التدريب الموجَّه من الصفر.
- الضبط الشامل: نبدأ باستقصاء خطي لمدة 10 حقب، ثم نفكّ تجميد كل شيء لـ20 حقبة إضافية. هذا الأسلوب يُعطي أفضل النتائج — ويتفوّق حتى على التدريب الموجَّه في مجموعات البيانات الكبيرة كالطقس وحركة المرور والكهرباء.
والنقطة الجوهرية أن استقلال القنوات يجعل أمراً طبيعياً: بما أن كل قناة تُعالَج باستقلالية بأوزان مشتركة، يمكنك التدريب المسبق على مجموعة بيانات فيها 321 قناة (الكهرباء) ثم ضبط النموذج على مجموعة أخرى فيها 21 قناة فقط (الطقس) — دون الحاجة لتطابق عدد المتغيرات.
الفكرة في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def create_patches(series, patch_len=16, stride=8):
"""قسّم سلسلة زمنية أحادية المتغير إلى رُقَع متداخلة."""
L = len(series)
# احشُ النهاية بتكرار آخر قيمة
padded = np.concatenate([series, np.full(stride, series[-1])])
patches = []
for start in range(0, L - patch_len + stride + 1, stride):
patches.append(padded[start : start + patch_len])
return np.array(patches) # الشكل: (N, P)
def patchtst_forward(multivariate_series, transformer, proj, head):
"""PatchTST مستقل القنوات: كل قناة تمرّ عبر المحوِّل بشكل منفصل."""
M, L = multivariate_series.shape # M قناة، L خطوة زمنية
predictions = []
for i in range(M):
x = multivariate_series[i] # سلسلة أحادية واحدة
mean, std = x.mean(), x.std()
x = (x - mean) / (std + 1e-8) # تسوية المثيل
patches = create_patches(x) # (N, P) رموز الرُّقَع
tokens = proj(patches) # (N, D) إسقاط في الفضاء الكامن
tokens += pos_embedding # إضافة التضمين الموضعي المُتعلَّم
z = transformer.encode(tokens) # (N, D) — المرمِّز الكلاسيكي
pred = head(z.flatten()) # (T,) — التنبؤ بـT خطوة للأمام
pred = pred * std + mean # التراجع عن التسوية
predictions.append(pred)
return np.stack(predictions) # (M, T) — جميع القنواتالنتائج: المحوِّلات تعمل حين تُرمِّز الإدخال بشكل صحيح
قُيِّم PatchTST على 8 معايير شائعة: الطقس، حركة المرور، الكهرباء، الإنفلونزا (ILI)، ومجموعات بيانات ETT الأربع. اختُبر منه نسختان: PatchTST/42 (نافذة ماضية L = 336، أي 42 رُقعة — للمقارنة العادلة مع DLinear) وPatchTST/64 (L = 512، أي 64 رُقعة — لدفع الأداء إلى أقصاه).
مقابل نماذج المحوِّل: حقّق PatchTST/64 انخفاضاً بنسبة 21.0% في متوسط مربع الخطأ و16.7% في متوسط الخطأ المطلق مقارنةً بأفضل نماذج المحوِّل (FEDformer وAutoformer وInformer). فارق ضخم بكل المقاييس.
مقابل DLinear: تفوّق PatchTST على DLinear في مجموعات البيانات الكبيرة — الطقس وحركة المرور والكهرباء — وهي المعايير الأكثر موثوقية لأن حجمها يكفي لمقاومة الضبط المُفرَط. في بيانات الطقس بأفق تنبؤ 96 خطوة: حقّق PatchTST/64 متوسط مربع خطأ 0.149 مقابل 0.176 لـDLinear. وفي حركة المرور: 0.360 مقابل 0.410.
تعزيز التعلّم ذاتي الإشراف: في مجموعات البيانات الكبيرة، التدريب المسبق بالتقنيع ثم الضبط الدقيق تفوّق على التدريب الموجَّه من الصفر. في بيانات الكهرباء بأفق 96: متوسط مربع خطأ 0.126 بالتعلّم ذاتي الإشراف مقابل 0.130 بالتدريب الموجَّه.
نقل التعلّم: التدريب المسبق على بيانات الكهرباء ثم الضبط على بيانات الطقس أعطى متوسط مربع خطأ 0.145 بأفق 96 — أفضل من التدريب الموجَّه من الصفر (0.152) رغم أن المجالين مختلفان تماماً.
مقارنة : مقابل أساليب التعلّم ذاتي الإشراف المتخصصة (TS2Vec وTNC وTS-TCC وBTSF)، حقّق PatchTST تحسّناً بين 34–49% في متوسط مربع الخطأ على بيانات ETTh1.
دراسة الاستئصال: كل عنصر مهم
اختبرت الورقة كل قرار تصميمي بشكل منهجي. حين أُزيلت الرُّقَع مع الإبقاء على استقلال القنوات، ارتفع متوسط مربع الخطأ في بيانات الطقس من 0.152 إلى 0.164. وحين أُزيل استقلال القنوات مع الإبقاء على الرُّقَع، ارتفع إلى 0.168. وحين أُزيل الاثنان معاً (نموذج TST الأصلي) وصل إلى 0.177. الخلاصة واضحة: كلا العنصرين ضروري، والجمع بينهما يتفوّق على كل منهما بمفرده.
تغيير طول الرُّقعة: ظلّ متوسط مربع الخطأ مستقراً عبر أطوال تتراوح بين 4 و40، وهذا يدل على متانة التصميم. الأطوال بين 8 و16 كانت الأمثل في الغالب.
تغيير النافذة الماضية: PatchTST تحسّن باطّراد كلما طالت النافذة — على عكس FEDformer وAutoformer وInformer التي كثيراً ما تراجع أداؤها أو توقّف عن التحسن حين تجاوزت النافذة 96 خطوة. هذا دليل مباشر على أن الرُّقَع تُمكّن النموذج من استيعاب تاريخ أطول فعلاً.
تسوية المثيل: إزالتها أضعفت الأداء، لا سيما في مجموعات البيانات التي تعاني من إزاحة توزيعية (كالإنفلونزا وحركة المرور). لكن حتى بدونها، ظلّ PatchTST يتفوّق على بقية المحوِّلات — مما يؤكد أن المكاسب الأساسية مصدرها الرُّقَع واستقلال القنوات.
ما الذي أثّر فيه PatchTST
2017
المحوِّل (الانتباه هو كل ما تحتاجه)
بنية المحوِّل الأصلية. صُمِّم أولاً للترجمة الآلية، ثم اعتُمد لاحقاً في جميع أنواع البيانات.
2021
ViT — محوِّل الرؤية
قدّم فكرة تقسيم الصور إلى رُقَع 16×16 واستخدامها كرموز إدخال. أثبت أن مبدأ الرُّقَع ينجح مع المحوِّلات خارج نطاق اللغة، وكان الإلهام المباشر لـ PatchTST.
2021
Informer
طوّر آلية انتباه ProbSparse للتنبؤ الفعّال طويل المدى، لكنه ظلّ يعتمد على الرموز النقطية وخلط القنوات.
2022
DLinear — هل المحوِّلات فعّالة؟
نموذج خطي بسيط تفوّق على جميع المحوِّلات، ودفع المجتمع البحثي لإعادة التفكير في تصميم المحوِّل للسلاسل الزمنية.
2023
PatchTST (هذه الورقة)
الرُّقَع + استقلال القنوات أنقذا المحوِّلات في السلاسل الزمنية. انخفاض 21% في متوسط مربع الخطأ. وفتح الباب للتدريب المسبق ذاتي الإشراف.
2024
TimesFM
نموذج أساس السلاسل الزمنية من Google. اعتمد الرُّقَع كطريقة ترميز افتراضية، وتأثّر مباشرةً بتصميم PatchTST.
المرجعNie, Nguyen, Sinthong, Kalagnanam. A Time Series Is Worth 64 Words: Long-term Forecasting with Transformers. ICLR, 2023.
مصطلحات هذه الورقة
- رُقعةPatch
- تضمين الرُّقعPatch Embedding
- القناة البنيويةChannel
- تسوية النسخةInstance Normalization
- نقل التعلمTransfer Learning
- مُرمِّز تلقائي مُقنَّعMasked Autoencoder
- الانتباه المتعدد المساراتMulti-Head Attention
- المحوِّلTransformer
- متوسط الخطأ المربّعMean Squared Error (MSE)
- التعلم ذاتي الإشرافSelf-Supervised Learning
- تعلم التمثيلات الرقميةRepresentation Learning
- التضمين الموضعيPositional Embedding
- الاختبار الخطيLinear Probing
- الضبط الدقيقFine-Tuning
- آلية الانتباهAttention