আরএনএন-এর মাধ্যমে কেন পিছনে প্রচার হয়?


14

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

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

আপডেট: আমি একটি উত্তর যুক্ত করেছি


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

আপনার "আপডেট: আমি একটি উত্তর যুক্ত করেছি" পূর্ববর্তী সম্পাদনাটিকে আপনার আর্কিটেকচারের বর্ণনা এবং একটি চিত্রের সাহায্যে প্রতিস্থাপন করেছে। এটা উদ্দেশ্য হয়?
অ্যামিবা বলছেন মনিকা পুনরায়

হ্যাঁ আমি এটিকে বের করেছিলাম কারণ এটি প্রকৃত প্রশ্নের সাথে সত্যই প্রাসঙ্গিক বলে মনে হয় নি এবং এটি প্রচুর জায়গা নিয়েছিল, তবে এটি যদি সহায়তা করে তবে আমি এটি আবার যুক্ত করতে পারি
ফ্রবট

লোকেরা আপনার আর্কিটেকচারটি বোঝার ক্ষেত্রে বিশাল সমস্যা বলে মনে হচ্ছে, তাই আমি অনুমান করি যে কোনও অতিরিক্ত ব্যাখ্যা দরকারী। আপনি যদি চান তবে এটি আপনার প্রশ্নের পরিবর্তে আপনার উত্তরে যুক্ত করতে পারেন।
অ্যামিবা

উত্তর:


4

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


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

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

আমি কল্পনা করেছিলাম যে এটিই ছিল, সে কারণেই আমি আপনার ক্ষতির কাজটি দেখার জন্য জোর দিয়েছিলাম। এটা অনেক অনেক যদি আপনার ক্ষতির সদৃশ হয় এবং এটি অভিন্নরুপে একটি RNN এবং তুমি প্রচারের / পুরো ক্রম ইনপুটিং আসলে কি ছিন্ন BPTT আপনি অর্থাৎ ' আমার পোস্টে লাল অংশটি গণনা করুন তবে আরও পুনরাবৃত্তি হবে না। error=t(yty^t)2
ragulpr

আমার ক্ষতি ফাংশন সময়ের সাথে যোগফল হয় না। আমি একটি ইনপুট নিই, একটি আউটপুট পাই, তার পরে একটি ক্ষতির গণনা করব এবং ওজনগুলি আপডেট করব, তারপরে t + 1 এ চলে যাই, সুতরাং যোগফলের কিছুই নেই। আমি আসল ক্ষতি ফাংশনটি মূল পোস্টে যুক্ত করব
Frobot

কেবল আপনার কোড পোস্ট করুন আমি কোনও অনুমান করছি না, এটি নির্বোধ।
ragulpr

2

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

বলুন যে RNN আউটপুট Y টি প্রতিটি পদক্ষেপ এবং টি = ( Y টি - Y টি ) 2y^t

errort=(yty^t)2

ওজন শিখতে ফাংশনের জন্য আমাদের গ্রেডিয়েন্টগুলির প্রশ্নের উত্তর দিতে প্রয়োজন "পরামিতি পরিবর্তনের ফলে ক্ষতির কার্যকারিতা কতটা প্রভাবিত করে?" এবং প্রদত্ত দিকগুলিতে পরামিতিগুলি সরান:

errort=2(yty^t)y^t

অর্থাৎ আমাদের একটি ডিএনএন রয়েছে যেখানে প্রতিটি স্তরে পূর্বাভাসটি কতটা ভাল তা আমরা প্রতিক্রিয়া পাই get যেহেতু প্যারামিটারের পরিবর্তন DNN (টাইমস্টেপ) এর প্রতিটি স্তর পরিবর্তন করবে এবং প্রতিটি স্তর আগত আউটপুটগুলিতে অবদান রাখে যার জন্য এটি গণনা করা দরকার।

এটি অর্ধ-স্পষ্টভাবে দেখতে একটি সাধারণ একটি নিউরন-ওয়ান স্তর নেটওয়ার্ক নিন:

y^t+1=f(a+bxt+cy^t)ay^t+1=f(a+bxt+cy^t)cay^tby^t+1=f(a+bxt+cy^t)(xt+cby^t)cy^t+1=f(a+bxt+cy^t)(y^t+ccy^t)y^t+1=f(a+bxt+cy^t)([0xty^t]+cy^t)

সঙ্গে শেখার হার এক প্রশিক্ষণ পদক্ষেপ তারপর হল: [ ~ একটি ~ ~ ][ একটি ] + + δ ( Y টি - Y টি ) Y টিδ

[a~b~c~][abc]+δ(yty^t)y^t

আমরা কি দেখতে যে গণনা করতে অনুক্রম হল আপনি প্রয়োজন আউট ক্যালকুলেট অর্থাত রোলে Y টি । আপনি কি উত্থাপন করা হয় কেবল লাল অংশ উপেক্ষা জন্য লাল অংশ ক্যালকুলেট টি কিন্তু আরো recurse না। আমি ধরে নিয়েছি যে আপনার ক্ষতি কিছুটা এরকমy^t+1y^tt

error=t(yty^t)2

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

edit4: মন্তব্য পড়ার পরে মনে হচ্ছে আপনার আর্কিটেকচারটি কোনও আরএনএন নয়।

RNN: Stateful - এগিয়ে গোপন বহন রাষ্ট্র অনির্দিষ্টকালের জন্যht Statefull এটি আপনার মডেল কিন্তু প্রশিক্ষণ ভিন্ন।

আপনার মডেল: stateless স্টেটলেস - লুকানো রাজ্য প্রতিটি পদক্ষেপে পুনর্নির্মাণ সম্পাদনা 2: ডিএনএনএস সম্পাদনা 3: ফিক্সড গ্রেডস্টেপ এবং কিছু স্বরলিপি সম্পাদনা 5-এ আরও রেফ যুক্ত করা হয়েছে: আপনার উত্তর / স্পষ্টতার পরে আপনার মডেলটির ব্যাখ্যা স্থির করে।


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

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

y^t+ +1=(এক্সটি,এক্সটি-1)

1
আমি সাইজের 1 এর স্লাইডিং উইন্ডোটি ব্যবহার করছি, তবে ফলাফলগুলি ইনপুটগুলি সহ 2 এএনএন আকারের স্লাইডিং উইন্ডো তৈরির তুলনায় একেবারে আলাদা (xt, xt − 1)। আমি একটি বৃহত আকারের পাঠ্য শিখতে গিয়ে উদ্দেশ্যমূলকভাবে এটিটিকে উপকার করতে পারি এবং এটি 0 টি ত্রুটি সহ পুরো পাঠকে পুনরুত্পাদন করতে পারে, যার জন্য দীর্ঘমেয়াদী নির্ভরতা জানা দরকার যা আপনার কাছে কেবল ইনপুট হিসাবে (xt, xt − 1) থাকলে অসম্ভব হত। আমি একমাত্র প্রশ্ন রেখেছি যদি বিপিটিটি ব্যবহার করা নির্ভরতা আরও দীর্ঘায়িত করতে দেয় তবে এটি সততার সাথে এটির মতো দেখায় না।
ফ্রবট

Y^টি-2Y^টি=0

1

এফ((এক্স),(এক্স),মি(এক্স))এক্স=এফএক্স+ +এফএক্স+ +এফমিমিএক্স

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

ঠিক কীভাবে হয়েছে θ contribute to our current error? We took a weighted sum with our current input, xt, so we'll need to backpropagate through the input to find θa(xt,θ), to work out how to adjust θ. But our error was also the result of some contribution from Ht1, which was also a function of θ, right? So we need to find out θHt1, which was a function of xt1, θ and Ht2. But Ht2 was also a function a function of θ. And so on.


I understand why you back propagate through time in a traditional RNN. I'm trying to find out why a traditional RNN uses multiple inputs at once for training, when using just one at a time is much simpler and also works
Frobot

The only sense in which you can feed in multiple inputs at once into an RNN is feeding in multiple training examples, as part of a batch. The batch size is arbitrary, and convergence is guaranteed for any size, but higher batch sizes may lead to more accurate gradient estimations and faster convergence.
Matthew Hampsey

That's not what I meant by "multiple inputs at once". I didn't word it very well. I meant you usually forward propagate through several inputs in the training sequence, then back propagate back through them all, then update the weights. So the question is, why propagate through a whole sequence when doing just one input at a time is much easier and still works
Frobot

I think some clarification here is required. When you say "inputs", are you referring to multiple training examples, or are you referring to multiple time steps within a single training example?
Matthew Hampsey

1
I will post an answer to this question by the end of today. I finished making a BPTT version, just have to train and compare. After that if you still want to see some code let me know what you want to see and I guess I could still post it
Frobot
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.