Autoencoder পরিচিতি — নিজেকেই পুনর্গঠন
এই পাঠে যা শিখবেন
- Encoder, bottleneck, decoder — তিনটি অংশের কাজ ও জ্যামিতিক অর্থ
- Reconstruction loss কেন কাজ করে — self-supervised শেখার যাদু
- Denoising autoencoder — শব্দের মধ্যে থেকে আসল ছবি বের করা
- PyTorch দিয়ে MNIST-এ একটি ছোট autoencoder train করা
১ · Autoencoder — কী এবং কেন
একটি autoencoderAutoencoderএকটি neural network যা input $x$-কে নিজেই reconstruct করতে শেখে। মধ্যবর্তী bottleneck $z$ একটি compressed representation। ১৯৮০-র দশকে Hinton ও অন্যরা পরিচয় করান; ২০০৬-এ deep belief network পেপারে গুরুত্বপূর্ণ হয়ে ওঠে। এমন একটি neural network যা নিজের input কেই output হিসেবে ফিরিয়ে আনার চেষ্টা করে। শুনতে অদ্ভুত — "যা পাচ্ছি তাই ফেরত দেব?" — কিন্তু একটি বাধ্যবাধকতা আছে: মাঝখানে একটি সংকীর্ণ bottleneck দিয়ে যেতে হয়। এই বাধ্যবাধকতাই network-কে বাধ্য করে গুরুত্বপূর্ণ feature শেখাতে।
১) Encoder $E$: $x \mapsto z$ — উচ্চ-মাত্রিক input-কে কম-মাত্রিক code-এ চাপে।
২) Bottleneck $z$: compressed representation — শেখা feature।
৩) Decoder $D$: $z \mapsto \hat{x}$ — code থেকে input পুনর্গঠন।
গাণিতিকভাবে: $\hat{x} = D(E(x))$, এবং loss হলো $\mathcal{L} = \|x - \hat{x}\|^2$ (MSE)।
২ · কেন bottleneck দরকার?
যদি $z$-এর dimension input-এর সমান হতো, network সহজেই identity function ($\hat{x} = x$) শিখে নিত — কিছুই না শিখে। Bottleneck এমন একটি constraint তৈরি করে যেখানে network বাছাই করতে বাধ্য হয় — কোন তথ্য রাখবে, কোনটি ফেলে দেবে।
MNIST-এ একটি $28 \times 28 = 784$-মাত্রিক ছবি যদি $z \in \mathbb{R}^{32}$-এ চাপা যায়, তবু decoder প্রায় হুবহু পুনর্গঠন করতে পারে — কারণ MNIST ছবিগুলো একটি অনেক ছোট manifoldManifoldউচ্চ-মাত্রিক space-এর মধ্যে একটি কম-মাত্রিক curved surface। "মুখ" ছবিগুলো ১৫০,৫২৮-D pixel space-এর সব পয়েন্ট নয় — অনেক ছোট manifold-এ বাস করে। DL-এর মূল assumption।-এ বাস করে।
৩ · Reconstruction loss
সবচেয়ে সাধারণ — pixel-wise MSE:
$$\mathcal{L}_{\text{recon}} = \frac{1}{N} \sum_{i=1}^{N} \| x_i - D(E(x_i)) \|^2$$
Binary input (যেমন MNIST grayscale 0-1) হলে binary cross-entropy বেশি ভাল কাজ করে:
$$\mathcal{L}_{\text{BCE}} = -\sum_j \big[ x_j \log \hat{x}_j + (1-x_j) \log (1-\hat{x}_j) \big]$$
৪ · Denoising autoencoder
Vincent et al. (২০০৮) একটি দারুণ idea দিলেন — input-এ noise যোগ করে দাও, কিন্তু target থাকুক original। Network বাধ্য হবে শুধু feature না, robust feature শিখতে।
$$\tilde{x} = x + \epsilon, \quad \epsilon \sim \mathcal{N}(0, \sigma^2 I)$$ $$\mathcal{L} = \| x - D(E(\tilde{x})) \|^2$$
বাংলা handwriting দাগ-যুক্ত পুরনো কাগজে স্ক্যান করা হলে — denoising AE সেই দাগ সরিয়ে clean digit বের করতে পারে।
৫ · PyTorch দিয়ে MNIST autoencoder
import torch
import torch.nn as nn
class AE(nn.Module):
def __init__(self, latent_dim=32):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(784, 256), nn.ReLU(),
nn.Linear(256, 64), nn.ReLU(),
nn.Linear(64, latent_dim),
)
self.decoder = nn.Sequential(
nn.Linear(latent_dim, 64), nn.ReLU(),
nn.Linear(64, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Sigmoid(),
)
def forward(self, x):
z = self.encoder(x)
return self.decoder(z), z
model = AE()
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss_fn = nn.MSELoss()
Sigmoid — pixel value 0-1 range-এ আসে।
৬ · Training loop
# মনে করুন train_loader MNIST batch দিচ্ছে
for epoch in range(10):
for x, _ in train_loader: # label ব্যবহৃত না — self-supervised
x = x.view(-1, 784)
x_hat, z = model(x)
loss = loss_fn(x_hat, x)
opt.zero_grad()
loss.backward()
opt.step()
print(f"epoch {epoch+1}: loss={loss.item():.4f}")
৭ · কেন plain AE generate করতে পারে না?
Autoencoder train হওয়ার পর — যদি আমরা random $z \sim \mathcal{N}(0, I)$ নিয়ে decoder চালাই, output সাধারণত বাজে হয়। কারণ training-এ যে $z$-গুলো ব্যবহার হয়েছে, তারা latent space-এর কিছু অজানা region-এ ছড়িয়ে — কোনো fixed distribution মানে না।
৮ · Autoencoder-এর ব্যবহার আজকের দিনে
- Pretraining: বড় unlabeled dataset-এ feature শেখা, তারপর downstream task-এ fine-tune।
- Anomaly detection: reconstruction error বেশি = অস্বাভাবিক sample। bKash fraud detection-এ ব্যবহারযোগ্য।
- Compression: JPEG-এর neural alternative — Stable Diffusion-এর VAE encoder ছবি ৮× downscale করে।
- Denoising: পুরনো কাগজে handwritten Bangla scanning।
- Embedding: $z$-কে similarity search-এ ব্যবহার।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ Autoencoder ও PCA — দু'টোই dimensionality reduction। কীভাবে আলাদা? কখন কোনটি বেছে নেবেন?
PCA (Pearson, ১৯০১) ও autoencoder (Hinton-এর দল, ১৯৮০-৯০ এর দশক) — দু'টোই উচ্চ-মাত্রা থেকে কম-মাত্রায় projection। কিন্তু গাণিতিক ও ব্যবহারিক দিক থেকে আলাদা।
PCA:
- Linear — শুধু variance সর্বোচ্চ এমন direction বাছে।
- Closed-form solution — covariance matrix-এর eigendecomposition। কোনো training লুপ নেই।
- Deterministic — একই data মানে একই output।
- Interpretable — প্রতিটি principal component একটি linear combination।
- Curve বা manifold ধরতে পারে না — যেমন Swiss roll dataset।
Autoencoder:
- Non-linear (যদি hidden layer-এ ReLU/sigmoid থাকে)।
- Iterative training — gradient descent।
- Stochastic — initialization ভিন্ন হলে ভিন্ন solution।
- Manifold শিখতে পারে — যা PCA পারে না।
- মজার তথ্য: hidden layer-এ activation না থাকলে (linear AE) — solution mathematically PCA-র subspace-এর সমান।
কখন কী বাছবেন:
- Data ছোট (১,০০০ sample) ও approximately linear → PCA সহজ ও দ্রুত।
- Data বড় ও non-linear (ছবি, audio) → autoencoder।
- Quick exploratory analysis → PCA।
- Production-এ embedding দরকার → autoencoder, পরে contrastive learning বা SimCLR।
আধুনিক context: ২০২৪-এ pretraining-এর জন্য বেশিরভাগ মানুষ autoencoder-এর বদলে contrastive (SimCLR, CLIP) বা masked (MAE — He et al., ২০২২) approach ব্যবহার করেন। তবু Stable Diffusion-এর latent VAE প্রমাণ — autoencoder ধারণা এখনো কেন্দ্রীয়।
প্র ০২ Bottleneck dimension কত হওয়া উচিত? খুব ছোট বা খুব বড় হলে কী সমস্যা?
Bottleneck dimension $d$ — autoencoder ডিজাইনের সবচেয়ে গুরুত্বপূর্ণ hyperparameter। এর সঠিক মান data-র অন্তর্নিহিত manifold-এর dimension-এর কাছাকাছি হওয়া উচিত।
খুব ছোট $d$:
- Information bottleneck — গুরুত্বপূর্ণ feature-ও হারিয়ে যাবে।
- Reconstruction blurry, ছবিতে detail কম।
- MNIST-এ $d=2$ চেষ্টা করলে — ১০ digit আলাদা cluster তৈরি হয়, কিন্তু intra-class variation হারিয়ে যায়।
খুব বড় $d$:
- Identity function-এর কাছাকাছি — কিছুই compress হলো না।
- Generalization দুর্বল — noise-ও mেমরাইজ করতে পারে।
- Downstream task-এ feature কম discriminative।
Sweet spot বের করার পদ্ধতি:
- Reconstruction curve: বিভিন্ন $d$-তে validation MSE plot করুন। Elbow point-এ থামুন।
- Intrinsic dimensionality estimation: Levina-Bickel (২০০৪) বা TwoNN (Facco et al., ২০১৭) — data-র manifold dimension প্রাক্কলন।
- Downstream task: $z$-কে classifier-এ feed করে accuracy দেখুন।
- Empirical heuristic: MNIST-এ ১৬-৩২ ভাল; CIFAR-১০-এ ৬৪-১২৮; ImageNet-এ ৫১২-২০৪৮।
আধুনিক উদাহরণ: Stable Diffusion-এর VAE encoder $512 \times 512 \times 3 = 786,432$ pixel-কে $64 \times 64 \times 4 = 16,384$ latent-এ চাপে — প্রায় ৪৮× compression। এই dimension সাবধানে tuned — অনেক experimentation-এর ফল।
Trade-off summary: $d$ বড় = reconstruction ভাল কিন্তু feature কম useful; $d$ ছোট = strong feature কিন্তু information loss। আপনার task-এর উপর নির্ভর — generation বনাম classification বনাম anomaly detection-এ ভিন্ন।
প্র ০৩ Autoencoder কেন anomaly detection-এ ভাল কাজ করে? bKash transaction monitor-এ কীভাবে ব্যবহার করবেন?
Anomaly detection-এ autoencoder-এর জাদু — সে শুধু "স্বাভাবিক" data-এ train হয়। ফলে normal sample সে ভাল reconstruct করে, কিন্তু abnormal sample reconstruct করতে পারে না — কারণ সেই pattern সে দেখেনি।
মূল আইডিয়া:
- Train: শুধু verified-normal transaction-এ AE train।
- Inference: নতুন transaction $x$-এ
error = ‖x − D(E(x))‖হিসাব। - Threshold $\tau$ ছাড়িয়ে গেলে — anomaly flag।
bKash-এর জন্য feature design:
- Amount (log-transform), recipient type, time-of-day (cyclic encoding), day-of-week, sender's average amount, recipient's age in network, geographic distance, device fingerprint, recent transaction velocity।
- Normalize সব feature — AE distance-sensitive।
- Categorical → embedding (small AE for embedding learning)।
Threshold বাছাই:
- Validation set-এ false positive rate অনুসারে ROC curve।
- Bangladesh Bank guideline + business loss function — false negative (fraud miss) সাধারণত false positive (good user freeze) থেকে অনেক বেশি costly।
- Dynamic threshold — time-of-day, festival period (ঈদ-এ legitimate transaction spike) অনুসারে adjust।
Limitation:
- Concept drift — fraud pattern বদলায়। AE-কে periodically retrain দরকার।
- "Adversarial fraud" — যদি attacker AE structure জানে, low-error fraud design করতে পারে।
- Class imbalance — true anomaly rate ০.১% হলে threshold tuning কঠিন।
আধুনিক alternative:
- Isolation Forest (Liu et al., ২০০৮) — দ্রুত, interpretable।
- Deep SVDD (Ruff et al., ২০১৮) — AE + one-class SVM principle।
- Diffusion-based anomaly detection (২০২৩+) — denoising score difference।
Production tip: AE-কে ensemble-এ রাখুন — rule-based + AE + gradient-boosted classifier। প্রতিটি ভিন্ন pattern ধরে।
প্র ০৪ Stable Diffusion-এ VAE-encoder কেন ব্যবহার হয়? Pixel space-এ সরাসরি diffusion চালালে কী সমস্যা?
Latent Diffusion Model (Rombach et al., ২০২২ — Stable Diffusion-এর মূল পেপার) একটি ক্রান্তিকারী idea — diffusion process pixel space-এ না চালিয়ে, একটি pretrained autoencoder-এর latent space-এ চালাও। এতে compute অর্ধেকের কম হয়, quality প্রায় একই থাকে।
Pixel-space diffusion-এর সমস্যা:
- Compute বিশাল: $512 \times 512 \times 3 = 786{,}432$ dimension-এ U-Net চালানো — প্রতিটি timestep-এ। ১০০০ step × ব্যাচ = বিশাল GPU।
- Memory: attention $O(n^2)$ — pixel space-এ unmanageable।
- Perceptually irrelevant detail: high-frequency texture (yes/no important) reconstruction-এ অপ্রয়োজনীয় effort।
- OpenAI GLIDE (২০২২) ও DALL-E 2-এর pixel diffusion training-এ লক্ষ লক্ষ ডলার GPU।
Latent diffusion-এর সমাধান:
- VAE encoder $512 \times 512 \times 3$ → $64 \times 64 \times 4$ — ৪৮× কম dimension।
- Diffusion U-Net এই $64 \times 64 \times 4$ latent-এ কাজ করে — ৪৮× কম compute।
- Final step-এ VAE decoder latent → pixel।
- Stable Diffusion 1.5 একটি consumer GPU-তে inference সম্ভব করেছে — কারণ এই trick।
VAE-এর বাছাই কেন গুরুত্বপূর্ণ:
- Encoder-এর reconstruction "perceptually" ভাল হতে হবে — এজন্য pure MSE-এর বদলে LPIPS perceptual loss + GAN-style adversarial loss সাথে train।
- Latent space-এর distribution "smooth" হতে হবে — যাতে diffusion সহজে navigate করতে পারে।
- SD VAE-এর scaling factor ০.১৮২১৫ — যাতে latent-এর variance ১-এর কাছাকাছি থাকে। গুরুত্বপূর্ণ engineering detail।
Trade-off:
- Pixel-level fine detail (যেমন face বা text) VAE encode-decode-এ একটু blur — তাই SD অনেক সময় hand বা text বাজে generate করে।
- SD 3 (২০২৪) এই VAE-এর বদলে ১৬-channel improved version ব্যবহার করে — fidelity উন্নত।
মূল উপলব্ধি: autoencoder যেন "perceptually meaningful compression"-এর engine হিসেবে আজও কেন্দ্রীয়। Diffusion মডেল বিশাল হলেও, একটা ভাল AE তাকে ১০০× সস্তা করে দেয়। Generative AI-র অর্থনীতিতে এই compression-পদ্ধতি critical।
অনুশীলন
-
হাতে-কলমে: $784 \to 256 \to 64 \to 32$ encoder-এর মোট parameter সংখ্যা হিসাব করুন (bias সহ)।
- Layer 1: $784 \times 256 + 256 = 200{,}960$
- Layer 2: $256 \times 64 + 64 = 16{,}448$
- Layer 3: $64 \times 32 + 32 = 2{,}080$
- মোট encoder = $219{,}488$ parameter। Decoder mirror — প্রায় একই, মোট AE ≈ ৪৪০K।
-
কোডে চেষ্টা: উপরের AE-এর encoder-এ ReLU বাদ দিয়ে দেখুন কী হয়। কেন reconstruction PCA-র সমান হয়ে যায়?
সব layer linear হলে — কয়েকটি linear transformation-এর composition নিজেই linear। ফলে সম্পূর্ণ network একটি $W_{\text{full}} = W_3 W_2 W_1$ ম্যাট্রিক্স। MSE loss-এ এর optimal solution গাণিতিকভাবে PCA-র top-$d$ eigenvector subspace-এর সমান (Bourlard ও Kamp, ১৯৮৮)। তাই non-linear activation-ই autoencoder-কে PCA থেকে শক্তিশালী করে।
-
চিন্তা করুন: Daraz-এর ১ কোটি product image আছে কিন্তু label নেই। Autoencoder কীভাবে কাজে লাগাবেন? কী feature বের করে কী business-value তৈরি হবে?
- সব ছবি ResNet-style encoder + decoder-এ self-supervised train (বা MAE)।
- $z$-vector → product embedding। Similar product search ("এর মতো আরো দেখাও") সম্ভব।
- Anomaly: ভুল category-তে যাওয়া ছবি ধরা।
- Cold-start recommendation: নতুন product-এর শুধু ছবি থাকলেও — embedding similarity দিয়ে initial recommendation।
- Fashion-এ "এই pattern আমার পছন্দ" → similar pattern খোঁজা।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- পাঠ ৭ · VAE — ELBO ও reparameterization পরবর্তী পাঠ Plain AE generate করতে পারে না — VAE prior চাপিয়ে generative করে।
- পাঠ ৫ · Sampling — distribution থেকে নমুনা আগের পাঠ VAE বুঝতে sampling-এর ধারণা প্রয়োজন।
- পাঠ ৮ · GAN — minimax খেলা এই পাঠের সাথে সম্পর্কিত VAE-র বিকল্প generative approach — এক ভিন্ন দর্শন।
- সব AI Courses দেখুন ABCL TECH Python, ML, DL, NLP, CV, GenAI, RL, MLOps — সব AI কোর্স একসাথে।