طراحی کوانتومی تنسورفلو

TensorFlow Quantum (TFQ) برای مشکلات یادگیری ماشین کوانتومی دوره NISQ طراحی شده است. این ابزار اولیه محاسبات کوانتومی - مانند ساخت مدارهای کوانتومی - را به اکوسیستم TensorFlow می آورد. مدل‌ها و عملیات‌هایی که با TensorFlow ساخته شده‌اند از این اصول اولیه برای ایجاد سیستم‌های ترکیبی کوانتومی کلاسیک قدرتمند استفاده می‌کنند.

با استفاده از TFQ، محققان می توانند یک نمودار TensorFlow با استفاده از مجموعه داده کوانتومی، یک مدل کوانتومی و پارامترهای کنترل کلاسیک بسازند. همه اینها به صورت تانسور در یک نمودار محاسباتی منفرد نشان داده می شوند. نتیجه اندازه‌گیری‌های کوانتومی - که منجر به رویدادهای احتمالی کلاسیک می‌شود - توسط عملیات تنسورفلو به دست می‌آید. آموزش با API استاندارد Keras انجام می شود. ماژول tfq.datasets به محققان اجازه می دهد تا مجموعه داده های کوانتومی جدید و جالبی را آزمایش کنند.

Cirq

Cirq یک چارچوب برنامه نویسی کوانتومی از گوگل است. همه عملیات های اساسی - مانند کیوبیت ها، گیت ها، مدارها و اندازه گیری - برای ایجاد، اصلاح و فراخوانی مدارهای کوانتومی در یک کامپیوتر کوانتومی یا یک کامپیوتر کوانتومی شبیه سازی شده را فراهم می کند. TensorFlow Quantum از این اولیه‌های Cirq برای گسترش TensorFlow برای محاسبات دسته‌ای، ساخت مدل و محاسبه گرادیان استفاده می‌کند. برای موثر بودن با TensorFlow Quantum، ایده خوبی است که با Cirq موثر باشید.

TensorFlow کوانتومی اولیه

TensorFlow Quantum اجزای مورد نیاز برای ادغام TensorFlow با سخت افزار محاسبات کوانتومی را پیاده سازی می کند. برای این منظور، TFQ دو نوع داده اولیه را معرفی می کند:

  • مدار کوانتومی : این مدارهای کوانتومی تعریف شده ( cirq.Circuit ) را در cirq.Circuit نشان می دهد. دسته‌هایی از مدارها با اندازه‌های مختلف، شبیه به دسته‌هایی از نقاط داده با ارزش واقعی مختلف ایجاد کنید.
  • جمع پائولی : ترکیب خطی حاصل از تانسور عملگرهای پائولی را نشان می‌دهد که در Cirq ( cirq.PauliSum ) تعریف شده‌اند. مانند مدارها، دسته ای از اپراتورها با اندازه های مختلف ایجاد کنید.

عملیات اساسی

با استفاده از مدارهای اولیه مدار کوانتومی در یک tf.Tensor ، TensorFlow Quantum عملیات هایی را پیاده سازی می کند که این مدارها را پردازش کرده و خروجی های معنی دار تولید می کند.

عملیات TensorFlow در C++ بهینه شده نوشته شده است. این عملیات‌ها از مدارها نمونه‌برداری می‌کنند، مقادیر انتظاری را محاسبه می‌کنند و حالت تولید شده توسط مدارهای داده شده را خروجی می‌دهند. نوشتن کارهایی که منعطف و کارآمد هستند چالش هایی دارد:

  1. مدارها هم اندازه نیستند. برای مدارهای شبیه سازی شده، نمی توانید عملیات ایستا (مانند tf.matmul یا tf.add ) ایجاد کنید و سپس اعداد مختلف را جایگزین مدارهایی با اندازه های مختلف کنید. این عملیات‌ها باید اندازه‌های پویا را در نظر بگیرند که نمودار محاسباتی TensorFlow با اندازه ایستا اجازه نمی‌دهد.
  2. داده های کوانتومی می توانند به طور کلی ساختار مدار متفاوتی را القا کنند. این دلیل دیگری برای پشتیبانی از اندازه های پویا در عملیات TFQ است. داده های کوانتومی می توانند یک تغییر ساختاری در حالت کوانتومی زیربنایی را نشان دهند که با تغییراتی در مدار اصلی نشان داده می شود. از آنجایی که نقاط داده جدید در زمان اجرا به داخل و خارج می شوند، نمودار محاسباتی TensorFlow پس از ساخته شدن قابل تغییر نیست، بنابراین پشتیبانی از این ساختارهای متفاوت مورد نیاز است.
  3. cirq.Circuits ها شبیه به نمودارهای محاسباتی هستند، زیرا آنها مجموعه ای از عملیات هستند - و برخی ممکن است حاوی نمادها/جایگاه ها باشند. مهم است که این مورد تا حد امکان با TensorFlow سازگار باشد.

به دلایل عملکرد، Eigen (کتابخانه C++ مورد استفاده در بسیاری از عملیات های TensorFlow) برای شبیه سازی مدار کوانتومی مناسب نیست. درعوض، شبیه‌سازهای مدار مورد استفاده در آزمایش کوانتومی فراتر از کلاسیک ، به‌عنوان تأییدکننده استفاده می‌شوند و به‌عنوان پایه عملیات TFQ گسترش می‌یابند (همه با دستورالعمل‌های AVX2 و SSE نوشته شده‌اند). عملیات هایی با امضاهای عملکردی یکسان ایجاد شدند که از یک کامپیوتر کوانتومی فیزیکی استفاده می کنند. جابجایی بین یک کامپیوتر کوانتومی شبیه سازی شده و فیزیکی به آسانی تغییر یک خط کد است. این عملیات در circuit_execution_ops.py قرار دارند.

لایه های

لایه‌های کوانتومی TensorFlow نمونه‌برداری، انتظارات و محاسبه حالت را در معرض توسعه‌دهندگان با استفاده از رابط tf.keras.layers.Layer قرار می‌دهند. ایجاد یک لایه مدار برای پارامترهای کنترل کلاسیک یا برای عملیات بازخوانی راحت است. علاوه بر این، می توانید یک لایه با درجه پیچیدگی بالا ایجاد کنید که از مدار دسته ای، مقدار پارامتر کنترل دسته ای پشتیبانی می کند و عملیات بازخوانی دسته ای را انجام می دهد. برای مثال tfq.layers.Sample را ببینید.

متمایز کننده ها

بر خلاف بسیاری از عملیات TensorFlow، قابل مشاهده‌ها در مدارهای کوانتومی فرمول‌هایی برای گرادیان ندارند که محاسبه آن نسبتاً آسان باشد. این به این دلیل است که یک کامپیوتر کلاسیک فقط می تواند نمونه هایی از مدارهایی که روی یک کامپیوتر کوانتومی اجرا می شوند را بخواند.

برای حل این مشکل، ماژول tfq.differentiators چندین تکنیک متمایز استاندارد ارائه می دهد. کاربران همچنین می‌توانند روش خود را برای محاسبه گرادیان‌ها تعریف کنند - هم در محیط «دنیای واقعی» محاسبه انتظارات مبتنی بر نمونه و هم در دنیای دقیق تحلیلی. روش‌هایی مانند اختلاف محدود اغلب سریع‌ترین (زمان ساعت دیواری) در یک محیط تحلیلی/دقیق هستند. در حالی که کندتر (زمان ساعت دیواری)، روش های عملی تر مانند تغییر پارامتر یا روش های تصادفی اغلب موثرتر هستند. یک tfq.differentiators.Differentiator نمونه سازی می شود و به یک عملیات موجود باgene_differentiable_op متصل می generate_differentiable_op ، یا به سازنده tfq.layers.Expectation یا tfq.layers.SampledExpectation می شود. برای پیاده سازی یک متمایزکننده سفارشی، از کلاس tfq.differentiators.Differentiator ارث بری کنید. برای تعریف عملیات گرادیان برای نمونه گیری یا محاسبه بردار حالت، از tf.custom_gradient استفاده کنید.

مجموعه داده ها

همانطور که حوزه محاسبات کوانتومی رشد می کند، داده های کوانتومی و ترکیب مدل های بیشتری به وجود می آیند که مقایسه ساختار یافته را دشوارتر می کند. ماژول tfq.datasets به عنوان منبع داده برای وظایف یادگیری ماشین کوانتومی استفاده می شود. این مقایسه ساختار یافته برای مدل و عملکرد را تضمین می کند.

امید است که با مشارکت‌های بزرگ جامعه، ماژول tfq.datasets رشد کند تا تحقیقات شفاف‌تر و قابل تکرارتر را امکان‌پذیر کند. مسائلی که به دقت بررسی شده‌اند در: کنترل کوانتومی، شبیه‌سازی فرمیونی، طبقه‌بندی نزدیک به انتقال فاز، سنجش کوانتومی و غیره همگی کاندیدای عالی برای افزودن به مجموعه‌های داده tfq.datasets هستند. برای پیشنهاد یک مجموعه داده جدید، یک مشکل GitHub را باز کنید.