📚

振幅エンコーディング (1)

2022/10/07に公開

QRAMを用いた振幅エンコーディング

N次元ベクトル \bm{v} を確率振幅へエンコードしたい。

|\bm{v}| = \frac{1}{\|\bm{v}\|} \sum_{i} v_i \ket{i}
  1. QRAM操作を仮定し、 \bm{v} の各成分を n bit でビット列表示し、重ね合わせ状態で呼び出す。

    \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \ket{i} \ket{0^n} \xrightarrow{QRAM} \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \ket{i} \ket{b(v_i)}
  2. さらに m bit レジスタを用意し、 m bit 精度で \frac{1}{\pi}\cos^{-1}{(v_i)} を計算する。

    \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \ket{i} \ket{b(v_i)} \ket{0^m} \xrightarrow{Operation} \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \ket{i} \ket{b(v_i)} \ket{b(\frac{1}{\pi}\cos^{-1}{(v_i)})}

    なお、b(\frac{1}{\pi}\cos^{-1}{(v_i)}) は浮動小数点表示ではなく2進数表示で、

    \frac{1}{\pi}\cos^{-1}{(v_i)} \approx \sum_{k=0}^{m-1} 2^{-k-1} b_k \left(\frac{1}{\pi} \cos^{-1}{(v_i)} \right)

    となるビット列とする。

  3. \ket{b\left(\frac{1}{\pi} \cos^{-1}{(v_i)}\right)} を制御部とする制御 R_y(\pi\cdot2^{-k-1}\cdot2) ゲートをもう一つ用意した補助量子ビットに作用させる。
    \ket{\psi(v_i)} = \ket{i}\ket{b(v_i)} \ket{b\left(\frac{1}{\pi} \cos^{-1}{(v_i)}\right)} とすると以下のようになる。

    \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \left[ \ket{\psi(v_i)} \prod_{k=0}^{m-1} R_y\left( b_k \left(\frac{1}{\pi} \cos^{-1}{(v_i)}\right) \cdot 2^{-k-1} \cdot 2 \cdot \pi \right) \ket{0} \right] = \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \left[ \ket{\psi(v_i)} R_y\left( \sum_{k=0}^{m-1} b_k \left(\frac{1}{\pi} \cos^{-1}{(v_i)}\right) \cdot 2^{-k-1} \cdot 2 \cdot \pi \right) \ket{0} \right] \\ = \frac{1}{\sqrt{N}} \sum_{i=1}^{N} \left[ \ket{\psi(v_i)} \left( v_i \ket{0} + \sqrt{1-v_i^2} \ket{1} \right) \right]
  4. 補助量子ビットを測定し \ket{0} が測定(測定確率は\frac{\sum_i{v_i^2}}{N})されると下式の状態になる。

    \frac{1}{\sqrt{\sum_i v_i^2}} \sum_{i=1}^{N} \left[ v_i \ket{i} \ket{b(v_i)} \ket{b\left(\frac{1}{\pi}\cos^{-1}{(v_i)} \right)} \ket{0} \right]
  5. 逆演算により不要なレジスタの量子状態を初期化すると、振幅エンコーディングを行えたことが確認できた。

    \frac{1}{\sqrt{\sum_i v_i^2}} \sum_{i=1}^{N} \left[ v_i \ket{i} \ket{b(v_i)} \ket{b\left(\frac{1}{\pi}\cos^{-1}{(v_i)} \right)} \ket{0} \right] \xrightarrow{Operation^{-1}} \frac{1}{\sqrt{\sum_i v_i^2}} \sum_{i=1}^{N} v_i \ket{i} \ket{0^n} \ket{0^m} \ket{0}

実装

測定が入るのでつらい。測定なしでやりたい。データ木構造を用いた振幅エンコーディングであればユニタリ変換を連続で適用していってどうやらできるらしい。データ木構造を用いた振幅エンコーディングについてみていく。

Discussion