টেনসরফ্লো `tf.train.Optimizer` গণনা গ্রেডিয়েন্টস কীভাবে?


10

আমি টেনসরফ্লো মনিস্ট টিউটোরিয়াল অনুসরণ করছি ( https://github.com/tensor ف্লো / স্পেনস্লোফ্লো / ব্লব / মাস্টার / স্টেনফ্লো / এক্সামস / টিউটোরিয়ালস / এমনিস্ট / মনিস্ট_সোফটম্যাক্স.পি )।

টিউটোরিয়ালটি tf.train.Optimizer.minimize(বিশেষভাবে tf.train.GradientDescentOptimizer) ব্যবহার করে । গ্রেডিয়েন্টগুলি সংজ্ঞায়িত করার জন্য আমি কোনও যুক্তি কোথাও পাস করে দেখছি না।

টেনসর প্রবাহটি কি ডিফল্টরূপে সংখ্যাগত পার্থক্য ব্যবহার করে?

আপনি যেভাবে গ্রেডিয়েন্টে যেতে পারেন তাতে কি কোনও উপায় আছে scipy.optimize.minimize?

উত্তর:


16

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

যদি কোনও কারণে আপনি সেই অংশটিকে ওভাররাইড করতে চান তবে এটি সম্ভব gradient_override_map


সংখ্যার ভিন্নতা ব্যবহার করে কি স্বয়ংক্রিয় পার্থক্য নয়?
অ্যারিন

@ বিয়ার না; উপরের উইকিপিডিয়া লিঙ্কটি দেখুন। টেনস্রোফ্লো যা করে তা আসলে "রিয়েল" মোড় অটোডিফ এবং প্রতীকী পার্থক্যের মধ্যে কোথাও।
ডগল

@ দুগল আমি কোন গ্রাফ, কোনও tf.function সাজসজ্জা ছাড়াই উত্সাহী মোড ব্যবহার করছি, অটো আলাদাকরণ কীভাবে টেনারদের মধ্যে সম্পর্কটি জানতে পারে?
ডাটদিনহোকোক

1
@ ডাটদিনহোকোক এটি একই মৌলিক অ্যালগরিদম, বাস্তবায়নের ক্ষেত্রে আরও কিছুটা জটিল।
ডুগল

9

এটি স্বয়ংক্রিয় পার্থক্য ব্যবহার করে। যেখানে এটি চেইন বিধি ব্যবহার করে এবং গ্রাডিয়েন্টগুলি বরাদ্দ করে গ্রাফের ব্যাকওয়ার্ডে যায়।

ধরা যাক আমাদের একটি টেনসর সি রয়েছে এই টেনসর সি ধারাবাহিক ক্রিয়াকলাপের পরে তৈরি করেছে চলুন যাক, যোগ করা, গুণ করা, কিছু অরৈখিকতার মধ্য দিয়ে যাওয়া ইত্যাদি say

সুতরাং যদি এই সি Xk নামক কয়েকটি টেনারগুলির উপর নির্ভর করে তবে আমাদের গ্রেডিয়েন্টগুলি পাওয়া দরকার

টেনসরফ্লো সর্বদা অপারেশনের পথ অনুসরণ করে। আমি নোডগুলির ক্রমিক আচরণ এবং তাদের মধ্যে কীভাবে ডেটা প্রবাহিত করব তা বোঝাতে চাই। গ্রাফ দ্বারা এটি করা হয় এখানে চিত্র বর্ণনা লিখুন

যদি আমাদের প্রথমে ব্যয় আর্ট এক্স ইনপুটগুলির ডেরাইভেটিসগুলি পেতে হয় তবে এটি গ্রাফটি প্রসারিত করে এক্স-ইনপুট থেকে ব্যয়ের পথে পথটি লোড করে।

তারপরে এটি শুরু হয় নদীর ক্রমে। তারপরে গ্রেডিয়েন্টগুলি চেইন বিলের সাথে বিতরণ করুন। (ব্যাকপ্রোপেশন হিসাবে একই)

যে কোনও উপায়ে যদি আপনি উত্স কোডগুলি tf.gradient () এর অন্তর্ভুক্ত পড়ে থাকেন তবে আপনি দেখতে পাবেন যে টেনস্রফ্লো এই গ্রেডিয়েন্ট বিতরণ অংশটি একটি দুর্দান্ত উপায়ে করেছে।

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

এই নতুন নোডটি অপারেশনগুলির আংশিক ডেরাইভেটিভ রচনা করে। get_gradient ()

আসুন এই নতুন যুক্ত নোডগুলি সম্পর্কে কিছুটা কথা বলি

এই নোডগুলির অভ্যন্তরে আমরা 2 টি জিনিস যুক্ত করি

সুতরাং চেইন বিধি দ্বারা আমরা গণনা করতে পারি

সুতরাং এটি একটি ব্যাকওয়ার্ড এপিআই এর মত একই

সুতরাং টেনসরফ্লো সর্বদা স্বয়ংক্রিয় পার্থক্য করতে গ্রাফের ক্রম সম্পর্কে চিন্তা করে

আমরা যেমন জানি যে গ্রেডিয়েন্টগুলি গণনা করতে আমাদের ফরোয়ার্ড পাসের ভেরিয়েবলগুলি দরকার তখন আমাদের মধ্যবর্তী মানগুলি টেনসরগুলিতেও সংরক্ষণ করতে হবে এটি স্মৃতিশক্তি হ্রাস করতে পারে অনেক ক্রিয়াকলাপের জন্য tf জানেন কিভাবে গ্রেডিয়েন্টগুলি গণনা করতে এবং সেগুলি বিতরণ করতে হয়।


1
আমি কোন গ্রাফ, কোন tf.function ডেকরেটার সঙ্গে উত্সাহী মোড ব্যবহার করছি, অটো পৃথককরণ টেনারদের মধ্যে সম্পর্ক কীভাবে জানতে পারে?
দ্যাটদিনহোকোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.