Natural Language Processingপড়তে ১২ মিনিট লাগবে

ট্রান্সফরমার (Transformers)

আধুনিক এআই (AI)-এর পেছনের আর্কিটেকচার — আপনার কেবল মনোযোগ বা অ্যাটেনশন (attention) দরকার
scope:কোর কনসেপ্ট (মূল ধারণা)difficulty:ইন্টারমিডিয়েট (Intermediate)

সেই পেপার যা সবকিছু বদলে দিয়েছিল (The Paper That Changed Everything)

২০১৭ সালের জুন মাসে গুগলের আটজন গবেষকের একটি দল বেশ দুঃসাহসী একটি শিরোনামের পেপার প্রকাশ করে: "Attention Is All You Need (অ্যাটেনশন ইজ অল ইউ নিড)।" এটি মূলত ট্রান্সফরমার (Transformer) আর্কিটেকচারকে সবার সামনে পরিচয় করিয়ে দেয়, আর মাত্র কয়েক বছরের মধ্যেই এটি পুরো এআই (AI)-এর দুনিয়াকেই যেন নতুন করে সাজিয়ে তোলে。

ট্রান্সফরমারের আগে সাধারণত আরএনএন বা RNNs (Recurrent Neural Networks) এবং এলএসটিএম (LSTMs)-এর মতো মডেলগুলোই ভাষার কাজের জন্য সবচেয়ে বেশি ব্যবহার করা হতো। এই মডেলগুলো কোনো লেখাকে বাম থেকে ডানে একটি একটি করে শব্দ ধরে পড়তো — যেটিকে অনেকটা দরজার ফুটো দিয়ে একটি একটি করে অক্ষর পড়ার সাথে তুলনা করা যায়। এগুলোকে ট্রেইন বা প্রশিক্ষণ দেওয়া ছিল বেশ ধীরগতির (কারণ আপনি সিরিয়ালি চলা প্রসেসিংকে প্যারালাল বা সমান্তরাল করতে পারবেন না), আর এগুলো লম্বা বাক্যের পেছনের শব্দের সাথে সামনের শব্দের সম্পর্ক বা ডিপেনডেন্সি (dependency) মনে রাখতে বেশ স্ট্রাগল করতো বা হিমশিম খেত。

ট্রান্সফরমারের আসল আইডিয়া বা বড় কাজটাই হলো: এই ধরনের একটির পর একটি প্রসেসিং বাদ দিয়ে দেওয়া। এর বদলে, এটি সেলফ-অ্যাটেনশন (self-attention) ব্যবহার করে একই সাথে সবগুলো শব্দকে প্রসেস করে। এখানে যেকোনো একটি শব্দ খুব সরাসরি অন্য যেকোনো শব্দের সাথে যুক্ত হতে পারে বা মনোযোগ দিতে পারে। অর্থাৎ, ওই দরজার ফুটো দিয়ে দেখার আর কোনো দরকার নেই — আপনি একবারে পুরো পাতাটি পড়তে পারবেন。

আর্কিটেকচার (The Architecture): এনকোডার এবং ডিকোডার

অরিজিনাল বা মূল ট্রান্সফরমারটির মূলত দুটি অংশ রয়েছে:

  • এনকোডার (Encoder) — এটি ইনপুট পড়ে এবং সেগুলোর অনেক বড় এবং অর্থপূর্ণ রিপ্রেজেন্টেশন বা রূপ তৈরি করে। যেমন: "I love cats"-কে কনটেক্সটের ওপর নির্ভর করে বিভিন্ন ভেক্টরের সমাহার বানিয়ে ফেলে।
  • ডিকোডার (Decoder) — এটি এনকোডারের আউটপুট এবং এর আগে তৈরি হওয়া টোকেনগুলোর ওপর মনোযোগ দিয়ে, প্রতিবার একটি করে নতুন টোকেন তৈরি করে আউটপুট দেয়।

অনুবাদের ক্ষেত্রে: এনকোডার হয়তো ইংরেজি পড়ে, আর ডিকোডার ফ্রেঞ্চ ভাষায় তা লেখে। কিন্তু এর আসল মজা বা জাদু হলো এই দুই অর্ধেককে চাইলে আলাদাভাবেও ব্যবহার করা যায়, যা মূলত দুটি ভিন্ন মডেল ফ্যামিলির (families of models) জন্ম দিয়েছে。

ট্রান্সফরমার ফ্যামিলি ট্রি বা বংশলতিকা (The Transformer Family Tree)

অরিজিনাল বা মূল ট্রান্সফরমারটি প্রধান তিনটি শাখায় বিভক্ত হয়েছে:

এনকোডার-অনলি: BERT (২০১৮)

গুগলের BERT মূলত কেবল এর এনকোডার অংশটি ব্যবহার করে। এটি যেকোনো টেক্সটকে বাইডিরেকশনালি (bidirectionally) বা দুই দিক থেকেই পড়তে পারে — অর্থাৎ এটি যেকোনো শব্দের বাম এবং ডান দুই পাশের কনটেক্সট বা প্রসঙ্গ দেখতে পারে। আর ঠিক এই কারণেই এটি কোনো টেক্সট বুঝতে পারার ক্ষেত্রে চমৎকারভাবে কাজ করে: যেমন সেন্টিমেন্ট অ্যানালাইসিস (sentiment analysis), প্রশ্ন-উত্তর এবং নেমড এনটিটি রিকগনিশন (named entity recognition)।

ডিকোডার-অনলি: GPT (২০১৮–বর্তমান)

OpenAI-এর GPT কেবল এর ডিকোডার অংশটি ব্যবহার করে। এটি টেক্সটকে ডান থেকে বাঁয়ে পড়ে এবং এরপর কী শব্দ আসতে পারে তা প্রেডিক্ট (predict) বা অনুমান করে। এটি এক কথায় জেনারেট করার একটি মেশিন — অর্থাৎ এরপর কী আসবে তা প্রেডিক্ট করার জন্য এটিকে এমনভাবে তৈরি করা হয়েছে যাতে এটি খুব সহজেই যেকোনো প্রবন্ধ, কোড, কবিতা এবং আরও অনেক কিছু শিখতে পারে। বর্তমানের GPT-4, Claude এবং প্রায় বেশিরভাগ আধুনিক চ্যাটবটই হলো ডিকোডার-অনলি ট্রান্সফরমার。

এনকোডার-ডিকোডার: T5 (২০১৯)

গুগলের T5 পুরো আর্কিটেকচারটিই একসঙ্গে ব্যবহার করে। এটি যেকোনো এনএলপি (NLP) কাজকে একটি নির্দিষ্ট উপায়ে ফ্রেম করে: যেমন ইনপুট হলো "translate English to French: I love cats" আর আউটপুট আসবে "J'adore les chats।" অনুবাদ, সারমর্ম লেখা এবং যেকোনো টেক্সটকে অন্য রূপে রূপান্তর করার ক্ষেত্রে এটি দারুণভাবে কাজ করে。

ট্রান্সফরমার লেয়ার বা স্তরের ভেতরে কী ঘটে

প্রতিটি ট্রান্সফরমার লেয়ার মূলত চারটি কাজ করে:

  1. মাল্টি-হেড সেলফ-অ্যাটেনশন (Multi-Head Self-Attention) — এখানে প্রতিটি টোকেন অন্য প্রতিটি টোকেনের সাথে যুক্ত হয় (প্যাটার্নগুলো শেখার জন্য কয়েকটি আলাদা "heads" ব্যবহার করে)।
  2. যোগফল ও নরমালাইজেশন (Add & Normalize) — এখানে একটি রেসিডিউয়াল কানেকশন (residual connection বা আগের ইনপুটটি আবার যোগ করা) এবং স্ট্যাবিলিটির (stability) জন্য সেটির ওপর লেয়ার নরমালাইজেশন করা হয়।
  3. ফিড-ফরওয়ার্ড নেটওয়ার্ক (Feed-Forward Network) — নন-লিনিয়ারিটি (nonlinearity) সহ দুটি লিনিয়ার লেয়ার, যেগুলো প্রতিটি টোকেনের ওপর আলাদা করে কাজ করে (আর এখানেই মূলত এর বেশির ভাগ "জ্ঞান" জমা থাকে)।
  4. আবার যোগফল ও নরমালাইজেশন (Add & Normalize)

এমন ১২টি থেকে ৯৬টিরও বেশি স্তর বা লেয়ারের ওপর ভিত্তি করেই মূলত একটি আধুনিক ল্যাঙ্গুয়েজ মডেল তৈরি হয়。

অত্যন্ত সাধারণ একটি ট্রান্সফরমার ব্লক (A Simplified Transformer Block)

import numpy as np
def softmax(x, axis=-1):
exp_x = np.exp(x - np.max(x, axis=axis, keepdims=True))
return exp_x / exp_x.sum(axis=axis, keepdims=True)
def self_attention(X, Wq, Wk, Wv):
"""সিঙ্গেল-হেড সেলফ-অ্যাটেনশন।"""
Q = X @ Wq
K = X @ Wk
V = X @ Wv
d_k = K.shape[-1]
scores = Q @ K.T / np.sqrt(d_k)
weights = softmax(scores)
return weights @ V
def feed_forward(X, W1, b1, W2, b2):
"""ReLU-এর সাথে সাধারণ ফিড-ফরওয়ার্ড নেটওয়ার্ক।"""
hidden = np.maximum(0, X @ W1 + b1) # ReLU
return hidden @ W2 + b2
def layer_norm(X, eps=1e-5):
"""লেয়ার নরমালাইজেশন।"""
mean = X.mean(axis=-1, keepdims=True)
std = X.std(axis=-1, keepdims=True)
return (X - mean) / (std + eps)
def transformer_block(X, params):
"""একটি ট্রান্সফরমার লেয়ার: attention → add+norm → FFN → add+norm."""
# সেলফ-অ্যাটেনশন
attn_out = self_attention(X, params['Wq'], params['Wk'], params['Wv'])
X = layer_norm(X + attn_out) # রেসিডিউয়াল + নরমালাইজেশন
# ফিড-ফরওয়ার্ড
ff_out = feed_forward(X, params['W1'], params['b1'], params['W2'], params['b2'])
X = layer_norm(X + ff_out) # রেসিডিউয়াল + নরমালাইজেশন
return X
# ডেমো: ৩টি টোকেন, এমবেডিং ডাইমেনশন ৪
np.random.seed(42)
d_model, d_ff = 4, 8
params = {
'Wq': np.random.randn(d_model, d_model) * 0.1,
'Wk': np.random.randn(d_model, d_model) * 0.1,
'Wv': np.random.randn(d_model, d_model) * 0.1,
'W1': np.random.randn(d_model, d_ff) * 0.1,
'b1': np.zeros(d_ff),
'W2': np.random.randn(d_ff, d_model) * 0.1,
'b2': np.zeros(d_model),
}
# ইনপুট: ৩টি টোকেনের এমবেডিং
X = np.array([
[1.0, 0.5, 0.2, 0.1], # টোকেন ১
[0.3, 0.8, 0.1, 0.9], # টোকেন ২
[0.1, 0.2, 0.9, 0.4], # টোকেন ৩
])
print("ইনপুট শেপ (shape):", X.shape)
output = transformer_block(X, params)
print("আউটপুট শেপ (shape):", output.shape)
print("আউটপুট (কনটেক্সট-অ্যাওয়্যার এমবেডিং):")
print(np.round(output, 3))
Output
ইনপুট শেপ (shape): (3, 4)
আউটপুট শেপ (shape): (3, 4)
আউটপুট (কনটেক্সট-অ্যাওয়্যার এমবেডিং):
[[ 1.402 -0.632 -0.354 -0.416]
 [-0.42   1.535 -0.691 -0.424]
 [-0.805 -0.413  1.606 -0.388]]
Note: আকার বা স্কেল (Scale)-ই হলো এর আসল রহস্য। ২০১৭ সালের অরিজিনাল ট্রান্সফরমারটির সাইজ বা আকার ছিল মাত্র ৬৫ মিলিয়ন প্যারামিটার বা ৬৫ মেগাবাইট। ২০১৯ সালের GPT-2-এর ছিল ১.৫ বিলিয়ন। আবার ২০২০ সালের GPT-3-এর ছিল ১৭৫ বিলিয়ন। এবং ধারণা করা হয় যে GPT-4-এর আকার প্রায় ১ ট্রিলিয়নেরও বেশি। কিন্তু এর আর্কিটেকচার বা গঠনে তেমন কোনো পরিবর্তনই আসেনি — যা বদলেছে তা হলো এর আকার। যত বেশি প্যারামিটার, তত বেশি ডেটা এবং তত বেশি কম্পিউট বা হিসাব করার ক্ষমতা। আর মজার ব্যাপার হলো, এর সাইজ বা আকার যত বেড়েছে, মানুষের কল্পনার বাইরের তত বেশি এবং তত নতুন নতুন ক্ষমতা এর মধ্যে একা একাই তৈরি হয়েছে।

ট্রান্সফরমার যেভাবে সবাইকে হারিয়ে দিলো (Why Transformers Won)

ট্রান্সফরমার শুধু যে আরএনএন (RNNs)-এর চেয়ে উন্নত হয়েছে তা নয় — বরং এটি সেগুলোকে পুরোপুরি সরিয়ে দিয়ে তাদের জায়গা দখল করে নিয়েছে। আর এর পেছনের কারণগুলো হলো:

  • প্যারালালিজন (Parallelism) — RNN যেকোনো টোকেনকে একের পর এক সিকুয়েন্স অনুযায়ী প্রসেস করে। কিন্তু ট্রান্সফরমার সবগুলো টোকেনকে একই সাথে বা প্যারালালি প্রসেস করে। এর মানে হলো ট্রান্সফরমার আধুনিক জিপিইউগুলোকে (GPUs) তাদের সক্ষমতা অনুযায়ী পুরোপুরি কাজে লাগাতে পারে, যা পুরো ট্রেনিং প্রক্রিয়াকে সাধারণ মডেলের তুলনায় বহুগুণে ফাস্ট বা দ্রুত করে তোলে।
  • লং-রেঞ্জ ডিপেনডেন্সি (Long-range dependencies) — কোনো একটি বাক্য যত লম্বা হতে থাকে, RNN-এর পেছনের দিকের শব্দের অর্থগুলো ততটাই হালকা হয়ে যেতে থাকে বা মুছে যায়। কিন্তু একটি ট্রান্সফর্মারে, যেকোনো টোকেন সরাসরি অন্য যেকোনো টোকেনের ওপর একইভাবে মনোযোগ বা অ্যাটেনশন দিতে পারে, তাদের মাঝখানের দূরত্ব যতটা বেশিই হোক না কেন।
  • স্কেলেবিলিটি (Scalability) — ট্রান্সফরমার খুব সহজেই এর আকার বাড়াতে বা স্কেল (scale) করতে পারে। এর প্যারামিটারের সংখ্যা দ্বিগুণ করলে এবং ডেটা দ্বিগুণ দিলে, এর পারফরম্যান্স অনেক বেশি উন্নত হয়। আর এর এই দুর্দান্ত উন্নতির কারণেই বড় বড় কোম্পানিগুলো এত বিশাল সব মডেলকে ট্রেইন করাতে মিলিয়ন মিলিয়ন ডলার বিনিয়োগ করে থাকে।

আজকের দিনে, ট্রান্সফরমার কেবল ল্যাঙ্গুয়েজ মডেলেই ব্যবহার করা হচ্ছে না, বরং এটি ইমেজ জেনারেট করা (DALL-E, Stable Diffusion), প্রোটিন ফোল্ডিং (AlphaFold), মিউজিক বা গান তৈরি করা, কোড কমপ্লিট করা থেকে শুরু করে আরও অসংখ্য কাজে ব্যবহৃত হচ্ছে। এই আর্কিটেকচারটি সত্যিই অবিশ্বাস্যভাবে সবকিছুতে দারুণভাবে মানিয়ে যায়।

ছোট কুইজ

RNN-এর বদলে ট্রান্সফরমারের মূল যুগান্তকারী বা ব্রেকথ্রু বিষয় কোনটি ছিল?
Challenge

পড়া চালিয়ে যান