あえて否定的に量子コンピュータを見る

#はじめに
「新規技術あるある」ではございますが、近年、急速に「量子コンピュータ」がバズワード化してきており、成果が出る前から期待がダダ上がりな状態であります。
天の邪鬼な私としては、この状況に水を差したくてたまらない。ということで、あえて否定的に量子コンピュータを見てみましょう。

#私について
量子コンピュータに力を入れているベンチャー企業の[MDR](https://mdrft.com/)でエンジニアをしています。また、オープンソースの量子コンピュータシミュレータライブラリ[Blueqat](https://github.com/Blueqat/Blueqat)の開発をしています。

そしたら、水を差さずにポジショントークをしないといけないのではないか、と思われるかもしれません。けれど、我々はポエムではなくコードを書かないといけないので、できないものはできないと言わないといけません。
Qiitaではポエム書いてますけど、普段はコード書いてるんですよ！

#アニーリング、ゲート方式、NISQ
世間で「量子コンピュータ」と呼ばれているものは、大雑把に2種類に分けることができ、便宜上、1つはアニーリング方式、もう1つはゲート方式と呼ばれます。

この2つを、私は「電気ポット」と「電子レンジ」だと表現しています。どちらも、電気を使ってものを温める道具には違いないですが、仕組みも用途も作ってる会社も違います。なので、特にそれを使う人は、両者は違うものだと知っておく必要があります。

アニーリングと量子ゲートの違いについては、他にも記事がたくさん出ていますし、私も過去に[2017年アドベントカレンダー](https://qiita.com/gyu-don/items/9e175b6f93f4fb6a5064)と[2018年アドベントカレンダー](https://qiita.com/gyu-don/items/52e5341e459535045127)で2度書いていますので、そちらをご参照下さい。

さらに、ゲート方式についても2つに分けることができて、

1. 今すでにできている、小〜中規模の誤り訂正なしの量子ゲート方式
2. 現状はできていない、完成する見込みも今のところはない、誤り訂正のできる量子ゲート方式

があります。
近年、中規模の誤り訂正なしのハードウェアができはじめて、それに合わせたアプリケーションも開発されました。このような時代背景について、NISQ時代という言葉が提唱され(Noisy Intermediate-Scale Quantum computerの略)、こういった特徴を持つハードウェアや、こういったハードウェアで動くアプリケーションもNISQという風に呼ばれています。

#誤り訂正のできる量子ゲート方式が実現するもの
まずは、夢のある話からしましょう。

まだ存在していない、どう作ったらいいかも分かっていない、誤り訂正のできる量子ゲート方式の量子コンピュータは、既存のコンピュータを理論上、上回る性能を持っています。

と言っても、今あるCPUのクロック周波数よりも速い、という意味ではありません。
[計算複雑性](https://ja.wikipedia.org/wiki/%E8%A8%88%E7%AE%97%E8%A4%87%E9%9B%91%E6%80%A7%E7%90%86%E8%AB%96)の観点から、利点があると考えられています。

計算複雑性についてざっくり言うと、解きたい問題によっては、問題の規模が大きくなると、急速に計算が大変になり、手に追えなくなるということです。量子コンピュータを使うと、問題の種類によっては、計算が大変になる度合いがマシになり、より大きい問題が解けます。

計算複雑性は、既存のコンピュータではどうしても乗り越えられない壁でした。
量子コンピュータは、一部の問題とはいえ、その壁を乗り越えられる非常に夢のある技術です。

量子コンピュータで解ける問題として非常に有名なのが素因数分解です。
素因数分解では、分解したい数字の桁数が増えると、計算は急速に大変になります。量子コンピュータを使うと、大変になる度合いがマシになるので、より少ない労力で大きな数字が素因数分解できるようになります。

問題の規模が大きく、かつ、量子コンピュータに適したアルゴリズムがあれば、量子コンピュータで解くと速くなりますが、全ての計算が量子コンピュータで速くなるわけではありません。
こういった性質は、GPUでの計算(CUDAなど)と似ているかもしれません。

なので、仮に量子コンピュータが実用化したら、既存のコンピュータを完全に置き換えるかというと、そもそもメリットがないので置き換わらないと思います。
恐らくは、当面はGPUでの計算のように、特殊な計算をする場合に使う形になるでしょう。

# 量子アニーリング方式が実現しているもの
量子アニーリング方式は、組み合わせ最適化問題に特化したマシンだとよく言われます。
実際そのとおりなのですが、その解き方が「メタヒューリスティックス」であることには注意が必要です。

組み合わせ最適化問題を解く手法は、3種類に分けることができます

1. 最適解(文字通り「最適」な答え)を厳密に求められる手法
2. 厳密な最適解が求められるとは限らないが、最適解と比べてどれくらいの悪さでおさまっているかが分かる、精度保証付き近似手法
3. 厳密な最適解が求められるとは限らず、精度の保証もない発見的手法(メタヒューリスティックス)

量子アニーリング方式は3に分類されます。

上の書き方だと、3は、全くのデタラメで、何の意味もないような雰囲気も感じられますが、実際はそんなことはなく、実用上は割といい感じの答えを出してくれる場合も結構あります。

厳密な最適解を求める手法は、メタヒューリスティックスと比べて計算に時間がかかることが多く、「そんなに時間かけるくらいなら、厳密でなくてもいいからメタヒューリスティックスでいい感じの答えが欲しい」場合は、実用上は非常によくあります。

けれど、量子アニーリングと厳密な最適解を求める手法と比べて「スパコンでは解けない問題が一瞬で解けた」のように言うのはフェアではありません。
最適なのかどうか分からない答えを出すよりも、厳密に最適だと分かっている答えを出すほうがずっと大変なのは当然です。

残念ながら、量子アニーリングについては、そういった紹介をよく目にします。

では、量子アニーリングと他のメタヒューリスティックスと比較したら、どっちが速いのか。これについては、非常に微妙です。
実用的な問題で、量子アニーリングが他のメタヒューリスティックスよりも効率がいいと十分に示された問題は、今の所はないという認識です。

それでも、問題を作って投げてみたら、いい感じに解けることも結構あるので、今のところは、量子アニーリングは特別な何かではなく、そこそこいい感じのメタヒューリスティックスのひとつ、と見たらいいんじゃないかな、という感想です。

#小〜中規模の誤り訂正なしの量子ゲート方式が実現しているもの
発展途上で、現状は、実用的な問題を何も解けていません。

まず、中規模(数十〜数百量子ビット程度を想定。現状できているハードウェアよりは量子ビット数が多い)では、今のエラーの多さでは誤り訂正ができません。
誤りがあると、素因数分解などの、たくさんのゲートが必要な問題は解けません。
また、量子状態が壊れたら直せないので、量子状態が壊れない間の短時間の計算しかできません。

なので、NISQのハードウェアでは、それ以前に開発された、誤りのないハードウェアで動くはずのアルゴリズムの多くは使えません。

近年は、少ないゲートで計算をして、従来のコンピュータと組み合わせて使うタイプのアルゴリズムが開発されています。

ざっくり言うと、利用するゲートを、パラメータによって変えられるようにします。こうすることで、パラメータにより量子コンピュータでの計算結果を変えられます。
そして量子コンピュータでの計算結果を従来のコンピュータに与えてパラメータ調整を行い、再度量子コンピュータにパラメータを与えて計算結果を従来のコンピュータに与えて……を繰り返します。

パラメータによって、量子化学計算で必要になる電子配置や、組み合わせ最適化問題を解くためのイジング模型の状態を量子コンピュータ内に表現しています。

手法としては面白いのですが、量子ビット数が少ないと、量子コンピュータでやるメリットが出ません。
一方で多数の量子ビットを使う問題では、大抵の場合はパラメータも増えてしまいます。
パラメータが増えると、パラメータ調整をして量子コンピュータに計算させる回数が増えてしまうので、計算が大変になってしまいます。

そういった手法を使った論文では、パラメータの初期値をどうしているかが書かれていることは稀です。求めたいパラメータに近いものを初期パラメータを選んで最適化しているという話は非常によく聞きます。

正直、本末転倒ですが、かといって、初期パラメータをランダムにしたところで、最適なパラメータを求めるために延々と繰り返し計算をしても、それはそれで本末転倒です。

しばらくは、どのようにパラメータを求めたのか分からない不思議な「やってみました」系論文が出続けるとは思いますが、既存手法の延長線上にあるもの、ないもの、両方の観点から、こういった欠点を克服する新たな手法の開発が急務かと思われます。

ほんと、これなんとかしたい。

# おわりに
否定的な話をいっぱいしましたが、それでも、量子コンピュータは夢のある技術だと思っています。
物理学の概念によって、計算の概念を拡張し、今まで超えられなかった壁が超えられるようになる。本当に面白いことです。

また、いつ来るか分からない未来に役立つものを作るだけじゃなく、今役立つものを作ることも、我々の任務かと思って、日々やっていってます。
けれど、こういう現状があるんだよ、という話は、特にエンジニアの皆さんには知っておいてほしい、と思っています。

量子コンピュータは全人類がまだ初心者で、誰も理解できていません。
ていうか、量子コンピュータを完全に理解した人がいたとして、それで今のこの状況だとしたら、量子コンピュータ完全にヤバいです。終わってます。
誰もが初心者の今こそ、はじめるチャンスです。

シミュレータなら、手元のパソコンで簡単に動きます。
`pip install blueqat` で、シミュレータがインストールできます。
[日本語のチュートリアル](https://github.com/mdrft/Blueqat_tutorials_ja/tree/master/docs)も公開しています。

私のように仕事にしてしまうかはともかく、量子情報の世界はなかなか面白いですよ。