نویسنده (ها): جوزف رابینسون ، دکتری
در ابتدا منتشر شده در به سمت هوش مصنوعیبشر
ترانسفورماتور = K-nn نرم. یک پرس و جو می پرسد ، “چه کسی مثل من است؟” آراء SoftMax ، و همسایگان میانگین وزنی را زمزمه می کنند. این یک سر توجه است. بوها K-nn نرم و متفاوت: اندازه گیری شباهت → نمرات را به وزنه ها تبدیل کنید (softmax) → همسایگان خود را میانگین (مجموع وزن).
TL ؛ دکتر

- مقیاس شده توسط
1/sqrt(d)
برای جلوگیری از اشباع SoftMax با افزایش ابعاد. - ماسک ها تصمیم می گیرند سازمان بهداشت جهانی شما مجاز به نگاه کردن (علت ، بالشتک و غیره) هستید.
شهود (60 ثانیه)
- بوها پرسش بردار 𝐪 می پرسد: “کدام نشانه ها مثل من هستند؟”
- 𝐪 را با هر یک مقایسه کنید کلید 𝒌ᵢ برای به دست آوردن نمرات شباهت.
- SoftMax نمرات را به یک توزیع مانند احتمال تبدیل می کند (وزن سنگین تر ⇢ مشابه).
- در میانگین وزنی از ارزش بردار 𝐯ᵢبشر
این توجه است: الف میانگین همسایه نرم و آگاه سفارشبشر
ریاضی (ساده ، حداقل)
یک سر ، کلید/پرس و جو DIM 𝒅 ، مقدار کم نورᵥبشر با

- شباهت (محصول مقیاس مقیاس):

(اختیاری) ماسک

- وزنه ها (SoftMax Row-Wise)

- میانگین وزنی مقادیر:

چرا مقیاس 1/sqrt {d}؟
محصولات DOT از بردارهای تصادفی D بعدی مانند O رشد می کنند (SQRT {𝒅}). نمرات نامشخص Softmax را به سمت خود سوق می دهد برنده همه (یک وزن ≈ 1 ، دیگران ≈) ، در حال فروپاشی شیببشر تقسیم توسط SQRT {𝒅} واریانس نمره را حفظ می کند – و در نتیجه آنتروپی از softmax – در یک محدوده سالم.
ماسک (علت یا بالشتک)
اضافه کردن پیش از softmax:
- علی (مدل سازی زبان): موقعیت های بلوک j>حرف برای هر TimeStep حرفبشر
- بالشتک: نشانه های مسکونی که دارایی هستند.
به طور رسمی ، a = softmax (s+m) با mᵢⱼ = 0 در صورت مجاز ، در غیر این صورت.
نمای K-NN نرم (و انواع)
شباهت را مبادله کنید و شما را عوض می کنید تعصب القایی:
- نقطه محصول (جهت وت بزرگی):

- قارچ (فقط زاویه ؛ طول-متغیر):

- فاصله منفی ، یک گاوسی/RBF طعم (محله های اقلیدسی):

پس SoftMax → وزنه ها → میانگین وزنی مثل قبل دما τ (یا یک مقیاس ضمنی) کنترل می کند نرمی: پایین تر τ ⇒ واضح تر ، رفتار مانند argmax.
حداقل numpy (یک سر ، وضوح بیش از سرعت)
هدف: وضوح بیش از سرعت. این کل عملیاتی است که در مقالات دیده اید.
import numpy as npdef softmax(x, axis=-1):
x = x - np.max(x, axis=axis, keepdims=True) # numerical stability
ex = np.exp(x)
return ex / np.sum(ex, axis=axis, keepdims=True)
def attention(Q, K, V, mask=None):
"""
Q: (n_q, d), K: (n_k, d), V: (n_k, d_v)
mask: (n_q, n_k) with 0=keep, -inf=block (or None)
Returns: (n_q, d_v), (n_q, n_k)
"""
d = Q.shape[-1]
scores = (Q @ K.T) / np.sqrt(d) # (n_q, n_k)
if mask is not None:
scores = scores + mask
weights = softmax(scores, axis=-1) # (n_q, n_k)
return weights @ V, weights
یک اسباب بازی کوچک: 6 توکن در 2-D
ما 6 تعبیه کننده توکن ، یک پرس و جو واحد ایجاد خواهیم کرد و تماشا می کنیم که وزنه ها مانند یک انتخاب همسایه نرم رفتار می کنند.
# Toy data
np.random.seed(7)
n_tokens, d, d_v = 6, 2, 2K = np.array([[ 1.0, 0.2],
[ 0.9, 0.1],
[ 0.2, 1.0],
[-0.2, 0.9],
[ 0.0, -1.0],
[-1.0, -0.6]])
# Values as a simple linear map of keys (intuition)
Wv = np.array([[0.7, 0.1],
[0.2, 0.9]])
V = K @ Wv
# Query near the first cluster
Q = np.array([[0.8, 0.15]]) # (1, d)
out, W = attention(Q, K, V)
print("Attention weights:", np.round(W, 3))
print("Output vector:", np.round(out, 3))
# -> weights ~ heavier on the first two neighbors
وزن توجه: [[0.252 0.236 0.174 0.138 0.126 0.075]]
بردار خروجی: [[0.318 0.221]]
بیایید وزنهای را از مثال اسباب بازی فوق تجسم کنیم:

علاوه بر این ، ما می توانیم این هندسی را تجسم کنیم.

Cosine vs Dot Product vs RBF (طعم های نرم K-NN)
سعی کنید شباهت را عوض کنید و تغییر نقشه گرما را مشاهده کنید.
def attention_with_sim(Q, K, V, sim="dot", tau=1.0, eps=1e-9):
if sim == "dot":
scores = (Q @ K.T) / np.sqrt(K.shape[-1])
elif sim == "cos":
Qn = Q / (np.linalg.norm(Q, axis=-1, keepdims=True) + eps)
Kn = K / (np.linalg.norm(K, axis=-1, keepdims=True) + eps)
scores = (Qn @ Kn.T) / tau
elif sim == "rbf":
# scores = -||q-k||^2 / (2*tau^2)
q2 = np.sum(Q**2, axis=-1, keepdims=True) # (n_q, 1)
k2 = np.sum(K**2, axis=-1, keepdims=True).T # (1, n_k)
qk = Q @ K.T # (n_q, n_k)
d2 = q2 + k2 - 2*qk
scores = -d2 / (2 * tau**2)
else:
raise ValueError("sim in {dot, cos, rbf}")
W = softmax(scores, axis=-1)
return W @ V, W, scoresfor sim in ["dot", "cos", "rbf"]:
out_s, W_s, _ = attention_with_sim(Q, K, V, sim=sim, tau=0.5)
print(sim, "weights:", np.round(W_s, 3), "out:", np.round(out_s, 3))
وزن نقطه: [[0.252 0.236 0.174 0.138 0.126 0.075]]خارج: [[0.318 0.221]]
وزن COS: [[0.397 0.394 0.113 0.05 0.037 0.008]]خارج: [[0.576 0.287]]
وزن RBF: [[0.443 0.471 0.055 0.021 0.01 0. ]]خارج: [[0.651 0.268]]
غذای آماده: انتخاب شباهت = تعصب القاییبشر Cosine روی زاویه تمرکز دارد. RBF در محله های اقلیدسی ؛ نقطه هم بزرگی و هم جهت را مخلوط می کند.

ماسک های علیت و بالشتک (مدل سازی زبان)
- علت: از نگاه کردن به نشانه های آینده جلوگیری کنید. برای موقعیت حرف، بلوک> حرفبشر
- بالشتک: نشانه های طول صفر نباید توجه کنند.
# Causal mask for sequence length n (upper-triangular blocked)
n = 6
mask = np.triu(np.ones((n, n)) * -1e9, k=1)# Visualize structure by setting Q=K=V (toy embeddings)
X = K
out_seq, A = attention(X, X, X, mask=mask)
# Row sums stay 1.0 (softmax is row-wise):
print(np.allclose(np.sum(A, axis=1), 1.0))
درست

نوک ماسک بالشتک: یک ماسک بولی بسازید که در آن موقعیت های بالشتک در ماتریس اضافه شده قرار می گیرند. استفاده مجدد از همان
attention
عملکرد.
نسخه ی نمایشی سریع: چرا مقیاس گذاری کار می کند
تولید تصادفی 𝑄 ، 𝒦 با بزرگ. مقایسه کردن نرم آنتروپی با vs بدون 1/sqrt {}.
def entropy(p, axis=-1, eps=1e-12):
p = np.clip(p, eps, 1.0)
return -np.sum(p * np.log(p), axis=axis)nq = nk = 64
dims = [256*(2**i) for i in range(7)] # 256..16,384
trials = 5
H_max = np.log(nk)
for dim in dims:
H_u = []
H_s = []
for _ in range(trials):
Q = np.random.randn(nq, dim)
K = np.random.randn(nk, dim)
S_unscaled = Q @ K.T
S_scaled = S_unscaled / np.sqrt(dim)
H_u.append(entropy(softmax(S_unscaled, axis=-1), axis=-1).mean())
H_s.append(entropy(softmax(S_scaled, axis=-1), axis=-1).mean())
print(f"{dim:>6} | unscaled: {np.mean(H_u):.3f} scaled: {np.mean(H_s):.3f} (max={H_max:.3f})")
256 | Unscaled: 0.280 مقیاس: 3.686 (حداکثر = 4.159)
512 | Unscaled: 0.165 مقیاس: 3.672 (حداکثر = 4.159)
1024 | Unscaled: 0.124 مقیاس: 3.682 (حداکثر = 4.159)
2048 | Unscaled: 0.078 مقیاس: 3.669 (حداکثر = 4.159)
4096 | Unscaled: 0.063 مقیاس: 3.689 (حداکثر = 4.159)
8192 | Unscaled: 0.041 مقیاس: 3.685 (حداکثر = 4.159)
16384 | Unscaled: 0.024 مقیاس: 3.694 (حداکثر = 4.159)
چرا این مهم است؟
پاسخ کوتاه: مقیاس از SoftMax جلوگیری می کند.
- شماره های شما نشان می دهد آنتروپی ~ 0.07-0.28 (غیررسمی) در مقابل 3.68 پوند (مقیاس)بشر با 64 کلید ، حداکثر آنتروپی ممکن ln (64) ≈4.16 است.
- نامشخص نزدیک یک داغ توزیع: یکی از کلیدها توده توده ، دیگران 0 ~. ناپدید/ناپایدار شیب، توجه شکننده
- مقیاس شده توسط 1/sqrt {𝒅 ⇒ آنتپی، وزن خوب: همسایگان متعدد مشارکت می کنند. شیب سالم باقی می ماند.
چرا این اتفاق می افتد: برای بردارهای تصادفی با ورودی های مستقل و یکسان توزیع شده (IID) ، Qᵀk دارای واریانس است. با افزایش 𝒅 ، مقیاس ورود به سیستم رشد می کند ، بنابراین SoftMax اشباع می شود. تقسیم توسط SQRT {𝒅} واریانس ورود را به O (1) عادی می کند ، و “دمای” Softmax را تقریباً در بین ابعاد ثابت نگه می دارد.
NET: 1/SQRT {𝒅} یادگیری و ثبات را حفظ می کند-توجه به جای اینکه در argmax سخت باشد ، یک K-NN نرم باقی می ماند.
حالت های خرابی (و رفع ساده)
1⃣ شباهت های مسطح ⇒ خروجی مبهم.
- رفع: مقیاس دمای پایین تر / افزایش ؛ برای جدا کردن نشانه ها ، پیش بینی های w_🄠 ، w_🄚 را بیاموزید.
2⃣ یک نشانه حاکم است (softmax بیش از حد مطمئن) ⇒ شکننده.
- رفع: تنظیم دما ، ترک توجه و تنوع چند سر.
3⃣ متریک اشتباه.
- رفع: كسین فقط برای زاویه ؛ RBF برای محل اقلیدسی ؛ نقطه وقتی بزرگی حامل سیگنال است.
از این تا “توجه ترانسفورماتور”
پیش بینی های آموخته شده را اضافه کنید:

و سرهای H = 1… H را تکرار کنید ، سپس خروجی ها را جمع کنید و با W_🄞 مخلوط کنید – همان هسته: همسایه نرم میانگین، فقط در چند زیر مجموعه آموخته.
پایان
توجه عرفانی نیست – این است K-NN نرم با پیش بینی های قابل یادگیریبشر یک پرس و جو از “چه کسی مثل من است” می پرسد ، SoftMax شباهت هایی را به توزیع تبدیل می کند و خروجی میانگین همسایه وزنی است. دو دستگیره باعث می شود که در عمل کار کند:
- اندازه توسط 1/sqrt {𝒅} برای نگه داشتن ورود به سیستم O (1) و آنتروپی را حفظ کنید -نسخه ی نمایشی ما اشباع را بدون آن (تقریباً آراگماکس) و نرمی سالم و ابعاد با آن نشان می دهد.
- ماسک قوانین مسیریابی هستند: علّی “بدون نگاه کردن” ، برای “نادیده گرفتن خالی”.
شما مشابه انتخاب یک است تعصب القایی: dot (بزرگی+جهت) ، Cosine (زاویه) ، RBF (محلات اقلیدسی). چند سر این را در زیر فضای موازی اجرا می کند و آنها را مخلوط می کند.
هنگامی که همه چیز شکست می خورد: سیم های مسطح ⇒ مبهم ؛ Sims Peaky ⇒ شکننده ؛ اشتباه متریک ⇒ نادرست ، با دما/مقیاس ، ترک تحصیل ، پیش بینی های بهتر یا یک متریک که با هندسه داده های شما مطابقت دارد ، رفع کنید.
خط پایین: توجه را به عنوان فکر کنید میانگین همسایه احتمالی با یک ترموستات. دما را به درستی دریافت کنید (1/sqrt {𝒅}) ، محله مناسب (شباهت + ماسک) را انتخاب کنید و بقیه مهندسی است.
منتشر شده از طریق به سمت هوش مصنوعی
منبع: https://towardsai.net/p/machine-learning/attention-soft-k-nn