
量子コンピューティングの概要#
量子計算は、量子力学の基本原理を利用して計算を行う、新しい計算のパラダイムです。これを読んでいる方は量子計算の将来性が、素因数分解、量子シミュレーション、探索、最適化、機械学習などの代数計算といった古典的なコンピュータの能力を超える一部のタスクを、効率的に実行できる可能性にあるということを聞いたことがあるでしょう。
量子計算の強みは、量子力学の二つの原理、すなわち量子計算の波動と粒子のような側面をそれぞれ強調する 干渉 `interference と エンタングルメント に基づいています。 Qiskit は、 量子回路 の枠組みでこうした量子力学の原理を活用して、量子計算を実行するための SDK です。量子ゲート、命令、古典的な制御ロジックから構成される量子回路は、複雑なアルゴリズムやアプリケーションを抽象的に表現し、量子コンピュータ上で実行することができます。その中核をなす Qiskit は、量子回路の構築、最適化、実行エンジンです。また、アルゴリズムやアプリケーションのレイヤーでは、古典的な計算リソースを連携させながら量子回路を利用することで、最適化、量子化学、物理学、機械学習、金融などの問題を解きます。次から、量子計算の概略を説明し、それぞれのステップで Qiskit がどのように利用されるかを説明します。さらに深く知りたい読者は、追加の詳細資料をご参照ください。
干渉#
古典的なコンピューターと同様に、量子コンピューターもビット上で動作します。しかし、古典ビットは 0 と 1 の状態しか取りませんが、量子ビットは 0 と 1 の値およびそれらの線形結合を表現することができます。これらの線形結合は 重ね合わせ (あるいは重ね合わせ状態) と呼ばれます。
このリソースが量子計算でどのように利用されているかをみるために、まず古典的なアナログである、ノイズキャンセリングに目を向けます。ノイズキャンセリングは、例えばノイズキャンセリング・ヘッドフォンで行われているように、 \(\pi\) (あるいは \(\pi\) の奇数倍) だけ位相のずれた、ほぼ同じ周波数と振幅の音波を生成して、重ね合わせと 干渉 の原理を活用することで、不要なノイズの振幅を小さくしています。

図 1 およそ \(\pi\) だけ位相のずれた、振幅のほぼ等しい音波による、ノイズ信号の近似的な打ち消し合い#
上に示すように、位相差が \(\pi\) の奇数倍に近い場合、二つの波の重ね合わせは干渉をもたらし、元の波と比べて振幅が大幅に減少した出力が得られます。その結果、ノイズの影響を受けていない、目的とする信号を得ることができます。この処理はデジタル回路で行われますが、振幅と位相は完全に一致させることのできない連続変数であるため、完全な補正にはなりません。
量子コンピューター上での一般的な計算は、ノイズキャンセリングとよく似ています。まず、すべての計算状態の重ね合わせを準備します。これは、所定のアルゴリズムにしたがって、重ね合わせの成分を選択的に干渉させる 量子回路 への入力として使用されます。入力状態の相対的な振幅と位相を打ち消した後に残るのは、量子回路によって実行される計算の解となっています。

図 2 干渉発生過程としての量子計算#
エンタングルメント#
量子計算が利用することのできる量子力学の第二原理は、 エンタングルメント という現象です。エンタングルメントとは、二つ以上の量子ビット (あるいは一般に複数粒子) の状態のことで、量子ビットの結合した状態は、単独の量子ビットよりも多くの情報を含んでいます。複数量子ビットの量子状態の圧倒的多数はエンタングルした状態であり、貴重なリソースとなっています。例えば、量子ビット間のエンタングル状態は量子テレポーテーションに用いることができます。量子テレポーテーションでは、二つの量子ビット間に共有されたエンタングル状態を操作することで、物理世界における相対的な近さによらず、一方の量子ビットからもう一方の量子ビットへ情報を転送することができます。量子系の自然な状態としてのエンタングル状態は、多くの場合に解がエンタングルした複数量子ビット状態となる量子化学や量子シミュレーションのような分野でも重要です。また例えば、複数量子ビットの非常にエンタングルした量子状態を利用することで、正真正銘の乱数を生成することもできます。これを行うための Qiskit パッケージ さえ用意されています。
量子回路#
量子力学的なリソースを利用するアルゴリズムやアプリケーションは、 量子回路 の枠組みで簡単かつ効率的に記述することができます。量子回路とは、量子ビットに保持されているような量子データに対するコヒーレントな量子演算と、リアルタイムの古典計算を同時に行う計算ルーチンのことです。回路内の各水平線は量子ビットを表し、線の左端が初期の量子データ、右端が量子回路の計算によって生成される最終的な量子データとなっています。量子ビットに対する演算は、これらの線上に配置することができ、箱として表されます。

図 3 量子状態テレポーテーション回路再訪#
量子回路は、量子コンピューターが古典的な情報を取り込んで、古典的な解を出力することを可能にし、 干渉 や エンタングルメント といった量子力学の原理を利用して計算を実行します。
典型的な量子アルゴリズムのワークフローは、以下のように構成されています。
解決したい問題
量子回路の記述を生成する古典的なアルゴリズム
量子ハードウェア上で実行される量子回路
それが生成する問題に対しての古典的な出力解
量子ゲートは量子データのプリミティブな演算子を形成します。量子ゲートは情報の保存、すなわち量子ビットに蓄えられたデータの可逆変換を表現します。この 「ユニタリー」 変換は量子回路の量子力学的なコアを表します。 \(X\) ( \(\oplus\) とも書かれる) や \(CX\) のようなゲートは、ビットフリップや \(XOR\) 演算のような古典的類似物がありますが、必ずしもあるとは限りません。アダマールゲート (\(H\)) は、パラメータ付き回転ゲート \(rX(\theta)\) や \(rY(\theta)\) と一緒に、重ね合わせ状態を作ります。一方 \(Z\), \(rZ(\theta)\), \(S\), と \(T\) ゲートは干渉に使える位相を与えます。 \(CX\) のような2量子ビットゲートは量子ビットペアの間のエンタングルを生成したり、別の量子ビットに位相を 「キック」 するのに使われます。ゲートと対照的に、」ターゲット」 につながった箱の中のメーターの絵で表された 「測定」 のような演算子は、しばしば位相の情報を失いながら、量子状態の部分的な情報を引き出し、ターゲットとしてつながった古典ビットに古典情報として書き込みます (デバイスによっては本当に古典的なワイヤーで) 。これが量子情報を古典デバイスのデータに取り込む典型的な方法です。\(H\), \(rZ(\theta)\), \(CX\), と測定ゲートだけで、すなわちユニバーサルゲートセットだけで、自然の物理系の力学を効率的に計算する量子回路も含む、どんな量子回路も作ることができます。
ワークロードの中には、量子回路と古典計算を交互に配置した、拡張シーケンスを含むものがあり、例えば変分量子アルゴリズムでは最適化ループ内で量子回路を実行します。このようなワークロードでは、量子回路をパラメータ化し、回路実行と古典計算の間の遷移を効率的に行うことで、システムの性能を大幅に向上させることができます。そこで、計算時間を高速化するために開発されたハードウェアを用いて、量子回路を繰り返し利用するアルゴリズムを用いた計算を near-time computation と定義します。 near-time computation では、古典計算は量子計算のコヒーレンスよりも長い時間スケールで行われます。これは、古典的な計算が量子デバイスのデコヒーレンス時間内に行われる real-time computation とは対照的です。
最小限の労力で複雑な量子回路を構築することは、Qiskitの最も重要な点であり、豊富な機能セットの操作をサポートし、さまざまな 量子コンピューター や従来のシミュレーターの回路に送信することができます。ほんの数行のコードで、上記のような複雑な回路を構築することが可能です。:ref:
qr = QuantumRegister(3, 'q')
cr = ClassicalRegister(2, 'zx_meas')
qc = QuantumCircuit(qr,cr)
qc.reset(range(3))
qc.barrier()
qc.h(1)
qc.cx([1,0],[2,1])
qc.h(0)
qc.barrier()
qc.measure([0,1], [0,1])
qc.barrier()
qc.z(2).c_if(cr, 1)
qc.x(2).c_if(cr, 2)
量子コンピューター#

図 4 IBM Quantum System Oneの内側#
量子回路を用いてプログラムされた量子コンピューターは、量子ビット素子を定義することのできる量子技術を用いて構成することができ、単一および複数量子ビットのゲート演算を高精度に実装することができます。現在、超伝導回路、トラップイオン、半導体量子ドット、光子、中性原子に基づいたアーキテクチャーが積極的に開発されており、その多くはインターネットを介してユーザーがアクセスできるようになっています。 Qiskit は与えられた量子システムの基礎となるアーキテクチャーにとらわれず、量子デバイスのエンタングルゲートトポロジーに合わせて量子回路をコンパイルして、回路命令をデバイスのネイティブゲートセットにマッピングし、結果として得られた量子回路を最適化することで忠実度を高めることができます。
上述のノイズキャンセリングの例と同様に、量子ビットの振幅と位相は連続的な自由度であるため、演算が正確に行われることはありません。これらのゲートエラーは、量子コンピューターの置かれた環境からのノイズとともに、コンパイル以外の段階において計算を台無しにする可能性があります。そのため、ノイズの影響を受けやすい現在の量子システムで高忠実度の出力を得るためには、追加の緩和手順が必要になります。 Qiskit ではそのコンパイル戦略において、様々なデバイス較正指標 (下図参照) を考慮することができ、量子回路を実行するために最適な量子ビットのセットを選択することができます。さらに Qiskit には、量子回路の出力の忠実な表現を得るための、ノイズ緩和テクニックが集められています。

図 5 IBM Quantum ibmq_manhattan システムのトポロジーとエラー率#
次なる学び#
量子計算が提供するものを読者の皆さんに体験してもらい、さらに多くのことを知りたいと思ってもらえたことを期待しています。もしそのようであれば、興味のあるかもしれない資料がいくつか用意されています。
Getting started with Qiskit - Qiskit に飛び込んでみましょう。
Field guide to quantum computing : 量子計算の創始者たちが、対話型の回路コンポーザーを利用して書いた、物理学に基づく易しい入門
Qiskit textbook : A university quantum algorithms/computation course supplement based on Qiskit.