ইউনিট টেস্টিং আপনার বন্ধু
লেখকদের মধ্যে একটি উক্তি আছে যে "সমস্ত লেখাই আবার লেখা হয়" - অর্থাৎ, লেখার বৃহত্তর অংশটি সংশোধন করছে। প্রোগ্রামারদের (বা কমপক্ষে ডেটা বিজ্ঞানীদের) জন্য "সমস্ত কোডিং ডিবাগিং হচ্ছে" বলে এক্সপ্রেশনটিকে পুনরায় বানানো যেতে পারে।
যে কোনও সময় আপনি কোড লিখছেন, আপনাকে যাচাই করা দরকার যে এটি উদ্দেশ্য হিসাবে কাজ করে। নির্ভুলতা যাচাই করার জন্য আমি যে সর্বোত্তম পদ্ধতিটি খুঁজে পেয়েছি তা হ'ল আপনার কোডটি ছোট ছোট ভাগে বিভক্ত করা এবং যাচাই করে নিন যে প্রতিটি বিভাগটি কাজ করে। আপনি সঠিক উত্তর হতে জানেন কি সেগমেন্ট আউটপুট তুলনা করে এটি করা যেতে পারে। একে ইউনিট টেস্টিং বলে । ভাল ইউনিট পরীক্ষাগুলি লেখাই ভাল পরিসংখ্যানবিদ / উপাত্ত বিজ্ঞানী / মেশিন লার্নিং বিশেষজ্ঞ / নিউরাল নেটওয়ার্ক অনুশীলনকারী হয়ে ওঠার একটি মূল অংশ। এর কোনও বিকল্প নেই।
আপনার নেটওয়ার্কের পারফরম্যান্স টিউন করার আগে আপনাকে পরীক্ষা করতে হবে যে আপনার কোডটি বাগ থেকে মুক্ত আছে! অন্যথায়, আপনি পাশাপাশি আরএমএস টাইটানিকে ডেক চেয়ারগুলি পুনরায় সাজিয়ে তুলতে পারেন ।
নিউরাল নেটওয়ার্কগুলির দুটি বৈশিষ্ট্য রয়েছে যা অন্যান্য ধরণের মেশিন লার্নিং বা পরিসংখ্যানের মডেলগুলির চেয়ে যাচাইকরণকে আরও গুরুত্বপূর্ণ করে তোলে।
নিউরাল নেটওয়ার্কগুলি এলোমেলো বন এবং লজিস্টিক রিগ্রেশন যেভাবে হয় তা "অফ-দ্য শেল্ফ" অ্যালগরিদম নয়। এমনকি সাধারণ, ফিড-ফরোয়ার্ড নেটওয়ার্কগুলির জন্যও, অনলাইন কীভাবে নেটওয়ার্কটি কনফিগার করা, সংযুক্ত, আর্কিটাইজড এবং অনুকূলিত করা যায় সে সম্পর্কে অসংখ্য সিদ্ধান্ত নেওয়ার জন্য অনুলিপি ব্যবহারকারীদের উপর রয়েছে। এর অর্থ কোড লেখার, এবং কোড লেখার অর্থ ডিবাগিং।
এমনকি যখন কোনও নিউরাল নেটওয়ার্ক কোড ব্যতিক্রম না বাড়িয়ে কার্যকর করে, তখনও নেটওয়ার্কটিতে বাগ থাকতে পারে! এই বাগগুলি এমনকি कपटी ধরণের হতে পারে যার জন্য নেটওয়ার্কটি প্রশিক্ষণ দেবে, তবে একটি উপ-অনুকূল সমাধানে আটকে যায় বা ফলস্বরূপ নেটওয়ার্কটির পছন্দসই আর্কিটেকচার নেই। ( এটি সিন্ট্যাকটিক এবং শব্দার্থক ত্রুটির মধ্যে পার্থক্যের একটি উদাহরণ ।)
এই মাঝারি পোস্ট " কিভাবে ইউনিট পরীক্ষা মেশিন লার্নিং কোড ," চেজ রবার্টস দ্বারা আরো বিস্তারিতভাবে মেশিন লার্নিং মডেলের জন্য ইউনিট-পরীক্ষার আলোচনা করা হয়েছে। আমি বগি কোডের এই উদাহরণটি নিবন্ধ থেকে ধার নিয়েছি:
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 এই কাজে, আমরা দেখাই যে অ্যাডেটিভ গ্রেডিয়েন্ট পদ্ধতি যেমন অ্যাডাম, আমসগ্রাদ, কখনও কখনও "ওভার অ্যাডাপ্টেড" হয়। আমরা একটি নতুন অ্যালগরিদম ডিজাইন করেছি, আংশিকভাবে অভিযোজিত গতিবেগ অনুমান পদ্ধতি (পাদাম), যা উভয় বিশ্ব থেকে সেরা অর্জনের জন্য অ্যাডাম / আমসগ্রাদকে এসজিডির সাথে এক করে দেয়। স্ট্যান্ডার্ড মানদণ্ডের উপর পরীক্ষাগুলি থেকে দেখা যায় যে পডম অ্যাডাম / আমসগ্রাদ হিসাবে দ্রুত কনভার্জেনশন হার বজায় রাখতে পারবেন এবং সাধারণ নিউরাল নেটওয়ার্ক প্রশিক্ষণের ক্ষেত্রে এসজিডি হিসাবে সাধারণ হিসাবে চালিত করতে পারেন।
নিয়মমাফিককরণ
তথ্য স্কেল প্রশিক্ষণের উপর একটি বড় পার্থক্য করতে পারে।
নিউরাল নেটওয়ার্কে ডেটা উপস্থাপন করার আগে, ডেটা 0 গড় এবং ইউনিট বৈকল্পিক হওয়ার জন্য মানকে বা মতো ছোট ব্যবধানে শুয়ে পড়া প্রশিক্ষণকে উন্নত করতে পারে। এটি প্রাক-কন্ডিশনার সমান, এবং ইউনিটগুলির একটি পছন্দের নেটওয়ার্ক ওজনে যে প্রভাব রয়েছে তা সরিয়ে দেয়। উদাহরণস্বরূপ, মিলিমিটার দৈর্ঘ্য এবং কিলোমিটার দৈর্ঘ্য উভয়ই একই ধারণার প্রতিনিধিত্ব করে, তবে বিভিন্ন স্কেলে রয়েছে। কীভাবে ডেটা মানক করা যায় তার সঠিক বিবরণ আপনার ডেটা কেমন লাগে তার উপর নির্ভর করে।[ - 0.5 , 0.5 ]
নিউরনের ক্রিয়াকলাপের জন্য চলমান গড় এবং মানক বিচ্যুতি রেখে লেয়ার নরমালাইজেশন নেটওয়ার্ক প্রশিক্ষণকে উন্নত করতে পারে। এটি কেন প্রশিক্ষণে সহায়তা করে এবং এটি গবেষণার সক্রিয় ক্ষেত্র হিসাবে রয়ে গেছে তা এখনও ভালভাবে বোঝা যায় না।
- জোহান বোজর্যাক, কারলা গোমেস, বার্ট সেলম্যানের " বোঝার ব্যাচ সাধারণকরণ"
- " ব্যাচের সাধারণকরণের তাত্ত্বিক বোঝার দিকে " জোনাস কোহলার, হাদি দানেশম্যান্ড, অরেলিয়ান লুচি, মিং ঝো, ক্লাউস নেইমির, টমাস হফম্যান
- " ব্যাচ নরমালাইজেশন অপ্টিমাইজেশনকে কীভাবে সহায়তা করে? (না, এটি অভ্যন্তরীণ কোভেরিয়াট শিফ্ট সম্পর্কে নয়) " শিবানী সান্টুরকার, দিমিত্রিস শিপ্রাস, অ্যান্ড্রু ইলিয়াস, আলেকসান্দ্র মাদ্রি রচনা
নিয়মিতকরণ
নেটওয়ার্ক নিয়মিতকরণ নির্বাচন করা এবং সুরকরণ এমন একটি মডেল তৈরির মূল অংশ যা ভাল জেনারেলাইজ করে (এটি এমন একটি মডেল যা প্রশিক্ষণের তথ্যের চেয়ে বেশি নয়)। যাইহোক, আপনার নেটওয়ার্ক প্রশিক্ষণ ডেটাতে লোকসান হ্রাস করতে লড়াই করছে - এমন সময় যখন নেটওয়ার্কটি শিখছে না - নিয়মিতকরণ সমস্যাটি কীটিকে অস্পষ্ট করতে পারে।
যখন আমার নেটওয়ার্কটি শিখবে না, তখন আমি সমস্ত নিয়মিতকরণ বন্ধ করে দিয়েছি এবং নিশ্চিত করেছি যে অ-নিয়ন্ত্রিত নেটওয়ার্কটি সঠিকভাবে কাজ করে। তারপরে আমি প্রতিটি নিয়মিতকরণের টুকরোটি আবার যুক্ত করব এবং যাচাই করে দেখি যে সেগুলির প্রত্যেকটি সেই পথে কাজ করে।
এই কৌশলটি নির্দিষ্ট করতে পারে যেখানে কিছু নিয়মিতকরণ খুব কম সেট করা যেতে পারে। কিছু উদাহরণ হল
এল2 নিয়মিতকরণ (ওরফে ওজন ক্ষয়) বা নিয়মিতকরণ খুব বড় সেট করা হয়েছে, সুতরাং ওজনগুলি চলতে পারে না।এল1
নিয়ন্ত্রণের দুটি অংশ দ্বন্দ্বের মধ্যে রয়েছে। উদাহরণস্বরূপ, এটি ব্যাপকভাবে পর্যবেক্ষণ করা হয়েছে যে স্তর স্বাভাবিককরণ এবং ড্রপআউট একসাথে ব্যবহার করা কঠিন। যেহেতু উভয়ই এটি নিজস্বভাবে কার্যকর, তাই উভয়কে কীভাবে ব্যবহার করতে হয় তা বোঝা গবেষণার একটি সক্রিয় ক্ষেত্র।
পরীক্ষাগুলির একটি লগবুক রাখুন
আমি যখন নিউরাল নেটওয়ার্ক সেট আপ করি তখন আমি কোনও প্যারামিটার সেটিংস হার্ড-কোড করি না। পরিবর্তে, আমি এটি একটি কনফিগারেশন ফাইলে করি (যেমন, জেএসএন) যা রানটাইমে নেটওয়ার্ক কনফিগারেশন বিশদটি পড়তে ব্যবহৃত হয় এবং ব্যবহৃত হয়। আমি এই সমস্ত কনফিগারেশন ফাইল রাখি। আমি যদি কোনও পরামিতি পরিবর্তন করি তবে আমি একটি নতুন কনফিগারেশন ফাইল তৈরি করি। অবশেষে, আমি প্রশিক্ষণ এবং বৈধতার জন্য প্রতি যুগের লোকসানের সমস্ত মন্তব্য হিসাবে সংযোজন করেছি।
পুরানো ফলাফলগুলি বজায় রাখা সম্পর্কে আমি এতটা বেয়াদবি যে কারণে এটি পূর্ববর্তী পরীক্ষাগুলি ফিরে যাওয়া এবং পর্যালোচনা করা খুব সহজ করে তোলে। এটি একই ডেড-এন্ড পরীক্ষায় ভুল করে পুনরাবৃত্তি করা থেকেও বিরত থাকে। মনস্তাত্ত্বিকভাবে, এটি আপনাকে পিছনে ফিরে পর্যবেক্ষণ করতে ও পর্যবেক্ষণ করতে দেয় "আচ্ছা, প্রকল্পটি আজ আমি যেখানে এটি চাই সেখানে নাও হতে পারে, তবে সপ্তাহের আগে যেখানে ছিলাম তার তুলনায় আমি অগ্রগতি করছি ।"ট
উদাহরণ হিসাবে, আমি এলএসটিএম ভাষার মডেলগুলি শিখতে চেয়েছিলাম, তাই আমি এমন একটি টুইটার বট তৈরির সিদ্ধান্ত নিয়েছিলাম যা অন্য টুইটার ব্যবহারকারীদের প্রতিক্রিয়াতে নতুন টুইট লিখবে। আমি আমার অবসর সময়ে, গ্রেড স্কুল এবং আমার কাজের মধ্যে এই নিয়ে কাজ করেছি। এটি প্রায় এক বছর সময় নিয়েছে এবং আমি যে মডেলটি চেয়েছিলাম তার আগে আমি প্রায় 150 টিরও বেশি মডেলের পুনরাবৃত্তি করেছি: নতুন ইংরেজি ভাষার পাঠ্য তৈরি করুন যা (সাজান) তা বোঝায়। (একটি মূল স্টিকিং পয়েন্ট এবং এর কারণ হিসাবে এটি এতগুলি প্রচেষ্টা নিয়েছে, তার একটি অংশ এটি হ'ল কেবলমাত্র নমুনার চেয়ে কম ক্ষতি পাওয়া যথেষ্ট ছিল না, যেহেতু প্রথমদিকে নিম্ন-ক্ষতির মডেলগুলি প্রশিক্ষণের ডেটা মুখস্ত করতে সক্ষম হয়েছিল, সুতরাং এটি কেবল অনুরোধের জবাবে পাঠ্য ভারব্যাটিমের জার্মানি ব্লকগুলি পুনরুত্পাদন করছিল - এটি মডেলটিকে আরও স্বতঃস্ফূর্ত করে তুলতে কিছুটা টুইট নিয়েছিল এবং এখনও কম ক্ষতি হতে পারে))