論文版はてなブックマーク(その9)の話。

はじめに。

==========

ちょくちょく宣伝しているが、新型コロナウイルスの論文を使って、「研究者がどうやって未知のウイルスの正体を暴くのか?」について説明した文章を一般の人向けに書いたので興味のある方はどうぞ。
blog.sun-ek2.com

加えて、PCR検査の仕組みと、それに代わるかもしれないゲノム編集技術を応用した新しい検査方法に関する論文を一般向けに説明したので興味のある方はどうぞ。
blog.sun-ek2.com

==========

「論文版はてなブックマークとは何ぞや?」という話は、以前したので、以下の文章を参照のこと。
blog.sun-ek2.com


前回の話はこちらから。
blog.sun-ek2.com






Classification with Quantum Neural Networks on Near Term Processors

arxiv.org


著者・雑誌名。

Edward Farhi, Hartmut Neven
arXiv, August 2018



内容。

量子ニューラルネットワークで分類問題を解くという話。分類問題っていうのは、犬の写真と猫の写真を入力して、それぞれを正しく犬と猫に判別するというもの。この論文では、手書きの数字のデータセットを使っていた。「6」という手書きの数字を正しく「6」と認識するのも分類問題。


この量子ニューラルネットワークを実際に動かせる量子コンピュータは、今のところ存在しないので、古典(従来の)コンピュータを量子コンピュータのエミュレータとして使って、量子ニューラルネットワークの性能を調べていた。論文のタイトル(~Near Term Processors)にもある通り、著者たちは、近々、量子ニューラルネットワークを実際に動かすことのできる量子コンピュータが開発されるのではないかと期待している。


量子ニューラルネットワークは、ユニタリ変換を行う素子が多層になって並んだもの(詳しくは図1を参照のこと)。層の数が多ければ、量子ディープラーニングと俗に呼ばれる。ユニタリ変換は、1量子ビットに対して行われるのではなく、ランダム、もしくは規則的に2量子ビットを選んでまとめて行われる。そして、ユニタリ変換を何回も行った後に出力量子ビットにパウリ行列を作用させて結果を得る。ユニタリ変換は、(式8)のようにパウリ行列のテンソル積の線形和を指数の肩に載っけた形で定義する(誤差逆伝播のため)。


損失関数は、(式6)のように定義する。損失関数は、1から出力量子ビットにパウリ行列を作用させて得られた値の期待値に正解ラベルをかけたものを引いている。正解ラベルは、-1と1を取り、期待値は、-1から1の間を取る。正解ラベルと期待値が一致していれば、損失関数は0になり、完全に違えば、最大値の2を取る。


次に量子ニューラルネットワークが任意のブール関数(今回は0, 1ではなく-1, 1)を表せることを示していた。量子ニューラルネットワーク全体のユニタリ変換を(式9)のように表すと、(式10)を経て、(式11)が得られる。出力量子ビットにパウリ行列を作用させた値の期待値がきちんと任意のブール関数の出力になっていることが分かる。
(式10の導出は、パウリ行列の行列指数関数の公式を使えばできる)


この場合、2値が-1と1なので、(式12)以降は、それを0と1の場合で行っている(Reed–Muller標準型のことは分からん...)。具体的な例として、サブセットのラベルを足し合わせたら奇数になるか偶数になるか判定する問題、サブセットに-1と1のどちらが多いか判定する問題を挙げていた。


次は、量子ニューラルネットワークの学習の話。これは、古典ニューラルネットワークと同様に勾配降下法で行う。(式8)のようにユニタリ変換を定義しておけば、損失関数の勾配は(式25)のようになる。この損失関数の勾配は、量子ニューラルネットワークに使う量子ビット列と別個に補助量子ビットを使うことによって測定することができる(式26~式29)。後は、得られた勾配に従って、パウリ行列のテンソル積の線形和の係数を少しだけ弄ればいい。


先ほどのサブセットのラベルを足し合わせたら奇数になるか偶数になるか判定する問題、サブセットに-1と1のどちらが多いか判定する問題、MNISTデータを使った手書き数字認識、(式46)で定義されているハミルトニアンを量子ビット列に作用させたときに得られる測定値の期待値の正負判定問題などを題材にして、古典(従来の)コンピュータを量子コンピュータのエミュレータとして、量子ニューラルネットワークで解いていた。


MNISTのデータは、28ピクセル×28ピクセルのやつではなくて、4ピクセル×4ピクセル。入力された数字が「3」であるか「6」であるかを判定していた。量子ニューラルネットワークであっても、手書き文字という日常のデータが取り扱える。また入力データを重ね合わせ状態で量子ニューラルネットワークに加えると、少ないデータ数で学習することができる。また、損失関数の値は、入力データを重ね合わせることによって、滑らかに減少する。


MNISTのデータといった日常的なデータセットを取り扱えるのに加えて、もちろん最後の題材のような量子的なデータセットも取り扱うことができる。


ちなみにこの論文の量子ニューラルネットワークは、2量子ビットをまとめて、ユニタリ変換しているが、その量子ビットはランダムに選ぶのではなく、入力量子ビット、出力量子ビットのペアにすることによって、性能が上がる。また、ユニタリ変換を作るときに使うパウリ行列も各層ごとに統一させた方が性能が上がるらしい(ある層のユニタリ変換は、 \displaystyle σ_{X} \otimes σ_{X}だけで作って、別の層は \displaystyle σ_{X} \otimes σ_{Z}で作るといった感じ)。





Quantum Generative Adversarial Networks for learning and loading random distributions

www.nature.com


著者・雑誌名。

Christa Zoufal, Aurélien Lucchi, Stefan Woerner
npj Quantum Information, November 2019



内容。

量子敵対的生成ネットワーク(qGAN)によって、任意の量子状態を作ろうという論文。この論文では、quantumに相当するqは小文字。全く関係ないけど、qPCRみたい。


量子コンピュータは、古典(従来の)コンピュータで取り扱われる「ビット列」を取り扱うことができない。量子コンピュータに入力するデータは、「量子ビット列」でコードされていなければならない。それぞれの計算基底を思いのままに重ね合わせた量子状態を作る手法として、この論文では量子敵対的生成ネットワークを提案している。


量子敵対的生成ネットワークは、Generatorを量子回路で実装し、Discriminatorを古典回路(従来のコンピュータ)で実装する。 損失関数は、古典(従来の)敵対的生成ネットワークと同じ。式(8)はGeneratorの損失関数(符号が逆な気がする...)、式(9)はDiscriminatorの損失関数で、ともに最大となるように学習する(一般的な慣例とは、定式の仕方がちょっと違う)。


本物のデータは、古典回路上で、作りたい量子状態の確率振幅に対応する確率分布からデータをm個、サンプリングして、Discriminatorに与える。偽物のデータは、量子回路上で、Generatorによって生成された量子状態をm回、測定して、Discriminatorに与える。


量子回路上のGeneratorは、 \displaystyle R_{Y}\left(θ\right)ゲートが並んだ層と \displaystyle CZゲートが並んだ層が交互に続いている。Generatorの学習は、 \displaystyle R_{Y}\left(θ\right)ゲートのθを最適化することによって行われる(サプリ 式(3)~式(7)参照)。古典回路上のDiscriminatorの学習の仕方は、通常のGANと同様。


Generatorの量子状態生成に必要なノイズベクトルは、計算基底が一様に重なりあった量子状態、正規分布状に重なりあった量子状態、もしくはランダムに重なりあった量子状態から測定を行い、取得する。これら3種類の量子状態は、どれもqGANを使わずとも、いくつかの量子ゲートによって実現できる状態である。そこから \displaystyle R_{Y}\left(θ\right)ゲートが並んだ層と \displaystyle CZゲートが並んだ層、 \displaystyle CZゲートが並んだ層にノイズベクトルを通して、欲しい量子状態を生成する。論文では、ノイズベクトルから、計算基底がLog-normal、Triangular, Bimodal状に重なりあった量子状態を生成していた。


qGANのシミュレーションによると、Generatorのネットワークが深いほど、良い結果が得られる。また、最初にノイズベクトルを得るために必要な初期の量子状態は、qGANの出力に影響を与える。例えば、Log-normal状に重なりあった量子状態を得たいのであれば、ランダム状に重なり合った量子状態ではなく、正規分布状に重なり合った量子状態からノイズベクトルを得るべきである。


最後に「IBM Q Boeblingen」という本物の量子ゲート型の量子コンピュータ上で、qGANを学習させた結果を載せている。qGANは、実際の量子コンピュータ上で走らせてもシミュレーションと同様に望みの量子状態を作り出すことができる。





Recurrent Quantum Neural Networks

arxiv.org


著者・雑誌名。

Johannes Bausch
arXiv, June 2020



内容。

量子リカレントニューラルネットワークの話。タイトルは、リカレント量子ニューラルネットワークなのだが、本文では量子リカレントニューラルネットワークって書かれていて謎。何故、タイトルだけ語順を変えたんだろう...。


このネットワークの構成要素は、量子ニューロン。以下の文章に分かりやすくまとめられている。
qiita.com


上の文章で主に説明されているのは、次数が1の量子ニューロン。この量子ニューロンの出力を制御ビットにして、iYゲートを作用させ、その後に量子ニューロンのエルミート共役にあたる量子回路をくっつけることによって、次数が2の量子ニューロンができる。これを何回も繰り返することで、次数がkの量子ニューロンになる。


次数がkの量子ニューロンに \displaystyle |0\rangleを入力すると、出力量子ビットの \displaystyle |0\rangleの確率振幅がsigmoid関数(非線形関数)っぽくなる。量子ニューロンの中では、入力ビット列を制御量子ビットに位相ゲートで補助ビットの位相を変える。そして、その位相の変わり具合が閾値を超えると、出力量子ビットを測定したときに一気に \displaystyle |0\rangleが得られる確率が上がる。kの値が大きくなる程、関数の傾きが急になる。


量子ニューロンを組み合わせて、まずは図4のようなcellを作る。cellは、input stage、work stages、output stageの3つからなる。input stageでは、入力量子ビットの状態によって、量子ニューロンが発火し、cellの内部状態が変化する。その後、work stagesに移行する。input stageの違いは、入力量子ビットに依存しない位相ゲートがあることと、入力量子ビットに加えて、cellの内部状態を量子ニューロンの制御量子ビットにしていること。output stageでは、cellの内部状態を補助量子ビットとして、量子ニューロンにて、出力量子ビット列を生成する。


量子リカレントニューラルネットワークは、このcellが大量につながったもの。入力と出力は、それぞれのcellで独立しているが、cellの内部状態は一個前のcellの状態をそのまま引き継ぐ。これは、古典(従来の)リカレントニューラルネットワークと同じ。


その後は、色々な問題に対して、量子リカレントニューラルネットワークのシミュレーションを行っていた。リカレントニューラルネットワークで画像認識をするのはあまり一般的ではないが、この論文では、MNISTの手書き文字の分類をやっていた。Cellの数は、1個だったので、あまりリカレント感はない...。画像認識に加えて、GANがやるような手書き文字生成タスクも量子リカレントニューラルネットワークで取り組んでいた。


最後にDNA配列という長いデータを用いたシミュレーションを行っていた。Uがランダムに一つ入ったDNA配列(A、T、G、C)を入力したときに、Uの次の塩基を出力するように学習させるというもの。量子リカレントニューラルネットワークは、RNNやLSTMといった従来のモデルよりも少ないバッチ数で、効率よく学習することができる(塩基長が長くなっても、validation lossが一定水準まで到達するのに必要なバッチ数が変わらない。他のモデルは、DNA配列が長くなるにつれて、必要なバッチ数が増えていく)。





Quantum convolutional neural networks

www.nature.com


著者・雑誌名。

Iris Cong, Soonwon Choi, Mikhail D. Lukin
Nature Physics, August 2019



内容。

量子畳み込みニューラルネットワークを用いて、量子多体系の問題に応用したり、量子誤り訂正を行ったりしている論文。実際に解いている量子多体系の問題については、知識がなくてよく分からなかった...。


この論文で提案されている量子畳み込みニューラルネットワークは、「畳み込み感」がない...。


畳み込みニューラルネットワークは、画像認識とかでよく使われるニューラルネットワーク。畳み込み層とプーリング層、それから全結合層からなる。畳み込み層では、入力画像とフィルタで畳み込み演算を行い、特徴マップを生成する。その後、プーリング層にて次元が圧縮される。畳み込み層とプーリング層を交互に繰り返し(交互じゃなくても良かった気がする)、特徴抽出と次元圧縮を行った後、全結合層にて、結果が出力される。学習するのは、フィルタと全結合層のパラメータ。


この論文で具体的に示されていた量子畳み込みニューラルネットワークの畳み込み層は、制御位相ゲート、Toffoliゲート、SWAPゲートからなっていた。制御位相ゲート、Toffoliゲートはともに入力データから1つ、もしくは2つを制御量子ビットにして、他の1量子ビットをユニタリ変換していた。


...ただ、この畳み込み層は、畳み込みではないと思う。


プーリング層では、量子ビット列の一部をブロッホ球のx方向に測定することによって、次元を落としている。測定される量子ビットは、一種の制御量子ビットとして作用する。測定された値が-1であれば、他方の量子ビットにZゲートを作用させる。結合層は、制御位相ゲートからなっており、ゲートを通した後に残りの量子ビット列をブロッホ球のx方向に測定して、最終結果を得る。


量子畳み込みニューラルネットワークを使うと、従来の手法よりも少ないサンプル数で量子多体系の問題を解けるらしい。


後半は、量子誤り訂正の話をしていた。目的の1量子ビットと8つの補助量子ビットをまとめてユニタリ変換で、エンコードし、エラーを加えた後に、エンコードしたものをデコードするというもの。エラーの入れ方は、3通り。
1.それぞれの量子ビットに \displaystyle p_{x} \displaystyle p_{y} \displaystyle p_{z}の確率でXゲート、Yゲート、Zゲートを作用させる( \displaystyle p_{x}=p_{y}=p_{z})。
2.1とほぼ同じだが、それぞれのゲートが作用する確率が違う( \displaystyle p_{x}≠p_{y}=p_{z})。
3.2と同様のエラーに加えて、 \displaystyle p_{xx}の確率で \displaystyle X_{i}X_{i+1}をエラーとして作用させる。


1、2の場合、量子畳み込みニューラルネットワークと既存の方法の性能は、大体同じくらい。3の場合、量子畳み込みニューラルネットワークの方が既存の方法(Shor code)よりも性能が高い。





Quantum random access memory

arxiv.org


著者・雑誌名。

Vittorio Giovannetti, Seth Lloyd, Lorenzo Maccone
arXiv, March 2008



内容。

qRAMの話。ランダムアクセスメモリの量子版。bucket-brigade architectureというアドレッシング手法を提案している。


RAMは、二分木の枝分かれした先にデータを保存している(図1)。0を左下のエッジ、1を右下のエッジとすると010は、root nodeから左下→右下→左下のエッジのことを表す。


このアドレッシング手法を直接qRAMに持ってくるとなると困難が発生する。アドレスレジスタに入っている量子ビットとqRAMのルーティングをする素子は、量子もつれ状態になければならないが、上記の手法だとアドレスレジスタがn量子ビットだった場合、おおよそ \displaystyle 2^{n}個の素子間で量子もつれ状態を保たなければならない。1つの素子のもつれ状態が壊れるたびに正確性は、2分の1ずつ減少していく。


これに代わるのが、bucket-brigade architecture。先ほどは、ルーティングの素子が取る状態は、「右」と「左」の2通り。bucket-brigade architectureの素子は、「右」と「左」に加えて「待ち」の状態を取る。初期状態の二分木の各状態は、全て「待ち」。アドレスレジスタの最初の量子ビットによって、「待ち」状態は、「右」か「左」の状態に変わる。その後、root nodeの「右」(もしくは「左」)に接続されているノードの状態が2つ目のアドレスレジスタの量子ビットの状態に合わせて変わる。従来法では、アドレスレジスタがn量子ビットだった場合、おおよそ \displaystyle 2^{n}個の素子間で量子もつれ状態を保たなければならなかったが、今回の場合、 \displaystyle n個で済む。


アクセスレジスタ上に載っているアドレスがr個の状態の重ね合わせである時、データにアクセスするためには、r個のルートだけで十分である。従来法は、必要のないルートの素子までも量子もつれ状態を維持させなければならないので、実装が難しくノイズに弱い構造であったが、新手法の場合、実際に通るパスの素子だけで量子もつれ状態を作るため、実装が前者よりも簡単でノイズに強い。もし \displaystyle ε×[素子数]の量子もつれ状態が壊れたとすると正確度は、 \displaystyle εn下がる。これは、従来法よりもノイズに強いことを表している。


最後に粗々とした実装案が提示されていた。ルートの各素子は、トラップしたイオンで実装する。基底状態が「待ち」、2つの励起状態がそれぞれ「右」、「左」に対応する。アドレスレジスタに入っている量子ビットとqRAMのルートを通って情報を取ってくる媒体(bus)、更にトラップしたイオンのエネルギー状態を操作するために光子が使われる。光子が「待ち」状態のイオンに作用すると、その偏光状態によって、「右」もしくは「左」状態に遷移する。一方で、すでに「右」(「左」)状態になっているイオンに光子が作用すると、エネルギー準位が上がり、「右’」(「左’」)状態になり、その後、光子を「右」(「左」)に放出し、「右」もしくは「左」に戻る。これを繰り返すことで、busは、目的の番地にたどり着き、データを取ってくることができる。


この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。もちろん任意です。
ofuse.me


ブログランキング・にほんブログ村へ
にほんブログ村