ویرگول
ورودثبت نام
Ahmadreza Sezavar
Ahmadreza SezavarPhD in AI https://github.com/SezavarH
Ahmadreza Sezavar
Ahmadreza Sezavar
خواندن ۳ دقیقه·۲۰ روز پیش

مکانیزم attention و روش K-V cache

فهم ساده Attention و KV-Cache در Transformerها (برای LLMها)

مدل‌های زبانی بزرگ (مثل GPT) بر پایه‌ی معماری Transformer ساخته شده‌اند. قلب این معماری یک مفهوم کلیدی است: Attention.

برای اینکه inference این مدل‌ها سریع و عملی شود، از تکنیکی به نام KV-Cache استفاده می‌شود.

در این مطلب، این مفاهیم را ساده، مرحله‌به‌مرحله و دقیق مرور می‌کنیم.

🔷 1. Attention چیست؟

در زمان inference برای هر توکن، مدل باید تصمیم بگیرد:

«این کلمه باید به کدام کلمات قبلی بیشتر توجه کند؟»

برای این کار، هر توکن به سه بردار تبدیل می‌شود:

بردارهای Q, K, V

برای هر توکن:

* Q (Query) → بردار سوال، “من دنبال چه چیزی هستم؟”

* K (Key) → بردار برچسب، “من چه ویژگی‌هایی دارم؟”

* V (Value) → بردار جواب، “محتوای واقعی من چیست؟”

این سه بردار از ضرب embedding توکن در سه ماتریس یادگرفته‌شده ساخته می‌شوند. پس به یاد داشته باشید که خود این بردار ها نیز از توکن ورودی ساخته شده اند.

🔷 2. فرمول Attention

محاسبه attention به شکل زیر است:

Attention = softmax(QK^T) V

این فرمول چه می‌گوید؟

1. شباهت Q با همه Kها محاسبه می‌شود

2. این شباهت‌ها به احتمال (softmax) تبدیل می‌شوند

3. این وزن‌ها در V ضرب می‌شوند

4. نتیجه = ترکیب هوشمند اطلاعات توکن‌های قبلی

به عبارتی هر بردار سوال هر توکن با این معنا که من دنبال چی هستم و باید به چی بیشتر توجه کنم در بردار های برچسب توکن های دیگر (و خودش) ضرب داخلی میشه، هرچی این مقدار ضرب داخلی بزرگتر باشه یعنی شباهت بردار سوال توکن حاضر و بردار برچسب توکن دیگر بیشتر است، حاصل آن وارد تابع softmax میشه زیرا مقادیر خروجی ضرب داخلی تنها امتیازهایی بدون تفسیر هستند که softmax آنها را به وزن و مقادیر احتمالی قابل تفسیر تبدیل می کنه، سپس این وزن ها در بردار های V ضرب میشن تا جواب هایی که مرتبط تر هستند وزن بیشتری گیرند.

🔷 3. تفاوت مهم Training و Inference

در زمان آموزش (training) همه توکن‌ها همزمان پردازش می‌شوند، یعنی مکانیزم attention به تمام توکن های ورودی همزمان نگاه می کند و مقادیر را تولید می کند.

ولی در زمان تست (inference) مدل یک توکن در هر مرحله تولید می‌کند و تنها مقدار attention توکن ورودی مهم است زیرا برای توکن های قبلی در گذشته محاسبه شده است.

🔷 4. مشکل اصلی در Inference

این است که هر بار که توکن جدید وارد می شود باید بردار های گفته شده دوباره محاسبه شوند که کاری کند و غیر بهینه است.

🔷 5. KV-Cache چیست؟

KV-cache یک بهینه‌سازی مهم در inference است. همان طور که گفتیم در زمان inference تنها محاسبه attention برای توکن ورودی مهم است.

برای اینکار نیاز است که برای توکن ورودی بردار های K, V, Q درست شوند.

ولی نیاز نیست که برای توکن های قبلی هم اینکار انجام شود، زیرا اولا که نیازی به برداری Q آنها نداریم زیرا نمی خواهیم attention را برای آنها حساب کنیم (قبلا محاسبه کرده ایم) دوما تنها بردار های K, V آنها را نیاز داریم.

💡 ایده اصلی:

> K و V توکن‌های قبلی را یک‌بار محاسبه کن و ذخیره کن. دوباره نسازشان.

🔷 6. KV-Cache دقیقاً چه کاری می‌کند؟

در هر مرحله تولید:

برای توکن جدید:

Q جدید ساخته می‌شود

K جدید ساخته می‌شود

V جدید ساخته می‌شود

برای توکن‌های قبلی:

❌ دوباره K/V ساخته نمی‌شوند

✔ از حافظه (cache) خوانده می‌شوند

🔷 7. Attention در زمان استفاده از KV-Cache

در هر step decode:

Attention = softmax(Q_{new} K_{cached}^T) V_{cached}]

یعنی:

فقط Q مربوط به توکن جدید ساخته می‌شود

K و V قبلی reuse می‌شوند

خروجی با ترکیب همه اطلاعات قبلی ساخته می‌شود

🔷 10. چرا attention قبلی دوباره حساب نمی‌شود؟

در inference:

attention هر توکن همان لحظه تولید آن توکن حساب شده

بعد از آن فقط بخشی از context می‌شود

🔷 11. نتیجه مهم KV-Cache

KV-cache باعث می‌شود:

  • سرعت inference به شدت افزایش یابد

  • پیچیدگی محاسبات از حالت سنگین به سبک‌تر تبدیل شود

  • مدل بتواند متن‌های طولانی تولید کند.

با تشکر
احمدرضا سزاوار

۴
۰
Ahmadreza Sezavar
Ahmadreza Sezavar
PhD in AI https://github.com/SezavarH
شاید از این پست‌ها خوشتان بیاید