ভূমিকা
প্রথম ধাপ
আমি একটি স্ট্যান্ডার্ড ব্যাকপ্রোপেটেটিং নিউরাল নেটওয়ার্ক লিখেছি এবং এটি পরীক্ষা করার জন্য, আমি এটি XOR এর মানচিত্র রাখার সিদ্ধান্ত নিয়েছি।
এটি একটি 2-2-1 নেটওয়ার্ক (তান অ্যাক্টিভেশন ফাংশন সহ)
X1 M1
O1
X2 M2
B1 B2
পরীক্ষার উদ্দেশ্যে, আমি ম্যানুয়ালি একটি ওআর গেট হতে শীর্ষ মিডল নিউরন (এম 1) এবং নীচে নিউরনকে (এম 2) একটি ওআর গেট হতে সেটআপ করেছি (সত্য যদি আউটপুট 1 এবং মিথ্যা হলে উভয় আউটপুট)।
এখন, আমি নিজে থেকে M1-O1 -5.5, M2-O1 1 হতে, এবং B2--75 হতে সংযোগটি নিজেও সেট আপ করেছি
সুতরাং যদি এম 1 = 1 এবং এম 2 = 1, যোগফল হয় (-0.5 +1 -0.75 = -.25) তানহ (0.25) = -0.24
যদি এম 1 = -1 এবং এম 2 = 1, যোগফল ((-0.5) * (- 1) +1 -0.75 = .75) তানহ (0.75) = 0.63
যদি এম 1 = -1 এবং এম 2 = -1 হয় তবে যোগফলটি ((-0.5) * (- 1) -1 -0.75 = -1.25) তানহ (1.25) = -0.8
এটি "প্রথম পুনরাবৃত্তি" এর জন্য তুলনামূলকভাবে ভাল ফলাফল।
ধাপ দুই
আমি তখন এই ওজনগুলিকে কিছুটা সংশোধন করতে এগিয়ে চলেছি এবং তারপরে ত্রুটি প্রচারের অ্যালগরিদম (গ্রেডিয়েন্ট বংশদ্ভুতের উপর ভিত্তি করে) ব্যবহার করে প্রশিক্ষণ দিয়েছি। এই পর্যায়ে, আমি ইনপুট এবং মাঝারি নিউরনগুলির মধ্যে ভারসাম্য অক্ষত রেখেছি, এবং কেবল মাঝারি (এবং পক্ষপাত) এবং আউটপুটের মধ্যে ওজনটি পরিবর্তন করব।
পরীক্ষার জন্য, আমি ওজন নির্ধারণ করেছিলাম এবং .5 .4 .3 (যথাক্রমে এম 1, এম 2 এবং পক্ষপাতের জন্য)
এখানে, তবে আমি সমস্যাগুলি শুরু করি।
আমার প্রশ্ন
আমি আমার শিক্ষার হারটিকে .2 এ সেট করেছিলাম এবং 10000 পুনরাবৃত্তি বা আরও বেশি জন্য প্রশিক্ষণের ডেটা (ABA ^ B) এর মাধ্যমে প্রোগ্রামটি পুনরাবৃত্তি হতে দেয়।
বেশিরভাগ সময়, ওজনগুলি একটি ভাল ফলাফলে রূপান্তরিত করে। যাইহোক, কখনও কখনও, সেই ওজনগুলি (বলুন) 1.5, 5.7 এবং .9 তে রূপান্তরিত হয় যার ফলস্বরূপ +1 আউটপুট (এমনকি) {1, 1 a (যখন ফলাফলটি -1 হওয়া উচিত) এর ইনপুটে পরিণত হয়।
তুলনামূলকভাবে সরল এএনএন এর পক্ষে কি সমাধান সম্ভব যা একেবারেই রূপান্তর না করার সমাধান রয়েছে বা আমার বাস্তবায়নে কোনও বাগ আছে?