弊社は量子コンピュータの企業です。
さまざまな仕事がありますが、今はクラウドサービスを中心として、Amazon社の提供する量子コンピュータとNVIDIA社の提供するGPUシミュレータを使いこなしながら、機械学習と最適化アプリを提供しています。
よくニュースで見る量子コンピュータは新しい原理で動作するコンピュータで、粒と波を切り替えて計算します。
量子ビットと呼ばれる単位を持っていますが、量子ビットはこれまでのコンピュータと異なるデータの持ち方をします。球の表面のデータを操作しながら計算をするものです。
プログラミングは、この球の表面のデータを回転を通じて操作をします。XとかZとかはその回転させる軸に相当しています。これを音符の楽譜のように時間ごとに記述します。
この音符を書くようにするといろんなアプリが作れるのですが、理想的な量子コンピュータ(FTQC)と今の現実的にエラーの多い量子コンピュータ(NISQ)でちょっと作り方が異なります。今回は特に近年しばらくはエラーのある量子コンピュータを使わないといけないので、オレンジ色のところのアプリを考えてみます。
量子コンピュータのプログラミングどうすればいいの?
基本的には「ベクトル」と「行列」を拡張した「テンソル」計算だと思えば良い。ただ、普通はなんでもテンソルは使えるけど、使えるベクトルと行列に制限がある。その前にテンソルを学ぶ。テンソルは下記のような感じです。
ちなみに今までの量子コンピュータの計算方法を知っている方は、このような量子状態を想定して量子ゲートを掛けるような計算を覚えていると思います。
これまでの量子コンピュータの計算は、
量子ビットに対して量子ゲートと呼ばれる音符を書いていきます。これからは、一旦量子ビットや量子ゲートは忘れて、同じテンソルとして腕の数が違う操作であるということだけ覚えておきます。
量子ビットはベクトルの形になっていて、0が出るか、1が出るかはベクトルの要素によってサイコロを振り、01が決まります。
量子ゲートはデータの回転操作に対応しますが、最初は行列であったとだけ覚えておけば大丈夫です。
量子回路はグラフ問題のように扱えて、腕の数だけに注目します。特に腕の数が多いところは計算量が増えるところと覚えます。
量子ゲートに相当する行列は腕4本に書き直すこともできます。また、大きなテンソルは分解もできます。上記腕が四本のテンソルは下記のように腕三本のテンソル二つに書き換えることもできます。腕の最大数が問題だったので、うまくやれば、これは計算量が減ることにつながります。
そして上記のテンソルのネットワークを順番に計算することで、最終的な答えを出すことができます。具体的な方法は今後説明していきます。ちょっと量子アプリについてみてみます。
量子コンピュータの勉強をしていると次何をすれば良いのかわからなくなるという声も聞きます。現状はいくつかのアプリに限られており、特にNISQでは、何かしらの行列の固有値・固有ベクトルを求める問題を解くことになります。
アプリを開発する際、ある問題設定をQUBOという行列で表した時に、その固有値問題を解くと問題を解いたことになります。
量子アルゴリズムはこの固有値を求めやすくするための手法として幾つかありますが、あるルールを使うと解きやすくなることもあるということで量子アニーリングやQAOAなどのアルゴリズムが提案されることがありますが、これはあくまで目安で、実際に解きやすい方法は自分で適当に探すことになります。
昨今の量子コンピュータは量子ビット同士の接続が限られていたりと理想的な量子コンピュータには程遠い状態ですので、理想的な理論は度々利用できないため、回路を簡略化したり、適当に作ったりして解けるように改造します。
ここでは実用的なアプリを解くための手法として量子コンピュータの計算を見直して、より新しい計算手法を適用するように色々工夫して記事としてお届けしたいと思います。以上です。