@yuichirominato 2018.12.01更新 1631views

世界で二番目にやさしい量子コンピュータ入門

量子ゲート 量子コンピュータ

はじめに

昨今量子コンピュータが話題になっています。量子コンピュータは従来式の既存コンピュータに対して新しい方法で、速度向上をもたらし、これまで原理的に解けなかった問題を解くということを目的としています。名前も量子コンピュータでとてもすごそうな気がします。材料や創薬の計算、暗号の解読などのキラーアプリケーションが話題です。

どうでもいい余談ですが、「グランドイリュージョン2」という映画ではマジシャンが量子コンピュータのチップを奪おうとします。
https://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%A9%E3%83%B3%E3%83%89%E3%83%BB%E3%82%A4%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3_%E8%A6%8B%E7%A0%B4%E3%82%89%E3%82%8C%E3%81%9F%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF

量子とは?

量子とは電子や光子など私たちの身の回りの物質よりもさらに小さい単位の物質のことです。とても小さいので私たちの身の回りで起こる現象と異なる不思議なルールが適用されます。

何が違うのか

量子の世界ではこれまでの物質や粒子に加えて、波動の性質を持ちます。粒子と波動の両方の性質を持つので、それを理解した上でルールを作る必要があります。粒子は普通のビットとして扱い、波動は波の性質で重ね合わせることができます。量子は粒子としての物質と波動としての状態の両方の性質を持っています。

量子コンピュータとは?

従来式の既存コンピュータは私たちの世界のルールに則って設計されて開発されています。そのチップもサイズがどんどん微細化されていき、量子の世界に近づいています。しかし量子の世界では適用されるルールが異なるため、既存コンピュータは量子コンピュータの領域に入り込んでくることが困難です。ですので、その量子の世界で改めて、新しいルールで計算機を作ったのが量子コンピュータです。従来式の既存コンピュータとはそもそものルールが異なります。上記の粒子と波動の性質を活用して計算を行います。

量子ビットとは

量子コンピュータは演算装置です。量子の粒子と波動の両方の物質の性質を活用したのが、量子コンピュータですが、そのためには量子ビットと呼ばれる特殊な素子を用意します。それは量子の波動と粒子の性質を使い分けることが可能です。量子ビットは通常0と1の値の他に01の重ね合わせ状態などほかの状態を取ることができます。初期は0に初期化されており、そこから各種演算を適用して計算を行います。

量子の演算と操作

量子は一定の空間に閉じ込めて全体の状態が変わらないようにセットアップしてあげることにより、特定の演算ルールを適用できます。そのルールの中では全ての量子ビットの状態は保存されるので、0や1を操作できます。量子ビットの場合には量子の操作はユニタリ変換と呼ばれる操作で行われます。量子コンピュータではこのユニタリ変換がゲート演算と呼ばれて論理演算が割り振られています。

量子の測定と計算結果の取り出し

上記の量子ビットに量子の演算を行うと内部では波動の計算が行われています。その波動の状態は確定しておらず、測定を通じて計算結果を取り出すことができます。波動の状態を粒子の物質に確定するのが測定です。量子コンピュータではこの波動の状態を確定する際に、計算結果を取り出しますが、計算結果は毎回同じではありません。ある状態で結果は確率的に決まるので、測定するごとに計算結果が異なります。この異なる計算結果をなんども計算を行い、解の傾向をみることにより計算の妥当性を確認します。

量子アニーラについて

量子アニーラは量子コンピュータの量子ビットを部分的に機能活用したモデルで、初期化ができないが量子の重ね合わせは利用できるなど、機能限定的なモデルを活用して、主に組合せ最適化問題などを解くモデルです。今回ここでは量子アニーラには触れないので、下記を参照してくださいませ。

量子コンピュータって何なの? 本当に速いの?
https://qiita.com/gyu-don/items/52e5341e459535045127

量子アニーリング、イジングモデルとフレームワーク
http://blog.mdrft.com/post/6

量子コンピュータの汎用性と高速性について

量子コンピュータは従来式の既存コンピュータよりも速いと言われています。詳しい高速性に関しては下記を参照していただくとわかりやすいと思います。

量子コンピュータって何なの? 本当に速いの?
https://qiita.com/gyu-don/items/52e5341e459535045127

量子コンピュータでは「汎用性」と「高速性」があります。従来式の既存コンピュータと同様の計算ができる一方、全ての計算が早くなるわけではなく、特定の計算において波動の性質をうまくアルゴリズムで引き出してあげることで「高速性」を実現します。この高速性の出し方が今後の量子コンピュータの性能を引き出すための注視すべき性質となると思われます。

量子コンピュータの構成

量子コンピュータはざっくり分けてハードとミドルウェアとソフトウェアに分かれます。現在ではクラウド経由で量子コンピュータを世界中に提供するのが主流なので、クラウドの技術もミドルウェアに入れてみます。量子コンピュータのアプリケーションを作るソフトウェア、それをミドルウェアを通じてハードウェアで計算できるように処理してあげて、ハードウェアで実際に処理をします。その後処理された結果を再度ミドルウェアを通じてソフトウェア側に返します。

量子コンピュータは現在中央演算装置のみで、メモリなどの機能はありません。量子メモリはまだ技術的に難しいので演算を行なって、古典的なメモリを使って計算結果の格納や処理をします。

量子コンピュータ業界

量子コンピュータ業界は大きく分けて2つの領域に分かれます。1つはハードウェアとプラットフォームを提供する業界、そしてもう1つがアプリケーションやコンサルティングを提供する業界です。その他はハードウェア周りやクラウド周りの技術を提供する業界があります。

bohr technologyがとてもわかりやすいカオスマップを公開しています。


引用:https://www.bohr.technology/

図の右上がソフトウェア、下がハードウェアとプラットフォーム提供者です。Universalと書いてあるのが汎用型のマシンで、一番左側のSuperconductingが超電導量子ビットと呼ばれるもっとも実用化が進んでいる方式です。

プラットフォーム提供者がプラットフォームとミドルウェアを提供し、ソフトウェア開発者がその上でアプリケーションを開発しているというのが基本的な業界構造となっています。主に有名なプラットフォーム提供側としてIBM,Rigetti,Google,Alibabaなどがあります。

量子コンピュータの方式

量子コンピュータにはたくさんの方式があります。超電導量子ビット以外にも光量子コンピュータ、イオントラップ、量子ドット、トポロジカルなどです。光量子コンピュータは連続量プログラミングと呼ばれる量子ビットとは異なる計算原理を使っています。トポロジカルなども組紐理論が提案されておりユニタリ変換の方法が多少違います。実用化はまだ超電導量子ビット以外は実質的にまだなので、今後の技術推移動向を確認しながら活用を進めるのでいいと思います。

量子コンピュータのプログラミング

量子コンピュータのプログラミングは主にSDKと呼ばれる開発ツールで提供されます。開発ツールは基本的に無料で、プログラミングの言語はPythonと呼ばれる言語を利用します。Microsoft社はQ#と呼ばれる言語を利用しています。

IBM Q
https://www.research.ibm.com/ibm-q/

Rigetti
https://www.rigetti.com/

Microsoft
https://www.microsoft.com/en-us/quantum/

日本語ではMDR社の提供するBlueqatがあります(手前味噌)。
http://mdrft.com/blueqat/

量子コンピュータアプリケーション開発に物理学の知識は不要

量子コンピュータのアプリケーション開発は基本的に数学で進みますので従来のプログラミング方法とあまり変わりません。量子の波動の計算で少し統計的な知識が必要になりますが、基本はオイラーの公式の波動の式を理解することで何回か行えば波動の計算のコツをつかめるかもしれません。基本的に物理学の知識が必要なレイヤーの下の方の処理は最近では全てミドルウェアやSDKで処理されてしまいます。

量子コンピュータの基本の演算を見る


量子コンピュータの演算は基本的に3ステップで進みます。

1、初期化
2、演算
3、測定

まず、初期化は0で初期化されます。演算には後述する量子ゲートと呼ばれるものを配置します。測定はその計算結果を取り出します。計算は左から右に進み、五線譜のようになっているのは時間ごとにゲートが変わっていきます。五線譜の1本が1量子ビットに対応します。初期化は0でスタートしますので、注意すべきは演算と測定になります。

量子コンピュータの演算と量子ゲート

量子コンピュータの演算は量子ゲートと呼ばれる論理演算ゲートを使って行います。これらを五線譜のような回路の上に並べて特定の計算を実現します。量子ゲートは使用するマシンの性能ごとに多少変わりますが、代表的なものとして、

・Hゲート(アダマールゲート)
・X,Y,Zゲート(総称してパウリゲート)
・T,Sなどの回転ゲート
・CNOT/CX/CZなどのコントロールユニタリーゲート

などがあります。これらを組み合わせることでアプリケーションやアルゴリズムを実現します。


引用:IBMQ

量子コンピュータの測定

上記量子ゲートを使って計算回路を組んだ最後には測定があります。量子コンピュータで測定が大事になるのは、計算するごとに計算結果が異なる可能性があるからです。量子の粒子の性質を使っている分には問題になりませんが、波動の性質を活用する場合、最終的な答えは私たちの世界における粒子に統一する必要があります。波動を粒子の性質に戻す際に測定をしますが、波動から粒子に戻す際に0になるのか1になるのかは確率的に決まります。計算回路によって0になりやすい、1になりやすいというようにプログラミングをするのですが、実際に出る答えは毎回異なることがあります。

では、そのような場合にはどのように答えを判別すればいいでしょうか。それは、同じ問題をなんども計算を行なって解の確率分布を見ることで解の傾向をみることができます。それによって答えを取り出します。1になりやすいようにプログラミングしてみると、1000回計算すれば800回くらい1となって200回くらい0となるかもしれません。このようにどの答えがどの確率で出てくるかは試行回数を増やして判別することができます。

量子コンピュータではこのように試行回数shotをたくさん行なって解を求めます。大概高速性を活用するのはこのような波動の性質を活用したアルゴリズムが主ですので、測定の重要性は欠かせません。

量子コンピュータの特徴的な性質

量子コンピュータの特徴は波動の性質を活用した高速性をどのように実現できるかというのがポイントかと思います。従来の既存コンピュータにない性質として波動の利用があります。その中でも計算に活用する際に押さえておきたいポイントが量子の重ね合わせと量子もつれかと思います。

量子の重ね合わせは1量子ビットの0と1を重ね合わせられるというところから来ています。0と1のちょうど中間をとることで0がでるか1がでるかが50%の状態を作ることができます。そのため、1量子ビットでは0と1の重ね合わせで2通りの状態を表現できます。同様に2量子ビットなら、0と1を重ねることで、00,01,10,11の4つの状態を2量子ビットだけで表現できます。3量子ビットならそれが000,001,010,100,011,101,110,111の8通りになります。このように急激に組み合わせの数が増えて行くので、量子ビットで表現できる場合の数が急激に増えていきます。

既存の計算機の表現できる場合の数を超えるのが49量子ビットといわれているので、それを超えられるように日々世界中で開発が進んでいます。2018年現在Googleが72量子ビットを開発しています。ただ、エラーがあるので理想的な49量子ビットと比較するとまだ困難性があるようです。

また、量子の重ね合わせを応用して量子もつれと呼ばれる性質もあります。これは、2つの量子ビットの状態をもつれさせて同期させることで、片方の量子ビットを操作することで、もう片方の量子ビットの状態を同時に変化させるという特徴です。

このように量子コンピュータの性質を使って高速なアルゴリズムを使って世界を変えるようなアプリケーションの開発はまだまだ始まったばかりです。ぜひこの機会に量子コンピュータのプログラミングに興味を持ってもらえると幸いです。

以上です。

あわせて読みたい

SERVICE

汎用量子コンピュータ向けアプリケーション開発SDK

詳しく見る Githubで入手する(無料)

汎用量子コンピュータ向け高速シミュレータ

詳しく見る

量子コンピュータ向けクラウドサービス(準備中)

詳しく見る

イジングマシン向けアプリケーション開発SDK

詳しく見る Githubで入手する(無料)

COMMUNITY

量子コンピュータのことを学びたい、仕事としたいなどの情報交換の場を設け、コミュニティの形成を進めています。オフラインの勉強会と、オンラインのチャットコミュニティの2種類あります。オフラインのConnpassは1400名、オンラインのSlackは880名を超える参加があります。どちらも無料ですのでお気軽にご参加ください。

CONNPASS SLACK

CONTACT

弊社あての連絡はinfo@mdrft.comより用件を明記の上、メールで連絡を頂けますと幸いです。

ブログトップに戻る

Recent Posts