common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

KAK分解を利用した任意の2量子ビットゲートの量子ゲート分解の概略

Yuichiro Minato

2022/02/04 15:37

数学は苦手ですが、便利なツールは使いたいということで、任意のユニタリ演算を分解するKAK分解の概要について確認をし、使い方を見てみたいと思います。理論的な内容を詳しく追おうとも考えていましたが、まったく時間がとれなさそうなので表面だけ触ります。。。

機械学習においてのモチベーション

任意のユニタリ演算を量子回路に置き換えたい需要は様々あります。ここでは以前勉強会で取り扱った、QCNNにおける畳み込みに対応する関数をユニタリ演算でおき、そのユニタリ演算を量子回路で表現するというものでした。

概要

U(4)を4つのSU(2)と3パラメータのe^{-iH}に分解。もしくは8つのSU(2)とCNOT3つに分解。

論文

A universal quantum circuit for two-qubit transformations with three CNOT gates
https://arxiv.org/abs/quant-ph/0307177

量子回路1

.img/0307177-pdf

量子回路2

.img/0307177-pdf2.png

利用する主なゲート

1量子ビットの任意回転ゲートおよび2量子ビットの任意回転ゲートを利用します。

1量子ビット任意回転ゲート

from https://qiita.com/KeiichiroHiga/items/f5117efcf6a96c9d10b8

Rx(\theta) = \left( \begin{array}{cc} \cos\left(\frac{\theta}{2}\right) & -i\sin\left(\frac{\theta}{2}\right)\\ -i\sin\left(\frac{\theta}{2}\right) & \cos\left(\frac{\theta}{2}\right) \end{array} \right)
Ry(\theta) = \left( \begin{array}{cc} \cos\left(\frac{\theta}{2}\right) & -\sin\left(\frac{\theta}{2}\right)\\ \sin\left(\frac{\theta}{2}\right) & \cos\left(\frac{\theta}{2}\right) \end{array} \right)
Rz(\theta) = \left( \begin{array}{cc} e^{-i\frac{\theta}{2}} & 0\\ 0 & e^{i\frac{\theta}{2}} \end{array} \right)

2量子ビット任意回転ゲート

from https://qiita.com/KeiichiroHiga/items/d9377060fbc97817d849

Rxx(\theta) = \left(\begin{array}{cccc} \cos\theta &0&0&-i\sin\theta\\ 0& \cos\theta &-i\sin\theta&0\\ 0&-i\sin\theta& \cos\theta &0\\ -i\sin\theta&0&0& \cos\theta \end{array}\right)
Ryy(\theta) = \left(\begin{array}{cccc} \cos\theta &0&0&i\sin\theta\\ 0& \cos\theta &-i\sin\theta&0\\ 0&-i\sin\theta& \cos\theta &0\\ i\sin\theta&0&0& \cos\theta \end{array}\right)
Rzz(\theta) = \left(\begin{array}{cccc} e^{\frac{\theta}{2}i} &0&0&0\\ 0& e^{-\frac{\theta}{2}i} &0&0\\ 0&0& e^{-\frac{\theta}{2}i} &0\\ 0&0&0& e^{\frac{\theta}{2}i} \end{array}\right)

量子回路2構成

Tensorflow Quantumより引用(1量子ビットの任意回転ゲートがずれているのは実機の仕様かと思われます)

./img/tf2.png

from blueqat import Circuit
import numpy as np

def singleU(angle, qubit):
    return Circuit().rx(angle[0])[qubit].ry(angle[1])[qubit].rz(angle[2])[qubit]
    
def doubleU(angle, qubit_array):
    return Circuit().rzz(angle[0])[qubit_array[0],qubit_array[1]].ryy(angle[1])[qubit_array[0],qubit_array[1]].rxx(angle[2])[qubit_array[0],qubit_array[1]]
params = [2*np.pi*np.random.rand() for _ in range(15)]

a = Circuit()
a += singleU(params[0:3],0) + singleU(params[3:6],1) + doubleU(params[6:9],[0,1]) + singleU(params[9:12],0) + singleU(params[12:15],1)
a.m[:].run(shots=100)
Counter({'11': 41, '00': 34, '01': 17, '10': 8})

このように回路ができました。今後はなるべくこの回路を使って計算をするようにしたいと思います。以上です。

© 2025, blueqat Inc. All rights reserved