আমরা যারা কম্পিউটার প্রোগ্রামিংয়ের সাথে পরিচিত তারা জানি কোন কম্পিউটিং ডিভাইসকে (যেমন হতে পারে - ল্যাপটপ/ডেক্সটপ কম্পিউটার, ট্যাবলেট  অথবা স্মার্টফোন) কিছু নির্দেশনা লিখে দিলে সেটা এক্সিকিউট করে। এই নির্দেশনাগুলো সাধারণভাবে কম্পিউটার প্রোগ্রাম নামে পরিচিত যা লেখা হয় নির্দিষ্ট কিছু সাঙ্কেতিক ভাষায় যাদেরকে প্রোগ্রামিং ল্যাঙ্গুয়েজ নামে আমরা চিনি, যেমন - সি, সি++, জাভা, পিএইচপি, পাইথন ইত্যাদি।

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

প্রচলিত কম্পিউটার প্রোগ্রামিংয়ের সাথে মেশিন লার্নিংয়ের পার্থক্যঃ
যেকোনো কম্পিউটার প্রোগ্রামের ৩টি ফ্যাক্টর থাকে - ইনপুট(I), প্রসেস(P), আউটপুট(O)

প্রতীকের সাহায্যে লেখা যায়,

ইনপুট এবং আউটপুট উভয়েই একটি নির্দিষ্ট ফরম্যাটের ডেটা। আর প্রসেস হচ্ছে সুনির্দিষ্ট ক্রমে বিন্যস্ত কিছু গণনাকার্য যা একটি সুনির্দিষ্ট এলগরিদমকে বাস্তবায়ন করে এবং ইনপুট ডেটা থেকে আউটপুট ডেটা প্রদান করে। প্রসেস কম্পিউটেশনাল বা লজিকাল হতে পারে। একটি কম্পিউটার প্রোগ্রাম এমনভাবে লেখা হয় যা একটি নির্দিষ্ট ফরম্যাটের ইনপুট (I) গ্রহণ করে, তার উপর কিছু গাণিতিক বা যৌক্তিক কাজ (P) সম্পাদন করে এবং সবশেষে একটি নির্দিষ্ট ফরম্যাটের আউটপুট (O) প্রদান করে।

উদাহরণস্বরূপ ধরা যাক, এমন একটি প্রোগ্রাম আছে যা x বাহুবিশিষ্ট ক্ষেত্রের মোট অন্তঃস্থ কোণের পরিমাণ গণনা করে। এক্ষেত্রে প্রোগ্রামের ইনপুট হচ্ছে x যা একটি পূর্ণসংখ্যা, প্রসেসটা হবে একটি গাণিতিক অপারেশন যা x বাহু দ্বারা আবদ্ধ ক্ষেত্রের মোট অন্তঃস্থ কোণের পরিমাণ গণনা করে আর আউটপুট হবে গণনাকৃত কোণের মান যা আরেকটি পূর্ণসংখ্যা। গাণিতিকভাবে এই সমস্যা সমাধানের একটি ফর্মুলা আছে। যেকোনো x বাহুবিশিষ্ট ক্ষেত্রের মোট অন্তঃস্থ কোণের পরিমাণ = ১৮০*x - ৩৬০ ডিগ্রি। যেমন, ত্রিভুজের তিন কোণের সমষ্টি ১৮০ ডিগ্রি। একজন প্রোগ্রামার খুব সহজেই যেকোনো প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে এই ফর্মুলার সাহায্যে একটি প্রোগ্রাম লিখে ফেলতে পারে। এই ফর্মুলাটিই হল উক্ত সমস্যা সমাধানের এলগরিদম। এভাবে লিখিত প্রোগ্রামটি বিভিন্ন মানের x এর উপর প্রয়োগ করলে প্রাপ্ত আউটপুট (y) হবে এরকমঃ

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

মেশিন লার্নিংয়ে মেশিন বলতে বোঝানো হয় একটি কম্পিউটেশনাল ইঞ্জিনকে যার একটি নির্দিষ্ট আর্কিটেকচার বা কাঠামো এবং বেশ কিছু প্যারামিটার থাকে। এই কম্পিউটেশনাল ইঞ্জিন সাধারণভাবে মডেল নামে পরিচিত। একেক ধরনের সমস্যা সমাধানের জন্য একেক কাঠামোবিশিষ্ট মডেল বেছে নিতে হয় আর প্যারামিটারগুলোর মান ওই মডেলের সঠিকতা নিরূপণ করে। তাই আমাদের সমস্যা অনুযায়ী মডেলের কাঠামো বাছাই করা এবং মডেল প্যারামিটারগুলোর মান নির্ণয় করাটাই মেশিন লার্নিংয়ে সব থেকে বড় চ্যালেঞ্জ।

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

মেশিন লার্নিংয়ে প্রোগ্রামারকে কোন সুস্পষ্ট এলগরিদম বলে দিতে হয় না। এর পরিবর্তে মডেলের একটি কাঠামো নির্বাচন করতে হয় এবং ডেটাসেট দিয়ে মডেলকে ট্রেইন করতে হয় যা প্রসেস হিসাবে কাজ করে। এখন আমরা দেখব প্রচলিত কম্পিউটার প্রোগ্রামিং এর বাইরে কিভাবে এই কাজটি করা হয়। ধরা যাক, আগের প্রোগ্রামটিতে আমরা কোন ফর্মুলা বা এলগরিদম জানি না। এক্ষেত্রে আমরা মেশিন লার্নিং ব্যবহার করে সমস্যাটি সমাধান করতে পারি। মেশিন লার্নিং ব্যবহার করে সমস্যাটি সমাধানের জন্য আমরা এভাবে অগ্রসর হবঃ

মডেলের কাঠামো বাছাইঃ

শুরুতেই আমরা মডেলের কাঠামো বাছাই করবো। যেহেতু সমস্যাটিতে একটিমাত্র ইনপুট এবং একটিমাত্র আউটপুট আছে, সেহেতু ধরা যাক আমাদের মডেলের একটি ইনপুট নোড এবং একটি আউটপুট নোড অবশ্যই থাকবে। ইনপুট নোডে প্রোগ্রামের ইনপুটের ভ্যালু (x) বসানো হবে আর আউটপুট নোডে প্রোগ্রামের আউটপুট অর্থাৎ x বাহুবিশিষ্ট ক্ষেত্রের মোট অন্তঃস্থ কোণের পরিমাণ পাওয়া যাবে। এক্ষেত্রে ইনপুট নোড এবং আউটপুট নোড ব্যতীত অন্য কোন অন্তর্বর্তী নোডের প্রয়োজন নেই। শুধুমাত্র একটি ইনপুট নোড এবং একটি আউটপুট নোড নিয়ে গঠিত এটিই মেশিন লার্নিংয়ের সহজতম কাঠামো।

এরপর মডেল প্যারামিটার দিয়ে ইনপুট এবং আউটপুটের মধ্যে সম্পর্ক তৈরি করা হয়। গাণিতিকভাবে সম্পর্ক অনেক রকম হতে পারে, যেমন - লিনিয়ার(রৈখিক), এক্সপোনেনশিয়াল (সূচকীয়), লগারিদমিক ইত্যাদি। ধরা যাক, আমাদের মডেলে ২ টি প্যারামিটার ব্যবহার করে ইনপুট এবং আউটপুটের মধ্যে একটি রৈখিক সম্পর্ক স্থাপন করব। তাহলে এই ২টি প্যারামিটার দিয়ে ইনপুট (x) এবং আউটপুটের (y) মধ্যে স্থাপিত রৈখিক সম্পর্কটি আমরা একটি সরল সমীকরণের মাধ্যমে প্রকাশ করতে পারিঃ

এই সমীকরণটিই হবে আমাদের মেশিন লার্নিং এলগরিদম এবং আমাদের মডেলটি ২ প্যারামিটার বিশিষ্ট একটি লিনিয়ার মডেল। তাহলে ১ নং সমীকরণ অনুযায়ী আমাদের মডেলের কাঠামোটি দেখতে হবে এরকমঃ

ডেটাসেট সংগ্রহ ও প্রস্তুতিঃ

মেশিন লার্নিং ব্যবহার করে সমস্যাটি সমাধানের জন্য আমাদের স্যাম্পল ডেটা দরকার যেটা দিয়ে মডেলকে ট্রেইন করা হবে। মডেলকে ট্রেইন করার জন্য ব্যবহৃত ডেটা ট্রেইনিং ডেটাসেট নামে পরিচিত। ট্রেইন করা মডেলের কার্যকারিতা যাচাই করার জন্য আলাদা ডেটাসেট দরকার হয় যা ভ্যালিডেশন ডেটাসেট নামে পরিচিত। আমরা আগের টেবিলে দেওয়া স্যাম্পল ইনপুট ও আউটপুট থেকেই ট্রেইনিং ও ভ্যালিডেশন ডেটাসেট তৈরি করব। সাধারণভাবে সমগ্র ডেটার ৭৫% ট্রেইনিং ডেটা এবং বাকি ২৫% ভ্যালিডেশন ডেটা হিসাবে ব্যবহার করা হয়। তাহলে আমাদের ট্রেইনিং ও ভ্যালিডেশনের জন্য ২টি পৃথক ডেটাসেট হবে নিন্মরুপঃ

মডেল ট্রেইনিংঃ

মডেল ট্রেইনিংয়ের জন্য শুরুতে মডেল প্যারামিটারগুলোতে যেকোনো র‍্যানডম ভ্যালু বসানো হয়। একে মডেল প্যারামিটার ইনিশিয়ালাইজেশন বলে। ধরা যাক আমাদের মডেল প্যারামিটার ২টিকে ০(শুন্য) দিয়ে ইনিশিয়ালাইজ করা হল। অর্থাৎ

এবারে মডেল ট্রেইনিংয়ের কাজ শুরু করা যাক। আমাদের যে ট্রেইনিং ডেটাসেট রয়েছে সেখানে ৫টি সারি। একেকটি সারি দিয়ে একেকটি ডেটা স্যাম্পল বুঝায়। তাই আমাদের মোট ডেটা স্যাম্পল ৫টি। শুরুতে প্রথম স্যাম্পলটি বিবেচনা করি যেখানে ইনপুট, x = 3। উক্ত ইনপুটের মান যদি আমরা আমাদের মডেলের কাঠামোতে বা ১ নং সমীকরণে বসাই তাহলে মডেলের অনুমিত আউটপুট পাওয়া যাবে। মডেলের অনুমিত আউটপুটকে y’ দিয়ে প্রকাশ করলে আমরা পাই,

কিন্তু ডেটাসেটে দেওয়া আছে ১ম স্যাম্পলের আউটপুট, y = 180, যা প্রকৃত আউটপুট। অর্থাৎ আমাদের মডেলের অনুমিত আউটপুট প্রকৃত আউটপুট থেকে অনেক আলাদা। মডেলের অনুমিত আউটপুট এবং প্রকৃত আউটপুটের মধ্যবর্তী পার্থক্যকে এরর বলে। এই এরর বিভিন্নভাবে পরিমাপ করা যায়। এরর পরিমাপক ফাংশনকে এরর ফাংশন বলে এবং E দ্বারা সূচিত করা হয়। এটি লস ফাংশন নামেও পরিচিত। বিভিন্ন ধরনের সমস্যার জন্য এরর ফাংশনকে বিভিন্নভাবে সংজ্ঞায়িত করা হয়। আমাদের সমস্যার জন্য খুব সহজ একটি এরর ফাংশন নিয়ে কাজ করবঃ

তাহলে ২ নং সমীকরণ অনুসারে ১ম স্যাম্পলের জন্য প্রাপ্ত এরর গণনা করলে পাই,

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

আমাদের মডেল প্যারামিটার ২টিঃ  w1 এবং w2
w1 এর সাপেক্ষে  এররের (E) মান পরিবর্তনের হার ক্যালকুলাসের চেইন রুল অনুসারে আমরা এভাবে ক্যালকুলেট করতে পারি ,

অনুরূপভাবে, w2 এর সাপেক্ষে এররের (E) মান পরিবর্তনের হার,

সাধারণভাবে যেকোনো প্যারামিটার w এর সাপেক্ষে এরর ফাংশনের মান পরিবর্তনের হারকে ডেলটা প্রতীক Δw দ্বারা সূচিত করা হয়। সুতরাং

৩ ও ৪ নং সমীকরণে ১ম স্যাম্পলের জন্য  x, y এবং y' এর মান বসিয়ে পাই,

অতঃপর নির্ণীত ডেলটা ভ্যালু ২টি ব্যবহার করে মডেল প্যারামিটারগুলোর মান পরিবর্তন করব নিচের ফর্মুলা অনুযায়ীঃ

যেখানে k হচ্ছে লার্নিং রেট যা মূলত নির্ধারণ করে মডেল প্যারামিটারগুলো কতটা দ্রুত পরিবর্তিত হবে। k বড় হলে প্যারামিটারগুলো অনেক দ্রুত পরিবর্তিত হয় যা মডেলের গুনগত মান কমিয়ে দেয়, তাই সাধারণভাবে k এর মান ছোট রাখাই ভাল,  যেমন k = 0.001

৫ ও ৬ নং সমীকরণ থেকে প্যারামিটার ২টির পরিবর্তিত মান গণনা করলে পাই,

পরিবর্তিত মডেল প্যারামিটারগুলো নিয়ে পরবর্তী স্যাম্পলের উপর প্রয়োগ করে একইভাবে ১ নং সমীকরণ থেকে মডেল  আউটপুট ও ২ নং সমীকরণ থেকে এররের মান বের করা হয় এবং এরপর ৩ ও ৪ নং সমীকরণ থেকে প্যারামিটারগুলোর প্রতিটির সাপেক্ষে এররের মানের পরিবর্তনের হার গণনা করে ৫ ও ৬ নং সমীকরণ অনুযায়ী মডেল প্যারামিটারগুলো পরিবর্তন করা হয়।  বাকি সবগুলো ডেটা স্যাম্পলের জন্য এই কাজ করা হয়। এভাবে স্যাম্পল ইনপুট থেকে প্রাপ্ত অনুমিত আউটপুট ও প্রকৃত আউটপুটের এরর পরিবর্তনের হার বিশ্লেষণ করে মডেল প্যারামিটার আপডেট করার পদ্ধতিটি ব্যাকপ্রোপাগেশন (Backpropagation) নামে পরিচিত। ৫টি স্যাম্পলের প্রতিটির জন্য প্যারামিটারের প্রাথমিক মান, ডেটা ইনপুট, প্রকৃত আউটপুট, মডেলের অনুমিত আউটপুট, এররের পরিমাণ, ডেলটা ভ্যালু এবং প্যারামিটারের পরিবর্তিত মান নিচের টেবিলে বিন্যস্ত করা হলঃ

এভাবে মডেল ট্রেইনিংয়ের একটি ইপক (epoch) বা রাউন্ড শেষ হয় যেখানে সবকয়টি ডেটা স্যাম্পল অন্তত একবার মডেল ট্রেইনিংয়ে ব্যবহার করা হয়েছে। চাইলে একটি ইপকে শেষে প্রাপ্ত মডেল প্যারামিটারগুলো নিয়ে সবগুলো ডেটা স্যাম্পলের উপর আরেকটি ইপকে ট্রেইনিং চালানো যায়। একটি ইপক শেষে সবগুলো স্যাম্পলের জন্য ওই ইপকে প্রাপ্ত মোট এররের গড় মান নির্ণয় করা হয়। একে গড় ট্রেইনিং এরর বলা হয়। এই গড় ট্রেইনিং এররের মান মডেলের গুনগত মান নিরূপণ করে। তাই এই গড় ট্রেইনিং এরর কমানোর জন্য মডেলটিকে অনেকগুলো ইপকে ট্রেইন করা হয়। স্বাভাবিকভাবে ইপক যত বেশি হয়, মডেল ট্রেইনিং তত ভাল হয় এবং গড় ট্রেইনিং এররের মান কমতে থাকে। আমাদের মডেলটিকে ১০০০০ ইপকে ট্রেইন করলে প্রতিটি ইপক শেষে প্রাপ্ত প্যারামিটারগুলোর পরিবর্তিত মান এবং গড় ট্রেইনিং এররের পরিমাণ নিচের টেবিলে লিপিবদ্ধ করা হলঃ

আমরা দেখতে পাচ্ছি মডেলটিকে ১০০০০ ইপকে ট্রেইন করার পর প্যারামিটার ২টির মান পাওয়া গেছে w1 = 179.99 এবং w2 = -359.99 যেখানে গড় ট্রেইনিং এরর 0.00000755 বা 0.000755% । প্যারামিটারগুলোর ট্রেইনকৃত মান বসিয়ে ১ নং সমীকরণ থেকে পাই,

লক্ষ্য করলে দেখা যাবে যে আমাদের মডেলের সমীকরণ এবং কম্পিউটার প্রোগ্রামিংয়ে ব্যবহৃত গাণিতিক সমীকরণটি প্রায় এক। অর্থাৎ শুধুমাত্র ডেটাসেট ব্যবহার করে আমরা এমন একটি মডেল তৈরি করেছি যা প্রকৃত গাণিতিক সূত্রকেই সমর্থন করে। এটিই মেশিন লার্নিংয়ের বড় সার্থকতা।

মডেলের সঠিকতা নিরূপণ/মডেল ভ্যালিডেশনঃ

ট্রেইনকৃত মডেলটিকে ৩ নং টেবিলের ভ্যালিডেশন ডেটা স্যাম্পলের উপর প্রয়োগ করা হয়। ধরা যাক, ভ্যালিডেশন ডেটাসেটের ১ম স্যাম্পলের ইনপুট = 8 এবং প্রকৃত আউটপুট = 1080

৭ নং সমীকরণ অনুসারে আমাদের মডেলের অনুমিত আউটপুট,

অর্থাৎ এররের মান,

একইভাবে ২য় স্যাম্পলের জন্য মডেলের অনুমিত আউটপুট এবং এররের মান হিসাব করলে গড় ভ্যালিডেশন এরর পাওয়া যাবে = 0.105 বা, 10.5%

অতএব গড় ট্রেইনিং ও ভ্যালিডেশন এরর,


সুতরাং মোটামুটিভাবে আমাদের মডেলের সঠিকতা = (১০০ - ৫.৩)%
                                                                         = ৯৪.৭%

একটি সন্তোষজনক ট্রেইনিং ও ভ্যালিডেশন এররের মানের ভিত্তিতেই মেশিন লার্নিং মডেলকে প্রেডিকশনের কাজে ব্যবহার করা হয়।

মডেল ব্যবহার করে প্রেডিকশনঃ

৭ নং সমীকরণ থেকে প্রাপ্ত মডেল সমীকরণটি ব্যবহার করে আমরা যেকোনো অজানা x এর জন্য x বাহুবিশিষ্ট ক্ষেত্রের মোট অন্তঃস্থ কোণের পরিমাণ বের করতে পারি যেখানে মডেলের বিশ্বাসযোগ্যতা ৯৪.৭%

এপর্যন্ত মেশিন লার্নিংয়ের যে কার্যপদ্ধতি বর্ণনা করা হল, তার ব্লক ডায়াগ্রাম নিচের ছবিটিতে তুলে ধরা হলঃ

খুব সহজ একটি উদাহরণের মাধ্যমে গতানুগতিক প্রোগ্রামিংয়ের সাথে মেশিন লার্নিংয়ের পার্থক্য দেখানো হল। গতানুগতিক কম্পিউটার প্রোগ্রামিং সুস্পষ্ট নির্দেশনার ভিত্তিতে চলে, অন্যদিকে মেশিন লার্নিং ডেটা থেকে সিদ্ধান্ত নেয় এবং পরিসংখ্যানের ভিত্তিতে কাজ করে। উদাহরণটিতে মেশিন লার্নিংয়ের অত্যন্ত সরল একটি কার্যপদ্ধতি বর্ণনা করা হয়েছে। বাস্তবে ইঞ্জিনিয়ারিংয়ের দুনিয়াতে ব্যবহৃত মেশিন লার্নিংয়ের কার্যপদ্ধতি আরও বিস্তর এবং জটিল। যেমনঃ

১) যেহেতু মেশিন লার্নিং মানেই মডেল ট্রেইনিং আর মডেল ট্রেইনিং করা হয় ডেটাসেট দিয়ে, তাই ডেটাসেট সংগ্রহ একটি বড় চ্যালেঞ্জ। সমস্যার সমাধানের উপযোগী ডেটাসেট অনেক সময় সহজলভ্য হয় না, সেক্ষেত্রে নিজেদের ডেটাসেট তৈরি করে নেওয়া লাগতে পারে। সংগৃহীত ডেটাসেটকে পরিশুদ্ধকরণ এবং সমস্যার সমাধান ও গণনার উপযোগী করে প্রস্তুত করাটাও একটা চ্যালেঞ্জ। এজন্য Data Engineering নামে মেশিন লার্নিংয়ের একটি আলাদা শাখা রয়েছে যেখানে ডেটা সংগ্রহ ও প্রস্তুতির কাজ করা হয়।

২) রৈখিক মডেলের পাশাপাশি সমস্যার উপর ভিত্তি করে বাস্তব ক্ষেত্রে ব্যবহৃত মেশিন লার্নিং মডেলগুলোর কাঠামো জটিল থেকে জটিলতর হতে পারে। এমনকি মডেলগুলো বিভিন্ন স্তরে বিভক্ত হতে পারে। শুধু তাই নয়, একেকটি মডেলে লক্ষ লক্ষ প্যারামিটার থাকতে পারে। কখনও কখনও একাধিক পৃথক মডেলকে পরপর সাজিয়ে কম্বাইন্ড মডেল গঠন করা যেতে পারে। মেশিন লার্নিং মডেলের কাঠামো নিয়েই তাত্ত্বিক গবেষকরা কাজ করে থাকেন।

৩) উদাহরণে ব্যবহৃত ডেটাসেটে মাত্র ৫টি ডেটা স্যাম্পল ছিল এবং মডেল ট্রেইনিংয়ের সময় প্রতিটি স্যাম্পলের জন্য মডেল প্যারামিটার আপডেট করা হয়েছে। কিন্তু বাস্তবক্ষেত্রে মেশিন লার্নিং মডেলকে ট্রেইনিংয়ের জন্য ব্যবহৃত ডেটাসেটে লক্ষ লক্ষ ডেটা স্যাম্পল থাকে যার প্রতিটি স্যাম্পলের জন্য মডেল প্যারামিটার আপডেট করাটা গণনাগত দিক থেকে অনেক ব্যয়বহুল একটি কাজ। এর জন্য যেটা করা হয় তা হচ্ছে অনেকগুলো স্যাম্পলকে একসাথে নিয়ে একটি ব্যাচ গঠন করা হয় এবং ওই ব্যাচের সবগুলো স্যাম্পলের জন্য গড় এরর বের করে মডেলের প্যারামিটারগুলো আপডেট করা হয়। ডেটা স্যাম্পলের পরিমাণ অনুসারে একটি ইপকে অনেকগুলো ব্যাচ থাকতে পারে। একটি ব্যাচে কতগুলো স্যাম্পল থাকবে (ব্যাচ সাইজ) তার কোন বাঁধাধরা নিয়ম নেই। একটি মেশিন লার্নিং মডেলের লার্নিং রেট, মডেলটিকে কতগুলো ইপকে ট্রেইন করা হবে তার সংখ্যা, ব্যাচ সংখ্যা, ব্যাচ সাইজ ইত্যাদি ওই মডেলের হাইপারপ্যারামিটার নামে পরিচিত যা মডেলের কার্যকারিতা অনুযায়ী পরিবর্তন করে ট্রেইন করা হয়।

৪) অনেক বড় ডেটাসেটের উপর যখন মডেল ট্রেইন করা হয়, তখন এমন হতে পারে যে ট্রেইনিং এররের মান অনেক কম কিন্তু ভ্যালিডেশন এররের মান বেশি। অর্থাৎ মডেলটি ট্রেইনিং ডেটার উপরে ভাল কাজ করে কিন্তু  ভ্যালিডেশন ডেটার উপরে তেমন কাজ করে না। এধরনের মডেলকে ওভারফিটেড বা ওভারট্রেইন্ড মডেল বলে। এক্ষেত্রে সমগ্র ডেটাসেট থেকে র‍্যানডমভাবে অনেকগুলো ট্রেইনিং ও ভ্যালিডেশন ডেটাসেট প্রস্তুত করা হয়। অতঃপর এসব ডেটাসেটের উপরে আলাদাভাবে মডেল ট্রেইনিং ও ভ্যালিডেশন করা হয় এবং সবশেষে মডেলের গড় এররের মান গণনা করা হয়। এই পদ্ধতিকে ক্রস-ভ্যালিডেশন বলে। আবার এমনও হতে পারে যে মডেলের ট্রেইনিং এররের মান অনেক বেশি। অর্থাৎ মডেলটি ট্রেইনিং ডেটার উপরেই ভাল কাজ করছে না। এধরনের মডেলকে আন্ডারফিটেড বা আন্ডারট্রেইন্ড মডেল বলে। এক্ষেত্রে মডেলটিকে সম্পূর্ণ নতুনভাবে ট্রেইন করা উচিত।

৫) ট্রেইনিং বা ভ্যালিডেশন এররের মান তথা ট্রেইনকৃত মডেলের কার্যকারিতা সন্তোষজনক না হলে মডেলটিকে পুনরায় ট্রেইন করতে হয়। এক্ষেত্রে ট্রেইনিং বা ভ্যালিডেশন ডেটাসেট পরিবর্তন করা যেতে পারে অথবা নতুন ডেটাসেট ব্যবহার করা হতে পারে। প্রয়োজন হলে মডেলের হাইপারপ্যারামিটারগুলো পরিবর্তন করে অথবা নতুন কোন এরর ফাংশন বাছাই করে মডেলটি পুনরায় ট্রেইন করা হয়। এর বাইরে কোনও কোনও ক্ষেত্রে নতুন অপটিমাইজেশন এলগরিদম ব্যবহার করতে হতে পারে। এমনকি কখনও কখনও মডেলের কাঠামো সংশোধনের প্রয়োজন হতে পারে বা নতুন কাঠামো নিয়ে কাজ করা লাগতে পারে।

৬) মেশিন লার্নিংয়ে ব্যবহৃত মডেলের কাঠামোগত জটিলতার উপর নির্ভর করে মডেলের প্যারামিটার সংখ্যা অনেক বেশি হতে পারে, ফলে  মডেল ট্রেইনিংয়ে ঘণ্টার পর ঘণ্টা, এমনকি দিনের পর দিন লেগে যেতে পারে। সেজন্য বাস্তবক্ষেত্রে জটিল কাঠামোর মডেল ট্রেইনিংয়ের কাজে সাধারণ প্রসেসিং ক্ষমতাসম্পন্ন CPU এর বাইরে অতিদ্রুত সমান্তরাল প্রসেসিং ক্ষমতাসম্পন্ন GPU(Graphics Processing Unit) ব্যবহার করা হয়।


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