এই নথিটি XLA এর সম্প্রচার শব্দার্থবিদ্যা বর্ণনা করে।
সম্প্রচার কি?
সম্প্রচার হল পাটিগণিত ক্রিয়াকলাপের জন্য বিভিন্ন আকারের সাথে সামঞ্জস্যপূর্ণ আকারের অ্যারে তৈরির প্রক্রিয়া। পরিভাষাটি NumPy সম্প্রচার থেকে ধার করা হয়েছে।
বিভিন্ন র্যাঙ্কের মাল্টি-ডাইমেনশনাল অ্যারে বা বিভিন্ন কিন্তু সামঞ্জস্যপূর্ণ আকারের মাল্টি-ডাইমেনশনাল অ্যারের মধ্যে অপারেশনের জন্য ব্রডকাস্টিং প্রয়োজন হতে পারে। X+v
যোগ করুন যেখানে X
একটি ম্যাট্রিক্স (র্যাঙ্ক 2 এর একটি অ্যারে) এবং v
একটি ভেক্টর (র্যাঙ্ক 1 এর একটি অ্যারে)। উপাদান-ভিত্তিক সংযোজন সঞ্চালনের জন্য, XLA-কে v
একটি নির্দিষ্ট সংখ্যক বার প্রতিলিপি করে ম্যাট্রিক্স X
এর মতো একই র্যাঙ্কে ভেক্টর v
"সম্প্রচার" করতে হবে। ভেক্টরের দৈর্ঘ্য ম্যাট্রিক্সের অন্তত একটি মাত্রার সাথে মিলতে হবে।
যেমন:
|1 2 3| + |7 8 9|
|4 5 6|
ম্যাট্রিক্সের মাত্রা হল (2,3), এবং ভেক্টরের মাত্রা হল (3)। ভেক্টরটি পাওয়ার জন্য সারিগুলির উপর প্রতিলিপি করে সম্প্রচার করা হয়:
|1 2 3| + |7 8 9| = |8 10 12|
|4 5 6| |7 8 9| |11 13 15|
NumPy-এ, একে সম্প্রচার বলা হয়।
নীতিমালা
XLA ভাষা যতটা সম্ভব কঠোর এবং স্পষ্ট, অন্তর্নিহিত "জাদুকর" বৈশিষ্ট্যগুলি এড়িয়ে। এই ধরনের বৈশিষ্ট্যগুলি কিছু গণনাকে সংজ্ঞায়িত করা কিছুটা সহজ করে তুলতে পারে, তবে ব্যবহারকারীর কোডে বেক করা আরও অনুমানের খরচে যা দীর্ঘমেয়াদে পরিবর্তন করা কঠিন হবে। প্রয়োজনে, ক্লায়েন্ট-স্তরের মোড়কে অন্তর্নিহিত জাদু বৈশিষ্ট্য যুক্ত করা যেতে পারে।
সম্প্রচারের ক্ষেত্রে, XLA-এর জন্য বিভিন্ন র্যাঙ্কের অ্যারেগুলির মধ্যে ক্রিয়াকলাপের জন্য সুস্পষ্ট সম্প্রচারের স্পেসিফিকেশন প্রয়োজন। এটি NumPy থেকে আলাদা, যা সম্ভব হলে স্পেসিফিকেশন অনুমান করে।
একটি উচ্চ-র্যাঙ্ক অ্যারেতে একটি নিম্ন-র্যাঙ্ক অ্যারে সম্প্রচার করা
ব্রডকাস্টিং ডাইমেনশনের সুস্পষ্ট স্পেসিফিকেশন ছাড়াই স্কেলারগুলি সবসময় অ্যারেতে সম্প্রচার করা যেতে পারে। একটি স্কেলার এবং একটি অ্যারের মধ্যে একটি উপাদান-ভিত্তিক বাইনারি অপারেশন মানে অ্যারের প্রতিটি উপাদানে স্কেলার দিয়ে অপারেশন প্রয়োগ করা। উদাহরণস্বরূপ, একটি ম্যাট্রিক্সে একটি স্কেলার যোগ করার অর্থ একটি ম্যাট্রিক্স তৈরি করা যেখানে প্রতিটি উপাদান স্কেলারের সমষ্টি এবং ইনপুট ম্যাট্রিক্সের সংশ্লিষ্ট উপাদান।
|1 2 3| + 7 = |8 9 10|
|4 5 6| |11 12 13|
বেশিরভাগ সম্প্রচারের প্রয়োজন একটি বাইনারি অপারেশনে মাত্রার একটি টিপল ব্যবহার করে ক্যাপচার করা যেতে পারে। যখন অপারেশনের ইনপুটগুলির বিভিন্ন র্যাঙ্ক থাকে, তখন এই সম্প্রচার টিপল উচ্চ-র্যাঙ্ক অ্যারেতে কোন মাত্রা(গুলি) নিম্ন-র্যাঙ্ক অ্যারের সাথে মেলে তা নির্দিষ্ট করে৷
আগের উদাহরণ বিবেচনা করুন। একটি (2,3) ম্যাট্রিক্সে একটি স্কেলার যোগ করার পরিবর্তে, মাত্রার একটি ম্যাট্রিক্সে (2,3) মাত্রার ভেক্টর (3) যোগ করুন। সম্প্রচার উল্লেখ না করে, এই অপারেশনটি অবৈধ৷ সঠিকভাবে ম্যাট্রিক্স-ভেক্টর সংযোজনের অনুরোধ করতে, সম্প্রচারের মাত্রা নির্দিষ্ট করুন (1), যার অর্থ ভেক্টরের মাত্রা ম্যাট্রিক্সের 1 মাত্রার সাথে মিলেছে। 2D-তে, যদি মাত্রা 0 সারিগুলিকে প্রতিনিধিত্ব করে এবং মাত্রা 1 কলামগুলিকে প্রতিনিধিত্ব করে, এর মানে হল যে ভেক্টরের প্রতিটি উপাদান ম্যাট্রিক্সের সারির সংখ্যার সাথে মেলে এমন একটি আকারের কলামে পরিণত হয়:
|7 8 9| ==> |7 8 9|
|7 8 9|
আরও জটিল উদাহরণ হিসেবে, একটি 3x3 ম্যাট্রিক্সে (মাত্রা (3,3)) একটি 3-উপাদান ভেক্টর (মাত্রা (3)) যোগ করার কথা বিবেচনা করুন। এই উদাহরণের জন্য দুটি উপায় সম্প্রচার ঘটতে পারে:
(1) 1 এর একটি সম্প্রচার মাত্রা ব্যবহার করা যেতে পারে। প্রতিটি ভেক্টর উপাদান একটি কলামে পরিণত হয় এবং ম্যাট্রিক্সের প্রতিটি সারির জন্য ভেক্টরটি সদৃশ হয়।
|7 8 9| ==> |7 8 9|
|7 8 9|
|7 8 9|
(2) 0 এর একটি সম্প্রচার মাত্রা ব্যবহার করা যেতে পারে। প্রতিটি ভেক্টর উপাদান একটি সারি হয়ে যায় এবং ম্যাট্রিক্সের প্রতিটি কলামের জন্য ভেক্টরটি সদৃশ হয়।
|7| ==> |7 7 7|
|8| |8 8 8|
|9| |9 9 9|
সম্প্রচারের মাত্রা একটি টিপল হতে পারে যা বর্ণনা করে যে কীভাবে একটি ছোট র্যাঙ্ক আকৃতি একটি বড় র্যাঙ্ক আকৃতিতে সম্প্রচারিত হয়। উদাহরণস্বরূপ, একটি 2x3x4 কিউবয়েড এবং একটি 3x4 ম্যাট্রিক্স দেওয়া হয়েছে, একটি ব্রডকাস্টিং টিপল (1,2) মানে কিউবয়েডের 1 এবং 2 মাত্রার সাথে ম্যাট্রিক্সকে মেলানো।
এই ধরনের সম্প্রচার XlaBuilder
এ বাইনারি অপ্সে ব্যবহার করা হয়, যদি broadcast_dimensions
আর্গুমেন্ট দেওয়া হয়। উদাহরণস্বরূপ, XlaBuilder::Add দেখুন। XLA সোর্স কোডে, এই ধরনের সম্প্রচারকে কখনও কখনও "InDim" সম্প্রচার বলা হয়।
আনুষ্ঠানিক সংজ্ঞা
ব্রডকাস্টিং অ্যাট্রিবিউট উচ্চ-র্যাঙ্ক অ্যারের কোন মাত্রাগুলি মেলে তা নির্দিষ্ট করে একটি নিম্ন-র্যাঙ্ক অ্যারেকে উচ্চ-র্যাঙ্ক অ্যারের সাথে মেলাতে অনুমতি দেয়। উদাহরণস্বরূপ, MxNxPxQ মাত্রা সহ একটি বিন্যাসের জন্য, মাত্রা T সহ একটি ভেক্টর নিম্নলিখিতভাবে মিলিত হতে পারে:
MxNxPxQ
dim 3: T
dim 2: T
dim 1: T
dim 0: T
প্রতিটি ক্ষেত্রে, T-কে উচ্চ-র্যাঙ্ক অ্যারের মিলিত মাত্রার সমান হতে হবে। ভেক্টরের মানগুলি তারপরে মিলে যাওয়া মাত্রা থেকে অন্য সমস্ত মাত্রায় সম্প্রচার করা হয়।
MxNxPxQ অ্যারের সাথে একটি TxV ম্যাট্রিক্স মেলানোর জন্য, সম্প্রচারের মাত্রার একটি জোড়া ব্যবহার করা হয়:
MxNxPxQ
dim 2,3: T V
dim 1,2: T V
dim 0,3: T V
etc...
ব্রডকাস্টিং টিপলে মাত্রার ক্রম অবশ্যই সেই ক্রম হতে হবে যেখানে নিম্ন-র্যাঙ্ক অ্যারের মাত্রাগুলি উচ্চ-র্যাঙ্ক অ্যারের মাত্রার সাথে মিলবে বলে আশা করা হয়। টিপলের প্রথম উপাদানটি উচ্চ-র্যাঙ্ক অ্যারেতে কোন মাত্রাটি নিম্ন-র্যাঙ্ক অ্যারের মাত্রা 0 এর সাথে মিলতে হবে তা নির্দিষ্ট করে। টিপলের দ্বিতীয় উপাদানটি উল্লেখ করে যে উচ্চ-র্যাঙ্ক অ্যারেতে কোন মাত্রা নিম্ন-র্যাঙ্ক অ্যারেতে 1 মাত্রার সাথে মিলতে হবে, ইত্যাদি। সম্প্রচার মাত্রা ক্রম কঠোরভাবে বৃদ্ধি করা আবশ্যক. উদাহরণস্বরূপ, আগের উদাহরণে V থেকে N এবং T থেকে P এর সাথে মিল করা অবৈধ; P এবং N উভয়ের সাথে V মেলানোও বেআইনি।
ক্ষয়প্রাপ্ত মাত্রা সহ অনুরূপ-র্যাঙ্ক অ্যারে সম্প্রচার করা
একটি সম্পর্কিত সমস্যা হল দুটি অ্যারে সম্প্রচার করা যা একই র্যাঙ্ক কিন্তু ভিন্ন মাত্রার মাপ। NumPy এর মতো, এটি তখনই সম্ভব যখন অ্যারেগুলি সামঞ্জস্যপূর্ণ । দুটি অ্যারে সামঞ্জস্যপূর্ণ যখন তাদের সমস্ত মাত্রা সামঞ্জস্যপূর্ণ। দুটি মাত্রা সামঞ্জস্যপূর্ণ যদি:
- তারা সমান, বা
- তাদের মধ্যে একটি হল 1 (একটি "অবক্ষয়" মাত্রা)
যখন দুটি সামঞ্জস্যপূর্ণ অ্যারে সম্মুখীন হয়, ফলাফলের আকারে প্রতিটি মাত্রা সূচকে সর্বাধিক দুটি ইনপুট থাকে৷
উদাহরণ:
- (2,1) এবং (2,3) সম্প্রচার (2,3)।
- (1,2,5) এবং (7,2,5) সম্প্রচার (7,2,5)।
- (7,2,5) এবং (7,1,5) সম্প্রচার (7,2,5)।
- (7,2,5) এবং (7,2,6) বেমানান এবং সম্প্রচার করা যাবে না।
একটি বিশেষ ক্ষেত্রে উত্থাপিত হয়, এবং এটিও সমর্থিত হয়, যেখানে প্রতিটি ইনপুট অ্যারে একটি ভিন্ন সূচকে একটি অধঃপতিত মাত্রা থাকে। এই ক্ষেত্রে, ফলাফল হল একটি "বাইরের অপারেশন": (2,1) এবং (1,3) (2,3) এ সম্প্রচার। আরও উদাহরণের জন্য, সম্প্রচার সম্পর্কিত NumPy ডকুমেন্টেশন দেখুন।
সম্প্রচার রচনা
একটি উচ্চ-র্যাঙ্ক অ্যারেতে একটি নিম্ন-র্যাঙ্ক অ্যারের সম্প্রচার এবং ডিজেনারেট মাত্রা ব্যবহার করে সম্প্রচার উভয়ই একই বাইনারি অপারেশনে সঞ্চালিত হতে পারে। উদাহরণস্বরূপ, আকার 4 এর একটি ভেক্টর এবং 1x2 আকারের একটি ম্যাট্রিক্স মান (0) এর সম্প্রচার মাত্রা ব্যবহার করে একসাথে যোগ করা যেতে পারে:
|1 2 3 4| + [5 6] // [5 6] is a 1x2 matrix, not a vector.
প্রথমে ভেক্টরটি সম্প্রচারের মাত্রা ব্যবহার করে র্যাঙ্ক 2 (ম্যাট্রিক্স) পর্যন্ত সম্প্রচার করা হয়। সম্প্রচার মাত্রার একক মান (0) নির্দেশ করে যে ভেক্টরের মাত্রা শূন্য ম্যাট্রিক্সের মাত্রা শূন্যের সাথে মেলে। এটি 4xM আকারের একটি ম্যাট্রিক্স তৈরি করে যেখানে মান Mটিকে 1x2 অ্যারেতে সংশ্লিষ্ট মাত্রার আকারের সাথে মেলে বেছে নেওয়া হয়। অতএব, একটি 4x2 ম্যাট্রিক্স উত্পাদিত হয়:
|1 1| + [5 6]
|2 2|
|3 3|
|4 4|
তারপর "ডিজেনারেট ডাইমেনশন ব্রডকাস্টিং" 1x2 ম্যাট্রিক্সের ডাইমেনশন শূন্য সম্প্রচার করে যাতে ডানদিকের সংশ্লিষ্ট ডাইমেনশন সাইজ মেলে:
|1 1| + |5 6| |6 7|
|2 2| + |5 6| = |7 8|
|3 3| + |5 6| |8 9|
|4 4| + |5 6| |9 10|
একটি আরও জটিল উদাহরণ হল (1, 2) এর সম্প্রচার মাত্রা ব্যবহার করে 4x3x1 আকারের একটি অ্যারেতে 1x2 আকারের একটি ম্যাট্রিক্স যোগ করা হয়েছে। প্রথমে 1x2 ম্যাট্রিক্স একটি মধ্যবর্তী Mx1x2 অ্যারে তৈরি করতে সম্প্রচারের মাত্রা ব্যবহার করে 3 নম্বর পর্যন্ত সম্প্রচার করা হয় যেখানে একটি 4x1x2 মধ্যবর্তী অ্যারে তৈরি করে বৃহত্তর অপারেন্ডের (4x3x1 অ্যারে) আকারের দ্বারা ডাইমেনশন সাইজ M নির্ধারণ করা হয়। M মাত্রা 0 (বাম-সবচেয়ে মাত্রা) এ রয়েছে কারণ 1 এবং 2 মাত্রাগুলি মূল 1x2 ম্যাট্রিক্সের মাত্রার সাথে ম্যাপ করা হয়েছে কারণ সম্প্রচারের মাত্রা (1, 2)। একটি 4x3x2 অ্যারে ফলাফল তৈরি করতে ডিজেনারেট মাত্রা সম্প্রচার ব্যবহার করে এই মধ্যবর্তী অ্যারেটি 4x3x1 ম্যাট্রিক্সে যোগ করা যেতে পারে।