মূল কনটেন্টে যান
এআই টিউটোরিয়াল

Handwired: JavaScript প্রোগ্রামকে ডিফারেনশিয়েবল নিউরাল নেটওয়ার্কে রূপান্তর করুন

এই টিউটোরিয়ালে Handwired কীভাবে শর্ত, লুপ এবং প্রোগ্রামের অবস্থা ম্যাট্রিক্স গুণন ও ReLU-ধাঁচের অপারেশনে রূপান্তর করে তা ব্যাখ্যা করা হয়েছে। আপনি Bun দিয়ে প্রকল্পটি সেটআপ করবেন, এর ডেমোগুলো ঘেঁটে দেখবেন, গাণিতিক রূপান্তরটি বুঝবেন এবং এর ডিফারেনশিয়েবল প্রোগ্রামগুলো কোথায় কাজে লাগতে পারে তা শিখবেন।

Handwired: JavaScript প্রোগ্রামকে ডিফারেনশিয়েবল নিউরাল নেটওয়ার্কে রূপান্তর

Handwired কী?

Handwired প্রশিক্ষণের প্রয়োজন ছাড়াই সাধারণ JavaScript কোডকে নিউরাল-নেটওয়ার্কের মতো গণনায় রূপান্তর করে। কোনো প্রোগ্রামকে সাধারণ কন্ট্রোল ফ্লো হিসেবে উপস্থাপন করার পরিবর্তে, এটি কন্ডিশনাল, লুপ এবং স্টেটের মতো লজিককে ফ্লোটিং-পয়েন্ট মানের ওপর ম্যাট্রিক্স গুণন এবং reglu অপারেশনে রূপান্তর করে।

ফলস্বরূপ প্রোগ্রামটি সম্পূর্ণ ডিফারেনশিয়েবল থাকে, তবে এর ওজন শেখার পরিবর্তে হাতে লেখা হয়। Handwired JavaScript-এ অথবা WebGPU ব্যবহার করে এসব গণনা সম্পাদন করতে পারে।

HandwiredOS ডেমো

প্রোগ্রামকে নিউরাল গণনায় রূপান্তর করবেন কেন?

Handwired প্রোগ্রামের আচরণকে অল্প কিছু গাণিতিক প্রিমিটিভে, প্রধানত যোগ, গুণ এবং ReLU-ধরনের অপারেশনে নামিয়ে আনে। এই পদ্ধতিতে বেশ কিছু আকর্ষণীয় বৈশিষ্ট্য পাওয়া যায়:

  • সম্পূর্ণ প্রোগ্রামটি ডিফারেনশিয়েবল থাকে।
  • ওজন প্রশিক্ষণের প্রয়োজন হয় না, কারণ সেগুলো হাতে লেখা থাকে।
  • ফিউশন, স্পার্সিটি এবং অপারেশন পুনর্বিন্যাসের মতো GPU অপ্টিমাইজেশন সরলীকৃত গণনার সঙ্গে কাজ করতে পারে।
  • প্রচলিত JavaScript কোড এই রূপে উপস্থাপিত হলে সম্ভাব্যভাবে GPU-স্তরের সমান্তরালতা অর্জন করতে পারে।

প্রকল্পটি পরীক্ষামূলক সম্ভাবনাও তৈরি করে। আপনি হাতে সংজ্ঞায়িত ওজনগুলো আনফ্রিজ করে প্রশিক্ষণ কী ফল দেয় তা অনুসন্ধান করতে পারেন, অথবা একটি ফ্রোজেন প্রোগ্রামকে সাধারণ নিউরাল নেটওয়ার্কের সঙ্গে যুক্ত করে পুরো সিস্টেমকে এন্ড-টু-এন্ড প্রশিক্ষণ দিতে পারেন।

প্রকল্প সেট আপ করুন

Handwired-এ লাইভ ডেমো এবং স্থানীয়ভাবে এর বাস্তবায়ন অনুসন্ধানের জন্য প্রয়োজনীয় সোর্স রয়েছে। আপনার সিস্টেমে Bun ইনস্টল থাকতে হবে।

  1. Handwired রিপোজিটরি ক্লোন করুন।
  2. প্রকল্প ডিরেক্টরিতে প্রবেশ করুন।
  3. bun install দিয়ে নির্ভরতা ইনস্টল করুন।
  4. bun start দিয়ে স্থানীয় ডেমো চালু করুন।
git clone <handwired-repository-url>
cd handwired
bun install
bun start

প্রকল্প চালু হওয়ার পর ডেমোগুলো দেখতে Bun প্রদর্শিত স্থানীয় ঠিকানাটি ব্যবহার করুন। আপনি chenglou.me/handwired-এ হোস্ট করা ডেমোগুলোও চেষ্টা করতে পারেন।

মূল রূপান্তরটি বুঝুন

একটি সাধারণ JavaScript কন্ডিশনাল বিবেচনা করুন:

const a = 5
const result = (a > 4) ? 10 : 12

Handwired গাণিতিক পদ্ধতিতে কন্ডিশনটি প্রকাশ করে। একটি পূর্ণসংখ্যা মানের ক্ষেত্রে, নিচের ReLU অপারেশনগুলোর পার্থক্য এমন একটি সিলেক্টর তৈরি করে, যার মান 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

উভয় শাখারই গণনা করা হয়, তবে above4 উপযুক্ত ফল নির্বাচন করে। a = 5 হলে সিলেক্টরের মান 1, তাই চূড়ান্ত মান 10 হয়, যা মূল কন্ডিশনাল এক্সপ্রেশনের সঙ্গে মিলে যায়।

গাণিতিক উপস্থাপনাটি যেভাবে কাজ করে

মূল ধারণাটি হলো ব্রাঞ্চিংকে ধারাবাহিক গাণিতিক প্রিমিটিভ দিয়ে প্রতিস্থাপন করা। একটি কন্ডিশনালকে নিম্নলিখিত উপাদানগুলোর সমন্বয়ে প্রকাশ করা হয়:

HandwiredOS

  • ইনপুট থেকে একটি সিলেক্টর তৈরি করতে ReLU অপারেশন।
  • প্রতিটি শাখায় সিলেক্টর প্রয়োগ করতে গুণ।
  • শাখাগুলোর ফল একত্র করতে যোগ।

এই অপারেশনগুলো সংগ্রহ করার পর Handwired প্রাসঙ্গিক অ্যাক্টিভেশন অপারেশনসহ বড় একটি ম্যাট্রিক্স গুণন হিসেবে গণনাটি উপস্থাপন করতে পারে। এরপর একই প্রোগ্রাম JavaScript বা WebGPU ব্যবহার করে মূল্যায়ন করা যায়।

উভয় শাখাই গণনা করে, আর সিলেক্টর নির্ধারণ করে কোন ফল আউটপুটে অবদান রাখবে।

রিপোজিটরি অনুসন্ধান করুন

প্রকল্পটি নিয়ে কাজ করার সময় README-তে উল্লেখিত ডিরেক্টরিগুলো দিয়ে শুরু করুন:

  • docs/-এ প্রকল্পটি বোঝার জন্য ডকুমেন্টেশন ও উপকরণ রয়েছে।
  • src/-এ বাস্তবায়ন রয়েছে।
  • template/ প্রকল্পটির সঙ্গে পরিচিত হওয়ার জন্য একটি প্রাথমিক কাঠামো দেয়।
  • lab/-এ পুরোনো পরীক্ষাগুলো রয়েছে, যেগুলো আপনি অনুসন্ধান করতে পারেন বা উপেক্ষা করতে পারেন।

একটি কার্যকর পদ্ধতি হলো প্রথমে ডেমোগুলো চালানো, তারপর সংশ্লিষ্ট সোর্স ফাইলের সঙ্গে তাদের আচরণ তুলনা করা। এতে দৃশ্যমান উদাহরণগুলোকে ম্যাট্রিক্স অপারেশনে অন্তর্নিহিত রূপান্তরের সঙ্গে যুক্ত করা সহজ হয়।

ডেমোগুলো চেষ্টা করুন

Handwired কীভাবে কাজ করে তা দেখার দ্রুততম উপায় হলো হোস্ট করা ডেমো। প্রকল্পের বর্ণনায় বিশেষভাবে এমন একটি JSON সার্চ ডেমোর কথা বলা হয়েছে, যা মিলিসেকেন্ডে 100,000টি ডকুমেন্ট প্রক্রিয়া করে। এটি প্রচলিত, একক-থ্রেডেড ধাঁচে লেখা কোডে উল্লেখযোগ্য সমান্তরালতা আনার প্রকল্পটির লক্ষ্য প্রদর্শন করে।

মূল প্রোগ্রামের কাঠামো এবং উৎপন্ন গাণিতিক উপস্থাপনার পার্থক্য দেখতে ডেমোগুলো ব্যবহার করুন। স্থানীয় সোর্স পরিবর্তন করার আগে এগুলো একটি কার্যকর সূচনাবিন্দুও হতে পারে।

উন্নত ধারণা

প্রশিক্ষণযোগ্য ওজন নিয়ে পরীক্ষা করুন

Handwired সাধারণত হাতে লেখা ওজন ব্যবহার করে, তাই প্রোগ্রামটি কাজ করাতে প্রশিক্ষণের প্রয়োজন হয় না। প্রকল্পটি প্রস্তাবিত একটি পরীক্ষা হলো সেই ওজনগুলো আনফ্রিজ করে অপ্টিমাইজেশন প্রক্রিয়া কী তৈরি করে তা দেখা।

ফ্রোজেন প্রোগ্রামকে নিউরাল নেটওয়ার্কের সঙ্গে যুক্ত করুন

আরেকটি সম্ভাবনা হলো একটি নির্দিষ্ট ফ্রোজেন Handwired প্রোগ্রামকে সাধারণ নিউরাল নেটওয়ার্কের সঙ্গে যুক্ত করে সম্মিলিত সিস্টেমকে এন্ড-টু-এন্ড প্রশিক্ষণ দেওয়া। এতে একটি মডেল নির্ভুলভাবে সংজ্ঞায়িত প্রোগ্রাম ধরে রেখে অন্যান্য আচরণ শিখতে পারে।

প্রিমিটিভ অপারেশনের দৃষ্টিতে ভাবুন

পরীক্ষা নকশা করার সময় কন্ট্রোল ফ্লোকে কীভাবে যোগ, গুণ এবং ReLU-ধরনের অপারেশন দিয়ে প্রকাশ করা যায়, সেদিকে মনোযোগ দিন। উৎপন্ন গণনা যত সরল হবে, ফিউশন, স্পার্সিটি এবং পুনর্বিন্যাসের মতো কৌশল থেকে তত সরাসরি উপকার পাওয়া যাবে।

উপসংহার

Handwired দেখায়, কীভাবে সাধারণ JavaScript লজিককে ডিফারেনশিয়েবল গাণিতিক কম্পিউটেশনে পুনর্লিখন করা যায়। কন্ট্রোল ফ্লোকে গাণিতিক সিলেক্টর দিয়ে প্রতিস্থাপন করে এবং ফলাফলকে ম্যাট্রিক্স গুণন ও অ্যাক্টিভেশন অপারেশনে সীমিত করার মাধ্যমে এটি প্রচলিত প্রোগ্রামকে নিউরাল-নেটওয়ার্ক কৌশল এবং JavaScript বা WebGPU এক্সিকিউশনের সঙ্গে সামঞ্জস্যপূর্ণ করে। Bun দিয়ে এটি ইনস্টল করুন, ডেমোগুলো দেখুন, তারপর docs/, src/ এবং template/ পর্যালোচনা করে পরীক্ষা-নিরীক্ষা শুরু করুন।