
Handwired کیا ہے؟
Handwired عام JavaScript کوڈ کو تربیت کی ضرورت کے بغیر نیورل نیٹ ورک جیسی کمپیوٹیشن میں تبدیل کرتا ہے۔ کسی پروگرام کو عام کنٹرول فلو کے طور پر پیش کرنے کے بجائے، یہ شرطوں، لوپس اور حالت جیسی منطق کو فلوٹنگ پوائنٹ اقدار پر میٹرکس ضرب اور reglu آپریشنز میں تبدیل کرتا ہے۔
نتیجے میں بننے والا پروگرام مکمل طور پر differentiable رہتا ہے، جبکہ اس کے weights سیکھنے کے بجائے دستی طور پر لکھے جاتے ہیں۔ Handwired یہ کمپیوٹیشن JavaScript یا WebGPU میں انجام دے سکتا ہے۔

پروگراموں کو نیورل کمپیوٹیشن میں کیوں تبدیل کیا جائے؟
Handwired پروگرام کے رویے کو چند بنیادی ریاضیاتی primitives، بالخصوص جمع، ضرب اور ReLU طرز کے آپریشنز تک محدود کر دیتا ہے۔ اس طریقۂ کار کی کئی دلچسپ خصوصیات ہیں:
- پورا پروگرام differentiable رہتا ہے۔
- Weights کو تربیت دینے کی ضرورت نہیں ہوتی کیونکہ وہ دستی طور پر لکھے جاتے ہیں۔
- GPU optimizations، جیسے fusion، sparsity اور operation reordering، اس سادہ کمپیوٹیشن کے ساتھ کام کر سکتی ہیں۔
- روایتی JavaScript کوڈ اس شکل میں پیش کیے جانے پر ممکنہ طور پر GPU سطح کی parallelism حاصل کر سکتا ہے۔
یہ منصوبہ تجربات کے امکانات بھی پیدا کرتا ہے۔ آپ دستی طور پر متعین کیے گئے weights کو unfreeze کر کے جانچ سکتے ہیں کہ training کیا نتیجہ دیتی ہے، یا کسی frozen پروگرام کو عام neural network کے ساتھ منسلک کر کے پورے مشترکہ نظام کو end to end train کر سکتے ہیں۔
پروجیکٹ ترتیب دیں
Handwired میں live demos اور اس کی مقامی implementation کا جائزہ لینے کے لیے درکار source شامل ہے۔ آپ کے سسٹم پر Bun انسٹال ہونا چاہیے۔
- Handwired repository کو clone کریں۔
- پروجیکٹ directory میں جائیں۔
bun installکے ذریعے dependencies انسٹال کریں۔bun startکے ذریعے مقامی demos شروع کریں۔
git clone <handwired-repository-url>
cd handwired
bun install
bun startپروجیکٹ شروع ہونے کے بعد، demos دیکھنے کے لیے Bun کی جانب سے دکھایا گیا مقامی address استعمال کریں۔ آپ hosted demos بھی chenglou.me/handwired پر آزما سکتے ہیں۔
بنیادی تبدیلی کو سمجھیں
ایک سادہ JavaScript conditional پر غور کریں:
const a = 5
const result = (a > 4) ? 10 : 12Handwired اس condition کو arithmetic کے ذریعے ظاہر کرتا ہے۔ integer value کے لیے، درج ذیل ReLU آپریشنز کا فرق ایسا selector بناتا ہے جو a > 4 ہونے پر 1 اور a <= 4 ہونے پر 0 ہوتا ہے:
const a = 5
const above4 = Math.max(0, a - 4) - Math.max(0, a - 5)
const result = above4 * 10 + (1 - above4) * 12دونوں branches compute ہوتی ہیں، لیکن above4 مناسب نتیجہ منتخب کرتا ہے۔ a = 5 کے ساتھ selector 1 ہوتا ہے، اس لیے آخری value 10 ہے، جو اصل conditional expression سے مطابقت رکھتی ہے۔
ریاضیاتی نمائندگی کیسے کام کرتی ہے؟
بنیادی خیال branching کو مسلسل arithmetic primitives سے بدلنا ہے۔ ایک conditional درج ذیل چیزوں کے امتزاج میں تبدیل ہو جاتا ہے:

- Input سے selector بنانے کے لیے ReLU operations۔
- ہر branch پر selector لاگو کرنے کے لیے multiplication۔
- Branch results کو یکجا کرنے کے لیے addition۔
جب یہ operations جمع کر لیے جاتے ہیں تو Handwired متعلقہ activation operations کے ساتھ computation کو ایک بڑی matrix multiplication کی صورت میں پیش کر سکتا ہے۔ اس کے بعد اسی program کو JavaScript یا WebGPU کے ذریعے evaluate کیا جا سکتا ہے۔
دونوں branches compute ہوتی ہیں، اور selector یہ طے کرتا ہے کہ output میں کون سا نتیجہ شامل ہوگا۔
Repository کا جائزہ لیں
پروجیکٹ کے ساتھ کام کرتے وقت README میں نمایاں کی گئی directories سے آغاز کریں:
docs/میں پروجیکٹ کو سمجھنے کے لیے documentation اور مواد موجود ہے۔src/میں implementation موجود ہے۔template/پروجیکٹ سے واقف ہونے کے لیے ابتدائی بنیاد فراہم کرتا ہے۔lab/میں پرانے تجربات موجود ہیں جنہیں آپ دیکھ سکتے ہیں یا نظر انداز کر سکتے ہیں۔
ایک عملی workflow یہ ہے کہ پہلے demos چلائیں، پھر ان کے رویے کا متعلقہ source files سے موازنہ کریں۔ اس سے دکھائی دینے والی مثالوں اور matrix operations میں ہونے والی بنیادی تبدیلی کے درمیان تعلق سمجھنے میں مدد ملتی ہے۔
Demos آزمائیں
Hosted demo، Handwired کو عملی طور پر دیکھنے کا تیز ترین طریقہ ہے۔ پروجیکٹ کی تفصیل خاص طور پر ایک JSON search demo کو نمایاں کرتی ہے جو 100,000 documents کو milliseconds میں process کرتا ہے۔ یہ اس منصوبے کے مقصد کو ظاہر کرتا ہے کہ روایتی single-threaded انداز میں لکھے گئے code میں خاطر خواہ parallelism لائی جائے۔
Demos کے ذریعے اصل program structure اور تیار کردہ mathematical representation کے فرق کا مشاہدہ کریں۔ مقامی source میں ترمیم کرنے سے پہلے یہ ایک مفید نقطۂ آغاز بھی ہیں۔
اعلیٰ درجے کے خیالات
Trainable Weights کے ساتھ تجربہ کریں
Handwired عام طور پر دستی طور پر لکھے گئے weights استعمال کرتا ہے، اس لیے program کو کام کرنے کے لیے training ضروری نہیں۔ پروجیکٹ کی جانب سے تجویز کردہ ایک تجربہ یہ ہے کہ ان weights کو unfreeze کر کے دیکھا جائے کہ optimization process کیا تیار کرتی ہے۔
Frozen Programs کو Neural Networks کے ساتھ ملائیں
ایک اور امکان یہ ہے کہ کسی مخصوص frozen Handwired program کو ایک general neural network کے ساتھ منسلک کر کے مشترکہ system کو end to end train کیا جائے۔ اس طرح model ایک درست طور پر متعین program برقرار رکھتے ہوئے دیگر behaviors سیکھ سکتا ہے۔
Primitive Operations کے لحاظ سے سوچیں
تجربات تیار کرتے وقت اس بات پر توجہ دیں کہ control flow کو addition، multiplication اور ReLU طرز کے operations کے ذریعے کیسے ظاہر کیا جا سکتا ہے۔ نتیجے میں بننے والی computation جتنی سادہ ہوگی، اتنا ہی براہ راست وہ fusion، sparsity اور reordering جیسی تکنیکوں سے فائدہ اٹھا سکے گی۔
نتیجہ
Handwired یہ دکھاتا ہے کہ عام JavaScript منطق کو قابلِ تفریق ریاضیاتی حساب میں کیسے تبدیل کیا جا سکتا ہے۔ کنٹرول فلو کو حسابی سلیکٹرز سے بدل کر اور نتیجے کو میٹرکس ضرب اور ایکٹیویشن آپریشنز تک محدود کر کے، یہ روایتی پروگراموں کو نیورل نیٹ ورک کی تکنیکوں اور JavaScript یا WebGPU پر عمل درآمد کے ساتھ ہم آہنگ بناتا ہے۔ اسے Bun کے ذریعے انسٹال کریں، ڈیموز کا جائزہ لیں، پھر تجربات شروع کرنے کے لیے docs/، src/ اور template/ کا معائنہ کریں۔
