در مدلهای زبانی خودبازگشتی استاندارد، یادگیری صرفاً بر پایهی یک سیگنال نظارتی برای پیشبینی توکن بعدی (Next-Token Prediction) پیش میرود. این رویکرد به معنای نادیدهگرفتن ارتباطات بلندمدتتر جمله در یک گام رو به جلو است؛ در نتیجه، مدلها برای فراگیری انسجام متنی و منطق استدلال به تریلیونها توکن داده نیاز دارند. معماری پیشبینی چندتوکنی (Multi-Token Prediction یا MTP) با هدف متراکمتر کردن این سیگنال نظارتی در زمان پیشآموزش معرفی شد.
مدل DeepSeek-V3 با بازطراحی ساختار موازی MTP به یک معماری ترتیبی (Sequential)، زنجیرهی علّی میان توکنها را حفظ کرد. این نوآوری علاوه بر ارتقای یادگیری مدل، سرهای MTP را در زمان استنتاج به شبکههای پیشنویس برای دیکودینگ حدسی تبدیل میکند؛ امکانی که بدون تحمیل هزینهی آموزش جداگانه، شتاب تولید متن را تا 1.8 برابر افزایش میدهد.
در این درس، ماژول ترتیبی MTP، ماتریس تصویر و تابع زیان چندعمقی را بر اساس گزارش فنی DeepSeek-V3 از صفر پیادهسازی میکنید و دلیل برتری آن نسبت به روشهای موازی قبلی را بررسی خواهید کرد.
همهی مدلهای زبانی بزرگ خودبازگشتی (autoregressive) از GPT-2 تا Llama 3 روی یک تابع زیان (loss) در هر موقعیت آموزش میبینند: پیشبینی توکن بعدی (Next-Token Prediction). مدل DeepSeek-V3 یک تابع زیان دوم هم به هر موقعیت اضافه کرد: پیشبینی توکنِ بعد از آن. این 14B پارامتر اضافی (روی یک مدل 671B) از طریق جریان گرادیان دوباره درون مدل اصلی تقطیر شدند؛ بعد هم سرهای MTP آموزشدیده در زمان استنتاج با نرخ پذیرش بالای 80% بهعنوان مدل پیشنویس (Draft Model) در دیکودینگ حدسی (Speculative Decoding) به کار گرفته شدند. نتیجه؟ 1.8 برابر نرخ پردازش تولید متن، آن هم کاملاً رایگان. در این درس، ماژول ترتیبی MTP را بر اساس گزارش فنی DeepSeek میسازیم، تابع زیان و چیدمان پارامترهای سر مشترک را محاسبه میکنیم و توضیح میدهیم چرا MTP زنجیرهی علی (causal chain) را حفظ میکند، درحالیکه MTP موازی اولیهی Gloeckle و همکاران آن را قطع میکرد.
اهداف یادگیری
- بیان هدف آموزشی MTP و استخراج تابع زیان مشترک در طول عمقهای پیشبینی.
- توضیح تفاوت بین سرهای MTP موازی Gloeckle و همکاران (2024) و ماژولهای MTP ترتیبی DeepSeek-V3، و چرایی حفظ زنجیرهی علی در طراحی ترتیبی.
- محاسبهی سربار حافظه و پارامتر ناشی از افزودن ماژولهای MTP به یک فرآیند پیشآموزش.
- پیادهسازی یک ماژول MTP از صفر: امبدینگ مشترک، بلوک ترنسفورمر به ازای هر عمق، لایهی تصویر کردن (projection) و سر خروجی مشترک.
صورت مسئله
پیشبینی توکن بعدی، هدف آموزشی استاندارد مدلهای زبانی بزرگ است. هر وضعیت پنهان (hidden state) تحت نظارت قرار میگیرد تا دقیقاً یک چیز را پیشبینی کند: توکنی که بلافاصله بعد از آن میآید. این سیگنال بهطرز شگفتآوری ضعیف است. بیشتر اطلاعات یک دنباله فراتر از یک توکن امتداد دارد — ساختار، انسجام متن، صحت فکتها (factuality) و روند محاسبات ریاضی. مدل ناچار است این مفاهیم را صرفاً با انباشت تعداد زیادی سیگنال تکتوکنی در طول تریلیونها توکن یاد بگیرد.
ایدهی پیشبینی چندتوکنی (Multi-Token Prediction یا MTP) این است: چه میشد اگر هر وضعیت پنهان نظارت میشد تا چندین توکن آینده را همزمان پیشبینی کند؟ Gloeckle و همکاران (Meta، 2024) نشان دادند که این ایده جواب میدهد. در پیادهسازی آنها، چند سر خروجی مستقل روی بکبون (backbone) قرار میگرفت که هرکدام آفست متفاوتی را پیشبینی میکردند؛ رویکردی موازی و ساده، اما همهی سرها همان وضعیت پنهان یکسان را بدون هیچ پالایش سلسلهمراتبی میدیدند — و پیشبینیها هم پیوند علی نداشتند، بنابراین نمیشد از آنها در دیکودینگ حدسی استفاده کرد.
مدل DeepSeek-V3 (دسامبر 2024) معماری MTP را بهشکل ماژولهای ترتیبی بازطراحی کرد تا زنجیرهی علی در هر عمق پیشبینی حفظ شود. مدل ابتدا t+1 را از روی h_i^(0) پیشبینی میکند، سپس t+2 را بر اساس وضعیت پنهان جدیدی به نام h_i^(1) حدس میزند؛ وضعیتی که حاصل ترکیب h_i^(0) و امبدینگ E(t+1) است. این روند به همین ترتیب ادامه پیدا میکند. هر عمق، بلوک ترنسفورمر کوچک خودش را دارد. بهرهگیری از امبدینگ مشترک و سر خروجی مشترک نیز باعث میشود سربار پارامترها ناچیز بماند. در مقیاس DeepSeek-V3، ماژولهای MTP تنها 14B پارامتر اضافی به وزنهای 671B مدل اصلی اضافه کردند. این 2% سربار، هم سیگنالهای آموزشی چگالتری فراهم کرد و هم یک مدل پیشنویس آماده برای دیکودینگ حدسی در زمان استنتاج تحویل داد.
در این درس یک ماژول MTP منفرد و تابع زیان عمق D را از صفر میسازیم. ریاضیات ماجرا بسیار سرراست است و کل پیادهسازی در 150 خط کد خلاصه میشود.
مفاهیم پایه
دستورالعمل MTP ترتیبی
مدل DeepSeek-V3 تعداد D ماژول MTP روی مدل اصلی سوار میکند. مدل اصلی t_{i+1} را پیشبینی میکند. هر ماژول k (به ازای k = 1..D) با داشتن پیشوند توکنها تا موقعیت i، توکنی را پیشبینی میکند که k گام جلوتر قرار دارد: t_{i+k+1}.
ماژول k از این بخشها تشکیل شده است:
- یک بلوک ترنسفورمر
T_kبا اتنشن (attention) و MLP اختصاصی خودش. - یک ماتریس تصویر کردن
M_kکه وضعیت پنهان عمق قبلی را با امبدینگ توکن واقعی در عمق بعدی ترکیب میکند. - امبدینگ مشترک
E(همان امبدینگ مدل اصلی). - سر خروجی مشترک
Out(همان سر خروجی مدل اصلی).
در زمان آموزش، برای پیشوندی تا موقعیت i، وضعیت پنهان در هر عمق به این صورت به دست میآید:
پیشبینی در هر عمق برابر است با:
تابع زیان در هر عمق، آنتروپی متقاطع (Cross-Entropy) در برابر توکن واقعی t_{i+k+1} است:
تابع زیان مشترک در تمام عمقها:
پارامتر lambda ضریب وزنی کوچکی است — DeepSeek-V3 برای 10% اول آموزش از 0.3 و پس از آن از 0.1 استفاده میکند. تابع زیان کل آموزش برابر با L_main + L_MTP خواهد بود.
چرا ترتیبی، نه موازی؟
طرح MTP موازی اولیهی Gloeckle شامل D سر خروجی بود که هرکدام مستقیماً روی h_i^(0) اعمال میشدند. هر سر، t_{i+k} را از روی همان وضعیت پنهان بکبون پیشبینی میکرد. این رویکرد فرایند آموزش را خوب پیش میبرد، اما پیشبینیها به یکدیگر مشروط نیستند؛ یعنی نمیتوانید از خروجی head_1 برای کمک به head_2 استفاده کنید، چون سرها موازی اجرا میشوند.
طراحی ترتیبی DeepSeek-V3 وضعیت h_i^(k) را بر پایهی h_i^(k-1) بههمراه امبدینگ توکن بعدی واقعی یعنی E(t_{i+k}) میسازد. این کار زنجیرهی علی را دستنخورده نگه میدارد: ماژول در عمق k برای پیشبینی t_{i+k+1}، توکن حاضر در موقعیت t_{i+k} را میبیند. این روند از نظر ساختاری درست مثل حالتی است که یک دیکودر خودبازگشتی خروجیهای قبلی خودش را مصرف میکند؛ به همین دلیل، ماژولهای MTP مستقیماً در نقش مدلهای پیشنویس دیکودینگ حدسی قابل استفادهاند.
در زمان استنتاج: h_i^(k-1) و توکن پیشنویسشدهی t_{i+k} را به ماژول k میفرستید و پیشبینی t_{i+k+1} را تحویل میگیرید. این فرایند تکرار میشود. این سازوکار دقیقاً مشابه یک پیشنویس به سبک EAGLE است که در آن از ماژول آموزشدیدهی MTP بهعنوان شبکهی پیشنویس استفاده میشود. DeepSeek-V3 نرخ پذیرش بالای 80% را برای اولین ماژول MTP و حدود 1.8 برابر افزایش سرعت را گزارش کرده است.
محاسبهی تعداد پارامترها
برای مدلی با ابعاد وضعیت پنهان h و اندازهی واژگان V:
- مدل اصلی: میلیاردها پارامتر، بههمراه یک سر خروجی با ابعاد
V * h. - سر خروجی مشترک: استفادهی مجدد از سر مدل اصلی، بدون پارامتر اضافه.
- امبدینگ مشترک: استفادهی مجدد از امبدینگ مدل اصلی، بدون پارامتر اضافه.
- به ازای هر ماژول MTP:
- ماتریس تصویر کردن
M_k: به اندازهی(2h) * h = 2h^2. - بلوک ترنسفورمر
T_k: اتنشن (4h^2برای MHA) بههمراه MLP (معمولاً8h^2برای SwiGLU با نسبت 8/3)، در مجموع حدود12h^2برای هر بلوک.
- ماتریس تصویر کردن
کل پارامترهای اضافی به ازای هر ماژول: ~14h^2. برای DeepSeek-V3 با ابعاد h = 7168 و یک ماژول (D = 1)، روی کاغذ به ~14 * 7168^2 = ~720M پارامتر میرسیم. اما DeepSeek-V3 این عدد را 14B اعلام کرده است؛ این اختلاف به این برمیگردد که لایههای متخصص درون ماژول MTP نیز از ساختار مکسچر آف اکسپرتز (MoE) استفاده میکنند.
سودآوری در دیکودینگ حدسی
در طول پیشآموزش، ماژولهای MTP سرعت آموزش را حدود 10% کاهش میدهند (محاسبات رفت رو به جلو بیشتر، تابع زیان اضافه). اما این هزینه دو مزیت اساسی دارد:
-
سیگنال آموزشی چگالتر: هر وضعیت پنهان، D+1 هدف نظارتی را میبیند. حاصل این کار در بنچمارکهای MMLU، GSM8K، MATH و HumanEval، بهبود مداوم چند درصدی در نتایج آزمایشهای حذفی (ablation) مدل DeepSeek-V3 بوده است.
-
پیشنویس رایگان برای دیکودینگ حدسی در زمان استنتاج: ماژول MTP از قبل یاد گرفته که چند توکن بعدی را پیشبینی کند. با بهکارگیری آن بهعنوان شبکهی پیشنویس، به نرخ پذیرش بالای 80% میرسید. در چنین سطحی، دیکودینگ حدسی با N=3 یا N=5 نرخ پردازش را 1.8 برابر میکند. بنابراین هزینهی 10 درصدی زمان آموزش، در همان اولین باری که مدل را به مرحلهی استنتاج میبرید، جبران میشود.
ارتباط با EAGLE
در روش EAGLE، یک مدل پیشنویس کوچک بعد از اتمام پیشآموزش و بهصورت جداگانه آموزش میبیند. اما MTP این شبکهی پیشنویس را درون خودِ پیشآموزش ادغام میکند. هر دو روش به نرخ پذیرش مشابهی میرسند، ولی از دو پایپلاین متفاوت:
| بعد مقایسه | EAGLE-3 | MTP (DeepSeek-V3) |
|---|---|---|
| زمان آموزش | پس از پیشآموزش | در حین پیشآموزش |
| سازگاری پسرو با وزنهای موجود | دارد | ندارد (نیازمند آموزش مجدد از صفر) |
| پارامترهای پیشنویس | 1 تا 2 لایهی ترنسفورمر | 1 بلوک ترنسفورمر + لایهی تصویر |
| نرخ پذیرش | 0.88 تا 0.92 | بالای 0.80 در عمق 1 |
| دستاورد فراتر از افزایش سرعت | فقط دیکودینگ حدسی | سیگنال آموزشی چگالتر + افزایش سرعت استنتاج |
پیادهسازی از صفر
فایل code/main.py یک ماژول MTP را از ابتدا تا انتها پیاده میکند: امبدینگ مشترک، لایهی تصویر کردن، بلوک ترنسفورمر و سر خروجی مشترک. سپس تابع زیان آنتروپی متقاطع در هر عمق را روی یک دنبالهی ساختگی کوتاه محاسبه کرده و تعداد پارامترها را به تفکیک بخشها چاپ میکند. اندازهی واژگان را در قالب یک مثال فرضیِ 32 توکنی نگه داشتهایم تا اعداد خوانا بمانند.
گام 1: جدول امبدینگ مشترک
یک جدول واحد به ابعاد vocab_size x hidden هم در مدل اصلی و هم در تمام ماژولهای MTP در همهی عمقها به کار میرود. صحبت از یک کپیِ مجزا نیست؛ دقیقاً همان یک تنسور استفاده میشود.
گام 2: ترکیب در هر عمق
def combine(prev_hidden, next_token_embed, M_k):
# الحاق در امتداد بعد ویژگی، سپس تصویر به hidden
concat = rms_norm(prev_hidden) + rms_norm(next_token_embed) # vector addition stand-in
projected = matvec(M_k, concat)
return projected
در مدل واقعی DeepSeek-V3، دو بردارِ نرمالشده با RMSNorm با ابعاد [2h] به هم متصل (concatenate) شده و با یک ماتریس h x 2h تصویر میشوند. ما در این کد آموزشی برای اختصار و استفاده از توابع پیشفرض پایتون، جمع برداری انجام دادهایم.
گام 3: بلوک ترنسفورمر در عمق k
ترکیب خوداتنشن (Self-Attention) و MLP. در این پیادهسازی آموزشی، یک بلوک اتنشن خطی تکلایه و یک SwiGLU MLP ساختار را بدون نیاز به numpy کاملاً شفاف نگه میدارند.
گام 4: سر خروجی مشترک
استفادهی مجدد از لایهی تصویر خروجی مدل اصلی؛ محاسبهی لاجیتها (logits) روی کل واژگان.
گام 5: تابع زیان در هر عمق
محاسبهی آنتروپی متقاطع روی سافتمکس (softmax) لاجیتها در برابر توکن واقعی در آفست k+1. در ادامه، مقادیر در تمام عمقها با ضریب مقیاس lambda / D تجمیع میشوند.
گام 6: محاسبهی تعداد پارامترها
چاپ تعداد کل پارامترها، پارامترهای مشترک (امبدینگ، سر خروجی) و پارامترهای اختصاصی هر ماژول، همراه با نسبت پارامترهای اضافی MTP به حجم مدل اصلی.
استفاده از ابزارهای واقعی
معماری MTP در DeepSeek-V3 (دسامبر 2024) و مدلهای سری DeepSeek-R1 پیادهسازی شده است. در زمان استنتاج:
- استک نرمافزاری اختصاصی سرویسدهی DeepSeek، مستقیماً و بدون نیاز به تنظیمات خاص از ماژولهای MTP بهعنوان دیکودر حدسی استفاده میکند.
- فریمورکهای vLLM و SGLang از آوریل 2026 قابلیت پشتیبانی از MTP مدل DeepSeek-V3 را اضافه کردهاند.
- در راهنمای کار با ROCm SGLang متعلق به شرکت AMD، پیکربندی ویژهای برای دیکودینگ حدسی با MTP آمده که شتاب 1.8 برابری را روی چکپوینت V3 ثبت کرده است.
چه زمانی در یک دورهی پیشآموزش جدید سراغ MTP برویم:
- تمام پایپلاین پیشآموزش دست خودتان است و میخواهید سیگنالهای آموزشی چگالتری به مدل برسانید.
- قصد دارید مدل را در مقیاس بالا سرو کنید و میخواهید قابلیت دیکودینگ حدسی را بدون هزینهی اضافی به دست آورید.
- بعد وضعیت پنهان مدل حداقل 4096 باشد؛ در مقیاس مدلهای 1B، سربار تحمیلشده به فایدهاش نمیارزد.
چه زمانی استفاده نکنیم:
- هنگام فاینتیونینگ (Fine-tuning) یک مدل چگال (dense) ازپیشآموزشدیده؛ چون ماژول MTP آن آموزش ندیده است.
- در کارهای پژوهشی که به یک خط مبنا (baseline) استاندارد و بدون تغییر برای مقایسه نیاز دارید، چرا که MTP معماری مدل را عوض میکند.
تحویل خروجی
خروجی این درس فایل outputs/skill-mtp-planner.md است. این فایل با دریافت مشخصات دورهی پیشآموزش (اندازهی مدل، دادهها، منابع پردازشی)، برنامهی یکپارچهسازی MTP را مشخص میکند: تعداد عمقهای D، زمانبندی lambda، سربار حافظه و نحوهی پیادهسازی دیکودینگ حدسی در زمان استنتاج.
تمرینها
-
اسکریپت
code/main.pyرا اجرا کنید. نشان دهید که با تقویت سیگنال ساختگی، تابع زیان در هر عمق بهصورت یکنواخت کاهش پیدا میکند. دادههای ساختگی را طوری دستکاری کنید که از یک الگوی ثابت پیروی کنند و بررسی کنید که آیا زیانهای عمق 1 و عمق 2 همگرا میشوند یا خیر. -
سربار پارامترها را برای یک مدل متراکم 70B (با ابعاد پنهان 8192 و 80 لایه) بهازای ماژول MTP با D=1 محاسبه کنید. این عدد را با 14B اعلامشده برای DeepSeek-V3 مقایسه کنید. توضیح دهید چرا رقم DeepSeek بالاتر است: بلوک ترنسفورمر MTP ساختار MoE مشابهی را به ارث میبرد که همین موضوع تعداد پارامترهای هر ماژول را بهشدت بالا میبرد.
-
ساختار D=2 را در کد آموزشی پیاده کنید: ماژول MTP دومی اضافه کنید که را ورودی بگیرد و
t_{i+3}را پیشبینی کند. بررسی کنید که تابع زیان مشترک و شمارش پارامترها دقیقاً با روابط 19 تا 21 مقالهی DeepSeek مطابقت داشته باشند. -
کد آموزشی را به MTP موازی (سبک Gloeckle) تغییر دهید: D سر خروجی روی وضعیت پنهان اصلی بگذارید که هرکدام آفست متفاوتی را پیشبینی کنند. بررسی کنید که تابع زیان در هر عمق در مقایسه با حالت ترتیبی روی همان سیگنال ساختگی چه تفاوتی دارد. نسخهی ترتیبی برای k > 1 باید زیان کمتری داشته باشد، چون پیشبینیهای قبلی را پیششرط کار خود قرار میدهد.
-
از ماژول MTP آموزشدیده بهعنوان مدل پیشنویس به سبک EAGLE استفاده کنید: در زمان استنتاج ماژول k را فراخوانی کنید تا
t_{i+k+1}را پیشنهاد دهد. نرخ پذیرش این توکنهای پیشنویس را نسبت به پیشبینیهای مدل اصلی روی یک دنبالهی دیدهنشده بسنجید. اگر در این کد آموزشی به پذیرش بالای 50% برسید، خاصیت تجربی MTP در نقش مدل پیشنویس را بازتولید کردهاید.
اصطلاحات کلیدی
| اصطلاح | در گفتگوها چه میگویند | معنای دقیق فنی |
|---|---|---|
| ماژول MTP | «بلوک زیان اضافه» | یک بلوک ترنسفورمر کوچک بههمراه لایهی تصویر که توکنِ k موقعیت جلوتر از مدل اصلی را پیشبینی میکند |
| عمق پیشبینی | «کدام آفست» | عدد صحیح k؛ بهگونهای که ماژول k بر اساس پیشوند توکنها تا موقعیت i، توکن t_{i+k+1} را پیشبینی میکند (مدل اصلی در عمق 0 قرار دارد و t_{i+1} را تخمین میزند) |
| پیشبینی چندتوکنی موازی (Parallel MTP) | «سبک Gloeckle» | تعداد D سر مستقل روی همان وضعیت پنهان بکبون، بدون وجود زنجیرهی شرطی |
| پیشبینی چندتوکنی ترتیبی (Sequential MTP) | «سبک DeepSeek-V3» | هر ماژول به وضعیت پنهان عمق قبلی بههمراه امبدینگ توکن بعدی مشروط میشود؛ زنجیرهی علی دستنخورده میماند |
| سر خروجی مشترک | «استفاده از همان سر اصلی» | ماژولهای MTP مستقیماً از سر زبان مدل اصلی (LM head) استفاده میکنند و سر خروجی مجزایی ندارند |
| امبدینگ مشترک | «استفاده از همان جدول اصلی» | همان جدول امبدینگ واژگان در تمام بخشها به کار میرود؛ بدون پارامتر تکراری |
| ماتریس تصویر کردن | «ترکیب وضعیت پنهان و توکن بعدی» | لایهی خطی با ابعاد h x 2h که وضعیت پنهان قبلی را با امبدینگ توکن هدف ادغام کرده و تحویل ورودی عمق بعدی میدهد |
| تابع زیان مشترک | «میانگین زیانهای اضافه» | میانگین حسابی توابع زیان آنتروپی متقاطع در هر عمق، با اعمال ضریب وزنی lambda |
| نرخ پذیرش در عمق 1 | «میزان درستی پیشنویس MTP» | نرخی که پیشبینی برتر (top-1) ماژول MTP در عمق D=1 دقیقاً با پیشبینی برتر مدل اصلی تطابق دارد؛ بالای 80% در DeepSeek-V3 |
| وزندهی لامبدا (Lambda) | «میزان اهمیت زیان اضافه» | ضریب مقیاس در هر عمق؛ 0.3 در اوایل دورهی آموزش و 0.1 در ادامهی آموزش DeepSeek-V3 |
برای مطالعهی بیشتر
- DeepSeek-AI — گزارش فنی DeepSeek-V3 (شناسه arXiv:2412.19437) — توضیحات کامل MTP ترتیبی (بخش 2.2)، شامل فرمولهای تابع زیان مشترک و شتاب 1.8 برابری استنتاج
- Gloeckle و همکاران — مدلهای زبانی بزرگ بهتر و سریعتر با پیشبینی چندتوکنی (شناسه arXiv:2404.19737) — خط مبنای MTP موازی که DeepSeek طراحی خود را بر پایهی رفع نواقص آن بنا کرد
- شناسنامهی مدل DeepSeek-V3 در Hugging Face — در مجموع 685B پارامتر (671B مدل اصلی + 14B ماژولهای MTP)، همراه با نکات استقرار مدل
- Leviathan و همکاران — استنتاج سریع از ترنسفورمرها از طریق دیکودینگ حدسی (شناسه arXiv:2211.17192) — چارچوب دیکودینگ حدسی که MTP به خدمت آن درمیآید
- Li و همکاران — EAGLE-3 (شناسه arXiv:2503.01840) — معماری پیشنویس EAGLE در سال 2025؛ رقیب اصلی رویکرد MTP
