TensorFlow Quantum (TFQ) برای مشکلات یادگیری ماشین کوانتومی دوره NISQ طراحی شده است. این ابزار اولیه محاسبات کوانتومی - مانند ساخت مدارهای کوانتومی - را به اکوسیستم TensorFlow می آورد. مدلها و عملیاتهایی که با TensorFlow ساخته شدهاند از این اصول اولیه برای ایجاد سیستمهای ترکیبی کوانتومی-کلاسیک قدرتمند استفاده میکنند.
با استفاده از TFQ، محققان می توانند یک نمودار TensorFlow با استفاده از مجموعه داده کوانتومی، یک مدل کوانتومی و پارامترهای کنترل کلاسیک بسازند. همه اینها به صورت تانسور در یک نمودار محاسباتی منفرد نشان داده می شوند. نتیجه اندازهگیریهای کوانتومی - که منجر به رویدادهای احتمالی کلاسیک میشود - توسط TensorFlow به دست میآید. آموزش با API استاندارد Keras انجام می شود. ماژول tfq.datasets
به محققان اجازه می دهد تا مجموعه داده های کوانتومی جدید و جالبی را آزمایش کنند.
Cirq
Cirq یک چارچوب برنامه نویسی کوانتومی از گوگل است. تمام عملیات های اساسی - مانند کیوبیت ها، گیت ها، مدارها و اندازه گیری - برای ایجاد، اصلاح و فراخوانی مدارهای کوانتومی در یک کامپیوتر کوانتومی یا یک کامپیوتر کوانتومی شبیه سازی شده را فراهم می کند. TensorFlow Quantum از این اصول اولیه Cirq برای گسترش TensorFlow برای محاسبات دسته ای، ساخت مدل و محاسبه گرادیان استفاده می کند. برای موثر بودن با TensorFlow Quantum، ایده خوبی است که با Cirq موثر باشید.
TensorFlow کوانتومی اولیه
TensorFlow Quantum اجزای مورد نیاز برای ادغام TensorFlow با سخت افزار محاسبات کوانتومی را پیاده سازی می کند. برای این منظور، TFQ دو نوع داده اولیه را معرفی می کند:
- مدار کوانتومی : این مدارهای کوانتومی (
cirq.Circuit
) را در TensorFlow نشان میدهد. دستهای از مدارها با اندازههای مختلف، شبیه به دستههایی از نقاط داده با ارزش واقعی مختلف ایجاد کنید. - جمع پائولی : ترکیب خطی حاصل از تانسور عملگرهای پائولی را نشان میدهد که در Cirq (
cirq.PauliSum
) تعریف شدهاند. مانند مدارها، دسته ای از اپراتورها با اندازه های مختلف ایجاد کنید.
عملیات اساسی
با استفاده از مدارهای اولیه مدار کوانتومی در یک tf.Tensor
، TensorFlow Quantum عملیاتهایی را پیادهسازی میکند که این مدارها را پردازش کرده و خروجیهای معنیداری تولید میکنند.
عملیات TensorFlow در C++ بهینه شده نوشته شده است. این عملیات ها از مدارها نمونه برداری می کنند، مقادیر انتظاری را محاسبه می کنند و حالت تولید شده توسط مدارهای داده شده را خروجی می دهند. نوشتن کارهایی که منعطف و کارآمد هستند چالش هایی دارد:
- مدارها هم اندازه نیستند. برای مدارهای شبیه سازی شده، نمی توانید عملیات ایستا (مانند
tf.matmul
یاtf.add
) ایجاد کنید و سپس اعداد مختلف را جایگزین مدارهایی با اندازه های مختلف کنید. این عملیاتها باید اندازههای پویا را در نظر بگیرند که نمودار محاسباتی TensorFlow با اندازه ایستا اجازه نمیدهد. - داده های کوانتومی می توانند به طور کلی ساختار مدار متفاوتی را القا کنند. این دلیل دیگری برای پشتیبانی از اندازه های پویا در عملیات TFQ است. داده های کوانتومی می توانند یک تغییر ساختاری در حالت کوانتومی زیربنایی را نشان دهند که با تغییراتی در مدار اصلی نشان داده می شود. از آنجایی که دیتاپوینتهای جدید در زمان اجرا تعویض میشوند، نمودار محاسباتی TensorFlow را نمیتوان پس از ساخت تغییر داد، بنابراین پشتیبانی از این ساختارهای متفاوت مورد نیاز است.
-
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
نمونه سازی می شود و به یک عملیات موجود با generate_differentiable_op
متصل می شود، یا به سازنده tfq.layers.Expectation
یا tfq.layers.SampledExpectation
منتقل می شود. برای پیاده سازی یک متمایزکننده سفارشی، از کلاس tfq.differentiators.Differentiator
ارث بری کنید. برای تعریف عملیات گرادیان برای نمونه گیری یا محاسبه بردار حالت، از tf.custom_gradient
استفاده کنید.
مجموعه داده ها
همانطور که حوزه محاسبات کوانتومی رشد می کند، داده های کوانتومی و ترکیب مدل های بیشتری به وجود می آیند که مقایسه ساختار یافته را دشوارتر می کند. ماژول tfq.datasets
به عنوان منبع داده برای وظایف یادگیری ماشین کوانتومی استفاده می شود. این مقایسه ساختار یافته برای مدل و عملکرد را تضمین می کند.
امید است که با مشارکتهای بزرگ جامعه، ماژول tfq.datasets
رشد کند تا تحقیقات شفافتر و قابل تکرارتر را امکانپذیر سازد. مسائلی که به دقت بررسی شدهاند در: کنترل کوانتومی، شبیهسازی فرمیونی، طبقهبندی نزدیک به انتقال فاز، سنجش کوانتومی و غیره همگی کاندیدهای عالی برای افزودن به tfq.datasets
هستند. برای پیشنهاد یک مجموعه داده جدید، یک مشکل GitHub را باز کنید.