量子コンピュータに関して専門知識がなくても理解できるようになることを目指した本連載。第2話では復習がてら行列について学びました。初見の方や苦手意識がある方にとっては腰が重い話だったかもしれません。
第3話では量子ビット、量子状態、測定、量子ゲートまでを順に学んでいきます。新しい概念が登場しますが、できるだけ平易に説明します。ゆっくり繰り返し読んで理解してみてください。
【筆者】束野 仁政さん
量子コンピュータ・プログラマ。学生時代に数学を専攻したのち、ソフトウェア・エンジニアを経て、現在は研究機関にて量子コンピュータの仕事をしている。量子コンピュータの面白さを多くの人に広めたいと思い、雑誌記事や同人誌の執筆、勉強会での発表等を行う。著書は「Elasticsearch NEXT STEP」(インプレスR&D)・Twitterアカウント(https://twitter.com/snuffkin)
・量子コンピュータの基礎「量子ビット」とは
・計算結果を得る「測定」の結果は毎度異なる?
・ビットの状態を変化させる「量子ゲート」
ユニタリ発展の可逆性
・(コラム)どうして量子コンピュータの演算はユニタリ行列なのか
■免責
本連載は情報の提供のみを目的としています。
本連載の内容を実行・適用・運用したことで何が起きようとも、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。
■商標
本連載に登場するシステム名や製品名は、関係各社の商標または登録商標です。 また本書では、™、®、© などのマークは省略しています。
今回は、量子コンピュータの計算の仕組みを具体的に説明します。第2話で解説したベクトルや行列を用いて、量子ビットの状態(量子状態)や読み取り(測定)、演算(量子ゲート)について説明します。もしベクトル・行列・確率に苦手意識のある方は、もう一度第2話を読み直すことをおすすめします。さまざまな概念が登場しますが、筆者の私も初めて学んだときは1度には理解できませんでした。具体的に計算しながら、少しずつ慣れていきましょう。
量子コンピュータの基礎「量子ビット」
第1話で説明した古典ビットと量子ビットの性質の違いは覚えているでしょうか。今回は両者の特徴について行列やベクトルを使ってより具体的に説明していきます。
古典ビットの0,1に対応する量子ビット(quantum bit、qubit)を|0⟩, |1⟩と記します。0や1を囲っている はケット記号といいます。|0⟩, |1⟩をベクトルの形で表現すると、次のようになります。
|0⟩はゼロベクトルでない点に注意してください。
古典ビットの状態は0か1のどちらかでしたが、量子ビットの状態は|0⟩と|1⟩以外もあり得ます。
この定義は「複素数を成分とした2次元のベクトルでを満たすもの」という意味です。|a|や|b|は複素数の絶対値を表します。複素数が難しいと感じる方は、実数の絶対値(符号をプラスにしたもの)をイメージしてください。
この記法を利用することで、以下のように書くことができます。
たとえば次のものは量子状態です。
計算に慣れるため、実際にを満たすことを確認してみてください。また、次のものは量子状態ではありません。
のように、複数の量子ビットの和で表される量子状態を重ね合わせ状態(superposition, superposition state)と呼びます。1量子ビットの量子状態は|0⟩と|1⟩という、2種類の量子ビットの重ね合わせ状態を表せます。古典ビットは重ね合わせ状態にできないため、古典ビットと量子ビットで大きく異なる点です。
計算結果を得る「測定」
古典ビットの0を読み取ると0になり、1を読み出すと1になります。なんだか、当たり前ですね。
実は量子コンピュータの世界では、これが当たり前ではありません。量子状態はのように|0⟩でも|1⟩でもない状態を表せました。これを読み取ると|0⟩か |1⟩が返ってきます。この読み取りのことを測定(measurement)といいます。
では、を測定すると何が返ってくるのでしょうか。実は、|0⟩が返ってくることもあれば、|1⟩が返ってくることもあります。同じ量子状態を測定しても、何が返ってくるかは毎回異なり、測定しないと分かりません。ただし、訳が分からない状態ではなく、何が返ってくるか確率で表せます。
具体的に定式化すると、次のようになります。
古典ビットは何度測定しても同じ結果が返ってきました。次の点は、量子コンピュータと古典コンピュータで大きく異なります。
(1)得られる測定値は確率によって変わる
(2)測定によって状態が変化する
たとえば、として
を測定するとき、量子ビット|0⟩を得る確率は、
となり、量子ビット|1⟩を得る確率は、
となります。
これらを踏まえ、古典ビットと量子ビットに関する測定の違いをまとめると、表1.1のようになります。
古典ビット0を測定して得られる値の確率分布は図1.1のようになります。必ず0が得られるので、0の確率は1、その他の確率は0です。
量子状態を測定して得られる値の確率分布は、図1.2のようになります。
▼表1.1:古典ビットと量子ビットの測定の違い
▲図1.1:古典ビット0を測定して得られる値の確率分布
▲図1.2:量子状態を測定して得られる値の確率分布
ビットの状態を変化させる「量子ゲート」
量子ビットの状態について説明し、それを測定できることもわかりました。しかし、これだけでは計算できません。古典コンピュータでは、ビット演算を行うゲート(AND, OR, XOR, NOTなど)を使い、ビットの状態を変化させることで計算を行います。古典コンピュータのゲートに相当するものが、量子ゲートです。この量子ゲートの操作にあたるものを、量子力学ではユニタリ発展といいます。
ユニタリ行列はが成り立つ行列です。量子コンピュータは、ユニタリ発展を行う回路を実装することで量子ビットの状態を変化させ、計算ができます。ユニタリ発展に利用するユニタリ行列の大きさが指数関数的に巨大な場合でも、量子コンピュータの計算時間への影響は少ないです。そのため、量子コンピュータは指数関数的に巨大なユニタリ発展を高速に行えます。
ただし、あらゆる行列計算を高速化できる訳ではなく、ユニタリ行列によって計算できる量子アルゴリズムが発見されている計算を高速化できます。
量子コンピュータでよく利用するユニタリ発展の例については次回ご紹介します。
ユニタリ発展の可逆性
ユニタリ行列はであったことから、必ず逆行列を持ちます。そのため、
を
でユニタリ発展させると、
となり、
に戻ります。状態の変化に対して、元に戻す変化が可能であることを可逆(reversible)と言います。そのため、任意のユニタリ発展は可逆です。
量子回路の可逆性は、古典回路と大きく異なる点です。たとえば、図1.3にある古典ビットのANDを考えてみましょう。
▲図1.3:古典ビットのAND
ANDは2個のビットを入力し、1個の出力を得る操作です。すべての入力が1のときに出力が1になり、それ以外は出力が0になります。具体的には表1.2のように動作します。
▼表1.2:ANDの入出力
表1.2を見ると、出力が0となるときの入力の組み合わせが3種類あります。そのため、出力から入力に戻そうとしても、どの入力に戻せばよいのか判別できません。このように、古典コンピュータでは非可逆な操作ができます。
一方で、ユニタリ発展は可逆であるため、量子コンピュータではこのような操作はできません。「量子コンピュータはANDができないのか」と驚かれるでしょうが、その点は大丈夫です。詳細はこの連載の範囲を越えてしまいますが、入出力の量子ビットを拡張することで、ANDに相当するユニタリ発展を行えます。
今回はここまでとなります。新しい概念が多く登場し、大変だったかもしれません。一度で理解できなくても、具体的な例を計算して慣れておきましょう。
次回は、具体的な量子ゲートの例を挙げ、量子回路の計算を行います。新しい概念は今回ほど登場しないため、今回の内容が理解できれば、スムーズに進みやすいと思います。
(コラム) どうして量子コンピュータの演算はユニタリ行列なのか
量子力学の基本方程式であるシュレディンガー方程式を紹介し、量子コンピュータの演算(ユニタリ発展)にユニタリ行列が登場する理由を説明します。今回のコラムはこの連載の範囲を大きく越えるため、数式を理解できなくても、背景の雰囲気を感じていただければ十分です。
高校で習う古典力学の世界では、物体の運動(状態の変化)はニュートンの運動方程式によって決まりました。一方で、量子力学での運動(量子状態の変化)はシュレディンガー方程式と呼ばれる次の方程式で決まります。
謎の記号がたくさん登場しましたが、分からなくて当たり前で、まずは「そういう方程式があるんだ」という事実を受け止めましょう。この方程式の雰囲気を感じるために、1量子ビットを例にそれぞれの記号が何を表しているのか説明します。
左辺のは前回の本文でも登場した虚数単位です。
に横棒がついた
は、換算プランク定数(reduced Planck constant)というもので、量子力学に登場する定数です。
は何か特定の実数だと思えばよいでしょう。
は出力が列ベクトルになる関数で、時間
によって変化します。ケット記号を使わずに書くと、出力が実数の関数
を使って
と書けます。
この方程式は「2次元ベクトル=2次元ベクトル」という形の方程式になっています。
は
時間での微分を表しています。
の時間での微分は、時間が経ったときの
の変化量を表しています。この方程式の左辺は、量子状態の変化(に
をかけたもの)を表しています。
右辺のはハミルトニアン(Hamiltonian)と呼ばれるもので、量子状態(2次元ベクトル)を量子状態(2次元ベクトル)に写す2次正方行列とみなせます。
これらを踏まえると、このシュレディンガー方程式はと
に関する微分が混じった連立方程式になっています。この方程式は高校の範囲を越えますが、これを解くと行列が
ユニタリ行列になることが分かります。
シュレディンガー方程式を標語的な表現に書き直すと、次のようになります。
そのため、量子状態を変化させる演算は、ユニタリ行列で表せることになります。これがユニタリ発展の正体です。
この連載ではシュレディンガー方程式は今後登場しないため、細かな数式は分からなくても大丈夫です。シュレディンガー方程式から標語的な式が導かれ、量子コンピュータで重要なユニタリ行列が出てくる、という雰囲気が分かれば十分です。
▼これまでの「初心者でもわかる量子コンピュータの計算の仕組み」
【第1話】数式なしで量子コンピュータの現状を理解しよう
【第2話】量子コンピュータで使用する計算の土台を学ぼう
【第3話】量子コンピュータの基本のルールを学ぼう
【第4話】基本の量子ゲートと量子回路をおさえよう
【第5話】量子プログラミングをやってみよう
【最終話】現在の量子コンピュータの限界とこれから
束野仁政さんの著書『量子コンピュータの頭の中――計算しながら理解する量子アルゴリズムの世界(技術評論社)』もあわせてご覧ください。(2023年7月追記)