নিউরাল নেটওয়ার্ক: গঠন

আপনি যদি ফিচার ক্রস ইউনিট থেকে স্মরণ করেন, নিম্নলিখিত শ্রেণীবিভাগ সমস্যাটি অরৈখিক:

কার্টেসিয়ান প্লট। প্রথাগত x অক্ষকে 'x1' লেবেল করা হয়েছে। ঐতিহ্যগত y অক্ষকে 'x2' লেবেল করা হয়েছে। নীল বিন্দু উত্তর-পশ্চিম এবং দক্ষিণ-পূর্ব চতুর্ভুজগুলি দখল করে; হলুদ বিন্দুগুলি দক্ষিণ-পশ্চিম এবং উত্তর-পূর্ব চতুর্ভুজগুলি দখল করে।

চিত্র 1. অরৈখিক শ্রেণীবিভাগ সমস্যা।

"অরৈখিক" এর অর্থ হল যে আপনি \(b + w_1x_1 + w_2x_2\) ফর্মের একটি মডেল সহ একটি লেবেল সঠিকভাবে অনুমান করতে পারবেন না অন্য কথায়, "সিদ্ধান্তের পৃষ্ঠ" একটি লাইন নয়। পূর্বে, আমরা ননলাইনার সমস্যার মডেলিং করার জন্য একটি সম্ভাব্য পন্থা হিসাবে বৈশিষ্ট্য ক্রসকে দেখেছিলাম।

এখন নিম্নলিখিত ডেটা সেট বিবেচনা করুন:

ডেটা সেটে অনেক কমলা এবং অনেক নীল বিন্দু রয়েছে। একটি সুসংগত প্যাটার্ন নির্ধারণ করা কঠিন, কিন্তু কমলা বিন্দু অস্পষ্টভাবে একটি সর্পিল গঠন করে এবং নীল বিন্দু সম্ভবত একটি ভিন্ন সর্পিল গঠন করে।

চিত্র 2. একটি আরও কঠিন অরৈখিক শ্রেণীবিভাগ সমস্যা।

চিত্র 2 এ দেখানো ডেটা সেটটি একটি লিনিয়ার মডেল দিয়ে সমাধান করা যাবে না।

নিউরাল নেটওয়ার্কগুলি কীভাবে অরৈখিক সমস্যার সাথে সাহায্য করতে পারে তা দেখতে, একটি গ্রাফ হিসাবে একটি লিনিয়ার মডেল উপস্থাপন করে শুরু করা যাক:

একটি সারিতে তিনটি নীল বৃত্ত তাদের উপরে একটি সবুজ বৃত্তের সাথে তীর দ্বারা সংযুক্ত

চিত্র 3. গ্রাফ হিসাবে লিনিয়ার মডেল।

প্রতিটি নীল বৃত্ত একটি ইনপুট বৈশিষ্ট্য উপস্থাপন করে, এবং সবুজ বৃত্ত ইনপুটগুলির ওজনযুক্ত যোগফলকে উপস্থাপন করে।

ননলাইনার সমস্যা মোকাবেলা করার ক্ষমতা উন্নত করতে আমরা কীভাবে এই মডেলটিকে পরিবর্তন করতে পারি?

লুকানো স্তর

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

একটি সারিতে তিনটি নীল বৃত্ত লেবেলযুক্ত

চিত্র 4. দ্বি-স্তর মডেলের গ্রাফ।

এই মডেল রৈখিক? হ্যাঁ-এর আউটপুট এখনও এর ইনপুটগুলির একটি রৈখিক সংমিশ্রণ।

নিম্নলিখিত গ্রাফ দ্বারা উপস্থাপিত মডেলটিতে, আমরা ওজনযুক্ত যোগফলের একটি দ্বিতীয় লুকানো স্তর যুক্ত করেছি।

একটি সারিতে তিনটি নীল বৃত্ত লেবেলযুক্ত

চিত্র 5. তিন-স্তর মডেলের গ্রাফ।

এই মডেল এখনও রৈখিক? হ্যাঁ, এটা. আপনি যখন আউটপুটকে ইনপুটের একটি ফাংশন হিসাবে প্রকাশ করেন এবং সরলীকরণ করেন, তখন আপনি ইনপুটের আরেকটি ওজনযুক্ত যোগফল পান। এই যোগফল চিত্র 2-এ অরৈখিক সমস্যাটিকে কার্যকরভাবে মডেল করবে না।

অ্যাক্টিভেশন ফাংশন

একটি অরৈখিক সমস্যা মডেল করতে, আমরা সরাসরি একটি অরৈখিকতা প্রবর্তন করতে পারি। আমরা একটি ননলিনিয়ার ফাংশনের মাধ্যমে প্রতিটি লুকানো স্তর নোড পাইপ করতে পারি।

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

আগের চিত্রের মতোই, দুটি লুকানো স্তরের মধ্যে 'নন-লিনিয়ার ট্রান্সফরমেশন লেয়ার' লেবেলযুক্ত গোলাপী বৃত্তের একটি সারি যোগ করা হয়েছে।

চিত্র 6. অ্যাক্টিভেশন ফাংশন সহ তিন-স্তর মডেলের গ্রাফ।

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

সাধারণ অ্যাক্টিভেশন ফাংশন

নিম্নলিখিত সিগমায়েড অ্যাক্টিভেশন ফাংশন ওজনযুক্ত যোগফলকে 0 এবং 1-এর মধ্যে একটি মানের মধ্যে রূপান্তরিত করে।

$$F(x)=\frac{1} {1+e^{-x}}$$

এখানে একটি প্লট:

সিগময়েড ফাংশন

চিত্র 7. সিগময়েড অ্যাক্টিভেশন ফাংশন।

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

$$F(x)=max(0,x)$$

ReLU-এর শ্রেষ্ঠত্ব অভিজ্ঞতামূলক অনুসন্ধানের উপর ভিত্তি করে, সম্ভবত ReLU-এর প্রতিক্রিয়াশীলতার আরও কার্যকর পরিসীমা দ্বারা চালিত। একটি সিগমায়েডের প্রতিক্রিয়াশীলতা উভয় দিকে তুলনামূলকভাবে দ্রুত পড়ে যায়।

ReLU অ্যাক্টিভেশন ফাংশন

চিত্র 8. ReLU অ্যাক্টিভেশন ফাংশন।

আসলে, যেকোনো গাণিতিক ফাংশন একটি অ্যাক্টিভেশন ফাংশন হিসেবে কাজ করতে পারে। ধরুন যে \(\sigma\) আমাদের অ্যাক্টিভেশন ফাংশন (Relu, Sigmoid, বা যাই হোক না কেন) প্রতিনিধিত্ব করে। ফলস্বরূপ, নেটওয়ার্কে একটি নোডের মান নিম্নলিখিত সূত্র দ্বারা দেওয়া হয়:

$$\sigma(\boldsymbol w \cdot \boldsymbol x+b)$$

TensorFlow অনেক অ্যাক্টিভেশন ফাংশনের জন্য আউট-অফ-দ্য-বক্স সমর্থন প্রদান করে। আপনি আদিম নিউরাল নেটওয়ার্ক অপারেশনের জন্য TensorFlow-এর র‌্যাপারের তালিকার মধ্যে এই অ্যাক্টিভেশন ফাংশনগুলি খুঁজে পেতে পারেন। এটি বলেছে, আমরা এখনও ReLU দিয়ে শুরু করার পরামর্শ দিই।

সারসংক্ষেপ

মানুষ যখন "নিউরাল নেটওয়ার্ক" বলে তখন সাধারণত যা বোঝায় তার সমস্ত মানক উপাদান এখন আমাদের মডেলে রয়েছে:

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

একটি সতর্কতা: নিউরাল নেটওয়ার্কগুলি সবসময় ফিচার ক্রসের চেয়ে ভাল হয় না, তবে নিউরাল নেটওয়ার্কগুলি একটি নমনীয় বিকল্প অফার করে যা অনেক ক্ষেত্রে ভাল কাজ করে।