আমি এই সমস্যাটি সম্পর্কে এখানে এবং এখানে দুটি প্রশ্ন পেয়েছি তবে এখনও পর্যন্ত এর সুস্পষ্ট উত্তর বা ব্যাখ্যা নেই I আমি একই সমস্যাটি কার্যকর করি যেখানে আমার কনভোলিউশন নিউরাল নেটওয়ার্কের প্রশিক্ষণের ত্রুটির চেয়ে বৈধতা ত্রুটি কম। ওটার মানে কি?
আমি এই সমস্যাটি সম্পর্কে এখানে এবং এখানে দুটি প্রশ্ন পেয়েছি তবে এখনও পর্যন্ত এর সুস্পষ্ট উত্তর বা ব্যাখ্যা নেই I আমি একই সমস্যাটি কার্যকর করি যেখানে আমার কনভোলিউশন নিউরাল নেটওয়ার্কের প্রশিক্ষণের ত্রুটির চেয়ে বৈধতা ত্রুটি কম। ওটার মানে কি?
উত্তর:
আপনার প্রকৃত পদ্ধতিটি (যেমন ক্রস-বৈধকরণ পদ্ধতি, পারফরম্যান্স মেট্রিক, ডেটা বিভাজন পদ্ধতি ইত্যাদি) না জেনে নিশ্চিত হওয়া শক্ত।
সাধারণত যদিও বলা যায়, প্রশিক্ষণ ত্রুটি প্রায়শই সর্বদা আপনার বৈধতা ত্রুটিটিকে হ্রাস করবে । তবে বৈধতা ত্রুটি প্রশিক্ষণের চেয়ে কম হওয়া সম্ভব। আপনি এটি দুটি উপায়ে চিন্তা করতে পারেন:
এ কারণেই আপনার মডেল প্রশিক্ষণের পদ্ধতিটি সত্যই মূল্যায়ন করা গুরুত্বপূর্ণ। আপনি যদি সঠিকভাবে প্রশিক্ষণের জন্য আপনার ডেটা বিভক্ত না করেন তবে আপনার ফলাফলগুলি বিভ্রান্তির দিকে পরিচালিত করবে, যদি কেবল ভুল না হয় তবে, সিদ্ধান্তগুলি।
আমি চারটি বিভিন্ন বিভাগে মডেল মূল্যায়নের কথা ভাবি:
আন্ডারফিটিং - বৈধকরণ এবং প্রশিক্ষণের ত্রুটি বেশি
ওভারফিটিং - বৈধতা ত্রুটি বেশি, প্রশিক্ষণের ত্রুটি কম
ভাল ফিট - বৈধতা ত্রুটি প্রশিক্ষণ ত্রুটির চেয়ে কিছুটা কম higher
অজানা ফিট - বৈধতা ত্রুটি কম, প্রশিক্ষণের ত্রুটি 'উচ্চ'
আমি 'অজানা' ফিট বলি কারণ ফলাফলটি মেশিন লার্নিং কীভাবে কাজ করে তার বিপরীতে স্বজ্ঞাত। এমএলের সারমর্মটি অজানাটিকে ভবিষ্যদ্বাণী করা। আপনি যদি 'শিখেছেন' তার চেয়ে অজানা সম্পর্কে ভবিষ্যদ্বাণী করতে আরও ভাল হন তবে প্রশিক্ষণ ও বৈধতার মধ্যে ডেটা অবশ্যই কোনওভাবে আলাদা হতে হবে। এর অর্থ হ'ল হয় আপনার নিজের ডেটা বিভাজন পদ্ধতি পুনর্নির্মাণ করা দরকার, আরও ডেটা যুক্ত করা, অথবা সম্ভবত আপনার পারফরম্যান্স মেট্রিক পরিবর্তন করা (আপনি আসলে আপনি যে পারফরম্যান্সটি চান তা পরিমাপ করছেন?)
সম্পাদনা
পূর্ববর্তী অজগর লাসাগন প্রশ্নের ওপির রেফারেন্সটি সম্বোধন করতে ।
এটি পরামর্শ দেয় যে আপনার কাছে ক্রস-বৈধকরণের প্রয়োজন নেই এবং আপনার প্রশিক্ষণ, বৈধতা এবং ডেটা উপগ্রহগুলি পরীক্ষা করার জন্য পর্যাপ্ত ডেটা রয়েছে। এখন, যদি আপনি লাসাগন টিউটোরিয়ালটি দেখেন তবে আপনি দেখতে পাবেন যে একই আচরণ পৃষ্ঠার শীর্ষে দেখা যাচ্ছে। আমার বিশ্বাস করা শক্ত হয়ে উঠবে যে লেখকরা যদি এই ধরনের ফলাফলটি পোস্ট করেন তবে এটি অদ্ভুত ছিল তবে কেবল তারা সঠিক বলে ধরে নেওয়ার পরিবর্তে আসুন আরও তাকাও। আমাদের এখানে সর্বাধিক আগ্রহের বিভাগটি প্রশিক্ষণ লুপ বিভাগে রয়েছে, নীচের ঠিক উপরে আপনি দেখতে পাবেন যে ক্ষতির পরামিতিগুলি কীভাবে গণনা করা হয়।
প্রশিক্ষণ ক্ষতি উপর গণনা করা হয় সমগ্র প্রশিক্ষণ ডেটা সেটটি । তেমনি, বৈধতা হ্রাস পুরো বৈধতা ডেটাসেটের উপরে গণনা করা হয় । প্রশিক্ষণ সেটটি সাধারণত যাচাইকরণের (80-20) কমপক্ষে 4 গুণ বেশি থাকে। প্রদত্ত যে ত্রুটিটি সমস্ত নমুনার উপরে গণনা করা হয়, আপনি বৈধতা সেটটির ক্ষতি ক্ষতি হিসাবে প্রায় 4X পর্যন্ত আশা করতে পারেন। আপনি খেয়াল করবেন, প্রশিক্ষণ হ্রাস এবং বৈধতা হ্রাস প্রশিক্ষণ অবিরত হিসাবে একে অপরের কাছাকাছি আসছে। এটি ইচ্ছাকৃত যেমন আপনার প্রশিক্ষণের ত্রুটিটি আপনার বৈধতা ত্রুটির চেয়ে কম হতে শুরু করে আপনি আপনার মডেলটিকে উপভোগ করতে শুরু করবেন !!!
আমি আশা করি এটি এই ত্রুটিগুলি পরিষ্কার করে দেয়।
একটি সম্ভাবনা: আপনি যদি আপনার নেটওয়ার্কে ড্রপআউট নিয়মিতকরণ স্তরটি ব্যবহার করেন তবে এটি যুক্তিসঙ্গত যে বৈধতা ত্রুটি প্রশিক্ষণের ত্রুটির চেয়ে ছোট। কারণ সাধারণত প্রশিক্ষণের সময় ড্রপআউট সক্রিয় হয় তবে বৈধতা সেটটিতে মূল্যায়ন করার সময় নিষ্ক্রিয় করা হয়। পরবর্তী ক্ষেত্রে আপনি আরও মসৃণ (সাধারণত আরও ভাল অর্থ) ফাংশন পান।
@ ডি কে এর উত্তরে মন্তব্য করার মতো পর্যাপ্ত পয়েন্ট আমার কাছে নেই, তবে কেরাসের ডকুমেন্টেশনে এফএকিউ হিসাবে এখন উত্তর দেওয়া হয়েছে:
"কেন প্রশিক্ষণের ক্ষতি পরীক্ষার ক্ষতির চেয়ে অনেক বেশি?
একটি কেরাস মডেলের দুটি পদ্ধতি রয়েছে: প্রশিক্ষণ এবং পরীক্ষা। ড্রপআউট এবং এল 1 / এল 2 ওজন নিয়ন্ত্রণের মতো নিয়মিতকরণ পদ্ধতিগুলি পরীক্ষার সময় বন্ধ করা হয়।
তদ্ব্যতীত, প্রশিক্ষণের তথ্য হ'ল প্রশিক্ষণের তথ্য প্রতিটি ব্যাচের উপর ক্ষতির গড়। আপনার মডেল সময়ের সাথে সাথে পরিবর্তিত হওয়ায়, প্রথম যুগের চেয়ে প্রথম যুগের তুলনায় ক্ষয়টি সাধারণত বেশি থাকে। অন্যদিকে, মহাকালের জন্য পরীক্ষার ক্ষতি মডেলটি ব্যবহার করে গণনা করা হয় যেমন এটি পর্বের শেষের দিকে, যার ফলে কম ক্ষতি হয়। "
আমার 2 সেন্ট: ড্রপআউট স্তর ছাড়াই আমারও একই সমস্যা ছিল। আমার ক্ষেত্রে - ব্যাচ-আদর্শ স্তরগুলি ছিল অপরাধী। যখন আমি এগুলি মুছে ফেলি - প্রশিক্ষণের ক্ষতি বৈধতা হ্রাসের মতো হয়ে যায়। সম্ভবত, এটি ঘটেছিল কারণ প্রশিক্ষণের সময় ব্যাচ-রীতিটি প্রদত্ত ইনপুট ব্যাচের গড় এবং ভিন্নতা ব্যবহার করে, যা ব্যাচ থেকে ব্যাচে আলাদা হতে পারে। তবে মূল্যায়নের সময় ব্যাচ-নিয়ম চলমান গড় এবং বৈচিত্র্য ব্যবহার করে, উভয়ই প্রশিক্ষণের সময় একক ব্যাচের গড় এবং তারতম্যের চেয়ে পুরো প্রশিক্ষণের বৈশিষ্ট্যকে আরও ভালভাবে প্রতিস্থাপন করে। অন্ততপক্ষে, পাইট্রচে ব্যাচ-আদর্শটি এভাবেই প্রয়োগ করা হয়
আরেকটি সম্ভাবনা যা @cdeterman এবং @DK উভয় উত্তরকে একরকম একত্রিত করে তা হ'ল যদি আপনি কিছু ডেটা বর্ধন প্রক্রিয়া ব্যবহার করেন। ইনফ্যাক্ট ডেটা অগমেন্টেশন কেবলমাত্র প্রশিক্ষণ সেটে করা হয় বৈধতা সেট (ড্রপআউট নিয়মিতকরণ হিসাবে) না করে, এবং প্রশিক্ষণ সংস্থার তুলনায় "সহজ" কেসগুলির একটি পূর্বাভাস দেওয়ার একটি বৈধতা সেট হতে পারে।
@cdeterman এবং @DK- এর ভাল ব্যাখ্যা রয়েছে। আমি আরও একটি কারণ চাই - data leakage
। আপনার ট্রেন-ডেটার কিছু অংশ টেস্ট-ডেটার সাথে "ঘনিষ্ঠভাবে সম্পর্কিত"।
সম্ভাব্য উদাহরণ: কল্পনা করুন যে আপনার কাছে পোষা প্রতি 500 টির মতো ছবি সহ 1000 কুকুর এবং 1000 বিড়াল রয়েছে (কিছু মালিকরা তাদের পোষা প্রাণীগুলির খুব অনুরূপ অবস্থানে ছবি তুলতে পছন্দ করেন), ব্যাকগ্রাউন্ডে বলুন। সুতরাং আপনি যদি এলোমেলোভাবে 70/30 বিভাজন করেন, আপনি পরীক্ষার ডেটাতে ট্রেনের ডেটা ফাঁস পাবেন।
সহজ কথায়, যদি প্রশিক্ষণ ক্ষতি এবং বৈধতা হ্রাস সঠিকভাবে গণনা করা হয়, তবে প্রশিক্ষণের ক্ষতি যাচাইকরণের ক্ষতির চেয়ে বেশি হওয়া অসম্ভব। এর কারণ ব্যাক-প্রসারণ সরাসরি প্রশিক্ষণ সংস্থায় গণিত ত্রুটি হ্রাস করে এবং কেবলমাত্র স্বতন্ত্রভাবে (এমনকি গ্যারান্টিযুক্তও নয়) বৈধতা সেটটিতে গণনা করা ত্রুটি হ্রাস করে।
প্রশিক্ষণের সময় এবং বৈধতা দেওয়ার সময় অবশ্যই কিছু অতিরিক্ত কারণ থাকতে হবে। ড্রপআউট একটি ভাল, কিন্তু অন্য হতে পারে। আপনি যে লাইব্রেরি ব্যবহার করছেন তার ডকুমেন্টেশন চেক করতে ভুলবেন না। মডেল এবং স্তরগুলির সাধারণত ডিফল্ট সেটিংস থাকতে পারে যা আমরা সাধারণত মনোযোগ দিই না।
প্রশিক্ষণের ত্রুটির চেয়ে কম বৈধতা ড্রপআউট বা অন্য কোনও কারণে সম্পর্কিত ওঠানামার কারণে ঘটতে পারে, তবে এটি দীর্ঘকাল ধরে চলতে থাকলে এটি ইঙ্গিত দিতে পারে যে প্রশিক্ষণ এবং বৈধতা ডেটাসেটগুলি একই পরিসংখ্যানের নকশাগুলি থেকে আঁকেনি। আপনার উদাহরণগুলি কোনও সিরিজ থেকে আসে এবং যদি আপনি প্রশিক্ষণ এবং বৈধতা ডেটাসেটগুলি যথাযথভাবে এলোমেলো না করে থাকেন তবে এটি ঘটতে পারে।
এই সময়ে, স্টোকাস্টিক গ্রেডিয়েন্ট ভিত্তিক পদ্ধতিগুলি প্রায়শই গভীর শিক্ষার জন্য পছন্দের অ্যালগরিদম। এর অর্থ এটি ব্যাচ হিসাবে আসে, গ্রেডিয়েন্টগুলি গণনা করা হয় এবং প্যারামিটারগুলি আপডেট হয়। এর অর্থ প্রতিটি ব্যাচ নির্বাচিত হওয়ায় আপনি ডেটা থেকে লোকসানের পরিমাণও গণনা করতে পারবেন। এই কাঠামোর অধীনে, ক্ষতির হিসাব কীভাবে করা যায় তার দুটি উপায় রয়েছে যা আমি ভাবতে পারি যা ট্রেনিং ত্রুটি বৈধতা ত্রুটির চেয়ে বেশি। নীচে, আমি দেখিয়েছি যে কেরাস প্রকৃতপক্ষে এই উপায়ে ইন-নমুনা ত্রুটিগুলি গণনা করতে দেখায়।
১) প্রশিক্ষণের ত্রুটি সমগ্র যুগের তুলনায় গড় হয়, বরং সমস্ত যুগের একসাথে, তবে বৈধতা ত্রুটিটি কেবল যুগের শেষে হয়। নোট করুন যে বৈধতা ত্রুটির পুরোপুরি আপডেট হওয়ার সুবিধা রয়েছে, যখন প্রশিক্ষণ ত্রুটিতে কম আপডেটের সাথে ত্রুটির গণনা অন্তর্ভুক্ত রয়েছে। অবশ্যই, অ্যাসিম্পোটোটিকভাবে এই প্রভাবটি সাধারণত অদৃশ্য হয়ে যায়।
২) ব্যাচ আপডেট হওয়ার আগে প্রশিক্ষণের ত্রুটি গণনা করা হয়। স্টোকাস্টিক গ্রেডিয়েন্ট ভিত্তিক পদ্ধতিতে গ্রেডিয়েন্টের কিছু শব্দ রয়েছে। যখন কেউ একটি পাহাড়ে আরোহণ করছেন, এমন একটি উচ্চ সম্ভাবনা রয়েছে যে সমস্ত প্রশিক্ষণের নমুনার তুলনায় বিশ্বব্যাপী লোকসান হ্রাস পাচ্ছে। যাইহোক, যখন কেউ খুব মোডে বন্ধ পায়, আপডেট দিক নমুনা থেকে সম্মান সঙ্গে নেতিবাচক হতে হবে মধ্যে আপনার ব্যাচ। তবে যেহেতু আমরা একটি মোড ঘুরে বেড়াচ্ছি, এর অর্থ হল গড় হিসাবে আমাদের অবশ্যই একটি দিক বাছাই করতে হবে যা নমুনাগুলি প্রকাশের ক্ষেত্রে ইতিবাচক outব্যাচের। এখন, যদি আমরা প্রদত্ত ব্যাচের নমুনাগুলির প্রতি সম্মানের সাথে আপডেট করতে চলেছি, তার অর্থ তারা সম্ভাব্য অনেক ব্যাচের আপডেটগুলি যেগুলি তারা অন্তর্ভুক্ত ছিল না, দ্বারা আপডেটের আগে তাদের ক্ষতি গণনা করে আশেপাশে ঠেলে দেওয়া হয়েছে, এটি যখন স্টোকাস্টিক পদ্ধতিগুলি আপনার ডেটাসেটের অন্যান্য নমুনার পক্ষে সবচেয়ে বেশি প্যারামিটারকে ঠেলে দিয়েছে, এইভাবে প্রত্যাশিত ক্ষতির ফলে আমাদের একটি ছোট wardর্ধ্বমুখী পক্ষপাত দেওয়া হবে।
লক্ষ করুন যে অ্যাসিপোটোটিকভাবে (1) এর প্রভাব চলে যায়, (2) না! নীচে আমি দেখাই যে কেরাস (1) এবং (2) উভয়ই করতে দেখা যায়।
(1) দেখানো হচ্ছে যে মেট্রিকগুলি প্রতিটি ব্যাচের উপরে একসাথে একবারে না হয়ে গড়ের তুলনায় গড় হয়। নমুনা যথার্থতা বনাম Val_accuracy খুব প্রথম পর্বের দিকে Val_accuracy উপকারের মধ্যে বিশাল পার্থক্যটি লক্ষ্য করুন। কারণ কিছু নমুনা ত্রুটি খুব কম ব্যাচের আপডেটের সাথে গণনা করা হয়েছে।
>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = 100,
... validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 8s 176us/sample
- loss: 0.2320 - accuracy: 0.9216
- val_loss: 0.1581 - val_accuracy: 0.9636
Epoch 2/3
46580/46580 [==============================] - 8s 165us/sample
- loss: 0.1487 - accuracy: 0.9662
- val_loss: 0.1545 - val_accuracy: 0.9677
Epoch 3/3
46580/46580 [==============================] - 8s 165us/sample
- loss: 0.1471 - accuracy: 0.9687
- val_loss: 0.1424 - val_accuracy: 0.9699
<tensorflow.python.keras.callbacks.History object at 0x17070d080>
(২) প্রতিটি ব্যাচের আপডেটের আগে ত্রুটি দেখানো গণনা করা হয় । নোট করুন যে, প্রথম যুগের জন্য, যখন আমরা ব্যবহার করি batch_size = nRows
(অর্থাত্, একটি ব্যাচের সমস্ত ডেটা), তখন ইন-স্যাম্পল ত্রুটিটি প্রথম যুগের জন্য প্রায় 0.5 (র্যান্ডম অনুমান), তবুও বৈধতা ত্রুটি 0.82। সুতরাং, ব্যাচ আপডেটের আগে ইন-স্যাম্পল ত্রুটিটি গণনা করা হয়েছিল , যখন ব্যাচ আপডেটের পরে বৈধতা ত্রুটি গণনা করা হয়েছিল ।
>>> model.fit(Xtrn, Xtrn, epochs = 3, batch_size = nRows,
... validation_data = (Xtst, Xtst))
Train on 46580 samples, validate on 1000 samples
Epoch 1/3
46580/46580 [==============================] - 9s 201us/sample
- loss: 0.7126 - accuracy: 0.5088
- val_loss: 0.5779 - val_accuracy: 0.8191
Epoch 2/3
46580/46580 [==============================] - 6s 136us/sample
- loss: 0.5770 - accuracy: 0.8211
- val_loss: 0.4940 - val_accuracy: 0.8249
Epoch 3/3
46580/46580 [==============================] - 6s 120us/sample
- loss: 0.4921 - accuracy: 0.8268
- val_loss: 0.4502 - val_accuracy: 0.8249