@yuichirominato 2018.10.30更新

光量子コンピュータCV連続量プログラミング概要

CV フォトニクス 光量子コンピュータ 連続量 量子ゲート 量子コンピュータ

はじめに

量子コンピュータは量子と呼ばれる小さい単位をつかって波動の計算をします。量子の中には光子もあり、光量子コンピュータがあります。今回はこの光量子コンピュータが通常の量子ビットを使った計算と異なるということを確認して少し全体概要をみてみたいと思います。

光量子コンピュータに取り掛かっている方々

今回利用するのはXANADUというトロントのベンチャー企業のツールですが、国内外で光量子コンピュータに取り掛かっている方々おります。今回の内容はそういった活動の理解にも繋がる気がします。

XANADU
フォトニクスチップを利用した研究開発を行なっている量子コンピュータ企業です。
https://www.xanadu.ai/

内閣府ImPACT CIM / QNN
OPOパルスを活用したコヒーレントイジングマシン。後述する真空スクイーズ状態を活用しています。
https://www.jst.go.jp/impact/program/12.html

NTT lasolv
上記のCIMの商用ブランドです。
http://www.ntt.co.jp/journal/1804/files/JN20180429.pdf

東京大学古澤研究室
光パルスの演算とメモリの二重ループを活用したマシン。内側の演算ループに各ゲートのスイッチが確認できる。
http://www.alice.t.u-tokyo.ac.jp/

では早速概要を見ていきます。。。

量子ビットではなく、QUMODES

光量子コンピュータで使われる原理は連続量プログラミングと呼ばれていて、量子ビットとは原理が違うようです。
XANADUのドキュメントから比較が確認できます。今後の図表はすべてこのページから参照いたします。

https://strawberryfields.readthedocs.io/en/latest/introduction.html

Qubitに対してQumode
1bitに対応するのが1nat
演算子や量子状態が異なります。
ゲートも異なったゲートがとられ、測定もいくつかあります。

CV状態

状態に関しても、量子ビットのような|0>と|1>の組み合わせとは少し違うようです。

ガウス状態を基本としていくつかの状態があるようです。
コヒーレント状態、スクイーズド状態など様々な状態があります。
通常これらの状態はwigner分布と呼ばれる分布上で表現されるようです。

CVゲート

状態も異なりますから、状態を遷移させるためのゲート操作も当然量子ビットとは異なりそうです。量子ビットではブロッホ球上で表現された回転角をゲート操作で回転操作を行いますが、CVプログラミングでは、wigner分布上のcv状態を様々なゲート操作で変化させるようです。変位や回転、スクイージングなどがあります。

上記のCubic PhaseゲートはNon-Gaussian gatesとよばれ、量子ビットにおけるnon-Clifford gatesに対応する特徴的な物のようです。

測定

測定もいくつかの種類があります。ホモダイン測定、ヘテロダイン測定、フォトンカウンティング。

より詳しい情報

より詳しい情報はこちらのページに載っています。結構ボリュームあるので楽しいです。
https://strawberryfields.readthedocs.io/en/latest/op_conventions.html

早速量子アルゴリズム

これらのざっくりした知識を使ってCVプログラミングの例を見てみたいと思います。例題ではこれだけ豊富なものが揃っています。

量子テレポーテーション回路

量子テレポーテーション回路を選んでみます。wikipediaによると、離れた場所に量子状態を転送することのようです。量子もつれと古典的な測定を組み合わせます。

量子テレポーテーション(りょうしテレポーテーション、英:Quantum teleportation)とは、古典的な情報伝達手段と量子もつれ (Quantum entanglement) の効果を利用して離れた場所に量子状態を転送することである。

テレポーテーションという名前であるものの、粒子が空間の別の場所に瞬間移動するわけではない。量子もつれの関係にある2つの粒子のうち一方の状態を観測すると瞬時にもう一方の状態が確定的に判明することからこのような名前がついた。また、この際に粒子間で情報の伝達や物理的作用は起こっていない。これは、観測により任意の量子状態を実現することは不可能であることからもわかる。したがって、量子テレポーテーションを用いれば超光速通信が実現できるなどということはない。

https://ja.wikipedia.org/wiki/%E9%87%8F%E5%AD%90%E3%83%86%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

回路は上のようになっていて、ビームスプリッタ回路と測定、XゲートとZゲートを使うようです。よくみたら初期状態は二種類の真空スクイーズド状態のようです。

XANADUのStrawberry Fieldsでみてみます。

初期状態の0からSゲートをかけて、BS、BSからのX,Pで最後にXとZゲートを行なっています。実行してみたところ、
wigner functionという答えでこんな感じになりました。あってるのかわからんですが、今回はあんまり深く追求しません。

Blackbirdのコードでは、


#!/usr/bin/env python3
import numpy as np
import strawberryfields as sf
from strawberryfields.ops import *
from strawberryfields.utils import scale

# initialise backend, engine and register
eng, q = sf.Engine(3, hbar=0.5)

with eng:
    Coherent(1+0.5j) | q[0]
    Sgate(2, 0) | q[2]
    Sgate(-2, 0) | q[1]
    BSgate(0.7854, 0) | (q[1], q[2])
    BSgate(0.7854, 0) | (q[0], q[1])
    MeasureP | q[1]
    MeasureX | q[0]
    Xgate(scale(q[0], 1.41421356237000)) | q[2]
    Zgate(scale(q[1], 1.41421356237000)) | q[2]

state = eng.run('fock', cutoff_dim=5)

このようになりました。このように今回は概要を確認しましたが、状態の準備も
ゲートの掛け方も簡単に書くことができます。

まずはこのサイズのゲート回路はGUIで十分に学べる気がしましたので、少しずつ時間を見つけて連続量プログラミングのやり方を今後確認してみたいと思います。

GUIこちら(登録不要) >> https://strawberryfields.ai/

今回は以上です。

あわせて読みたい