common.title
Cloud support

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
Fortune telling app
Annealing
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

【パーセプトロン】量子コンピュータの2量子ビットだけで16枚の画像を認識する

Yuichiro Minato

2021/02/15 00:43

#量子ゲート

はじめに

イタリアでIBMの量子コンピュータを利用してパーセプトロトンを実装し、少ない量子ビットで多くの画像を認識したとあります。この仕組みをみてみたいと思います。

参考

こちらのサイトが参考になりました。

https://ai-scholar.tech/2018/12/26/ai-rixyousi-51/

論文はこちらを参照します。

An Artificial Neuron Implemented on an Actual Quantum Processor
Francesco Tacchino,1, ∗ Chiara Macchiavello,1, 2, 3, † Dario Gerace,1, ‡ and Daniele Bajoni4, §
https://arxiv.org/pdf/1811.02266.pdf

回路の概要

回路の概要はシンプルです。画像認識を基にしたパターンを入力として、あるパターンを認識させます。その結果を01のバイナリで分類します。

下記は(a)が通常のニューラルネットワーク構造で、入力値に対して、wの結合荷重で足し合わせて活性化関数に通して判断させますが、今回は(b)のように、入力に専用の量子回路Uiを作成。その後に認識回路でUwを通して、活性化関数の代わりにCX回路をベースにした制御回路で分類します。

1.png

https://arxiv.org/pdf/1811.02266.pdf

上記はAncillaビットの0か1で画像を判断します。

具体的な回路

3.png

https://arxiv.org/pdf/1811.02266.pdf

上記は論文からの具体的な回路です。まずは認識するためのパターンを準備します。今回は2量子ビットですが、全部で16枚認識できます。二進数表記に対応させたパターンを下記にまとめておきます。

4.png

早速回路を確認してみましょう。今回は例題にある回路をみてみます。

ステップの確認

全体ステップの確認です。

重ね合わせ回路の作成 入力回路をZとCZで実現 認識回路をZとCZで実現 重ね合わせを解除、Xゲートを全体にかける 制御回路で判断用ビットに移して判断

となります。全体の回路は下記の通りです。

5.png

最初は量子ビットは両方とも0からスタート。Hゲートを両方にかけることで、状態ベクトルが変化します。

(1111)\left( \begin{array}{c} 1 \\ 1 \\ 1 \\ 1 \end{array} \right)

次にZゲートは単位行列Iとのテンソル積で表現された後に状態ベクトルに作用すると、

IZ=(1000010000100001)I \otimes Z = \left( \begin{array}{c} 1&0&0&0 \\ 0&-1&0&0 \\ 0&0&1&0 \\ 0&0&0&-1 \end{array} \right)

これを作用させると、

(1111)\left( \begin{array}{c} 1 \\ -1 \\ 1 \\ -1 \end{array} \right)

そのあとCZの行列表記は、

CZ=(1000010000100001)CZ = \left( \begin{array}{c} 1&0&0&0 \\ 0&1&0&0 \\ 0&0&1&0 \\ 0&0&0&-1 \end{array} \right)

となるので、適用すると最終的に状態ベクトルは、

(1111)\left( \begin{array}{c} 1 \\ -1 \\ 1 \\ 1 \end{array} \right)

これは、+1を白、-1を黒に対応させた上記のパターンと一致します。

認識回路と活性化関数

上記は同様に7の場合のパターンを回路を使って再現している。もし、入力と認識回路が全く同一なら、入力の際に反転している部分が打ち消しあい、最終的に状態ベクトルはすべて+1の状態になる。そして、Hゲートを全体に適用すると、0に戻る。最後に全てにXゲートを適用し、0から1に反転。

1を制御ゲートで拾って余剰量子ビットに割り当てることで、パターンが全く同じ場合にのみ1が反応するようになっている。活性化関数は制御ゲートで代用し、すべての回路の結果が1の時のみ同一と判断できる。

結構基本的な量子計算が活用されている。実機のIBMで基本的な位相計算を使ってできるということなので、試してみたい方は試してみるのがいいのではないでしょうか。

blueqatで実装してみる

早速実際のプログラミング方法を見てみます。

from blueqat import Circuit Circuit(3).h[:2].z[1].cz[0,1].z[:2].cz[0,1].h[:2].x[:2].ccx[0,1,2].m[2].run(shots=100)
Counter({'000': 100})

0となりましたので、認識は成功し、違うパターンが検出されました。最後の量子ビットを見ます。回路を変えてわざと同じパターンにしてみます。

Circuit(3).h[:2].z[1].cz[0,1].z[1].cz[0,1].h[:2].x[:2].ccx[0,1,2].m[2].run(shots=100)
Counter({'001': 100})

1が出たので同じパターンとして認識されました。

まとめ

まだまだ基本的な問題しか解けませんが、2量子ビットだけでたくさんのパターンが実装できました。

実際には行列計算でHゲートで実現した重ね合わせの量子状態に対して位相反転で-1を作りだし、結果として2つの量子ビットに対応する2^2の状態ベクトルに対して、最大で2^2^2=16パターンを認識できました。

量子計算がきちんとできればあまり難しくないということで、面白い問題でした。

© 2024, blueqat Inc. All rights reserved