রিগ্রেশন জন্য একটি নিউরাল নেটওয়ার্ক প্রশিক্ষণ সর্বদা গড় পূর্বাভাস


9

আমি রিগ্রেশন-এর জন্য একটি সাধারণ কনভোলিউশনাল নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিচ্ছি, যেখানে কাজটি কোনও চিত্রের একটি বাক্সের (x, y) অবস্থানের পূর্বাভাস দেওয়া, যেমন:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

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

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

এখানে চিত্র বর্ণনা লিখুন

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

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


আপনি যদি আমার কিছু কোডে (কেরাস) আগ্রহী হন তবে এটি নীচে রয়েছে:

# Create the model
model = Sequential()
model.add(Convolution2D(32, 5, 5, border_mode='same', subsample=(2, 2), activation='relu', input_shape=(3, image_width, image_height)))
model.add(Convolution2D(64, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Convolution2D(128, 5, 5, border_mode='same', subsample=(2, 2), activation='relu'))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(2, activation='linear'))


# Compile the model
adam = Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=adam)


# Fit the model
model.fit(images, targets, batch_size=128, nb_epoch=1000, verbose=1, callbacks=[plot_callback], validation_split=0.2, shuffle=True)

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

হাই, এবং হ্যাঁ, চিত্রগুলি 5 টি পৃথক নমুনা। এগুলি আপনার জন্য কীভাবে রেন্ডার করা হয় তা আমি নিশ্চিত নই, তবে সেগুলি 5 টি পৃথক বর্গ চিত্র হওয়া উচিত (আমি সাহায্যের জন্য বিন্যাসটি একটু পরিবর্তন করেছি ...)। হ্যাঁ, আমি বুঝতে পেরেছি যে এই কাজের জন্য আপনার নিউরাল নেটওয়ার্কের দরকার নেই, তবে নিউরাল নেটওয়ার্কের মাধ্যমে কীভাবে রিগ্রেশন করবেন তা শিখতে সহায়তা করার জন্য এটি কেবল একটি পরীক্ষা পরীক্ষা experiment সাধারণকরণে সহায়তার জন্য কোনও তথ্য না থাকাতে আপনি কী বোঝাতে চেয়েছেন তা আমি বুঝতে পারি না .... প্রতিটি প্রশিক্ষণ জুটিতে একটি বর্গক্ষেত্রের চিত্র এবং বর্গক্ষেত্রের (x, y) অবস্থানের দ্বি-মাত্রিক ভেক্টর থাকে। ধন্যবাদ :)
কর্নিওরাস

1
1) প্রথম রূপান্তর স্তরটিতে আপনার ইনপুট আকারটি 3 (আরবিজি) চ্যানেল ব্যবহার করছে, তবে আপনার ডেটা গ্রেস্কেল (1 চ্যানেল) 2) আপনার এমন অনেকগুলি স্তর স্তর এবং ফিল্টার দরকার নেই, বাস্তবে আমি মনে করি একটি একক স্তর, এবং কিছু ছোট কর্নেল ভাল হবে।
ফটোকস

আপনি কি নিশ্চিত যে চিত্রগুলি লক্ষ্যবস্তুগুলির সাথে সামঞ্জস্য করে?
ব্যবহারকারী31264

1
@ ফোটক্স যেমনটি বলেছে, আপনার কনভ লেয়ারের দরকার নেই। এগুলি যুক্ত করা অপ্টিমাইজারের পক্ষে একটি ভাল সমাধান খুঁজে পাওয়া আরও কঠিন করে তোলে। আপনি যদি 3 টি কনভ লেয়ার সরিয়ে ফেলেন তবে আমি সন্দেহ করি আপনার "মডেল" কাজ করবে।
পিটার

উত্তর:


9

অপ্টিমাইজারটি একটি (উপ-) অনুকূল সমাধানে রূপান্তর করতে অক্ষম। কেন? আপনার সমস্যা খুব সহজ এবং / অথবা আপনার মডেল খুব জটিল।

খুব সহজ সমস্যা

@ ফোটক্স যেমন ইতিমধ্যে বলেছে যে এই সমস্যাটি কেবল একটি একক গোপন স্তর দ্বারা সমাধান করা যেতে পারে। এমনকি আমি সন্দেহ করি যে এটি কোনও গোপন স্তর ছাড়াই করা যায়। কারণ এই সমস্যাটি লিনিয়ার পৃথকযোগ্য

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

বেশ কয়েকটি সমাধান রয়েছে:

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

খুব জটিল মডেল

আপনার মডেলটির কয়েকটি অংশ রয়েছে যা অপটিমাইজারকে একটি মিষ্টি সর্বোত্তম খুঁজে পেতে সহায়তা না করে অনেক জটিলতা যুক্ত করে।

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

আরও একটি উদাহরণ হ'ল প্রচুর অতিরিক্ত পরামিতি সহ অ্যাডাম অপ্টিমাইজার। অ্যাডাম অপ্টিমাইজার এই প্যারামিটারগুলির সাথে ভাল কাজ করতে পারে তবে আপনি কেন কেবল SGDডিফল্ট মান সহ একটি সাধারণ অপ্টিমাইজার দিয়ে শুরু করবেন না ।

সুতরাং আপনি বিভিন্ন অপ্টিমাইজেশন করতে পারেন:

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

পুনশ্চ

আমি মনে করি আপনি অদিত দেশপাণ্ডের এই ব্লগপোস্টটি পছন্দ করবেন ।


এই সমাধানগুলি অপ্টিমাইজারের আচরণকে পরিবর্তন করে কিনা তা আমাকে জানান।
পিটার

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

0

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


4
প্রশ্নটি বলছে যে নেটওয়ার্কটি প্রায় সর্বদা শূন্য হয়। ওভারফিটিং নয়, মারাত্মক আন্ডারফিটিংয়ের ক্ষেত্রে এটি হবে । শেখার বক্ররেখায় প্রশিক্ষণ এবং বৈধতা ত্রুটির মধ্যে কোনও
ফাঁকও নেই

0

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

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


-1

আমি আসলে একটি খুব অনুরূপ সমস্যা নিয়ে কাজ করছিলাম। মূলত, আমার একটি সাদা পটভূমিতে বিন্দুগুলির একটি গোছা ছিল এবং আমি কোনও এনএনকে প্রথমে পটভূমিতে রাখা বিন্দুটি সনাক্ত করতে প্রশিক্ষণ দিচ্ছিলাম was আমি যেভাবে কাজ করেছিলাম তা হ'ল কেবলমাত্র নিউরনের একটি সম্পূর্ণ সংযুক্ত স্তর (তাই একটি 1-স্তর NN) ব্যবহার করা। উদাহরণস্বরূপ, একটি 100x100 চিত্রের জন্য, আমার কাছে 10,000 ইনপুট নিউরন (পিক্সেল) 2 আউটপুট নিউরনের সাথে সরাসরি সংযুক্ত থাকবে (স্থানাঙ্ক)। পাইটর্চে, যখন আমি পিক্সেল মানগুলিকে একটি সেন্সরে রূপান্তরিত করি, তখন এটি স্বয়ংক্রিয়ভাবে আমার ডেটাটি স্বাভাবিক করে দেয়, গড়কে বিয়োগ করে এবং স্ট্যান্ডার্ড বিচ্যুতি দ্বারা ভাগ করে। সাধারণ মেশিন শেখার সমস্যাগুলিতে, এটি ঠিক আছে তবে কোনও চিত্রের জন্য নয় যেখানে কোনও চিত্রের রঙিন পিক্সেলের সংখ্যার মধ্যে ভিন্নতা থাকতে পারে (যেমন আপনার যেখানে কেবল কয়েকটি সাদা পিক্সেল রয়েছে)। সুতরাং, আমি সমস্ত পিক্সেল তীব্রতার মানগুলিকে 255 দ্বারা ভাগ করে ম্যানুয়ালি সাধারণকরণ করেছি (তাই তারা এখন সাধারন বন্টনের সমস্ত তীব্রতার মানগুলিকে ফিট করার চেষ্টা করে এমন সাধারণ নরমালাইজেশন কৌশল ছাড়াই 0-1-এর পরিসীমাতে রয়েছে)। তারপরে, আমার এখনও সমস্যা ছিল কারণ এটি প্রশিক্ষণ সংস্থায় পিক্সেলের গড় স্থানাঙ্কের পূর্বাভাস ছিল। সুতরাং, আমার সমাধানটি ছিল শিক্ষার হারকে খুব উচ্চতর সেট করা, যা প্রায় সমস্ত এমএল প্রশিক্ষক এবং টিউটোরিয়ালের বিপরীতে যায়। 1e-3, 1e-4, 1e-5 ব্যবহার করার পরিবর্তে, বেশিরভাগ লোকেরা যেমন বলেন, আমি স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত সঙ্গে 1 বা 0.1 এর শিক্ষার হার ব্যবহার করছিলাম। এটি আমার সমস্যাগুলি স্থির করেছে এবং শেষ পর্যন্ত আমার নেটওয়ার্ক আমার প্রশিক্ষণের সেটটি মুখস্থ করতে শিখেছে। এটি খুব ভাল কোনও পরীক্ষার সেটকে সাধারণীকরণ করে না, তবে কমপক্ষে এটি কিছুটা কার্যকর হয়, যা আপনার প্রশ্নের প্রত্যেকের পরামর্শের চেয়ে বেশিরভাগই ভাল সমাধান। টিপিকাল নরমালাইজেশন কৌশলটি ছাড়াই এখন 0-1-এর মধ্যে রয়েছে যা সমস্ত তীব্রতার মানগুলিকে একটি সাধারণ বিতরণে ফিট করার চেষ্টা করে)। তারপরে, আমার এখনও সমস্যা ছিল কারণ এটি প্রশিক্ষণ সংস্থায় পিক্সেলের গড় স্থানাঙ্কের পূর্বাভাস ছিল। সুতরাং, আমার সমাধানটি ছিল শিক্ষার হারকে খুব উচ্চতর সেট করা, যা প্রায় সমস্ত এমএল প্রশিক্ষক এবং টিউটোরিয়ালের বিপরীতে যায়। 1e-3, 1e-4, 1e-5 ব্যবহার করার পরিবর্তে, বেশিরভাগ লোকেরা যেমন বলেন, আমি স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত সঙ্গে 1 বা 0.1 এর শিক্ষার হার ব্যবহার করছিলাম। এটি আমার সমস্যাগুলি স্থির করেছে এবং শেষ পর্যন্ত আমার নেটওয়ার্ক আমার প্রশিক্ষণের সেটটি মুখস্থ করতে শিখেছে। এটি খুব ভাল কোনও পরীক্ষার সেটকে সাধারণীকরণ করে না, তবে কমপক্ষে এটি কিছুটা কার্যকর হয়, যা আপনার প্রশ্নের প্রত্যেকের পরামর্শের চেয়ে বেশিরভাগই ভাল সমাধান। টিপিকাল নরমালাইজেশন কৌশলটি ছাড়াই এখন 0-1-এর মধ্যে রয়েছে যা সমস্ত তীব্রতার মানগুলিকে একটি সাধারণ বিতরণে ফিট করার চেষ্টা করে)। তারপরে, আমার এখনও সমস্যা ছিল কারণ এটি প্রশিক্ষণ সংস্থায় পিক্সেলের গড় স্থানাঙ্কের পূর্বাভাস ছিল। সুতরাং, আমার সমাধানটি ছিল শিক্ষার হারকে খুব উচ্চতর সেট করা, যা প্রায় সমস্ত এমএল প্রশিক্ষক এবং টিউটোরিয়ালের বিপরীতে যায়। 1e-3, 1e-4, 1e-5 ব্যবহার করার পরিবর্তে, বেশিরভাগ লোকেরা যেমন বলেন, আমি স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূত সঙ্গে 1 বা 0.1 এর শিক্ষার হার ব্যবহার করছিলাম। এটি আমার সমস্যাগুলি স্থির করেছে এবং শেষ পর্যন্ত আমার নেটওয়ার্ক আমার প্রশিক্ষণের সেটটি মুখস্থ করতে শিখেছে। এটি খুব ভাল কোনও পরীক্ষার সেটকে সাধারণীকরণ করে না, তবে কমপক্ষে এটি কিছুটা কার্যকর হয়, যা আপনার প্রশ্নের প্রত্যেকের পরামর্শের চেয়ে বেশিরভাগই ভাল সমাধান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.