Home »
Blog »
AI/ML Engineer সিরিজ » Series 07 » Episode 04
RNN ও LSTM: ক্রম (sequence) মনে রাখার চেষ্টা এবং তার সীমা
কেন attention দরকার হলো (Series 07, Episode 04)
🟡 INTERMEDIATE
Series 07 — NLP, Transformers ও LLM
Episode 04 / 08
📑 এই পর্বে যা যা আছে
- ১. গল্প: শব্দের ক্রম কি গুরুত্বপূর্ণ?
- ২. সমস্যা: embedding ক্রম ভুলে যায়
- ৩. Sequence model কী
- ৪. RNN — তিন স্তরে
- ৫. Visual: RNN কীভাবে "মনে রাখে"
- ৬. RNN-এর সমস্যা: vanishing gradient ও ভুলে যাওয়া
- ৭. LSTM — একটা স্মার্ট memory cell
- ৮. Code: PyTorch-এ ছোট LSTM (overview)
- ৯. Experiment: দীর্ঘ বাক্যে RNN কেন আটকায়
- ১০. কেন attention দরকার হলো (বীজ বপন)
- ১১. বাস্তব উদাহরণ ও AI Engineer perspective
- ১২. Boss Question
- ১৩. Job Requirement Decoder: "RNN/LSTM/Sequence Models"
- ১৪. সাধারণ ভুল
- ১৫. Interview Prep
- ১৬. হাতে-কলমে ও Project Connection
- ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
🧩 ১. গল্প: শব্দের ক্রম কি গুরুত্বপূর্ণ?
Rahim embedding পেয়ে খুশি। কিন্তু Maya (senior AI engineer) একটা কঠিন উদাহরণ দিলেন:
Maya: "Rahim, দুটো বাক্য দেখো — 'কুকুর মানুষকে কামড়ালো' আর 'মানুষ কুকুরকে কামড়ালো'। দুটোতেই একই তিনটা
শব্দ। তোমার Bag of Words বা গড় embedding এদের পার্থক্য বুঝবে?"
Rahim ভাবল... "না তো! দুটোতেই কুকুর, মানুষ, কামড়ালো — count একই, গড়ও একই। কিন্তু অর্থ সম্পূর্ণ উল্টো!"
Maya: "ঠিক ধরেছ। ভাষায় ক্রম (order) ও প্রসঙ্গ গুরুত্বপূর্ণ। এটা handle করতেই এসেছিল
sequence model — RNN আর LSTM। এদের গল্প বুঝলে তুমি বুঝবে কেন পরে Transformer আসতে হলো।"
❓ ২. সমস্যা: embedding ক্রম ভুলে যায়
একটা শব্দের embedding ভালো, কিন্তু একটা পুরো বাক্যকে যদি আমরা শুধু শব্দের গড় embedding
দিয়ে প্রকাশ করি, তাহলে ক্রম হারিয়ে যায়। আমাদের এমন একটা model দরকার যা শব্দগুলো একে একে,
ক্রম মেনে পড়ে আর আগের শব্দের প্রসঙ্গ মনে রাখে।
মূল প্রশ্ন: একটা model কীভাবে বাক্য পড়তে পড়তে "এতক্ষণ যা পড়েছি" তার একটা সারাংশ (memory) ধরে রাখতে পারে?
এই memory-র ধারণা থেকেই Recurrent Neural Network (RNN)।
🔁 ৩. Sequence model কী
Sequence model এমন model যা ক্রমিক data (শব্দের ক্রম, সময়ের ধারা, দামের ইতিহাস) input হিসেবে নেয় আর
প্রতিটা ধাপে আগের ধাপের তথ্য ব্যবহার করে। text, speech, time-series — সবই sequence।
🪜 ৪. RNN — তিন স্তরে
Level 1 — সহজ intuition:
ভাবুন আপনি একটা গল্প শব্দে শব্দে পড়ছেন আর মাথায় একটা "সারাংশ" আপডেট করছেন। নতুন শব্দ পড়লে সারাংশ
একটু বদলায়, কিন্তু আগের সারাংশও মনে থাকে। RNN ঠিক এই কাজ করে — প্রতিটা শব্দে তার "মনের অবস্থা"
(hidden state) আপডেট করে।
Level 2 — technical:
RNN প্রতি time-step t-তে input x_t আর আগের hidden state h_(t-1) নিয়ে নতুন
hidden state h_t বের করে: h_t = f(W·x_t + U·h_(t-1) + b)। একই weight (W, U)
প্রতিটা step-এ পুনরায় ব্যবহার হয় — তাই "recurrent"।
Level 3 — AI Engineer perspective:
আজকের production NLP-তে খাঁটি RNN খুব কম ব্যবহার হয় (Transformer এসে গেছে)। কিন্তু RNN/LSTM বোঝা জরুরি —
কারণ এরা "sequence memory"-র ধারণা দেয় আর এদের সীমাবদ্ধতাই attention/Transformer-এর প্রয়োজন ব্যাখ্যা করে।
কিছু ছোট time-series বা low-resource ক্ষেত্রে LSTM এখনো কাজে লাগে।
🖼️ ৫. Visual: RNN কীভাবে "মনে রাখে"
বাক্য: কুকুর মানুষকে কামড়ালো
| | |
v v v
h0 --> [RNN] --> [RNN] --> [RNN] --> h3 (পুরো বাক্যের সারাংশ)
| | |
h1 h2 h3
প্রতিটা box একই weight ব্যবহার করে,
আগের hidden state (h) পরের step-এ যায় = memory
শেষ hidden state h3-এ পুরো বাক্যের একটা সারাংশ থাকে — এবং এবার ক্রম গুরুত্বপূর্ণ, কারণ
"কুকুর" আগে না "মানুষ" আগে এল সেটা hidden state-কে ভিন্নভাবে আপডেট করে।
📉 ৬. RNN-এর সমস্যা: vanishing gradient ও ভুলে যাওয়া
RNN তত্ত্বে সুন্দর, কিন্তু বাস্তবে একটা বড় সমস্যা: দীর্ঘ বাক্যে সে শুরুর কথা ভুলে যায়।
কেন? training-এ gradient অনেকগুলো step পেছনে যেতে যেতে (S06E03-এর backpropagation মনে করুন)
বারবার ছোট সংখ্যা দিয়ে গুণ হয়ে প্রায় শূন্য হয়ে যায় — একে বলে vanishing gradient।
ফলে শুরুর দিকের শব্দ শেষ পর্যন্ত প্রায় কোনো প্রভাব ফেলে না।
উদাহরণ: "আমি বাংলাদেশে বড় হয়েছি, অনেক দেশ ঘুরেছি, কিন্তু আমার মাতৃভাষা ___" — সঠিক শব্দ "বাংলা", যেটা
নির্ভর করে বাক্যের একদম শুরুর "বাংলাদেশ"-এর উপর। দীর্ঘ দূরত্বে RNN এই সংযোগ ধরে রাখতে পারে না।
🧠 ৭. LSTM — একটা স্মার্ট memory cell
LSTM (Long Short-Term Memory) হলো RNN-এর উন্নত সংস্করণ, যা এই ভুলে যাওয়ার সমস্যা
অনেকটা সমাধান করে। এর মূল idea — একটা আলাদা cell state (দীর্ঘমেয়াদি memory) আর
কয়েকটা gate যা নিয়ন্ত্রণ করে কী মনে রাখবে, কী ভুলবে, কী আউটপুট দেবে।
LSTM-এর তিনটা gate:
Forget gate -> পুরনো memory থেকে কতটুকু ভুলে যাবে?
Input gate -> নতুন তথ্যের কতটুকু memory-তে ঢুকবে?
Output gate -> memory থেকে কতটুকু এখন output দেবে?
এই gate-গুলো model নিজে শেখে -> তাই গুরুত্বপূর্ণ তথ্য
অনেক দূর পর্যন্ত টিকে থাকতে পারে
💻 ৮. Code: PyTorch-এ ছোট LSTM (overview)
কেন PyTorch? — S06-এ শেখা; এতে LSTM একটা ready layer, নিজে gate-এর গণিত লিখতে হয় না। এটা শুধু ধারণা
পরিষ্কার করার জন্য — মুখস্থ করার দরকার নেই।
import torch
import torch.nn as nn
class SentimentLSTM(nn.Module):
def __init__(self, vocab_size, embed_dim=64, hidden=128, num_classes=2):
super().__init__()
self.embedding = nn.Embedding(vocab_size, embed_dim)
# batch_first=True -> input shape (batch, seq_len)
self.lstm = nn.LSTM(embed_dim, hidden, batch_first=True)
self.fc = nn.Linear(hidden, num_classes)
def forward(self, x):
e = self.embedding(x) # (batch, seq_len, embed_dim)
out, (h_n, c_n) = self.lstm(e) # h_n = শেষ hidden state
# শেষ hidden state = পুরো বাক্যের সারাংশ
return self.fc(h_n[-1]) # (batch, num_classes)
model = SentimentLSTM(vocab_size=5000)
dummy = torch.randint(0, 5000, (4, 20)) # 4 বাক্য, প্রতিটা 20 token
print(model(dummy).shape) # torch.Size([4, 2])
লক্ষ্য করুন: শব্দ প্রথমে embedding layer-এ vector হয় (S07E03), তারপর LSTM
সেগুলো ক্রম মেনে পড়ে। মানে embedding আর sequence model একসাথে কাজ করে।
🔬 ৯. Experiment: দীর্ঘ বাক্যে RNN কেন আটকায়
কাগজে-কলমে চিন্তা করুন: একটা ২০০ শব্দের রিভিউয়ের একদম প্রথম শব্দ "না" (negation)। শেষ শব্দ পর্যন্ত
পৌঁছাতে RNN-কে ২০০ বার hidden state আপডেট করতে হবে। ভাবুন — প্রতিবার তথ্য একটু একটু ক্ষয় হলে, ২০০ ধাপ
পরে প্রথম "না"-এর কতটুকু টিকে থাকবে? এটাই vanishing memory। LSTM এটা কমায়, কিন্তু খুব দীর্ঘ dependency-তে
সেও পুরোপুরি পারে না।
🌱 ১০. কেন attention দরকার হলো (বীজ বপন)
RNN/LSTM-এর দুটো মৌলিক সমস্যা রয়ে গেল:
- দীর্ঘ dependency: অনেক দূরের শব্দের সংযোগ ধরে রাখা কঠিন।
- Sequential = ধীর: শব্দ একে একে পড়তে হয়, তাই parallel করা যায় না — বড় data-তে training ভীষণ ধীর।
Maya: "এখানেই ২০১৭ সালে একটা বিপ্লবী idea এল — 'শব্দ একে একে মনে রাখার বদলে, model যদি সরাসরি
যেকোনো দুটো শব্দের মধ্যে সম্পর্ক দেখতে পারত?' — অর্থাৎ প্রতিটা শব্দ বাক্যের যেকোনো শব্দে
সরাসরি 'মনোযোগ' দিতে পারত। এই ধারণার নাম attention। এটাই RNN-এর দুটো সমস্যা একসাথে সমাধান
করে — আর এখান থেকেই Transformer, এবং শেষে GPT-র জন্ম।"
মনে রাখুন এই ধারাবাহিকতা: শব্দ (embedding) → ক্রম (RNN/LSTM) → সরাসরি সম্পর্ক (attention) →
Transformer → LLM। আমরা ঠিক এই পথে হাঁটছি।
🇧🇩 ১১. বাস্তব উদাহরণ ও AI Engineer perspective
- Time-series (bKash fraud): লেনদেনের ক্রম দেখে সন্দেহজনক pattern — এখনো LSTM কাজে লাগে।
- পুরনো chatbot / autocomplete: Transformer-পূর্ব যুগে LSTM ব্যবহৃত হতো।
- Speech / সংখ্যা sequence: ছোট, low-resource সমস্যায় LSTM এখনো practical।
Must Know: কেন sequence/order গুরুত্বপূর্ণ, RNN-এর memory ধারণা, vanishing gradient, কেন attention এল।
Good to Know: LSTM-এর gate, bidirectional RNN।
Learn Later: GRU, RNN দিয়ে নিজে seq2seq বানানো — Transformer যুগে কম দরকারি।
💼 ১২. Boss Question
Boss: "Transformer-ই যদি সব সমস্যা সমাধান করে, তাহলে এই পুরনো RNN/LSTM শেখার দরকার কী?"
উত্তর: দুটো কারণ। এক — কিছু ছোট, low-data time-series সমস্যায় (যেমন সেন্সর ডেটা,
ছোট fraud model) LSTM এখনো সস্তা ও যথেষ্ট, বিশাল Transformer overkill। দুই — Transformer কেন এত ভালো
সেটা বুঝতে হলে RNN-এর সীমা জানতে হবে; interview-তে ঠিক এই "কেন attention?" প্রশ্নটাই আসে। ইতিহাস জানলে সিদ্ধান্ত ভালো হয়।
🔎 ১৩. Job Requirement Decoder: "RNN/LSTM/Sequence Models"
JD-তে:
"Knowledge of sequence models (RNN, LSTM) is a plus."
| প্রশ্ন | উত্তর |
| কী বোঝায়? | ক্রমিক data (text, time-series) handle করতে পারা এবং memory-based model বোঝা। |
| কেন চায়? | time-series, legacy NLP system, আর Transformer-এর ভিত্তি বোঝাতে। |
| কোন সমস্যা সমাধান করে? | order-dependent তথ্য (sentiment, next-word, sequence pattern)। |
| junior-এর কী জানা লাগে? | RNN/LSTM-এর ধারণা, vanishing gradient, PyTorch-এ একটা ছোট LSTM চালানো। |
| এখনই কী master লাগে না? | gate-এর সম্পূর্ণ গণিত, custom RNN cell লেখা। |
| GitHub-এ কীভাবে দেখাবেন? | একটা ছোট LSTM sentiment classifier (বা time-series) notebook। |
| Interview-তে? | "RNN কেন long dependency-তে fail করে?", "LSTM এটা কীভাবে সমাধান করে?", "কেন attention এল?" |
⚠️ ১৪. সাধারণ ভুল
ভুল ১: ভাবা যে RNN ও LSTM সম্পূর্ণ ভিন্ন জিনিস। → LSTM আসলে RNN-এরই একটা উন্নত রূপ।
ভুল ২: মনে করা LSTM vanishing gradient সম্পূর্ণ শেষ করে দেয়। → শুধু অনেকটা কমায়, খুব দীর্ঘ dependency-তে এখনো দুর্বল।
ভুল ৩: সব NLP-তে এখনো LSTM লাগবে ভাবা। → আধুনিক NLP-তে Transformer প্রায় সর্বত্র প্রতিস্থাপন করেছে।
ভুল ৪: embedding ছাড়া কাঁচা token id সরাসরি LSTM-এ দেওয়া। → আগে embedding layer দরকার।
🎤 ১৫. Interview Prep
প্রশ্ন ১: RNN কীভাবে sequence handle করে?
উত্তর: প্রতি time-step-এ input আর আগের hidden state নিয়ে নতুন hidden state বের করে; একই weight
পুনরায় ব্যবহার করে ক্রম মেনে পড়ে ও memory ধরে রাখে।
প্রশ্ন ২: Vanishing gradient সমস্যা কী?
উত্তর: backprop-এ gradient অনেক step পেছনে গিয়ে প্রায় শূন্য হয়ে যায়, ফলে দূরের/শুরুর তথ্য
শেখা যায় না। LSTM-এর gate ও cell state এটা অনেকটা সামলায়।
প্রশ্ন ৩: RNN-এর কোন সীমাবদ্ধতা attention-এর জন্ম দিল?
উত্তর: (১) দীর্ঘ dependency ধরতে অক্ষমতা, (২) sequential হওয়ায় parallelize করা যায় না তাই ধীর।
attention যেকোনো দুই শব্দের সরাসরি সম্পর্ক দেখে এবং parallel করা যায়।
✍️ ১৬. হাতে-কলমে ও Project Connection
১. উপরের SentimentLSTM-এ bidirectional=True যোগ করলে h_n-এর shape
কী হবে খুঁজে বের করুন এবং কেন।
২. নিজের ভাষায় ২টি বাক্যে লিখুন: RNN আর Transformer-এর মূল দার্শনিক পার্থক্য।
৩. ভাবুন: আমাদের JD-matching-এ ক্রম কি গুরুত্বপূর্ণ? কোথায় হ্যাঁ, কোথায় না?
আমাদের flagship project-এ RNN/LSTM সরাসরি ব্যবহার না-ও করতে পারি, কিন্তু এই পর্ব একটা সেতু — এটা
বোঝায় কেন আমরা পরে Transformer-based embedding (S07E06-07) ব্যবহার করব, যা ক্রম এবং দীর্ঘ
প্রসঙ্গ দুটোই ভালো ধরে।
📌 ১৭. সারসংক্ষেপ ও পরবর্তী পর্ব
এই পর্বে শিখলাম:
✓ ভাষায় শব্দের ক্রম ও প্রসঙ্গ গুরুত্বপূর্ণ — শুধু শব্দের গড় embedding যথেষ্ট নয়
✓ RNN ক্রম মেনে পড়ে ও hidden state-এ memory রাখে
✓ RNN দীর্ঘ বাক্যে শুরুর কথা ভুলে যায় — vanishing gradient
✓ LSTM-এর gate ও cell state এই সমস্যা অনেকটা কমায়
✓ RNN sequential হওয়ায় ধীর ও long-dependency-তে দুর্বল
✓ এই দুই সমস্যাই attention ও Transformer-এর জন্ম দিয়েছে
পরবর্তী পর্ব (S07E05): এবার সেই বিপ্লবী ধারণা — Attention।
"কোন শব্দে বেশি মনোযোগ" — query, key, value দিয়ে model কীভাবে যেকোনো দুটো শব্দের সরাসরি সম্পর্ক দেখে,
আর কেন এটাই আধুনিক AI-এর সবচেয়ে গুরুত্বপূর্ণ idea — সহজ বাংলায়।