Home »
Blog »
AI/ML Engineer সিরিজ » Series 07 » Episode 06
Transformer Architecture: self-attention, positional encoding, encoder-decoder
সম্পূর্ণ transformer ছবি (Series 07, Episode 06)
🔴 ADVANCED
Series 07 — NLP, Transformers ও LLM
Episode 06 / 08
📑 এই পর্বে যা যা আছে
- ১. গল্প: "Attention Is All You Need"
- ২. সমস্যা: attention একা যথেষ্ট নয়
- ৩. Transformer-এর সম্পূর্ণ ছবি (visual)
- ৪. Positional Encoding — ক্রম ফিরিয়ে আনা
- ৫. Encoder ব্লকে কী থাকে
- ৬. Decoder ব্লকে কী থাকে
- ৭. তিন স্তরে Transformer
- ৮. তিন ধরনের Transformer: encoder / decoder / both
- ৯. Code: transformers দিয়ে ভেতরটা দেখা
- ১০. Experiment: attention layer গুনে দেখা
- ১১. বাস্তব উদাহরণ ও AI Engineer perspective
- ১২. Boss Question
- ১৩. Job Requirement Decoder: "Transformers"
- ১৪. সাধারণ ভুল
- ১৫. Interview Prep
- ১৬. হাতে-কলমে ও Project Connection
- ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
🧩 ১. গল্প: "Attention Is All You Need"
২০১৭ সালে Google-এর একটা পেপার এল, নাম "Attention Is All You Need"। শিরোনামটাই ছিল সাহসী দাবি —
"শুধু attention-ই যথেষ্ট, RNN লাগবে না!" এই পেপারই Transformer architecture-এর জন্ম দিল,
যা আজকের GPT, BERT, Claude, Gemini — সবকিছুর ভিত্তি।
Rahim: "আপা, গত পর্বে তো attention বুঝলাম। তাহলে Transformer কি শুধু attention?"
Maya: "প্রায়, কিন্তু পুরোপুরি নয়। Transformer হলো attention-কে ঘিরে গড়া একটা সম্পূর্ণ building —
যেখানে attention মূল ইঞ্জিন, কিন্তু তার সাথে আছে positional encoding (ক্রম বোঝাতে), feed-forward layer,
normalization, আর residual connection। আজ আমরা পুরো building-টা ঘুরে দেখব — গণিতে ডুবব না, কিন্তু প্রতিটা
তলা কী করে তা বুঝব।"
❓ ২. সমস্যা: attention একা যথেষ্ট নয়
Self-attention শব্দের মধ্যে সম্পর্ক দেখে, কিন্তু তার একটা মজার দুর্বলতা আছে: সে ক্রম (order)
বোঝে না! কারণ সে সব শব্দকে একসাথে (parallel) দেখে — "কুকুর মানুষকে কামড়ালো" আর "মানুষ কুকুরকে
কামড়ালো" attention-এর কাছে একই set শব্দ। তাই ক্রম আলাদাভাবে যোগ করতে হয় — এটাই positional encoding।
Transformer = attention (সম্পর্ক) + positional encoding (ক্রম) + feed-forward (প্রক্রিয়াকরণ) +
normalization ও residual (স্থিতিশীল training) — সব একসাথে সাজানো।
🖼️ ৩. Transformer-এর সম্পূর্ণ ছবি (visual)
ENCODER (input বোঝে) DECODER (output লেখে)
┌─────────────────────┐ ┌──────────────────────────┐
│ Input Embedding │ │ Output Embedding │
│ + Positional Enc. │ │ + Positional Enc. │
│ | │ │ | │
│ ┌───────────────┐ │ │ ┌────────────────────┐ │
│ │ Multi-Head │ │ │ │ Masked Multi-Head │ │
│ │ Self-Attention│ │ │ │ Self-Attention │ │
│ └───────────────┘ │ │ └────────────────────┘ │
│ ┌───────────────┐ │ │ ┌────────────────────┐ │
│ │ Feed-Forward │ │ ───> │ │ Cross-Attention │ │
│ └───────────────┘ │ │ │ (encoder-কে দেখে) │ │
│ (× N বার) │ │ └────────────────────┘ │
└─────────────────────┘ │ ┌────────────────────┐ │
│ │ Feed-Forward │ │
│ └────────────────────┘ │
│ (× N বার) │
│ | │
│ Linear + Softmax │
│ -> পরের শব্দের সম্ভাবনা │
└──────────────────────────┘
📍 ৪. Positional Encoding — ক্রম ফিরিয়ে আনা
যেহেতু attention ক্রম দেখে না, আমরা প্রতিটা শব্দের embedding-এর সাথে তার অবস্থানের একটা signature
(position vector) যোগ করি। ফলে model জানে কোন শব্দ ১ম, কোনটা ২য়।
শব্দ embedding + position signature = position-aware embedding
"কুকুর"(pos 0) = [emb] + [pos0 pattern]
"কুকুর"(pos 2) = [emb] + [pos2 pattern] <- একই শব্দ, ভিন্ন signature
মূল Transformer sine/cosine তরঙ্গ ব্যবহার করে,
আধুনিক model প্রায়ই "learned" position embedding ব্যবহার করে।
🔧 ৫. Encoder ব্লকে কী থাকে
Encoder-এর কাজ input বাক্যকে "বোঝা" — প্রতিটা শব্দের জন্য একটা context-সমৃদ্ধ representation বানানো। প্রতিটা encoder block-এ থাকে:
- Multi-head self-attention: শব্দগুলোর মধ্যে সম্পর্ক (গত পর্ব)।
- Feed-forward network: প্রতিটা শব্দের representation আলাদাভাবে আরও প্রক্রিয়া করা।
- Residual connection + Layer normalization: gradient স্থিতিশীল রাখে, deep network train করা সহজ করে।
এই block N বার (যেমন ৬, ১২, বা ৯৬ বার) স্তরে স্তরে বসানো হয় — যত গভীর, তত জটিল pattern।
✍️ ৬. Decoder ব্লকে কী থাকে
Decoder-এর কাজ output generate করা — একটা একটা করে শব্দ। এর বিশেষত্ব:
- Masked self-attention: শব্দ generate করার সময় সে শুধু আগের শব্দ দেখতে পারে,
ভবিষ্যৎ শব্দ নয় (নইলে সে "উত্তর দেখে নকল" করত)।
- Cross-attention: encoder-এর output-এ মনোযোগ দেয় (অনুবাদে input বাক্য দেখা)।
- Feed-forward + norm + residual।
গুরুত্বপূর্ণ: GPT-র মতো LLM আসলে শুধু decoder ব্যবহার করে (cross-attention
ছাড়া) — একে বলে decoder-only model। এটা "পরের শব্দ কী হবে" এই একটা কাজ বারবার করে text generate করে।
এটাই S07E08 আর S08-এর ভিত্তি।
🪜 ৭. তিন স্তরে Transformer
Level 1 — সহজ intuition:
Transformer একটা কারখানা। কাঁচামাল (শব্দ) ঢোকে, প্রতিটা তলায় (layer) শব্দগুলো একে অপরের দিকে তাকিয়ে
(attention) নিজেদের বোঝাপড়া উন্নত করে, শেষে একটা পরিশীলিত output বের হয়।
Level 2 — technical:
Input → embedding + positional encoding → N × (multi-head attention + feed-forward + residual/norm) →
context-সমৃদ্ধ representation। Decoder এই representation ব্যবহার করে masked attention দিয়ে একটা একটা token generate করে।
Level 3 — AI Engineer perspective:
আপনি Transformer scratch থেকে লিখবেন না — Hugging Face-এ pretrained আছে (পরের পর্ব)। কিন্তু এই ছবি জানা
মানে আপনি বুঝবেন: BERT (encoder) কেন classification-এ ভালো, GPT (decoder) কেন generation-এ ভালো,
context window কী, আর কেন বড় model = বেশি layer + বেশি parameter।
🔀 ৮. তিন ধরনের Transformer: encoder / decoder / both
| ধরন | উদাহরণ | ভালো কীসে |
| Encoder-only | BERT | বোঝা — classification, embedding, NER |
| Decoder-only | GPT, Llama, Mistral | generate — chat, লেখা, code |
| Encoder-Decoder | T5, BART | রূপান্তর — translation, summarization |
মনে রাখুন: আজকের বেশিরভাগ জনপ্রিয় LLM (GPT, Llama, Claude, Gemini) decoder-only —
একটা কাজেই তারা পটু: "এতক্ষণের text দেখে পরের token কী?" এই একটা কাজ বারবার করেই তারা কবিতা থেকে code সব লেখে।
💻 ৯. Code: transformers দিয়ে ভেতরটা দেখা
কেন transformers? — নিজে Transformer লেখা মানে হাজার লাইন কোড ও বিশাল GPU; Hugging Face
pretrained model দিয়ে আমরা কয়েক লাইনেই ভেতরের গঠন পরখ করতে পারি।
# pip install transformers torch
from transformers import AutoModel, AutoConfig
config = AutoConfig.from_pretrained("bert-base-uncased")
print("layer সংখ্যা:", config.num_hidden_layers) # 12
print("attention head:", config.num_attention_heads) # 12
print("hidden size:", config.hidden_size) # 768
print("max position (context):", config.max_position_embeddings) # 512
model = AutoModel.from_pretrained("bert-base-uncased")
n_params = sum(p.numel() for p in model.parameters())
print(f"মোট parameter: {n_params/1e6:.1f} million") # ~110M
দেখুন — একটা "ছোট" BERT-এও ১২টা layer, ১২টা head, ১১ কোটি parameter। GPT-4-এর মতো model-এ এই সংখ্যা
শত-হাজার গুণ বড়। মূল architecture কিন্তু একই — শুধু আরও বড়, আরও গভীর।
🔬 ১০. Experiment: attention layer গুনে দেখা
from transformers import AutoTokenizer, AutoModel
import torch
tok = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased",
output_attentions=True)
inputs = tok("the cat sat on the mat", return_tensors="pt")
with torch.no_grad():
out = model(**inputs)
# প্রতিটা layer-এর attention weight পাওয়া যায়
print("layer সংখ্যা (attention):", len(out.attentions)) # 12
print("এক layer-এর shape:", out.attentions[0].shape)
# (batch, heads, seq_len, seq_len) -> ঠিক গত পর্বের weight matrix!
যা লক্ষ্য করবেন: গত পর্বে NumPy-তে হাতে বানানো সেই (seq_len, seq_len) attention
weight matrix-ই এখানে বাস্তব model-এ প্রতিটা layer, প্রতিটা head-এ আছে। তত্ত্ব আর বাস্তব এক জায়গায় মিলল।
🇧🇩 ১১. বাস্তব উদাহরণ ও AI Engineer perspective
- বাংলা sentiment (BERT): encoder-only model দিয়ে review classification।
- Summarization (BART/T5): দীর্ঘ বাংলা প্রতিবেদন সংক্ষিপ্ত করা।
- Chat/লেখা (GPT-জাতীয়): decoder-only দিয়ে customer reply draft।
Must Know: Transformer-এর high-level ছবি, encoder vs decoder, positional encoding কেন লাগে।
Good to Know: masked vs cross attention, residual/norm-এর ভূমিকা, তিন ধরনের model।
Learn Later: সম্পূর্ণ গণিত, নিজে Transformer scratch থেকে লেখা, efficient variant।
💼 ১২. Boss Question
Boss: "এত জটিল architecture — আমার team-এর কি এটা মুখস্থ করা দরকার?"
উত্তর: মুখস্থ নয়, বোঝা দরকার। কারণ এই বোঝাপড়াই ঠিক করে দেয় আমরা classification-এর জন্য
BERT নেব না generation-এর জন্য GPT; কেন আমাদের document context window-এ আঁটছে না; কেন বড় model ধীর ও
দামি। এই সিদ্ধান্তগুলো সরাসরি আমাদের product-এর খরচ ও গতিতে প্রভাব ফেলে — তাই architecture বোঝা মানে ভালো সিদ্ধান্ত।
🔎 ১৩. Job Requirement Decoder: "Transformers"
JD-তে:
"Experience with transformer-based models (BERT, GPT)."
| প্রশ্ন | উত্তর |
| কী বোঝায়? | Transformer architecture বোঝা ও pretrained model কার্যকরভাবে ব্যবহার করতে পারা। |
| কেন চায়? | প্রায় সব আধুনিক NLP/LLM Transformer-ভিত্তিক। |
| কোন সমস্যা সমাধান করে? | দীর্ঘ context বোঝা + parallel training + high-quality representation। |
| junior-এর কী জানা লাগে? | encoder vs decoder, কখন কোনটা, Hugging Face দিয়ে model চালানো। |
| এখনই কী master লাগে না? | scratch থেকে Transformer লেখা বা pretraining। |
| GitHub-এ কীভাবে দেখাবেন? | একটা pretrained transformer দিয়ে বাংলা/ইংরেজি classification বা summarization demo। |
| Interview-তে? | "encoder vs decoder model?", "positional encoding কেন?", "GPT কোন ধরনের Transformer?" |
⚠️ ১৪. সাধারণ ভুল
ভুল ১: Transformer = attention ভাবা। → attention মূল ইঞ্জিন, কিন্তু positional encoding, feed-forward, norm সবই দরকার।
ভুল ২: GPT আর BERT এক ধরনের ভাবা। → GPT decoder-only (generation), BERT encoder-only (বোঝা)।
ভুল ৩: positional encoding ঐচ্ছিক ভাবা। → এটা ছাড়া model শব্দের ক্রমই বুঝবে না।
ভুল ৪: বড় model মানেই সবসময় ভালো ভাবা। → task, খরচ, latency অনুযায়ী ছোট model প্রায়ই যথেষ্ট ও সাশ্রয়ী।
🎤 ১৫. Interview Prep
প্রশ্ন ১: Positional encoding কেন দরকার?
উত্তর: self-attention সব শব্দ parallel দেখে, তাই ক্রম বোঝে না; positional encoding প্রতিটা শব্দে
অবস্থানের তথ্য যোগ করে যাতে ক্রম টিকে থাকে।
প্রশ্ন ২: Encoder ও decoder-এর পার্থক্য?
উত্তর: encoder পুরো input একসাথে দেখে বোঝে (classification/embedding); decoder masked attention
দিয়ে একটা একটা করে output generate করে (শুধু আগের token দেখে)।
প্রশ্ন ৩: GPT কোন ধরনের Transformer?
উত্তর: decoder-only — "পরের token কী" এই কাজটাই বারবার করে text generate করে।
✍️ ১৬. হাতে-কলমে ও Project Connection
১. উপরের config কোড দিয়ে gpt2 আর bert-base-uncased-এর layer, head, parameter তুলনা করুন।
২. নিজের ভাষায় একটা ছোট টেবিল বানান: কোন task-এ encoder, কোনটায় decoder, কোনটায় encoder-decoder।
৩. আমাদের JD-classification-এ (encoder না decoder?) কোনটা বেছে নেবেন আর কেন — লিখুন।
flagship "Bangladesh Tech Career Assistant"-এ আমরা এখন সিদ্ধান্ত নিতে পারি: JD বোঝা ও
embedding-এর জন্য encoder-based model (S07E07-এ Hugging Face দিয়ে), আর উত্তর/summary লেখার জন্য
decoder-based LLM (S07E08 → S08)। এই architecture-জ্ঞানই আমাদের সঠিক tool বাছতে সাহায্য করছে।
📌 ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
এই পর্বে শিখলাম:
✓ Transformer = attention + positional encoding + feed-forward + norm/residual
✓ Positional encoding ক্রম ফিরিয়ে আনে (attention একা ক্রম বোঝে না)
✓ Encoder বোঝে, Decoder generate করে (masked + cross attention)
✓ তিন ধরন: encoder-only (BERT), decoder-only (GPT), encoder-decoder (T5)
✓ pretrained model-এ layer/head/parameter হাতে-কলমে দেখা
✓ গত পর্বের attention matrix-ই বাস্তব model-এর প্রতিটা layer-এ আছে
পরবর্তী পর্ব (S07E07): তত্ত্ব যথেষ্ট! এবার হাতে-কলমে — Hugging Face দিয়ে
pretrained transformer ব্যবহার করে সত্যিকারের একটা NLP task (Project P6) সমাধান করব। কয়েক লাইনে
classification, তারপর একটা ছোট model fine-tune।