###### tags: `量子計算` # 量子回路学習(QCL) QCL(Quantum Circuit Learning)とは,量子コンピュータを用いて機械学習を行うためのアルゴリズムである. 機械学習とは,ニューラルネットワークを用いて入力に対して出力する関数を近似して,新しいデータに対する結果を予測する作業である. QCLでは,**ニューラルネットワークを量子回路に置き換える**.QCLのメリットとして,指数関数的に多い基底による表現力の向上や,ユニタリー性による過学習の防止などがある. > 任意の関数をユニタリー行列からどうやって決める?読み取る. ## QCLの手順 1. 学習データ(入力データと教師データのセット)を準備する. 2. ゲート$U_{in}(x)$と$U(\theta)$を準備する. 3. 入力状態$\left|\psi_{in}\right>$を$\left|\psi_{in}\right>=U_{in}(x)\left|0\right>$により生成する. 4. 出力状態$\left|\psi_{out}\right>$を$\left|\psi_{out}\right>=U(\theta)\left|\psi_{in}\right>$により計算し,そこから得られる期待値$M(\theta) = \left<\psi_{out}\right|\hat M\left|\psi_{out}\right>$を計算する. 5. コスト関数$L(\theta)$を定義し,それを最小化するような$\theta=\theta^*$を探す.コスト関数$L(\theta)$は,出力データ$y_i(\theta)=F_i(M(\theta))$を準備し,教師データとのズレ具合を表すように定義する. > コスト関数を定義する 6. $y(\theta^*)$が欲しい予測モデルである. まとめると,QCLは以下の式を$\theta$について最小化する問題に帰着できる. \begin{eqnarray} L\left(F(\left<0\right|U_{in}(x)^\dagger U(x)^\dagger(\theta)\hat M U(\theta)U_{in}\left|0\right>)\right) \end{eqnarray} > $\theta$はSU(n)における回転角という解釈でいい? ## 実装 ```python= import numpy as np import matplotlib.pyplot as plt from functools import reduce ``` ### ```python= ######## パラメータ ############# nqubit = 3 ## qubitの数 c_depth = 3 ## circuitの深さ time_step = 0.77 ## ランダムハミルトニアンによる時間発展の経過時間 ## [x_min, x_max]のうち, ランダムにnum_x_train個の点をとって教師データとする. x_min = - 1.; x_max = 1.; num_x_train = 50 ## 学習したい1変数関数 func_to_learn = lambda x: np.sin(x*np.pi) ## 乱数のシード random_seed = 0 ## 乱数発生器の初期化 np.random.seed(random_seed) ``` ## 学習データの準備 ```python= #### 教師データを準備 x_train = x_min + (x_max - x_min) * np.random.rand(num_x_train) y_train = func_to_learn(x_train) # 現実のデータを用いる場合を想定し、きれいなsin関数にノイズを付加 mag_noise = 0.05 y_train = y_train + mag_noise * np.random.randn(num_x_train) plt.plot(x_train, y_train, "o"); plt.show() ``` 機械学習では現実的な学習に備えて,理想的なフィッティング関数にノイズを付加させ,教師データを生成する. \begin{eqnarray} y_{train} = \sin (\pi x) + \mathrm{random}(x) \end{eqnarray} ## 入力状態の生成 \begin{eqnarray} U_{in} =&& \prod_j R_j^z\left(\cos^{-1}x^2\right) R_j^y\left(\sin^{-1}x\right) \\ =&& \exp\left(i \frac{\cos^{-1}x^2}{2} Z_j\right)\exp\left(i \frac{\sin^{-1}x}{2} Y_j\right) \end{eqnarray} > \begin{eqnarray} > R_x(\theta) = \exp\left(i\frac{\theta}{2}X\right) > \end{eqnarray} ## 古典的な機械学習 1. 学習データを準備する. 2. ニューラルネットワークを決定する. 3. コスト関数を定義して,それを最小化するようにニューラルネットワークを訓練し直す. ## 参考文献 [Quantum Native Dojo QCL](https://dojo.qulacs.org/ja/latest/notebooks/5.2_Quantum_Circuit_Learning.html) [Quantum Circuit Learning](https://arxiv.org/abs/1803.00745)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up