Chapter 32
অ্যাটেনশন মেকানিজম
Attention Mechanism
🎬 মনোযোগের জাদু
Attention বলে — প্রতিটি output token তৈরির সময় input-এর কোন অংশে "মনোযোগ" দেব। এই সরল ধারণা NLP-তে বিপ্লব এনেছে এবং Transformer-এর ভিত্তি।
সমস্যা — bottleneck
Encoder-Decoder RNN-এ পুরো source sequence একটিমাত্র vector-এ চাপা হয়। দীর্ঘ বাক্যে তথ্য হারিয়ে যায়। Attention প্রতিটি decoder step-এ সব encoder state-এ access দেয়।
Scaled Dot-Product Attention
Attention(Q, K, V) = softmax(Q · Kᵀ / √d_k) · V- Query (Q): "আমি কী খুঁজছি?"
- Key (K): প্রতিটি item-এর "label"।
- Value (V): প্রকৃত তথ্য।
- √d_k দিয়ে scale — gradient stable রাখে।
NumPy-তে scratch implementation
import numpy as np
def softmax(x, axis=-1):
e = np.exp(x - x.max(axis=axis, keepdims=True))
return e / e.sum(axis=axis, keepdims=True)
def attention(Q, K, V):
d_k = Q.shape[-1]
scores = Q @ K.T / np.sqrt(d_k)
weights = softmax(scores)
return weights @ V, weightsSelf-Attention
Self-attention-এ Q, K, V — সব একই sequence থেকে আসে। প্রতিটি token sequence-এর প্রতিটি token-এর সাথে সম্পর্ক হিসেব করে। এটি Transformer-এর কোর।
class SelfAttention(nn.Module):
def __init__(self, d):
super().__init__()
self.q = nn.Linear(d, d)
self.k = nn.Linear(d, d)
self.v = nn.Linear(d, d)
def forward(self, x):
Q, K, V = self.q(x), self.k(x), self.v(x)
s = (Q @ K.transpose(-2,-1)) / (Q.size(-1)**0.5)
a = s.softmax(-1)
return a @ VMulti-Head Attention
একাধিক "head" সমান্তরালে আলাদা subspace-এ attention করে — কেউ syntactic relation, কেউ semantic similarity। ফলাফল concatenate করে একটি linear projection।
mha = nn.MultiheadAttention(embed_dim=512, num_heads=8, batch_first=True)
out, weights = mha(query=x, key=x, value=x)Attention প্রকারভেদ
- Additive (Bahdanau): MLP-based, পুরোনো।
- Dot-product (Luong): দ্রুত।
- Scaled dot-product: আধুনিক স্ট্যান্ডার্ড।
- Masked self-attention: ভবিষ্যত token দেখতে দেয় না (GPT)।
- Cross-attention: decoder encoder-এর দিকে তাকায়।
Visualization
import matplotlib.pyplot as plt
plt.imshow(attn_weights[0].cpu(), cmap="viridis")
plt.xticks(range(len(tokens)), tokens, rotation=90)
plt.yticks(range(len(tokens)), tokens)🔑 কেন এত শক্তিশালী?
Attention আজকের সব SOTA NLP, vision (ViT), audio (Whisper), multimodal (CLIP) model-এর কোর। কারণ এটি (১) parallelizable, (২) long-range dependency সরাসরি ধরে, (৩) interpretable।
অনুশীলন
১. NumPy দিয়ে attention লিখুন এবং একটি ছোট sequence-এ test করুন।
২. Multi-head attention-এ head সংখ্যা পরিবর্তন করে effect দেখুন।
৩. Attention weight visualize করে দেখুন কোন token কাকে দেখছে।
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- Attention = Q·K → softmax → V।
- Self-attention sequence-এর সব token-এর interaction।
- Multi-head একাধিক subspace-এ parallel attention।
- Transformer-এর ভিত্তি।