TensorFlow क्वांटम डिजाइन

TensorFlow क्वांटम (TFQ) को NISQ-युग क्वांटम मशीन लर्निंग की समस्याओं के लिए डिज़ाइन किया गया है। यह TensorFlow पारिस्थितिकी तंत्र के लिए क्वांटम कंप्यूटिंग आदिम-जैसे क्वांटम सर्किट का निर्माण करता है। TensorFlow के साथ निर्मित मॉडल और संचालन शक्तिशाली क्वांटम-शास्त्रीय हाइब्रिड सिस्टम बनाने के लिए इन आदिम का उपयोग करते हैं।

TFQ का उपयोग करते हुए, शोधकर्ता क्वांटम डेटासेट, क्वांटम मॉडल और शास्त्रीय नियंत्रण मापदंडों का उपयोग करके एक TensorFlow ग्राफ का निर्माण कर सकते हैं। इन सभी को एक ही कम्प्यूटेशनल ग्राफ में टेंसर के रूप में दर्शाया गया है। क्वांटम मापन का परिणाम - जो शास्त्रीय संभाव्य घटनाओं के लिए अग्रणी है - TensorFlow ops द्वारा प्राप्त किया जाता है। प्रशिक्षण मानक केरस एपीआई के साथ किया जाता है। tfq.datasets मॉड्यूल शोधकर्ताओं को नए और दिलचस्प क्वांटम डेटासेट के साथ प्रयोग करने की अनुमति देता है।

सर्की

Cirq Google का एक क्वांटम प्रोग्रामिंग फ्रेमवर्क है। यह क्वांटम कंप्यूटर, या एक नकली क्वांटम कंप्यूटर पर क्वांटम सर्किट बनाने, संशोधित करने और आह्वान करने के लिए सभी बुनियादी संचालन प्रदान करता है- जैसे कि क्वैबिट, गेट्स, सर्किट और मापन। TensorFlow क्वांटम बैच गणना, मॉडल निर्माण और ढाल गणना के लिए TensorFlow का विस्तार करने के लिए इन Cirq प्राइमेटिव का उपयोग करता है। TensorFlow क्वांटम के साथ प्रभावी होने के लिए, Cirq के साथ प्रभावी होना एक अच्छा विचार है।

TensorFlow क्वांटम प्राइमेटिव्स

TensorFlow क्वांटम क्वांटम कंप्यूटिंग हार्डवेयर के साथ TensorFlow को एकीकृत करने के लिए आवश्यक घटकों को लागू करता है। इसके लिए, TFQ दो डेटाटाइप प्रिमिटिव्स का परिचय देता है:

  • क्वांटम सर्किट : यह cirq.Circuit ) का प्रतिनिधित्व करता है। अलग-अलग वास्तविक-मूल्यवान डेटापॉइंट के बैचों के समान, अलग-अलग आकार के सर्किट के बैच बनाएं।
  • पाउली योग : Cirq ( cirq.PauliSum ) में परिभाषित पाउली ऑपरेटरों के टेंसर उत्पादों के रैखिक संयोजनों का प्रतिनिधित्व करते हैं। सर्किट की तरह, अलग-अलग आकार के ऑपरेटरों के बैच बनाएं।

फंडामेंटल ऑप्स

एक tf.Tensor के भीतर क्वांटम सर्किट प्रिमिटिव का उपयोग करते हुए, TensorFlow क्वांटम इन सर्किटों को संसाधित करने और सार्थक आउटपुट उत्पन्न करने वाले ऑप्स को लागू करता है।

TensorFlow ops अनुकूलित C++ में लिखे गए हैं। ये सर्किट से नमूना लेते हैं, अपेक्षा मूल्यों की गणना करते हैं, और दिए गए सर्किट द्वारा उत्पादित राज्य का उत्पादन करते हैं। लचीले और प्रदर्शनकारी ऑप्स लिखने में कुछ चुनौतियाँ होती हैं:

  1. सर्किट समान आकार के नहीं होते हैं। नकली सर्किट के लिए, आप स्थिर संचालन (जैसे tf.matmul या tf.add ) बनाने में असमर्थ हैं और फिर विभिन्न आकारों के सर्किट के लिए अलग-अलग नंबरों को प्रतिस्थापित करते हैं। इन ऑप्स को गतिशील आकार की अनुमति देनी चाहिए जो स्थिर आकार के TensorFlow कंप्यूट ग्राफ़ की अनुमति नहीं देता है।
  2. क्वांटम डेटा पूरी तरह से एक अलग सर्किट संरचना को प्रेरित कर सकता है। यह TFQ ऑप्स में गतिशील आकारों का समर्थन करने का एक और कारण है। क्वांटम डेटा अंतर्निहित क्वांटम स्थिति में संरचनात्मक परिवर्तन का प्रतिनिधित्व कर सकता है जिसे मूल सर्किट में संशोधनों द्वारा दर्शाया जाता है। चूंकि रनटाइम पर नए डेटापॉइंट्स की अदला-बदली की जाती है, TensorFlow कंप्यूट ग्राफ़ को बनने के बाद संशोधित नहीं किया जा सकता है, इसलिए इन अलग-अलग संरचनाओं के लिए समर्थन की आवश्यकता होती है।
  3. cirq.Circuits कंप्यूट ग्राफ़ के समान हैं, जिसमें वे संचालन की एक श्रृंखला हैं- और कुछ में प्रतीक/प्लेसहोल्डर हो सकते हैं। इसे यथासंभव TensorFlow के साथ संगत बनाना महत्वपूर्ण है।

प्रदर्शन कारणों से, Eigen (कई TensorFlow ops में उपयोग की जाने वाली C++ लाइब्रेरी) क्वांटम सर्किट सिमुलेशन के लिए उपयुक्त नहीं है। इसके बजाय, क्वांटम परे-शास्त्रीय प्रयोग में उपयोग किए जाने वाले सर्किट सिमुलेटर सत्यापनकर्ता के रूप में उपयोग किए जाते हैं और TFQ ऑप्स (सभी AVX2 और SSE निर्देशों के साथ लिखे गए) की नींव के रूप में विस्तारित होते हैं। समान कार्यात्मक हस्ताक्षर वाले ऑप्स बनाए गए जो भौतिक क्वांटम कंप्यूटर का उपयोग करते हैं। एक नकली और भौतिक क्वांटम कंप्यूटर के बीच स्विच करना कोड की एक पंक्ति को बदलने जितना आसान है। ये ops circuit_execution_ops.py में स्थित हैं।

परतों

TensorFlow क्वांटम परतें tf.keras.layers.Layer इंटरफ़ेस का उपयोग करके डेवलपर्स के लिए नमूनाकरण, अपेक्षा और राज्य गणना को उजागर करती हैं। शास्त्रीय नियंत्रण मापदंडों के लिए या रीडआउट संचालन के लिए एक सर्किट परत बनाना सुविधाजनक है। इसके अतिरिक्त, आप बैच सर्किट, बैच नियंत्रण पैरामीटर मान का समर्थन करने वाली उच्च स्तर की जटिलता के साथ एक परत बना सकते हैं और बैच रीडआउट संचालन कर सकते हैं। उदाहरण के लिए tfq.layers.Sample देखें।

डिफ़रेंशियेटर्स

कई TensorFlow संचालन के विपरीत, क्वांटम सर्किट में वेधशालाओं में ग्रेडिएंट के लिए सूत्र नहीं होते हैं जिनकी गणना करना अपेक्षाकृत आसान होता है। ऐसा इसलिए है क्योंकि एक शास्त्रीय कंप्यूटर केवल क्वांटम कंप्यूटर पर चलने वाले सर्किट से नमूने पढ़ सकता है।

इस समस्या को हल करने के लिए, tfq.differentiators मॉड्यूल कई मानक विभेदन तकनीक प्रदान करता है। नमूना-आधारित अपेक्षा गणना की "वास्तविक दुनिया" सेटिंग और विश्लेषणात्मक सटीक दुनिया दोनों में, उपयोगकर्ता ग्रेडिएंट की गणना करने के लिए अपनी स्वयं की विधि को भी परिभाषित कर सकते हैं। विश्लेषणात्मक/सटीक वातावरण में परिमित अंतर जैसे तरीके अक्सर सबसे तेज़ (दीवार घड़ी का समय) होते हैं। जबकि धीमी (दीवार घड़ी का समय), अधिक व्यावहारिक तरीके जैसे पैरामीटर शिफ्ट या स्टोकेस्टिक तरीके अक्सर अधिक प्रभावी होते हैं। एक tfq.differentiators.Differentiator को तुरंत चालू किया जाता है और Generate_differentiable_op के साथ मौजूदा ऑप से जोड़ा जाता है, या generate_differentiable_op या tfq.layers.Expectation के कंस्ट्रक्टर को पास किया tfq.layers.SampledExpectation है। एक कस्टम विभेदक को लागू करने के लिए, tfq.differentiators.Differentiator वर्ग से इनहेरिट करें। नमूनाकरण या राज्य वेक्टर गणना के लिए एक ग्रेडिएंट ऑपरेशन को परिभाषित करने के लिए, tf.custom_gradient का उपयोग करें।

डेटासेट

जैसे-जैसे क्वांटम कंप्यूटिंग का क्षेत्र बढ़ता है, अधिक क्वांटम डेटा और मॉडल संयोजन उत्पन्न होंगे, जिससे संरचित तुलना और अधिक कठिन हो जाएगी। tfq.datasets मॉड्यूल का उपयोग क्वांटम मशीन सीखने के कार्यों के लिए डेटा स्रोत के रूप में किया जाता है। यह मॉडल और प्रदर्शन के लिए संरचित तुलना सुनिश्चित करता है।

यह आशा की जाती है कि बड़े सामुदायिक योगदान के साथ, tfq.datasets मॉड्यूल ऐसे अनुसंधान को सक्षम करने के लिए विकसित होगा जो अधिक पारदर्शी और प्रतिलिपि प्रस्तुत करने योग्य हो। tfq.datasets के अलावा क्वांटम नियंत्रण, fermionic सिमुलेशन, चरण संक्रमण के पास वर्गीकरण, क्वांटम सेंसिंग, आदि सभी महान उम्मीदवार हैं: सावधानीपूर्वक क्यूरेट की गई समस्याएं। एक नया डेटासेट प्रस्तावित करने के लिए एक GitHub समस्या खोलें।