common.title

Overview
Service overview
Terms of service

Privacy policy

Contact

Sign in
Sign up
common.title

Blueqat 0.4.1の状態ベクトル指定機能を使ったMCMRと量子機械学習

Yuichiro Minato

2021/03/14 03:09

#量子機械学習

6

こんにちは、量子機械学習をやって量子コンピュータの最先端に立ちたいですよね。今回はmid-circuit measurement and qubit reuseという手法を使って量子機械学習を効率化する方法を確認します&blueqatの新機能を使って量子ビットの削減をしてみたいと思います。

Mid-circuit measurement and qubit reuse (MCMR)とは?

略称MCMRは回路の途中で特定の量子ビットだけの測定を行い、その量子ビットの測定後にリセットをするという手法です。特定の量子ビットの測定をして0\lvert 0 \rangleに初期化することによって、量子ビット数に対しての状態ベクトル単体よりも複雑な量子状態のサンプルをとることができます。

今回は例にとって3量子ビットの回路を2量子ビットに削減してみます。下記のような構造を見てみます。

|0> --*-----
      |
|0> --U--*--
         |
|0> -----U--

一番上の量子ビットと一番下の量子ビットを見てみます。一番上の量子ビットを測定した後に一番下の量子ビットを初期化して初めても回路は同じになります。一番下の回路をひっくり返して、MCMRを使って書き直すと、下記のようにすることができます。

|0> --*--  U--
      |    |
|0> --U----*--

Mid-circuit measurement and qubit reuse MCMRでは、このように順番を工夫し、量子ビットの測定と初期化を行うことで少ない量子ビットで複雑な計算をすることができます。現在実機では、米国のハネウェルマシンとIBMマシンに実装されています。

状態ベクトルを見てみる

仕組みを理解するために状態ベクトルの推移を見てみます。2量子ビットの回路を確認してみましょう。

|0> --H--*--
         |
|0> -----X--

これは量子もつれ回路です。状態ベクトルは、

from blueqat import Circuit Circuit().h[0].cx[0,1].run()
array([0.70710678+0.j, 0.        +0.j, 0.        +0.j, 0.70710678+0.j])

rxxを使うと一度でかけます。

|0> ---*----
       |
|0> ---RXX--
from blueqat import Circuit import math Circuit().rxx(-math.pi/2)[0,1].run()
array([0.70710678+0.j        , 0.        +0.j        ,

       0.        +0.j        , 0.        +0.70710678j])

このように、00+112\frac{\lvert 00 \rangle + \lvert 11 \rangle}{\sqrt{2}}のもつれ状態となりました。この状態で0番目の量子ビットだけを測定してみますと、

|0> ---*----測定
       |
|0> ---RXX---------

もし、q0=0q_0 = 0が測定されたら、00\lvert 00 \rangleが確定し、ψ=00\lvert \psi \rangle = \lvert 00 \rangleとなります。その際の状態ベクトルは、

import numpy as np vec00 = np.array([1, 0, 0, 0])

もし、q0=1q_0 = 1が測定されたら、11\lvert 11 \rangleが確定し、ψ=11\lvert \psi \rangle = \lvert 11 \rangleとなります。

vec11 = np.array([0, 0, 0, 1])

となります。ここで、0番目の量子ビットを0\lvert 0 \rangleに初期化すると、11\lvert 11 \rangleは、01\lvert 01 \rangleとなります。

vec01 = np.array([0, 1, 0, 0])

つまり、状態ベクトルは、測定された量子ビットの測定結果によって状態ベクトルが分岐することになり、それぞれ別の量子状態へと初期化されます。

|0> ---*---- |0>--
       |
|0> ---RXX--------

最終的に上記の回路を再度測定すると、最初にq0=0q_0 = 0が出たときは、そのまま二回目の測定では、0000がでるため、000000のサンプルが得られます。

Circuit(2).m[:].run(shots=100, initial=vec00)
Counter({'00': 100})

また、最初にq0=1q_0 = 1が出たときには、二回目以降の測定では、0101がでるため、101101のサンプルが得られます。blueqatでは、0番目の量子ビットの値が右側になっています。

Circuit(2).m[:].run(shots=100, initial=vec01)
Counter({'10': 100})

最初の測定の結果によってその後のサンプリングに関しても結果が変わり、何度ももつれを利用することによって、途中測定とリセットを繰り返すたびに量子状態の状態ベクトルが分岐していくことになります。

量子機械学習への応用

これらを量子機械学習へ応用するには、これらの再利用を量子機械学習の畳み込みなどにも対応させることができます。例えば、画像認識などでのQCNNなどの畳み込み回路があったとします。

|0> --*--
      |
|0> --U--*--
         |
|0> --*--U----
      |  
|0> --U--

これは、q0q_0の回路がq1q_1に畳み込まれ、q2q_2q3q_3に畳み込まれ、再度q1q_1q3q_3に畳み込まれます。4量子ビット回路に見えますが、MCMRを利用して、

|0>--U------------*--
     |            |
|0>--*--  |0>--*--U----
               |
|0>------------U--

4量子ビットを3量子ビットへと減らすことができました。MPS回路を利用するとさらに軽量化をすることができます。このように量子機械学習においては時間発展のようにもつれを利用する部分が限られたMPSやTTN/MERAといった量子状態の近似をとる量子回路においてはMCMRを効率的に利用することによってHoneywellやIBM実機での効率的な量子機械学習の利用が可能になります。以上です。

© 2024, blueqat Inc. All rights reserved