সুচিপত্র[লুকান][দেখান]
"গ্রাফ নিউরাল নেটওয়ার্ক" (GNNs) নামে পরিচিত গভীর শিক্ষার কৌশলগুলি গ্রাফ ডোমেনে কাজ করে। এই নেটওয়ার্কগুলি ইদানীং কম্পিউটার ভিশন, সুপারিশকারী সিস্টেম এবং কম্বিনেটরিয়াল অপ্টিমাইজেশন সহ বিভিন্ন ক্ষেত্রে ব্যবহার করা হয়েছে, যার নাম কয়েকটি।
এছাড়াও, এই নেটওয়ার্কগুলিকে সামাজিক নেটওয়ার্ক, প্রোটিন-প্রোটিন ইন্টারঅ্যাকশন নেটওয়ার্ক, জ্ঞানের গ্রাফ এবং অধ্যয়নের বিভিন্ন ক্ষেত্রে অন্যান্য সহ জটিল সিস্টেমের প্রতিনিধিত্ব করতে ব্যবহার করা যেতে পারে।
নন-ইউক্লিডীয় স্থান হল যেখানে গ্রাফ ডেটা কাজ করে, ছবির মতো অন্যান্য ধরনের ডেটার বিপরীতে। নোড শ্রেণীবদ্ধ করার জন্য, লিঙ্কগুলির পূর্বাভাস এবং ক্লাস্টার ডেটা, গ্রাফ বিশ্লেষণ ব্যবহার করা হয়।
এই নিবন্ধে, আমরা গ্রাফ পরীক্ষা করব নিউরাল নেটওয়ার্ক বিস্তারিতভাবে, এর প্রকারগুলি, পাশাপাশি PyTorch ব্যবহার করে ব্যবহারিক উদাহরণ প্রদান করে।
তাই, গ্রাফ কি?
একটি গ্রাফ হল এক ধরনের ডেটা স্ট্রাকচার যা নোড এবং শীর্ষবিন্দু দিয়ে গঠিত। বিভিন্ন নোডের মধ্যে সংযোগগুলি শীর্ষবিন্দু দ্বারা নির্ধারিত হয়। নোডগুলিতে দিক নির্দেশিত হলে, গ্রাফটিকে নির্দেশিত বলা হয়; অন্যথায়, এটি অনির্দেশিত।
গ্রাফের একটি ভাল প্রয়োগ হল বিভিন্ন ব্যক্তির মধ্যে সম্পর্কের মডেলিং সামাজিক যোগাযোগ মাধ্যম. জটিল পরিস্থিতি মোকাবেলা করার সময়, যেমন লিঙ্ক এবং বিনিময়, গ্রাফগুলি খুব সহায়ক।
তারা সুপারিশ সিস্টেম, শব্দার্থিক বিশ্লেষণ, সামাজিক নেটওয়ার্ক বিশ্লেষণ এবং প্যাটার্ন স্বীকৃতি দ্বারা নিযুক্ত করা হয়
. গ্রাফ-ভিত্তিক সমাধান তৈরি করা একটি একেবারে নতুন ক্ষেত্র যা জটিল এবং আন্তঃসম্পর্কিত ডেটার অন্তর্দৃষ্টিপূর্ণ বোঝার অফার করে।
গ্রাফ নিউরাল নেটওয়ার্ক
গ্রাফ নিউরাল নেটওয়ার্কগুলি বিশেষায়িত নিউরাল নেটওয়ার্ক প্রকার যা একটি গ্রাফ ডেটা বিন্যাসে কাজ করতে পারে। গ্রাফ এম্বেডিং এবং কনভোল্যুশনাল নিউরাল নেটওয়ার্ক (সিএনএন) তাদের উপর উল্লেখযোগ্য প্রভাব ফেলে।
গ্রাফ নিউরাল নেটওয়ার্কগুলি ভবিষ্যদ্বাণীমূলক নোড, প্রান্ত এবং গ্রাফ অন্তর্ভুক্ত করে এমন কাজে নিযুক্ত করা হয়।
- CNN এর ছবি শ্রেণীবদ্ধ করতে ব্যবহৃত হয়. একইভাবে, একটি শ্রেণির ভবিষ্যদ্বাণী করার জন্য, GNNs পিক্সেল গ্রিডে প্রয়োগ করা হয় যা গ্রাফ গঠনকে প্রতিনিধিত্ব করে।
- পুনরাবৃত্তি নিউরাল নেটওয়ার্ক ব্যবহার করে পাঠ্য শ্রেণীকরণ। GNNগুলি গ্রাফ আর্কিটেকচারের সাথেও ব্যবহৃত হয় যেখানে একটি বাক্যাংশের প্রতিটি শব্দ একটি নোড।
নোড, প্রান্ত বা সম্পূর্ণ গ্রাফের পূর্বাভাস দেওয়ার জন্য, জিএনএন তৈরি করতে নিউরাল নেটওয়ার্ক ব্যবহার করা হয়। নোড স্তরে একটি পূর্বাভাস, উদাহরণস্বরূপ, স্প্যাম সনাক্তকরণের মতো একটি সমস্যা সমাধান করতে পারে৷
লিঙ্ক ভবিষ্যদ্বাণী সুপারিশকারী সিস্টেমে একটি সাধারণ ক্ষেত্রে এবং এটি প্রান্ত-ভিত্তিক পূর্বাভাস সমস্যার উদাহরণ হতে পারে।
গ্রাফ নিউরাল নেটওয়ার্কের ধরন
অসংখ্য নিউরাল নেটওয়ার্কের ধরন বিদ্যমান, এবং কনভোলিউশনাল নিউরাল নেটওয়ার্ক তাদের অধিকাংশের মধ্যেই রয়েছে। আমরা এই অংশে সর্বাধিক পরিচিত জিএনএন সম্পর্কে জানব।
গ্রাফ কনভোলিউশনাল নেটওয়ার্ক (GCNs)
তারা ক্লাসিক CNN এর সাথে তুলনীয়। এটি কাছাকাছি নোডগুলি দেখে বৈশিষ্ট্যগুলি অর্জন করে। অ্যাক্টিভেশন ফাংশন GNN দ্বারা নোড ভেক্টর একত্রিত করার পরে এবং ঘন স্তরে আউটপুট পাঠানোর পরে অ-রৈখিকতা যোগ করতে ব্যবহৃত হয়।
এটি গ্রাফ কনভোলিউশন, একটি রৈখিক স্তর এবং একটি নন-লার্নার অ্যাক্টিভেশন ফাংশন দ্বারা গঠিত। GCN দুটি প্রধান প্রকারে আসে: স্পেকট্রাল কনভোলিউশনাল নেটওয়ার্ক এবং স্থানিক কনভোলিউশনাল নেটওয়ার্ক।
গ্রাফ অটো-এনকোডার নেটওয়ার্ক
এটি গ্রাফগুলিকে কীভাবে উপস্থাপন করতে হয় তা শিখতে একটি এনকোডার এবং ইনপুট গ্রাফগুলি পুনর্গঠনের চেষ্টা করার জন্য একটি ডিকোডার ব্যবহার করে। এনকোডার এবং ডিকোডার সংযোগকারী একটি বাধা স্তর রয়েছে।
যেহেতু স্বয়ংক্রিয়-এনকোডারগুলি ক্লাসের ভারসাম্য পরিচালনা করার জন্য একটি দুর্দান্ত কাজ করে, সেগুলি প্রায়শই লিঙ্কের পূর্বাভাসে ব্যবহার করা হয়।
পুনরাবৃত্ত গ্রাফ নিউরাল নেটওয়ার্ক (RGNNs)
মাল্টি-রিলেশনাল নেটওয়ার্কে, যেখানে একটি একক নোডের অনেকগুলি সম্পর্ক রয়েছে, এটি সর্বোত্তম প্রসারণ প্যাটার্ন শিখে এবং গ্রাফগুলি পরিচালনা করতে পারে। মসৃণতা বাড়াতে এবং ওভার-প্যারামিটারাইজেশন কমাতে, গ্রাফ নিউরাল নেটওয়ার্কের এই ফর্মটিতে নিয়মিত ব্যবহার করা হয়।
ভালো ফলাফল পাওয়ার জন্য, RGNN-এর কম প্রক্রিয়াকরণ শক্তি প্রয়োজন। এগুলি পাঠ্য প্রজন্ম, বক্তৃতা স্বীকৃতি, মেশিন অনুবাদ, ছবির বিবরণ, ভিডিও ট্যাগিং এবং পাঠ্য সংক্ষিপ্তকরণের জন্য ব্যবহার করা হয়।
গেটেড নিউরাল গ্রাফ নেটওয়ার্ক (GGNNs)
যখন দীর্ঘমেয়াদী নির্ভরশীল কাজের কথা আসে, তখন তারা RGNN-কে ছাড়িয়ে যায়। দীর্ঘমেয়াদী নির্ভরতার উপর নোড, এজ এবং টেম্পোরাল গেটগুলি অন্তর্ভুক্ত করে, গেটেড গ্রাফ নিউরাল নেটওয়ার্কগুলি পুনরাবৃত্ত গ্রাফ নিউরাল নেটওয়ার্কগুলিকে উন্নত করে।
গেটগুলি গেটেড রেকারেন্ট ইউনিটের (জিআরইউ) অনুরূপভাবে কাজ করে যে তারা বিভিন্ন পর্যায়ে ডেটা স্মরণ করতে এবং ভুলে যেতে ব্যবহৃত হয়।
Pytorch ব্যবহার করে গ্রাফ নিউরাল নেটওয়ার্ক বাস্তবায়ন
আমরা যে নির্দিষ্ট সমস্যাটির উপর দৃষ্টি নিবদ্ধ করব তা হল একটি সাধারণ নোড শ্রেণীকরণ সমস্যা। আমরা একটি বড় সামাজিক নেটওয়ার্ক নামক আছে musae-গিথুব, যা GitHub বিকাশকারীদের জন্য খোলা API থেকে সংকলিত হয়েছিল।
প্রান্তগুলি নোডগুলির মধ্যে পারস্পরিক অনুগামী সম্পর্কগুলি দেখায়, যা ডেভেলপারদের (প্ল্যাটফর্ম ব্যবহারকারীদের) প্রতিনিধিত্ব করে যারা কমপক্ষে 10টি সংগ্রহস্থলে অভিনয় করেছে (উল্লেখ্য যে পারস্পরিক শব্দটি একটি অনির্দেশিত সম্পর্ক নির্দেশ করে)।
নোডের অবস্থান, তারকাচিহ্নিত সংগ্রহস্থল, নিয়োগকর্তা এবং ইমেল ঠিকানার উপর ভিত্তি করে, নোডের বৈশিষ্ট্যগুলি পুনরুদ্ধার করা হয়। একজন GitHub ব্যবহারকারী একজন ওয়েব ডেভেলপার বা ক মেশিন লার্নিং ডেভেলপার আমাদের কাজ.
প্রতিটি ব্যবহারকারীর কাজের শিরোনাম এই টার্গেটিং ফাংশনের ভিত্তি হিসাবে কাজ করে।
PyTorch ইনস্টল করা হচ্ছে
শুরু করার জন্য, আমাদের প্রথমে ইনস্টল করতে হবে পাইটর্চ. আপনি থেকে আপনার মেশিন অনুযায়ী এটি কনফিগার করতে পারেন এখানে. আমারটা এখানে:
মডিউল আমদানি করা হচ্ছে
এখন, আমরা প্রয়োজনীয় মডিউল আমদানি করি
তথ্য আমদানি এবং অন্বেষণ
নিম্নলিখিত ধাপটি হল ডেটা পড়া এবং লেবেল ফাইল থেকে প্রথম পাঁচটি সারি এবং শেষ পাঁচটি সারি প্লট করা।
চারটি কলামের মধ্যে মাত্র দুটি-নোডের আইডি (অর্থাৎ, ব্যবহারকারী) এবং ml_target, যা 1 যদি ব্যবহারকারী মেশিন লার্নিং সম্প্রদায়ের সদস্য হয় এবং অন্যথায় 0-এই পরিস্থিতিতে আমাদের জন্য প্রাসঙ্গিক।
প্রদত্ত যে শুধুমাত্র দুটি শ্রেণী আছে, আমরা এখন নিশ্চিত হতে পারি যে আমাদের কাজটি একটি বাইনারি শ্রেণিবিন্যাসের সমস্যা।
উল্লেখযোগ্য শ্রেণী ভারসাম্যহীনতার ফলস্বরূপ, শ্রেণীবিভাগকারী অনুমান করতে পারে যে কোন শ্রেণীটি সংখ্যাগরিষ্ঠ তার পরিবর্তে উপস্থাপিত শ্রেণীকে মূল্যায়ন করে, শ্রেণী ভারসাম্যকে বিবেচনা করার জন্য আরেকটি গুরুত্বপূর্ণ বিষয় করে তোলে।
হিস্টোগ্রাম (ফ্রিকোয়েন্সি ডিস্ট্রিবিউশন) প্লট করা কিছু ভারসাম্যহীনতা প্রকাশ করে কারণ অন্যান্য ক্লাসের তুলনায় মেশিন লার্নিং (লেবেল=1) থেকে কম ক্লাস রয়েছে।
বৈশিষ্ট্য এনকোডিং
নোডের বৈশিষ্ট্যগুলি আমাদের প্রতিটি নোডের সাথে যুক্ত বৈশিষ্ট্য সম্পর্কে অবহিত করে। ডেটা এনকোড করার জন্য আমাদের পদ্ধতি প্রয়োগ করে, আমরা অবিলম্বে সেই বৈশিষ্ট্যগুলিকে এনকোড করতে পারি।
আমরা প্রদর্শনের জন্য নেটওয়ার্কের একটি ছোট অংশ (বলুন, 60টি নোড) এনক্যাপসুলেট করতে এই পদ্ধতিটি ব্যবহার করতে চাই। কোড এখানে তালিকাভুক্ত করা হয়.
গ্রাফ ডিজাইন এবং প্রদর্শন
আমরা টর্চ জ্যামিতিক ব্যবহার করব। আমাদের গ্রাফ তৈরি করতে ডেটা।
বিভিন্ন (ঐচ্ছিক) বৈশিষ্ট্য সহ একটি একক গ্রাফ মডেল করতে, একটি সাধারণ পাইথন অবজেক্ট ডেটা ব্যবহার করা হয়। এই শ্রেণী এবং নিম্নলিখিত বৈশিষ্ট্যগুলি ব্যবহার করে - যার সবগুলিই টর্চ টেনসর - আমরা আমাদের গ্রাফ অবজেক্ট তৈরি করব।
মানের x এর ফর্ম, যা এনকোড করা নোড বৈশিষ্ট্যগুলিতে বরাদ্দ করা হবে, তা হল [নোডের সংখ্যা, বৈশিষ্ট্যের সংখ্যা]।
y এর আকৃতি হল [নোডের সংখ্যা], এবং এটি নোড লেবেলে প্রয়োগ করা হবে।
প্রান্ত সূচক: একটি অনির্দেশিত গ্রাফ বর্ণনা করার জন্য, আমাদের মূল প্রান্তের সূচকগুলিকে প্রসারিত করতে হবে যাতে দুটি স্বতন্ত্র নির্দেশিত প্রান্তের অস্তিত্বের অনুমতি দেওয়া যায় যা একই দুটি নোডকে সংযুক্ত করে কিন্তু বিপরীত দিকে নির্দেশ করে।
এক জোড়া প্রান্ত, একটি নোড 100 থেকে 200 পর্যন্ত এবং অন্যটি 200 থেকে 100 পর্যন্ত নির্দেশ করে, উদাহরণস্বরূপ, নোড 100 এবং 200-এর মধ্যে প্রয়োজন। যদি প্রান্ত সূচকগুলি দেওয়া হয়, তাহলে এভাবেই অনির্দেশিত গ্রাফটি উপস্থাপন করা যেতে পারে। [2,2*মূল প্রান্তের সংখ্যা] হবে টেনসর ফর্ম।
আমরা একটি গ্রাফ প্রদর্শন করার জন্য আমাদের আঁকা গ্রাফ পদ্ধতি তৈরি করি। প্রথম ধাপ হল আমাদের সমজাতীয় নেটওয়ার্ককে একটি NetworkX গ্রাফে রূপান্তর করা, যা তারপর NetworkX.draw ব্যবহার করে আঁকা যাবে।
আমাদের GNN মডেল তৈরি করুন এবং এটি প্রশিক্ষণ দিন
আমরা light=False দিয়ে এনকোড ডেটা এক্সিকিউট করে এবং তারপর সম্পূর্ণ গ্রাফ তৈরি করতে light=False দিয়ে কনস্ট্রাক্ট গ্রাফ কল করে ডেটার পুরো সেটটিকে এনকোডিং করে শুরু করি। আমরা এই বড় গ্রাফ আঁকার চেষ্টা করব না কারণ আমি অনুমান করছি আপনি একটি স্থানীয় মেশিন ব্যবহার করছেন যার সীমিত সংস্থান রয়েছে।
মুখোশগুলি, যা বাইনারি ভেক্টর যা 0 এবং 1 সংখ্যাগুলি ব্যবহার করে প্রতিটি নির্দিষ্ট মুখোশের কোন নোডগুলি সনাক্ত করে, প্রশিক্ষণের সময় কোন নোডগুলি অন্তর্ভুক্ত করা উচিত তা প্রশিক্ষণের পর্যায়কে অবহিত করতে এবং কোন নোডগুলি পরীক্ষার ডেটা তা অনুমান পর্বটি বলতে ব্যবহার করা যেতে পারে। টর্চ geometric.transforms.
AddTrainValTestMask ক্লাসের ট্রেনিং মাস্ক, ভ্যাল মাস্ক এবং টেস্ট মাস্ক বৈশিষ্ট্যগুলি ব্যবহার করে একটি নোড-লেভেল স্প্লিট যোগ করা যেতে পারে, যা একটি গ্রাফ নিতে এবং আমাদের মুখোশগুলি কীভাবে তৈরি করতে চাই তা নির্দিষ্ট করতে আমাদের সক্ষম করতে ব্যবহার করা যেতে পারে।
আমরা প্রশিক্ষণের জন্য মাত্র 10% ব্যবহার করি এবং 60% ডেটা পরীক্ষা সেট হিসাবে ব্যবহার করি এবং 30% যাচাইকরণ সেট হিসাবে ব্যবহার করি।
এখন, আমরা দুটি GCNConv স্তর স্ট্যাক করব, যার প্রথমটিতে একটি আউটপুট বৈশিষ্ট্য রয়েছে যা ইনপুট বৈশিষ্ট্য হিসাবে আমাদের গ্রাফের বৈশিষ্ট্যগুলির সংখ্যার সমান।
দ্বিতীয় স্তরে, যেখানে আমাদের ক্লাসের সংখ্যার সমান আউটপুট নোড রয়েছে, আমরা একটি relu অ্যাক্টিভেশন ফাংশন প্রয়োগ করি এবং সুপ্ত বৈশিষ্ট্যগুলি সরবরাহ করি।
এজ ইনডেক্স এবং এজ ওয়েট হল দুটি বিকল্প x যেগুলি GCNConv ফরওয়ার্ড ফাংশনে গ্রহণ করতে পারে, কিন্তু আমাদের পরিস্থিতিতে, আমাদের শুধুমাত্র প্রথম দুটি ভেরিয়েবলের প্রয়োজন।
আমাদের মডেল গ্রাফের প্রতিটি নোডের ক্লাসের পূর্বাভাস দিতে সক্ষম হবে তা সত্ত্বেও, আমাদের এখনও ফেজের উপর নির্ভর করে প্রতিটি সেটের জন্য আলাদাভাবে নির্ভুলতা এবং ক্ষতি নির্ধারণ করতে হবে।
উদাহরণস্বরূপ, প্রশিক্ষণের সময়, আমরা সঠিকতা এবং প্রশিক্ষণের ক্ষতি নির্ধারণের জন্য শুধুমাত্র প্রশিক্ষণ সেটটি ব্যবহার করতে চাই এবং তাই এখানেই আমাদের মুখোশগুলি কাজে আসে।
যথাযথ ক্ষতি এবং নির্ভুলতা গণনা করার জন্য, আমরা মুখোশযুক্ত ক্ষতি এবং মুখোশযুক্ত নির্ভুলতার ফাংশনগুলি সংজ্ঞায়িত করব।
মডেল প্রশিক্ষণ
এখন আমরা প্রশিক্ষণের উদ্দেশ্য সংজ্ঞায়িত করেছি যার জন্য টর্চ ব্যবহার করা হবে। অ্যাডাম একজন মাস্টার অপ্টিমাইজার।
যাচাইকরণের নির্ভুলতার উপর নজর রেখে আমরা নির্দিষ্ট সংখ্যক যুগের জন্য প্রশিক্ষণ পরিচালনা করব।
আমরা বিভিন্ন যুগ জুড়ে প্রশিক্ষণের ক্ষতি এবং নির্ভুলতার পরিকল্পনা করি।
গ্রাফ নিউরাল নেটওয়ার্কের অসুবিধা
GNN ব্যবহার করার কিছু অসুবিধা আছে। কখন জিএনএনএ নিয়োগ করতে হবে এবং কীভাবে আমাদের মেশিন লার্নিং মডেলগুলির কার্যকারিতা বাড়ানো যায় তা উভয়ই আমাদের কাছে আরও ভালভাবে বোঝার পরে পরিষ্কার করা হবে।
- যদিও GNNগুলি অগভীর নেটওয়ার্ক, সাধারণত তিনটি স্তর সহ, বেশিরভাগ নিউরাল নেটওয়ার্কগুলি কার্যক্ষমতা উন্নত করতে গভীরে যেতে পারে। এই সীমাবদ্ধতার কারণে আমরা বড় ডেটাসেটগুলিতে কাটিং প্রান্তে পারফর্ম করতে অক্ষম।
- গ্রাফগুলিতে একটি মডেলকে প্রশিক্ষণ দেওয়া আরও কঠিন, যেহেতু তাদের কাঠামোগত গতিশীলতা গতিশীল।
- এই নেটওয়ার্কগুলির উচ্চ গণনামূলক খরচের কারণে, উত্পাদনের জন্য মডেলকে স্কেল করা চ্যালেঞ্জ উপস্থাপন করে। আপনার গ্রাফ গঠন বিশাল এবং জটিল হলে উৎপাদনের জন্য GNN স্কেল করা চ্যালেঞ্জিং হবে।
উপসংহার
বিগত কয়েক বছরে, গ্রাফ ডোমেনে মেশিন লার্নিং সমস্যাগুলির জন্য GNNগুলি শক্তিশালী এবং কার্যকর সরঞ্জাম হিসাবে গড়ে উঠেছে। এই নিবন্ধে গ্রাফ নিউরাল নেটওয়ার্কগুলির একটি মৌলিক ওভারভিউ দেওয়া হয়েছে।
এর পরে, আপনি ডেটাসেট তৈরি করা শুরু করতে পারেন যা মডেলটি প্রশিক্ষণ এবং পরীক্ষা করতে ব্যবহৃত হবে। এটি কীভাবে কাজ করে এবং এটি কী করতে সক্ষম তা বোঝার জন্য, আপনি আরও অনেক দূর যেতে পারেন এবং একটি ভিন্ন ধরনের ডেটাসেট ব্যবহার করে প্রশিক্ষণ দিতে পারেন।
শুভ কোডিং!
নির্দেশিকা সমন্ধে মতামত দিন