আমার নিউরাল নেটওয়ার্কটি শিখতে না পারলে আমার কী করা উচিত?


146

আমি একটি নিউরাল নেটওয়ার্ক প্রশিক্ষণ দিচ্ছি তবে প্রশিক্ষণের ক্ষতি হ্রাস পাবে না। আমি এটা কিভাবে ঠিক করবো?

আমি ওভারফিটিং বা নিয়মিতকরণের বিষয়ে জিজ্ঞাসা করছি না। আমি যেখানে ট্রেনিং সেটটিতে আমার নেটওয়ার্কের পারফরম্যান্স উন্নতি করে না সেখানে কীভাবে সমস্যার সমাধান করবেন সে সম্পর্কে আমি জিজ্ঞাসা করছি ।


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

যদি আপনার নিউরাল নেটওয়ার্কটি ভাল জেনারালাইজ করে না, দেখুন: আমার নিউরাল নেটওয়ার্কটি ভাল না করলে আমি কী করব?


1
এখানে এনএন অগ্রগতি করতে পারেনি এমন ক্ষেত্রে। youtu.be/iakFfOmanJU?t=144
জোশুয়া

4
ইভানভের ব্লগ " আপনার নিউরাল নেটওয়ার্ক কেন কাজ করছে না তার কারণগুলি ", বিশেষত দ্বিতীয়, তৃতীয় এবং চতুর্থ বিভাগ সহায়ক হতে পারে।
ব্যবহারকারী5228

উত্তর:


186

ইউনিট টেস্টিং আপনার বন্ধু

লেখকদের মধ্যে একটি উক্তি আছে যে "সমস্ত লেখাই আবার লেখা হয়" - অর্থাৎ, লেখার বৃহত্তর অংশটি সংশোধন করছে। প্রোগ্রামারদের (বা কমপক্ষে ডেটা বিজ্ঞানীদের) জন্য "সমস্ত কোডিং ডিবাগিং হচ্ছে" বলে এক্সপ্রেশনটিকে পুনরায় বানানো যেতে পারে।

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

আপনার নেটওয়ার্কের পারফরম্যান্স টিউন করার আগে আপনাকে পরীক্ষা করতে হবে যে আপনার কোডটি বাগ থেকে মুক্ত আছে! অন্যথায়, আপনি পাশাপাশি আরএমএস টাইটানিকে ডেক চেয়ারগুলি পুনরায় সাজিয়ে তুলতে পারেন

নিউরাল নেটওয়ার্কগুলির দুটি বৈশিষ্ট্য রয়েছে যা অন্যান্য ধরণের মেশিন লার্নিং বা পরিসংখ্যানের মডেলগুলির চেয়ে যাচাইকরণকে আরও গুরুত্বপূর্ণ করে তোলে।

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

  2. এমনকি যখন কোনও নিউরাল নেটওয়ার্ক কোড ব্যতিক্রম না বাড়িয়ে কার্যকর করে, তখনও নেটওয়ার্কটিতে বাগ থাকতে পারে! এই বাগগুলি এমনকি कपटी ধরণের হতে পারে যার জন্য নেটওয়ার্কটি প্রশিক্ষণ দেবে, তবে একটি উপ-অনুকূল সমাধানে আটকে যায় বা ফলস্বরূপ নেটওয়ার্কটির পছন্দসই আর্কিটেকচার নেই। ( এটি সিন্ট্যাকটিক এবং শব্দার্থক ত্রুটির মধ্যে পার্থক্যের একটি উদাহরণ ।)

এই মাঝারি পোস্ট " কিভাবে ইউনিট পরীক্ষা মেশিন লার্নিং কোড ," চেজ রবার্টস দ্বারা আরো বিস্তারিতভাবে মেশিন লার্নিং মডেলের জন্য ইউনিট-পরীক্ষার আলোচনা করা হয়েছে। আমি বগি কোডের এই উদাহরণটি নিবন্ধ থেকে ধার নিয়েছি:

def make_convnet(input_image):
    net = slim.conv2d(input_image, 32, [11, 11], scope="conv1_11x11")
    net = slim.conv2d(input_image, 64, [5, 5], scope="conv2_5x5")
    net = slim.max_pool2d(net, [4, 4], stride=4, scope='pool1')
    net = slim.conv2d(input_image, 64, [5, 5], scope="conv3_5x5")
    net = slim.conv2d(input_image, 128, [3, 3], scope="conv4_3x3")
    net = slim.max_pool2d(net, [2, 2], scope='pool2')
    net = slim.conv2d(input_image, 128, [3, 3], scope="conv5_3x3")
    net = slim.max_pool2d(net, [2, 2], scope='pool3')
    net = slim.conv2d(input_image, 32, [1, 1], scope="conv6_1x1")
    return net

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

নিউরাল নেটওয়ার্ক সম্পর্কিত সর্বাধিক সাধারণ প্রোগ্রামিং ত্রুটিগুলি

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

আপনি হাঁটার আগে ক্রল; আপনি চালানোর আগে হাঁটা

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

  • একটি স্তরের খুব কম নিউরন নেটওয়ার্ক উপস্থাপনের সীমাবদ্ধ করতে পারে যা আন্ডার-ফিটিংয়ের কারণ হয়। অনেকগুলি নিউরন ওভার-ফিটিংয়ের কারণ হতে পারে কারণ নেটওয়ার্ক প্রশিক্ষণ ডেটা "মুখস্থ" করবে।

    এমনকি আপনি যদি প্রমাণ করতে পারেন নেই, গাণিতিকভাবে, শুধুমাত্র একটি সমস্যা মডেল প্রয়োজনীয় নিউরোন অল্প সংখ্যক, এটা প্রায়ই ক্ষেত্রে যে থাকার "কয়েক আরো" নিউরোন এটা তোলে আরও সহজ অপটিমাইজার একটি "ভালো" কনফিগারেশন খুঁজে পায় তার জন্য। (তবে আমি মনে করি না যে কেউ কেন এই ঘটনাটি সম্পূর্ণরূপে বুঝতে পারে)) আমি এখানে এক্সওর সমস্যার প্রসঙ্গে এইটির একটি উদাহরণ সরবরাহ করি: এমএসই <0.001 এর সাথে এক্সওর জন্য এনএন প্রশিক্ষণ দেওয়ার জন্য আমার পুনরাবৃত্তিগুলি কি প্রয়োজন হয় না?

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

  • একটি চতুর নেটওয়ার্ক ওয়্যারিং নির্বাচন করা আপনার জন্য অনেক কাজ করতে পারে। আপনার ডেটা উত্সটি কি বিশেষায়িত নেটওয়ার্ক আর্কিটেকচারের জন্য উপযুক্ত? কনভ্যুলেশনাল নিউরাল নেটওয়ার্কগুলি "কাঠামোগত" ডেটা উত্স, চিত্র বা অডিও ডেটার উপর চিত্তাকর্ষক ফলাফল অর্জন করতে পারে। পুনরাবৃত্ত নিউরাল নেটওয়ার্কগুলি প্রাকৃতিক ভাষা বা টাইম সিরিজ ডেটার মতো ক্রমিক ডেটা টাইপগুলিতে ভাল করতে পারে। অবশিষ্ট সংযোগগুলি গভীর ফিড-ফরোয়ার্ড নেটওয়ার্কগুলিকে উন্নত করতে পারে।

নিউরাল নেটওয়ার্ক প্রশিক্ষণ লক পিকিংয়ের মতো

আর্টের অবস্থা অর্জনের জন্য, এমনকি আরও ভাল, ফলাফলগুলি অর্জন করার জন্য, আপনাকে একসাথে ভালভাবে কাজ করার জন্য কনফিগার করা সমস্ত অংশ সেট আপ করতে হবে । একটি নিউরাল নেটওয়ার্ক কনফিগারেশন স্থাপন করা যা আসলে শিখতে পারে তা অনেকটা লক বাছাইয়ের মতো: সমস্ত টুকরো টুকরো করে ঠিক খাড়া করে রাখতে হয় ঠিক জায়গায় একক টাম্বলার রাখা যেমন পর্যাপ্ত নয় তেমনি কেবলমাত্র স্থাপত্য বা কেবলমাত্র অপটিমাইজারও সঠিকভাবে স্থাপন করা যথেষ্ট নয়।

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

এটি কনফিগারেশন বিকল্পগুলির একটি বহিরাগত তালিকা যা নিয়মিতকরণ বিকল্প বা সংখ্যাগত অপ্টিমাইজেশন বিকল্পগুলিও নয়।

এই সমস্ত বিষয় গবেষণার সক্রিয় ক্ষেত্র।

নন-উত্তল অপ্টিমাইজেশন শক্ত

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

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

  • লার্নিং রেটকে খুব বড় সেট করার ফলে অপ্টিমাইজেশনটি ডাইভারেজের কারণ হবে, কারণ আপনি "গিরিখাত" এর একপাশ থেকে অন্য দিকে ঝাঁপিয়ে পড়বেন। এটিকে খুব ছোট করে সেট করা আপনাকে কোনও বাস্তব অগ্রগতি করতে বাধা দেবে এবং সম্ভবত এসজিডি-তে অন্তর্নিহিত শব্দটি আপনার গ্রেডিয়েন্ট অনুমানকে ছাড়িয়ে যাবে।

  • গ্রেডিয়েন্ট ক্লিপিং গ্রেডিয়েন্টের আদর্শটি যদি আবার কিছুটা দোরের উপরে থাকে তবে এটি আবার স্কেল করে। আমি ভাবতাম যে এটি একটি সেট-অ্যান্ড-ভুলে যাওয়া প্যারামিটার, সাধারণত ০.০ এ, তবে আমি খুঁজে পেয়েছি যে আমি একটি এলএসটিএম ভাষার মডেলকে নাটকীয়ভাবে আরও ভাল করতে পারব এটি 0.25 এ সেট করে। কেন জানি না।

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

  • একটি ভাল মিনিব্যাচ আকার নির্বাচন করা অপ্রত্যক্ষভাবে পড়াশোনা প্রক্রিয়াটিকে প্রভাবিত করতে পারে, যেহেতু বৃহত্তর মিনি-ব্যাচের মধ্যে একটি ছোট মিনি-ব্যাচের তুলনায় একটি ছোট ভেরিয়েন্স ( ) থাকে to আপনি চাইছেন মিনি ব্যাচটি গ্রেডিয়েন্টের দিক সম্পর্কে তথ্যপূর্ণ হওয়ার জন্য যথেষ্ট বড় হোক তবে এসজিডি আপনার নেটওয়ার্ককে নিয়মিত করতে পারে এমন পরিমাণে ছোট।

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

  • যখন এটি প্রথম প্রকাশিত হয়েছিল, অ্যাডাম অপটিমাইজার অনেক আগ্রহ তৈরি করেছিল। তবে সাম্প্রতিক কিছু গবেষণায় দেখা গেছে যে গতিযুক্ত এসজিডি নিউরাল নেটওয়ার্কগুলির জন্য অভিযোজিত গ্রেডিয়েন্ট পদ্ধতিগুলি সম্পাদন করতে পারে। " Machine Learning এর মধ্যে অভিযোজিত গ্রেডিয়েন্ট পদ্ধতি প্রান্তিক মূল্য Ashia সি উইলসন, রেবেকা Roelofs, মিচেল স্টার্ন, নাথান Srebro, বেঞ্জামিন Recht দ্বারা"

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

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

নিয়মমাফিককরণ

তথ্য স্কেল প্রশিক্ষণের উপর একটি বড় পার্থক্য করতে পারে।

নিয়মিতকরণ

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

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

এই কৌশলটি নির্দিষ্ট করতে পারে যেখানে কিছু নিয়মিতকরণ খুব কম সেট করা যেতে পারে। কিছু উদাহরণ হল

পরীক্ষাগুলির একটি লগবুক রাখুন

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

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

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


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

11
@ গ্লেেন_বি, আমি মনে করি না কোডিংয়ের সেরা অনুশীলনগুলি বেশিরভাগ পরিসংখ্যান / মেশিন লার্নিং পাঠ্যক্রমগুলিতে যথেষ্ট জোর পেয়েছে যার কারণেই আমি এই বিষয়টিকে এত বেশি জোর দিয়েছি। আমি বেশ কয়েকটি এনএন পোস্ট দেখেছি যেখানে ওপ মতামত রেখেছিল "ওহ আমি একটি বাগ খুঁজে পেয়েছি এটি এখন কাজ করে।"
সাইকোরাক্স

7
আমি পাইথনে ডেটা সায়েন্স কোর্সের জন্য একটি প্রোগ্রামিং শিখাই, এবং আমরা প্রাথমিক ধারণা হিসাবে প্রথম দিনেই ফাংশন এবং ইউনিট টেস্টিং করি। ভাল লড়াই লড়াই।
ম্যাথু ড্রুরি

8
"সমস্ত কোডিং ডিবাগিং করছে" এর জন্য +1। আমি অবাক হয়েছি এসও-তে কতগুলি পোস্টার মনে হয় যে কোডিং একটি সহজ অনুশীলন যা সামান্য পরিশ্রমের প্রয়োজন; যারা তাদের কোডটি প্রথমবার এটি চালানোর সময় সঠিকভাবে কাজ করবে বলে আশা করে; এবং যখন না হয় তখন এগিয়ে যেতে অক্ষম বলে মনে হচ্ছে। মজার ব্যাপার যে, তারা অর্ধেক ঠিক হল: কোডিং হয় সহজ - কিন্তু প্রোগ্রামিং কঠিন।
বব জার্ভিস

41

পোস্ট করা উত্তরগুলি দুর্দান্ত, এবং আমি কয়েকটি "স্যানিটি চেকস" যুক্ত করতে চেয়েছিলাম যা অতীতে আমাকে ব্যাপকভাবে সহায়তা করেছে।

1) আপনার মডেলটিকে একটি একক ডেটা পয়েন্টে প্রশিক্ষণ দিন। এটি যদি কাজ করে তবে এটিকে দুটি ফলাফলকে বিভিন্ন আউটপুট দিয়ে প্রশিক্ষণ দিন।

এটি কয়েকটি জিনিস যাচাই করে। প্রথমত, এটি দ্রুত আপনাকে দেখায় যে আপনার মডেল আপনার ডেটা বেশি উপভোগ করতে পারে কিনা তা পরীক্ষা করে শিখতে সক্ষম। আমার ক্ষেত্রে, আমি বাইনারি পূর্বাভাসের জন্য Dense(1,activation='softmax')বনাম করার ক্রমাগত বোকা ভুল করি Dense(1,activation='sigmoid')এবং প্রথমটি আবর্জনার ফলাফল দেয়।

যদি আপনার মডেলটি কয়েকটি ডেটা পয়েন্টকে অবিচ্ছিন্ন করতে অক্ষম হয়, তবে হয় এটি খুব ছোট (যা আজকের যুগে সম্ভাব্য নয়), বা এর কাঠামোতে কিছুটা ভুল বা শেখার অ্যালগরিদম।

2) আপনার প্রাথমিক ক্ষতির দিকে মনোযোগ দিন।

, বাইনারি উদাহরণ অব্যাহত আপনার ডেটা 30% 0 এবং 70% 1 এর হয়, তাহলে আপনার ইনিশিয়াল প্রায় হ্রাস প্রত্যাশিত । এটি কারণ আপনার মডেলটি এলোমেলোভাবে অনুমান করা শুরু করা উচিত।L=0.3ln(0.5)0.7ln(0.5)0.7

অনেক সময় আপনি হাস্যকর কিছুটির প্রাথমিক ক্ষতি দেখতে পাবেন, যেমন 6.5। ধারণার দিক থেকে এই অর্থ হল আপনার আউটপুট প্রচন্ডভাবে সম্পৃক্ত করা হয়, উদাহরণস্বরূপ 0. দিকে উদাহরণস্বরূপ , তাই আপনি যদি একটি ক্ষতি 1 চেয়ে বড় দেখছি, এটা সম্ভবত আপনার এর মডেল খুব skew হয়। এটি সাধারণত তখন ঘটে যখন আপনার নিউরাল নেটওয়ার্ক ওজন সঠিকভাবে সুষম না হয়, বিশেষত সফটম্যাক্স / সিগময়েডের কাছাকাছি। সুতরাং এটি আপনাকে বলবে যদি আপনার সূচনাটি খারাপ হয়।0.3ln(0.99)0.7ln(0.01)=3.2

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

3) আপনার মডেল আউটপুটগুলি ডিবাগ করার জন্য সাধারণীকরণ করুন

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

4) স্বতন্ত্র স্তর তাকান

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

5) প্রথমে একটি সহজ মডেল তৈরি করুন

আপনি সিদ্ধান্ত নিয়েছেন যে আপনার সমস্যা সমাধানের সর্বোত্তম পন্থা হ'ল বাউন্ডিং বক্স ডিটেক্টরের সাথে মিলিত সিএনএন ব্যবহার করা, যা চিত্রের ফসলের প্রক্রিয়া করে এবং তারপরে সবকিছুকে একত্রিত করার জন্য একটি এলএসটিএম ব্যবহার করে। আপনার জিপিইউটিকে আপনার মডেলটি শুরু করতে 10 মিনিট সময় লাগে।

পরিবর্তে, জাল তথ্য (একই আকার) এর একটি ব্যাচ তৈরি করুন এবং আপনার মডেলটিকে উপাদানগুলিতে ভেঙে দিন। তারপরে প্রতিটি উপাদানটির জায়গায় ডামি মডেল তৈরি করুন (আপনার "সিএনএন" কেবল একটি 2x2 20-স্ট্রাইড কনভলিউশন হতে পারে, মাত্র 2 টি লুকানো ইউনিট সহ LSTM)। এটি আপনাকে নিশ্চিত করতে সহায়তা করবে যে আপনার মডেল কাঠামোটি সঠিক এবং কোনও বহিরাগত সমস্যা নেই। আমি এইরকম একটি মডেলটির সাথে কিছু সময়ের জন্য সংগ্রাম করেছি এবং যখন আমি একটি সহজ সংস্করণ চেষ্টা করেছি তখন আমি জানতে পেরেছিলাম যে কেরাস বাগের কারণে কোনও একটি স্তর সঠিকভাবে মাস্ক করা হচ্ছে না। আপনি সহজেই (এবং দ্রুত ) অভ্যন্তরীণ মডেল স্তরগুলির অনুসন্ধান করতে পারেন এবং আপনি নিজের গ্রাফটি সঠিকভাবে সেটআপ করেছেন কিনা তা দেখতে পারেন।

6) আপনার প্রাক প্রসেসিং এবং প্যাকেজ সংস্করণগুলিকে মানিক করুন

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

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

প্যাকেজগুলি মানীকরণের সবচেয়ে নিরাপদতম উপায় হ'ল এমন একটি requirements.txtফাইল ব্যবহার করা যা আপনার প্রশিক্ষণ সিস্টেমের সেটআপের মতো keras==2.1.5সংস্করণ সংখ্যার তুলনায় আপনার সমস্ত প্যাকেজগুলির রূপরেখা দেয় । তাত্ত্বিকভাবে, আপনার প্রশিক্ষণ সিস্টেমে একই জিপিইউ সহ ডকার ব্যবহার করার পরে একই ফলাফল পাওয়া উচিত।


7
(+1) প্রাথমিক ক্ষতি চেক করা দুর্দান্ত পরামর্শ। আমি দুঃখিত যে আমি আমার উত্তরটি এড়িয়ে গেছি।
সাইকোরাক্স

7
আপনার মডেলটি অত্যধিক উপকার করতে পারে তা নিশ্চিত করা একটি দুর্দান্ত ধারণা। ওভারফিটিংয়ের বিষয়ে দুর্বলতা হিসাবে আমি এতটাই ভাবতে অভ্যস্ত যে আমি কখনই স্পষ্টভাবে ভাবিনি (যতক্ষণ না আপনি এটি উল্লেখ করেছেন) যে অতিরিক্ত ফিট করার ক্ষমতা আসলে একটি শক্তি।
জন কোলেম্যান

15

শুরু করার জন্য একটি নিউরাল নেটওয়ার্ক প্রশিক্ষণ দেবেন না!

সমস্ত উত্তর দুর্দান্ত, কিন্তু একটি বিষয় আছে যা উল্লেখ করা উচিত: আপনার তথ্য থেকে কিছু শেখার আছে? (যা একরকম পরীক্ষা হিসাবে বিবেচনা করা যেতে পারে)।

আপনি যে লেবেলটি পূর্বাভাস দেওয়ার চেষ্টা করছেন তা যদি আপনার বৈশিষ্ট্য থেকে পৃথক হয় তবে সম্ভবত প্রশিক্ষণের ক্ষতি হ্রাস করতে খুব বেশি সমস্যা হবে।

পরিবর্তে, একটি লিনিয়ার রিগ্রেশন, একটি এলোমেলো বন (বা এমন কোনও পদ্ধতি যা আপনি পছন্দ করেন যার হাইপারপ্যারামিটারগুলির সংখ্যা কম, এবং যার আচরণ আপনি বুঝতে পারেন) তা ক্যালিব্রেট করা শুরু করুন।

তারপরে, আপনি যদি এই মডেলগুলিতে একটি ভাল পারফরম্যান্স অর্জন করেন (এলোমেলো অনুমানের চেয়ে ভাল), আপনি একটি নিউরাল নেটওয়ার্ক টিউন করতে শুরু করতে পারেন (এবং @ সাইকোরাক্সের উত্তর বেশিরভাগ সমস্যার সমাধান করবে)।


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

11

এর মূল অংশে, এনএন / ডিএনএন মডেলকে প্রশিক্ষণের জন্য বুনিয়াদি ওয়ার্কফ্লো কম বেশি সবসময় একই থাকে:

  1. এনএন আর্কিটেকচারটি সংজ্ঞায়িত করুন (কত স্তর, কোন ধরণের স্তর, স্তরগুলির মধ্যে সংযোগ, অ্যাক্টিভেশন ফাংশন ইত্যাদি)

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

  3. কোনওভাবে উপাত্তকে সাধারণকরণ বা মানক করে তোলা। যেহেতু এনএনগুলি অলৈখিক মডেল, তাই তথ্যকে স্বাভাবিক করা কেবলমাত্র সংখ্যার স্থায়িত্বকেই প্রভাবিত করতে পারে না, তবে প্রশিক্ষণের সময়ও এবং এনএন আউটপুটস (সাধারণকরণের মতো একটি লিনিয়ার ফাংশন একটি ননলাইনক্রমিক ক্রিয়াকলাপের সাথে চলাচল করে না)।

  4. প্রশিক্ষণ / বৈধতা / পরীক্ষা সেটে বা ক্রস-বৈধতা ব্যবহার করে একাধিক ভাগে ডেটা বিভক্ত করুন।

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

  6. পরীক্ষার সেটে যথার্থতা পরীক্ষা করে দেখুন এবং কিছু ডায়াগোনস্টিক প্লট / টেবিল তৈরি করুন।

  7. ফলাফলগুলি ভাল না হওয়ায় 1 পয়েন্টে ফিরে যান। পুনরাবৃত্তি বিরক্তিকরভাবে

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

বেসিক আর্কিটেকচার চেক

এটি সমস্যার উত্স হতে পারে। সাধারণত আমি এই প্রাথমিক চেকগুলি করি:

  • আপনার সমস্যার উপর ভাল কাজ করে এমন একটি সাধারণ স্থাপত্য সন্ধান করুন (উদাহরণস্বরূপ, চিত্রের শ্রেণিবিন্যাসের ক্ষেত্রে মোবাইল নেটটভি 2) এবং একটি উপযুক্ত সূচনা প্রয়োগ করুন (এই স্তরে, এলোমেলোভাবে সাধারণত করবে)। যদি আপনার ডেটাতে এটি সঠিকভাবে প্রশিক্ষণ দেয় তবে কমপক্ষে আপনি জানেন যে ডেটা সেটে কোনও উদ্ভট সমস্যা নেই। যদি আপনি কোনও সাধারণ, পরীক্ষিত আর্কিটেকচার খুঁজে না পান যা আপনার ক্ষেত্রে কাজ করে , তবে একটি সাধারণ বেসলাইনটি ভাবেন । উদাহরণস্বরূপ শ্রেণিবিন্যাসের জন্য একজন নেভ বেইস শ্রেণিবদ্ধকারী (বা এমনকি সর্বদা সর্বাধিক সাধারণ শ্রেণিবদ্ধকরণ), বা সময় সিরিজের পূর্বাভাসের জন্য একটি আরিমা মডেল

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

প্রশিক্ষণ সেট

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

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

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

গোল্ডেন টেস্ট করুন

দুটি পরীক্ষা রয়েছে যা আমি গোল্ডেন টেস্ট বলি, এটি কোনও এনএন-তে ট্রেন দেয় না এমন সমস্যাগুলি খুঁজে পেতে খুব কার্যকর:

  • 1 বা 2 নমুনায় সেট করা প্রশিক্ষণ হ্রাস করুন এবং এটিতে প্রশিক্ষণ দিন। এনএন'র তাত্ক্ষণিক প্রশিক্ষণ সেটটি খুব তাড়াতাড়ি পূরণ করা উচিত, প্রশিক্ষণ সেটে খুব দ্রুত 100% এর যথার্থতা পৌঁছানো উচিত, যখন বৈধতা / পরীক্ষার সেটটির যথার্থতা 0% এ চলে যাবে। যদি এটি না ঘটে তবে আপনার কোডে একটি বাগ রয়েছে।

  • বিপরীত পরীক্ষা: আপনি সম্পূর্ণ প্রশিক্ষণের সেট রাখেন, তবে আপনি লেবেলগুলি বদলে ফেলেন। এনএন এখন শিখার একমাত্র উপায় হ'ল প্রশিক্ষণ সেটটি মুখস্থ করে রাখা, যার অর্থ প্রশিক্ষণের ক্ষতি খুব ধীরে ধীরে হ্রাস পাবে, যখন পরীক্ষার ক্ষতি খুব দ্রুত বৃদ্ধি পাবে। বিশেষত, আপনি পরীক্ষা সেট এ এলোমেলো সুযোগ ক্ষতি পৌঁছানো উচিত । এর অর্থ হল আপনার যদি 1000 ক্লাস থাকে তবে আপনার 0.1% এর যথার্থতা পৌঁছানো উচিত। আপনি যদি লেবেলগুলি বদলে দেওয়ার আগে এবং পরে প্রশিক্ষণের ক্ষতির মধ্যে কোনও পার্থক্য না দেখেন তবে এর অর্থ হ'ল আপনার কোডটি বগিযুক্ত (মনে রাখবেন যে আমরা ইতিমধ্যে প্রশিক্ষণের সেটগুলির লেবেলগুলি আগে পদক্ষেপে পরীক্ষা করেছি)।

আপনার প্রশিক্ষণ মেট্রিক অর্থ দেয় যে পরীক্ষা করুন

আপনার যদি শক্তিশালী শ্রেণির ভারসাম্যহীনতা থাকে তবে নির্ভুলতা (0-1 ক্ষতি) একটি কৃপণ মেট্রিক। ক্রস-এনট্রপি ক্ষতি হিসাবে আরও অর্থপূর্ণ কিছু চেষ্টা করুন: আপনি কেবল সঠিকভাবে শ্রেণিবদ্ধ করতে চান না, তবে আপনি উচ্চ নির্ভুলতার সাথে শ্রেণিবদ্ধ করতে চাই।

বড় বন্দুকগুলি বের করে আনুন

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

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

+1, তবে "রক্তাক্ত জুপিটার নোটবুক"? সে সম্পর্কে মন্তব্য করতে যত্নশীল? :)
অ্যামিবা

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

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

2
হাঃ হাঃ হাঃ. 'জুপিটার নোটবুক' এবং 'ইউনিট টেস্টিং' অ্যান্টি-কোলেস্টেটেড।
সাইকোরাক্স

2
(+1) এটি একটি ভাল লেখার আপ। র্যান্ডমাইজেশন পরীক্ষার জন্য পরামর্শগুলি বগড নেটওয়ার্কগুলিতে আসার জন্য দুর্দান্ত উপায়।
সাইকোরাক্স

6

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

ϵ

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