Nobisuke
Dekisugi
RAG
Privacy policy
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回路をベースにした制御回路で分類します。
https://arxiv.org/pdf/1811.02266.pdf
上記はAncillaビットの0か1で画像を判断します。
https://arxiv.org/pdf/1811.02266.pdf
上記は論文からの具体的な回路です。まずは認識するためのパターンを準備します。今回は2量子ビットですが、全部で16枚認識できます。二進数表記に対応させたパターンを下記にまとめておきます。
早速回路を確認してみましょう。今回は例題にある回路をみてみます。
全体ステップの確認です。
重ね合わせ回路の作成 入力回路をZとCZで実現 認識回路をZとCZで実現 重ね合わせを解除、Xゲートを全体にかける 制御回路で判断用ビットに移して判断
となります。全体の回路は下記の通りです。
最初は量子ビットは両方とも0からスタート。Hゲートを両方にかけることで、状態ベクトルが変化します。
次にZゲートは単位行列Iとのテンソル積で表現された後に状態ベクトルに作用すると、
これを作用させると、
そのあとCZの行列表記は、
となるので、適用すると最終的に状態ベクトルは、
これは、+1を白、-1を黒に対応させた上記のパターンと一致します。
上記は同様に7の場合のパターンを回路を使って再現している。もし、入力と認識回路が全く同一なら、入力の際に反転している部分が打ち消しあい、最終的に状態ベクトルはすべて+1の状態になる。そして、Hゲートを全体に適用すると、0に戻る。最後に全てにXゲートを適用し、0から1に反転。
1を制御ゲートで拾って余剰量子ビットに割り当てることで、パターンが全く同じ場合にのみ1が反応するようになっている。活性化関数は制御ゲートで代用し、すべての回路の結果が1の時のみ同一と判断できる。
結構基本的な量子計算が活用されている。実機のIBMで基本的な位相計算を使ってできるということなので、試してみたい方は試してみるのがいいのではないでしょうか。
早速実際のプログラミング方法を見てみます。
Copy 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となりましたので、認識は成功し、違うパターンが検出されました。最後の量子ビットを見ます。回路を変えてわざと同じパターンにしてみます。
Copy 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