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"

২০১৭ সালে 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-এ থাকে:

এই block N বার (যেমন ৬, ১২, বা ৯৬ বার) স্তরে স্তরে বসানো হয় — যত গভীর, তত জটিল pattern।

✍️ ৬. Decoder ব্লকে কী থাকে

Decoder-এর কাজ output generate করা — একটা একটা করে শব্দ। এর বিশেষত্ব:

গুরুত্বপূর্ণ: 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-onlyBERTবোঝা — classification, embedding, NER
Decoder-onlyGPT, Llama, Mistralgenerate — chat, লেখা, code
Encoder-DecoderT5, 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

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।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.