Home »
Blog »
AI/ML Engineer সিরিজ » Series 07 » Episode 05
Attention: 'কোন শব্দে বেশি মনোযোগ' — Transformer বিপ্লবের বীজ
self-attention-এর intuition (Series 07, Episode 05)
🔴 ADVANCED
Series 07 — NLP, Transformers ও LLM
Episode 05 / 08
📑 এই পর্বে যা যা আছে
- ১. গল্প: অনুবাদ করতে গিয়ে যে সমস্যা
- ২. সমস্যা: এক সারাংশে পুরো বাক্য চাপা
- ৩. Attention-এর মূল ধারণা
- ৪. তিন স্তরে attention
- ৫. Query, Key, Value — লাইব্রেরির রূপক
- ৬. Visual: self-attention কীভাবে কাজ করে
- ৭. অঙ্কের গল্প: score → softmax → weighted sum
- ৮. Code: NumPy-তে ছোট self-attention
- ৯. Experiment: "it" কাকে বোঝায়
- ১০. Multi-head attention (সংক্ষেপে)
- ১১. কেন attention RNN-কে হারায়
- ১২. Boss Question ও AI Engineer perspective
- ১৩. Job Requirement Decoder: "Attention Mechanism"
- ১৪. সাধারণ ভুল
- ১৫. Interview Prep
- ১৬. হাতে-কলমে ও Project Connection
- ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
🧩 ১. গল্প: অনুবাদ করতে গিয়ে যে সমস্যা
ধরুন আমরা একটা model বানাতে চাই যা ইংরেজি থেকে বাংলা অনুবাদ করে। পুরনো (RNN) পদ্ধতিতে model প্রথমে
পুরো ইংরেজি বাক্য পড়ে একটা একক সারাংশ vector-এ চাপত, তারপর সেটা থেকে বাংলা লিখত।
Maya: "Rahim, ভাবো — 'The cat that the dog chased ran away' — এই দীর্ঘ বাক্যকে যদি একটাই ছোট
vector-এ চেপে ফেলি, তাহলে কি সব তথ্য টিকবে?"
Rahim: "না আপা, শুরুর 'cat'-এর কথা তো হারিয়ে যাবে, ঠিক RNN-এর সেই ভুলে যাওয়ার সমস্যা!"
Maya: "একদম। ২০১৪-১৭ সালে গবেষকরা ভাবলেন — বাংলা প্রতিটা শব্দ লেখার সময় model যদি ইংরেজি বাক্যের
সবচেয়ে প্রাসঙ্গিক শব্দগুলোর দিকে ফিরে তাকাতে পারত? এই 'ফিরে তাকিয়ে সঠিক শব্দে মনোযোগ দেওয়া'-ই
attention। আর এটাই পুরো AI দুনিয়া বদলে দিল।"
❓ ২. সমস্যা: এক সারাংশে পুরো বাক্য চাপা
RNN/LSTM পুরো বাক্যকে একটা fixed-size hidden state-এ চাপে। বাক্য যত দীর্ঘ, তত বেশি তথ্য এক জায়গায়
গাদাগাদি হয় — এটাকে বলে information bottleneck। attention এই bottleneck ভেঙে দেয়:
প্রতিটা শব্দ প্রয়োজনমতো যেকোনো শব্দের তথ্য সরাসরি টেনে নিতে পারে।
মূল idea: একটা শব্দের মানে বুঝতে হলে বাক্যের কোন কোন শব্দ বেশি গুরুত্বপূর্ণ — model সেটা নিজে হিসাব করে
নেয় আর সেই অনুযায়ী "মনোযোগের ওজন" (attention weight) দেয়।
🎯 ৩. Attention-এর মূল ধারণা
Self-attention-এ বাক্যের প্রতিটা শব্দ বাকি প্রতিটা শব্দের সাথে নিজের সম্পর্ক মাপে, তারপর
সেই সম্পর্কের ওজন দিয়ে বাকি শব্দগুলোর তথ্য মিশিয়ে নিজের একটা নতুন, context-সমৃদ্ধ representation বানায়।
বাক্য: "কুকুরটা ক্লান্ত ছিল কারণ সেটা দৌড়েছিল"
"সেটা" শব্দটার নতুন representation বানাতে গিয়ে
self-attention হিসাব করে:
সেটা --> কুকুরটা : ওজন 0.7 (সবচেয়ে প্রাসঙ্গিক!)
সেটা --> ক্লান্ত : ওজন 0.1
সেটা --> দৌড়েছিল: ওজন 0.2
তাই "সেটা" মূলত "কুকুরটা"-র অর্থ টেনে নেয় = reference বোঝা
🪜 ৪. তিন স্তরে attention
Level 1 — সহজ intuition:
একটা মিটিংয়ে সবাই কথা বলছে, কিন্তু আপনি নির্দিষ্ট একটা বিষয়ে সবচেয়ে প্রাসঙ্গিক মানুষের কথায় বেশি কান
দেন। attention ঠিক তাই — প্রতিটা শব্দ বাকি সব শব্দের কথা "শোনে", কিন্তু প্রাসঙ্গিক শব্দে বেশি "কান দেয়"।
Level 2 — technical:
প্রতিটা শব্দের জন্য তিনটা vector বানানো হয়: Query (Q), Key (K),
Value (V)। একটা শব্দের Q বাকি সব শব্দের K-এর সাথে dot product করে similarity score
পায়; সেই score-এ softmax দিয়ে ওজন (০–১, যোগফল ১) বানায়; তারপর সেই ওজন দিয়ে সব V-এর weighted sum
নেয় = নতুন representation।
Level 3 — AI Engineer perspective:
একজন engineer হিসেবে আপনি সাধারণত attention নিজে implement করবেন না — PyTorch/Transformers-এ এটা তৈরি।
কিন্তু বোঝা জরুরি: attention-ই ব্যাখ্যা করে কেন LLM দীর্ঘ context ধরতে পারে, কেন context window গুরুত্বপূর্ণ,
আর কেন খরচ বাক্যের দৈর্ঘ্যের সাথে দ্রুত বাড়ে (n² জটিলতা)।
📚 ৫. Query, Key, Value — লাইব্রেরির রূপক
ভাবুন একটা লাইব্রেরি:
Query (Q): আপনি যা খুঁজছেন — "মেশিন লার্নিং বই"।
Key (K): প্রতিটা বইয়ের তাকের লেবেল/সূচক।
Value (V): বইয়ের আসল বিষয়বস্তু।
আপনার Query প্রতিটা বইয়ের Key-র সাথে মেলে — যেটা সবচেয়ে বেশি মেলে, সেই বইয়ের Value (বিষয়বস্তু) আপনি
বেশি নেন। attention ঠিক এই "Query দিয়ে Key খুঁজে, মিল অনুযায়ী Value টানা" কাজটাই করে — কিন্তু সংখ্যায়।
🖼️ ৬. Visual: self-attention কীভাবে কাজ করে
প্রতিটা শব্দ -> Q, K, V vector
Step 1: score = Q · Kᵀ (প্রতি জোড়া শব্দের similarity)
Step 2: scale ( ÷ √d ) + softmax -> attention weights (যোগফল = 1)
Step 3: output = weights · V (প্রাসঙ্গিক তথ্যের weighted mix)
কুকুরটা ক্লান্ত সেটা
কুকুরটা [ 0.6 0.1 0.3 ]
ক্লান্ত [ 0.2 0.7 0.1 ] <- attention weight matrix
সেটা [ 0.7 0.1 0.2 ] (প্রতি row-এর যোগফল 1)
"সেটা" row -> "কুকুরটা"-তে সবচেয়ে বেশি ওজন
🔢 ৭. অঙ্কের গল্প: score → softmax → weighted sum
ভয় পাবেন না — মূল সূত্র একটাই, আর প্রতিটা অংশের মানে আমরা জানি:
Attention(Q, K, V) = softmax( (Q · Kᵀ) / √d_k ) · V
- Q · Kᵀ : প্রতি জোড়া শব্দের মিল কত (dot product)
- ÷ √d_k : সংখ্যা খুব বড় হয়ে softmax যেন নষ্ট না হয় (scaling)
- softmax: score-কে ০–১ ওজনে রূপান্তর, যোগফল ১
- · V : সেই ওজন দিয়ে value-র weighted average
💻 ৮. Code: NumPy-তে ছোট self-attention
কেন NumPy? — attention আসলে কয়েকটা matrix গুণ ছাড়া কিছু নয়, সেটা নিজের চোখে দেখাতে NumPy-ই যথেষ্ট,
কোনো framework-এর জাদু ছাড়াই।
import numpy as np
def softmax(x):
e = np.exp(x - x.max(axis=-1, keepdims=True))
return e / e.sum(axis=-1, keepdims=True)
def self_attention(X):
# X: (seq_len, d) -- প্রতিটা row একটা শব্দের embedding
d = X.shape[-1]
# সরলতার জন্য Q=K=V=X ধরছি (বাস্তবে আলাদা weight matrix থাকে)
Q, K, V = X, X, X
scores = Q @ K.T / np.sqrt(d) # (seq_len, seq_len)
weights = softmax(scores) # প্রতি row-এর যোগফল 1
output = weights @ V # context-সমৃদ্ধ নতুন representation
return output, weights
# 3টি শব্দ, প্রতিটা 4-মাত্রার embedding
X = np.array([
[1.0, 0.0, 1.0, 0.0], # কুকুরটা
[0.0, 1.0, 0.0, 1.0], # ক্লান্ত
[0.9, 0.1, 0.8, 0.1], # সেটা (কুকুরটার কাছাকাছি!)
])
out, w = self_attention(X)
print("Attention weights:\n", w.round(2))
# "সেটা" row -> "কুকুরটা"-তে সবচেয়ে বেশি ওজন দেখা যাবে
🔬 ৯. Experiment: "it" কাকে বোঝায়
উপরের কোডে "সেটা"-র embedding ইচ্ছে করে "কুকুরটা"-র কাছাকাছি রাখা হয়েছে। চালিয়ে দেখুন — weight matrix-এ
"সেটা" row-এ "কুকুরটা" column সবচেয়ে বড় ওজন পায়। এবার "সেটা"-র embedding বদলে "ক্লান্ত"-র কাছাকাছি করুন
আর দেখুন ওজন কীভাবে সরে যায়। এটাই attention-এর "reference resolution" — কোন শব্দ কাকে বোঝাচ্ছে তা ধরা।
🧩 ১০. Multi-head attention (সংক্ষেপে)
একটা attention "head" এক ধরনের সম্পর্ক ধরে (যেমন কর্তা-ক্রিয়া)। কিন্তু ভাষায় অনেক ধরনের সম্পর্ক থাকে।
তাই Transformer একসাথে একাধিক head চালায় — প্রতিটা head ভিন্ন ধরনের সম্পর্কে মনোযোগ দেয়,
তারপর সব মিলিয়ে নেওয়া হয়। একে বলে multi-head attention। এটাই পরের পর্বের Transformer-এর মূল component।
⚡ ১১. কেন attention RNN-কে হারায়
| বিষয় | RNN/LSTM | Attention |
| দীর্ঘ dependency | দুর্বল (ভুলে যায়) | যেকোনো দূরত্ব সরাসরি দেখে |
| গতি | sequential, ধীর | parallel, দ্রুত (GPU-বান্ধব) |
| ব্যাখ্যা | hidden state অস্বচ্ছ | attention weight দেখা যায় |
| খরচ | দৈর্ঘ্যে linear | দৈর্ঘ্যে n² (দীর্ঘ বাক্যে দামি) |
লক্ষ্য করুন — attention নিখুঁত নয়; দীর্ঘ input-এ n² খরচ একটা বাস্তব সমস্যা (তাই context window সীমিত)।
কিন্তু parallel হওয়া আর দীর্ঘ dependency ধরার ক্ষমতা এটাকে বিজয়ী করেছে।
💼 ১২. Boss Question ও AI Engineer perspective
Boss: "এই attention জিনিসটা আমার business-এ সরাসরি কোথায় লাগবে?"
উত্তর: সরাসরি হয়তো আপনি attention লিখবেন না — কিন্তু আপনার ব্যবহার করা প্রতিটা আধুনিক
AI (ChatGPT, translation, summarization, semantic search) এই attention-এর উপরেই দাঁড়ানো। কেন আমাদের
chatbot দীর্ঘ context মনে রাখে, কেন খরচ input দৈর্ঘ্যের সাথে বাড়ে, কেন context window সীমিত —
এসব সিদ্ধান্ত ও খরচ হিসাব attention না বুঝলে ব্যাখ্যা করা যায় না।
Must Know: attention-এর intuition, Q/K/V, কেন এটা RNN-কে হারায়।
Good to Know: softmax scaling, multi-head, self vs cross attention।
Learn Later: attention-এর সম্পূর্ণ ম্যাট্রিক্স গণিত, efficient attention (FlashAttention ইত্যাদি)।
🔎 ১৩. Job Requirement Decoder: "Attention Mechanism"
JD-তে:
"Understanding of attention mechanisms and transformers."
| প্রশ্ন | উত্তর |
| কী বোঝায়? | model কীভাবে বাক্যের প্রাসঙ্গিক শব্দে মনোযোগ দেয় সেই ধারণা। |
| কেন চায়? | সব আধুনিক NLP/LLM attention-ভিত্তিক; এটা না বুঝলে LLM ব্যবহারের গভীরতা থাকে না। |
| কোন সমস্যা সমাধান করে? | দীর্ঘ dependency + parallel training — RNN-এর দুই বড় দুর্বলতা। |
| junior-এর কী জানা লাগে? | Q/K/V intuition, self-attention কী করে, কেন RNN-এর চেয়ে ভালো। |
| এখনই কী master লাগে না? | নিজে multi-head attention scratch থেকে optimize করা। |
| GitHub-এ কীভাবে দেখাবেন? | একটা ছোট self-attention NumPy notebook + attention weight visualize। |
| Interview-তে? | "self-attention ব্যাখ্যা করুন", "Q/K/V কী?", "attention কেন RNN-কে হারায়?" |
⚠️ ১৪. সাধারণ ভুল
ভুল ১: attention আর LSTM-এর memory এক ভাবা। → attention memory রাখে না; প্রতিবার সব শব্দের সম্পর্ক নতুন করে হিসাব করে।
ভুল ২: softmax scaling (÷√d) বাদ দেওয়া গুরুত্বহীন ভাবা। → বড় dot product softmax-কে অতি-তীক্ষ্ণ করে ফেলে, শেখা কঠিন হয়।
ভুল ৩: attention = পুরো Transformer ভাবা। → attention একটা component; Transformer-এ এর সাথে positional encoding, feed-forward ইত্যাদিও থাকে (পরের পর্ব)।
ভুল ৪: attention খরচ input দৈর্ঘ্যে linear ভাবা। → আসলে n² — তাই খুব দীর্ঘ context দামি।
🎤 ১৫. Interview Prep
প্রশ্ন ১: Self-attention কীভাবে কাজ করে?
উত্তর: প্রতিটা শব্দের Q বাকি শব্দের K-এর সাথে dot product করে score পায়, softmax দিয়ে ওজন বানায়,
সেই ওজন দিয়ে V-এর weighted sum নিয়ে context-সমৃদ্ধ representation বানায়।
প্রশ্ন ২: Q, K, V কী?
উত্তর: Query (কী খুঁজছি), Key (কীসের সাথে মিলাব), Value (আসল তথ্য) — প্রতিটা শব্দের embedding থেকে
আলাদা weight দিয়ে তৈরি।
প্রশ্ন ৩: attention কেন RNN-এর চেয়ে ভালো?
উত্তর: যেকোনো দুই শব্দের সরাসরি সম্পর্ক দেখে (দীর্ঘ dependency), এবং parallelize করা যায় (দ্রুত training)।
✍️ ১৬. হাতে-কলমে ও Project Connection
১. উপরের NumPy self-attention-এ ৪র্থ একটা শব্দ যোগ করুন আর weight matrix কীভাবে বদলায় দেখুন।
২. Q, K, V-এর জন্য আলাদা random weight matrix (W_q, W_k, W_v) যোগ করে "শেখার যোগ্য" attention বানান।
৩. নিজের ভাষায় লিখুন: কেন attention-এর খরচ বাক্যের দৈর্ঘ্যের বর্গের (n²) সমানুপাতিক।
আমাদের flagship "Bangladesh Tech Career Assistant" সরাসরি attention লিখবে না, কিন্তু
এই পর্ব ছাড়া আমরা বুঝতে পারতাম না কেন আমাদের ব্যবহার করা sentence-embedding ও LLM এত ভালো context ধরে।
এটাই আমাদের পরের বড় ধাপ — Transformer ও LLM — বোঝার চাবি।
📌 ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
এই পর্বে শিখলাম:
✓ Attention = প্রতিটা শব্দ বাকি প্রাসঙ্গিক শব্দে "মনোযোগ" দিয়ে context টেনে নেয়
✓ Q (query), K (key), V (value) — লাইব্রেরির রূপকে
✓ সূত্র: softmax(Q·Kᵀ/√d)·V — score → ওজন → weighted sum
✓ NumPy-তে ছোট self-attention চালিয়ে "সেটা → কুকুরটা" reference ধরা
✓ Multi-head = একসাথে অনেক ধরনের সম্পর্কে মনোযোগ
✓ attention RNN-কে হারায় (দীর্ঘ dependency + parallel), কিন্তু খরচ n²
পরবর্তী পর্ব (S07E06): attention তো বুঝলাম — এবার সেটা দিয়ে পুরো
Transformer architecture বানানো। positional encoding, encoder, decoder, আর "Attention
Is All You Need" পেপারের সম্পূর্ণ ছবি — conceptual ভাবে, সহজ বাংলায়।