Paper Reproduction
Paper Reproduction
একটা real systems/algorithms paper বেছে তার একটা key experiment নিজে reproduce করা — পড়া, falsifiable hypothesis লেখা, পরিসংখ্যানসহ experiment চালানো, environment+seed pin করে reproducibility নিশ্চিত করা, আর সবশেষে একটা ছোট report লেখা। এই পুরো curriculum-এর শেষ প্রজেক্ট — এখানে আগের ৫টা লেসনের প্রতিটা দক্ষতাই একসাথে লাগবে।
কেন এই প্রজেক্ট
এই module-এর প্রতিটা আগের লেসন একটা করে দক্ষতা শিখিয়েছে — paper পড়া, hypothesis লেখা, experiment design করা, পরিসংখ্যান দিয়ে বিশ্বাসযোগ্যভাবে রিপোর্ট করা, reproducibility নিশ্চিত করা, লেখা। কিন্তু প্রতিটা আলাদাভাবে অনুশীলন করা আর একসাথে একটা বাস্তব দাবির বিরুদ্ধে প্রয়োগ করা — সম্পূর্ণ ভিন্ন অভিজ্ঞতা।
এই প্রজেক্টে আপনি একটা published paper-এর একটা ছোট claim বেছে নিজে reproduce করবেন। লক্ষ্য পুরো paper পুনর্নির্মাণ নয় — একটা single, measurable core experiment। বেশিরভাগ ক্ষেত্রে ফলাফল ঠিক কাগজে যা লেখা তার সাথে হুবহু মিলবে না — সেটা ব্যর্থতা নয়, সেটাই আসল শিক্ষা: কোন factor-এর কারণে পার্থক্য হলো তা খুঁজে বের করাটাই গবেষণার আসল কাজ।
কোন paper বেছে নেবেন
ছোট, well-scoped core claim খুঁজুন যা একা একজন learner সপ্তাহখানেকে
implement করতে পারবেন। কিছু ভালো ধরনের প্রার্থী (নির্দিষ্ট paper
বেছে নেওয়ার আগে অন্তত তিনটা বিকল্প শর্টলিস্ট করুন, তারপর abstract
পড়ে চূড়ান্ত করুন — এটাই cs-theory/how-to-read-academic-papers-এর
প্রথম পাঠ প্রয়োগ):
- একটা classic algorithm/data-structure paper-এর performance
claim (যেমন bloom filter-এর false-positive rate সূত্র, বা
skip-list-এর expected
O(log n)— এই curriculum-এর আগের level-গুলোতে যা ইতিমধ্যে বানিয়েছেন তার সাথে সংযুক্ত কোনো paper বাছলে implementation-এর অনেকটা কাজ আগে থেকেই করা) - একটা ছোট systems paper-এর একটা নির্দিষ্ট graph/table — পুরো system নয়, শুধু একটা microbenchmark (যেমন একটা caching policy-র hit-rate curve, একটা consensus protocol-এর latency-vs-failure-rate)
- একটা ML paper-এর একটা ছোট ablation — একটা inductive bias বা hyperparameter-এর প্রভাব একটা ছোট dataset-এ
এড়িয়ে যান: বিশাল compute দরকার এমন paper (বড় LLM ট্রেনিং), proprietary dataset নির্ভর claim, বা যার মূল দাবি hardware-নির্দিষ্ট আর আপনার কাছে সেই hardware নেই।
ধাপে ধাপে
১. প্রথম পাঠ — কাঠামোবদ্ধভাবে পড়া
cs-theory/how-to-read-academic-papers-এর ক্রম অনুসরণ করুন:
abstract → figures/tables → conclusion → intro → related work →
তারপরই methods-এর বিস্তারিত। প্রথম পাসেই সবকিছু বোঝার চেষ্টা করবেন
না।
তিন লাইনে লিখুন (এটাই আপনার anchor — বাকি পুরো প্রজেক্ট এটার চারপাশে ঘুরবে):
দাবি : [paper কী claim করছে, এক বাক্যে]
পদ্ধতি : [কীভাবে যাচাই করেছে, এক বাক্যে]
Limitation: [লেখক নিজেই যা স্বীকার করেছেন]
২. Falsifiable hypothesis লেখা
cs-theory/hypothesis-formation-and-experiment-design-এর নিয়ম
মেনে — শুধু “আমি এটা reproduce করব” যথেষ্ট নয়। লিখুন ঠিক কী মাপবেন,
আর কী দেখলে দাবিটা ভুল প্রমাণিত হবে বলে আপনি মনে করবেন:
Hypothesis : [metric] X হলে, [condition] Y-তে অন্তত [threshold] Z পাব
Falsified যদি: measured মান [threshold] থেকে [margin]-এর বেশি সরে যায়
Data দেখার আগে এই ফাইলটা commit করুন (git-এ) — এটাই আপনার
নিজস্ব pre-registration, cs-theory/hypothesis-formation-and-experiment-design-এ
p-hacking ঠেকানোর যে কৌশল আলোচিত হয়েছে তার হাতে-কলমে প্রয়োগ।
৩. Experiment design — variable ও confound চিহ্নিত করা
Independent variable : [যা আপনি ইচ্ছাকৃতভাবে বদলাবেন]
Dependent variable : [যা মাপবেন]
Control : [বেসলাইন — এটা ছাড়া তুলনা অর্থহীন]
সম্ভাব্য confound : [cache warmth? load? random seed? — যা লুকিয়ে
ফলাফল প্রভাবিত করতে পারে]
Sample size আগেই ঠিক করুন — “কয়েকবার চালাব” যথেষ্ট না; কমপক্ষে কতগুলো independent trial লাগবে তা variance-এর মোটামুটি অনুমান থেকে হিসাব করুন (একটা ছোট pilot run দিয়ে variance অনুমান করা যায়)।
৪. Implementation
মূল paper-এর algorithm/system-এর সেই ছোট অংশটাই implement করুন যা আপনার experiment-এর জন্য দরকার — পুরো system নয়।
# উদাহরণ কাঠামো — আপনার নিজের experiment অনুযায়ী বদলাবে
import random
def run_trial(config, seed):
random.seed(seed)
# ... paper-এর algorithm-এর সেই অংশ যা যাচাই করছেন ...
return measured_value
def run_experiment(config, n_trials=30):
return [run_trial(config, seed=i) for i in range(n_trials)]
Checkpoint: একটা trivial baseline (যেমন সম্পূর্ণ random বা naive পদ্ধতি) দিয়ে আগে sanity-check করুন — আপনার measurement pipeline-টাই যে কাজ করছে তা paper-এর algorithm implement করার আগেই নিশ্চিত হন।
৫. ফলাফল বিশ্লেষণ — শুধু mean নয়
cs-theory/benchmarking-and-statistical-analysis-এর bootstrap
পদ্ধতি প্রয়োগ করুন — distribution সম্পর্কে ধরে না নিয়েই confidence
interval বের করুন:
import random
def bootstrap_ci(samples, n_resamples=10_000, ci=0.95):
n = len(samples)
means = []
for _ in range(n_resamples):
resample = [random.choice(samples) for _ in range(n)]
means.append(sum(resample) / n)
means.sort()
lo = means[int((1 - ci) / 2 * n_resamples)]
hi = means[int((1 + ci) / 2 * n_resamples)]
return sum(samples) / n, lo, hi
mean, ci_lo, ci_hi = bootstrap_ci(measured_values)
print(f"mean={mean:.3f} 95% CI=[{ci_lo:.3f}, {ci_hi:.3f}]")
আপনার hypothesis-এর threshold এই CI-এর ভেতরে পড়ে কি না দেখুন — এটাই আপনার “falsified বা না” এর সিদ্ধান্ত, শুধু চোখে-দেখা একটা সংখ্যার তুলনা নয়।
৬. Reproducibility প্যাকেজ
cs-theory/reproducibility-এর checklist প্রয়োগ করুন:
requirements.txtবাpyproject.toml-এ exact pinned version- প্রতিটা random operation-এ explicit seed, README-তে লেখা
- হার্ডওয়্যার/OS যা ব্যবহার করেছেন তা লিখে রাখা
- একটা single command (
python run_experiment.py) যা raw data থেকে চূড়ান্ত সংখ্যা পর্যন্ত পুরো pipeline reproduce করে
Checkpoint: একটা ভিন্ন terminal/ভিন্ন সময়ে ঠিক সেই command আবার চালান — সংখ্যাগুলো (বা CI-এর ভেতরে) মেলে কি না যাচাই করুন। এটাই সবচেয়ে ন্যূনতম, তবু সবচেয়ে বেশি প্রজেক্টে বাদ পড়ে যাওয়া ধাপ।
৭. Report লেখা
cs-theory/technical-writing-and-peer-review-এর কাঠামো অনুসরণ
করে ৩-৫ পাতার একটা report লিখুন:
Abstract : কী reproduce করলেন, কী পেলেন — ৩-৪ বাক্যে
Introduction : মূল paper-এর claim, কেন এই ছোট অংশটা বেছে নিলেন
Method : আপনার experiment design, variable, sample size
Results : সংখ্যা + CI + একটা graph, মূল paper-এর সংখ্যার সাথে
পাশাপাশি তুলনা
Discussion : মিলল কি না, না মিললে সম্ভাব্য কারণ (scale, hardware,
implementation detail paper-এ অনুল্লেখিত), আর
আপনার নিজের experiment-এর limitation সততার সাথে
মিল না পাওয়াটা এখানে ব্যর্থতা নয় — অনুল্লেখিত কারণটা খুঁজে বের করাই report-এর সবচেয়ে মূল্যবান অংশ।
নিজেকে চ্যালেঞ্জ করুন
- Ablation যোগ করুন — মূল claim-এর পেছনে ঠিক কোন design choice-টা দায়ী, একটা করে উপাদান বাদ দিয়ে যাচাই করুন
- Scale sensitivity যাচাই করুন — মূল paper-এর claim কি ছোট আকারেও একইভাবে টেকে, নাকি শুধু বড় scale-এ দেখা যায়
- আপনার report-টা একজন সহপাঠীকে দিয়ে “peer review” করান —
cs-theory/technical-writing-and-peer-review-এর তিনটা প্রশ্ন (novelty/soundness/significance) দিয়ে - পুরো reproducibility প্যাকেজ (কোড+ডেটা+README) একটা public repository-তে প্রকাশ করুন
যা এখানে শিখলেন, পরে যেখানে লাগবে
| এখানে | পরে |
|---|---|
| কাঠামোবদ্ধভাবে paper পড়া | নতুন কোনো টুল/technique নিজের কাজে আনার আগে তার মূল paper সরাসরি পড়ার আত্মবিশ্বাস |
| Falsifiable hypothesis লেখা | যেকোনো A/B test, performance-tuning claim, বা design decision-এর আগে |
| Confounding variable চেনা | production-এ “এই change-টা সাহায্য করলো” দাবি করার আগে সেই একই সন্দেহ |
| Bootstrap CI | যেকোনো benchmarking রিপোর্টে single-number দাবির বদলে uncertainty-সহ দাবি |
| Reproducibility checklist | নিজের যেকোনো ভবিষ্যৎ প্রজেক্ট, thesis, বা blog post-এর মান |
| সৎভাবে limitation লেখা | একজন প্রকৃত গবেষক ও একজন শুধু ফলাফল-বিক্রেতার মধ্যে পার্থক্য |
এই curriculum-এর শেষ প্রজেক্ট এটা। এরপর নিজের একটা প্রশ্ন বেছে নেওয়ার পালা — এবং সেটা লিখে অন্য কাউকে জানানোর।