Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ja/intro/what-is-quantum.ipynb
3855 views
Kernel: Python 3

量子とは何か?

ビットとは何か?

前章では、「ビット」が世界で最も単純なアルファベットであり、あらゆる情報を表現するのに利用できることを学びました。また、現代のすべてのコンピューターは、ビットを記憶し、ビットを使って演算を行っていることも学びました。これまで、ビットは抽象的な情報の単位としてしか考えていませんでしたが、コンピューターを動かすためには、ビットを実際のものから作る必要があります。では、現実の世界でビットを作るにはどうしたらよいのでしょうか。

ビットをどうやって保存するか?

パンチカード

パンチカード

コンピューティングの黎明期、コンピューター科学者は紙のカードに穴を開けてビットを保存していました。これらのカードはグリッドに分割されており、グリッド内の各セルはビットを表しています。そのセルに穴があればビットは「1」、穴がなければビットは「0」です。ビットの値を変更したい場合は、新しい穴をあけるか、穴を元に戻すことができます。

パンチカードの画像

コンパクトディスク

コンパクトディスク

コンパクトディスクは、80年代に録音した音声をビットで保存するために作られました。設計者は、ディスクの表面にあるピットやトラフをそのビットを表現するために使うことにしました。私たちは、ディスクの上をレーザーでスイープして、ビットを検出することができます。ディスクは、セグメントに分割された螺旋状の線に沿って読み取られます。各セグメントで、平らな面は「0」を表し、山から谷への変化(またはその逆)は「1」を表します。

溝のパターンを拡大表示したCDの図

電子軌道

電子軌道

化学の授業で、原子の中心(原子核)の周りを電子と呼ばれる粒子が回っていることを覚えたかもしれません(覚えていなくても大丈夫です)。また、この電子は原子核から特定の量子化された距離を周回することができ、これをと呼んでいることも覚えているかもしれません。もし、電子がどの殻にいるかを検出する方法があれば、この殻の中から2つを選び、電子の位置をビットとして使用することができます。電子が一方の殻にいればビットは「0」、他方の殻にいればビットは「1」となります。

1つの電子と2つの殻を持つ単純な原子を示す図

カードとコンパクトディスクの挙動は、古典物理学で簡単に説明することができます。物理学とは本来、私たちを取り巻く世界を記述するものです。私たちは実験をして世界がどのように振る舞うかを見て、そこから宇宙が従うルールを導き出そうとします。「古典物理学」とは、1900年代初頭以前に科学者たちが考え出した一連の法則の名前で、クリケットのボールや車のエンジンの挙動を予測するのに非常に適しています。

しかし、原子の周りを回る電子は少し違います。1900年代初頭、科学者たちは原子スケールで物事を研究することができるようになりました。その結果、原子のような本当に小さなものと、私たちが日常的に接しているものでは挙動が異なり、ある場合には古典物理学のルールがまったく正しくなかったことがわかりました。そこで科学者たちは、より正確な物理法則を考え出し、「量子物理学」として知られるようになったのです。

科学的プロセスを描いた図

量子物理学の主要実験

興味のある方のために、ここでは量子物理学の発展につながったいくつかの出来事を簡単にまとめています。これらを理解しなくても、このコースの残りの部分を読むことができます。これは、歴史と物理についてもっと読みたい人のためにあります。

紫外線の大惨事

高温のものは光として放射し、温度が高いほどこの光の波の周波数が高くなるります。光だけを放射している(つまり、光を反射していない)ものを「黒体」と呼びます。理論的に完全な黒体は、恒星や惑星を含む多くの実際の物体の恐ろしい近似値ではありません。

1900年から1905年にかけて、2人の科学者(レイリーとジーンズ)が古典物理学の法則を用いて、黒体の温度がその放射する光波の周波数にどのように影響するかを記述する方程式を導き出しました。彼らが導出した法則は、高温の物体は途方もない量の高周波 (紫外線) を放射するはずであると予測しましたが、私たちが見ているものと全く一致しないものでした。

この時点まで、光は波であると広く認められていたのです。しかし、別の科学者(マックス・プランク)は、光が量子化された塊(つまり、現在「光子」と呼ばれている粒子)で放出されなければならない場合、我々が測定できる温度と発光の関係を正しく記述する方程式を導き出すことができることを示しました。

二重スリット実験

穴からスクリーンに粒子を発射し、その着弾位置を記録すると、スクリーンの真ん中に多く、端には少ないことがわかります(実際はもう少し複雑な形状ですが、ここでは割愛します)。では、代わりに「2つ」の穴から粒子をスクリーンに発射したらどうなるでしょうか?もし穴が十分に近ければ、常識的に考えて、ほぼ同じことが起こり、より多くの粒子が通り抜けるでしょう。

しかし、光子や電子、原子などの小さな粒子でこの実験を行うと、一度に1つの粒子を通過させただけでも干渉縞が見られます。この実験は1700年代後半に光で行われたもので、科学者たちは光は粒子ではなく波であると信じました。しかし、紫外線の大災害で見たように、これはまだ全体像ではありませんでした。

![](images/what-is/Single-slit-and-double-slit.jpg)

画像: Jordgette - 自作、CC BY-SA 3.0, リンク

コンピューター科学者にとって、「もし我々のビットが古典物理学ではなく、量子物理学のルールに従っていたらどうだろう」というのは自然な疑問です。このビットを「量子ビット」と呼び、このビットで動作するコンピューターを「量子コンピューター」と呼んでいます。

次の節では、これらの量子ビットの1つを操作して(実際にはそうではなく、シミュレーションをしているだけですが、動作は同じであることをお約束します)、「量子」とは何かを発見してください。

量子ビットの探求

量子の振る舞いを探るには、確率について思い出す必要があります。前の章を読むと、これまで見てきた操作はすべて決定論的でした。つまり、同じ入力に対して作用すれば、必ず同じ出力が得られるということです。ここでは、量子ビットにのみ作用する新しい演算、アダマールゲート、略して「Hゲート」を見てみましょう。

Hゲートを探る

q-mini-composer(goal="what-is-minicomposer") .slide .circuit .autoMeasureGate .availableGates H .initialCircuit .qubit .goalCircuit .qubit H .startProbabilities 0: 1, 1: 0 .endProbabilities 0: 0.5, 1: 0.5 .instructions Hゲートをドラッグして回路上に置いてください .lesson Hゲートは、|0⟩から|0⟩または|1⟩のいずれかに変換する確率が半々であるように思われます。これを確率木にプロットすると: .info いいですね!どんどん実験していきましょう。 .slide .circuit .autoMeasureGate .availableGates X .initialCircuit .qubit .goalCircuit .qubit X .startProbabilities 0: 1, 1: 0 .endProbabilities 0: 0, 1: 1 .instructions 我々の量子ビットを状態|1⟩に変換します。 .lesson 素晴らしい!Xゲートの後、我々の量子ビットは100%の確率で状態|1⟩になります。この入力に対してHゲートがどのように作用するか見てみましょう。 .info 「次」をクリックして、Hゲートを追加します。 .slide .circuit .autoMeasureGate .availableGates H .initialCircuit .qubit X .goalCircuit .qubit X H .startProbabilities 0: 0, 1: 1 .endProbabilities 0: 0.5, 1: 0.5 .instructions Hゲートを回路の最後に追加します。 .lesson Hゲートはまた、|1⟩から|0⟩または|1⟩に量子ビットを変換する確率が半々であると思われます。これも確率木にプロットすることができます: .info 素晴らしい! .slide .circuit .autoMeasureGate .availableGates .initialCircuit .qubit X H .goalCircuit .qubit H .startProbabilities 0: 0.5, 1: 0.5 .endProbabilities 0: 0.5, 1: 0.5 .instructions 回路からXゲートを取り外します。 .lesson さて、Hゲートが両方の可能な入力状態に対してどのように振る舞うかがわかったので、これを使ってその振る舞いを予測することができます。 確率木を見てください。もし、2つのHゲートを並べて適用したらどうなると思いますか? .info 「次」をクリックする前に、答えを考えてください。 .slide .circuit .autoMeasureGate .availableGates H .initialCircuit .qubit H .goalCircuit .qubit H H .startProbabilities 0: 0.5, 1: 0.5 .endProbabilities 0: 1, 1: 0 .instructions 我々の理論を検証してみましょう。Hゲートを「2つ」順番にかけるとどうなりますか? .lesson なんだ!?これは変だ。入力|1⟩で試してみましょう。 .info いいですね!どんどん実験していきましょう。 .slide .circuit .autoMeasureGate .availableGates H .initialCircuit .qubit X H .goalCircuit .qubit X H H .startProbabilities 0: 0.5, 1: 0.5 .endProbabilities 0: 0, 1: 1 .instructions Xゲートの後にHゲートを2つ適用するとどうなりますか? .lesson これは、私たちのモデルには全く合わないのです。実際、この振る舞いを説明するような数字を確率木に書き込むことはできないのです。 これを説明するには、我々の確率を別のものに置き換える必要があります。 .info おめでとうございます。あなたはこの演習を完了しました。

今、興味深い振る舞いを見ました。2つの確率的な操作を順番に行うと、互いに「元に戻す」ように見えるのです。実際、この単純な振る舞いは非常に珍しいもので、確率木を用いて説明することはできません。すべての場合に正しい結果を与えるような枝につける数字がないのです。

「もしかしたら、Hゲートは2回入力されたことを知っていて、違う動作をするのかもしれない」と思うかもしれません。これは、量子ビットの状態と並んで、ゲートへのもう一つの入力としてカウントされるでしょう。Hゲートの動作に、直接見ることのできない、もう一つの隠された入力を許容すると、この振る舞いを表現できるかもしれません。そして実際、このようなことが起こっているのです。

確率の先にあるもの

確率は、サイコロの目やコイン投げのように、起こりうる結果が多数あり、どれが起こるかを判断するのに十分な情報がない場合に有効です。それぞれの結果に確率を与え、それを使って何かが起こる可能性を計算します。確率は、私たちの身の回りで普通に見られるものに対して非常によく働きます。しかし、(量子ビットのような)「量子的」なものに対しては、この方法は通用しませんので、私たちが見ている振る舞いを説明するために確率を更新する必要があります。

では、どのような解決策があるのでしょうか?量子力学を記述するには、確率の振幅を使うことができます。確率の振幅は、通常の確率と同様に:

  • 振幅は大きさを持ち、

  • それぞれの可能な結果が確率の振幅を持ち、

  • そして、その結果の振幅の大きさは、その結果がどの程度発生しやすいかを教えてくれます。

しかし、振幅には「位相」と呼ばれる追加の性質があるのです。位相は角度と考えることができ、従来の確率が大きさしか持たないのに対して、振幅は方向も持っているのです。

確率と振幅の比較

具体的には、振幅は複素数です(複素数が何か知らない人は、まだ気にしないでください)。

位相の結果、これらの振幅を2つ足すと、ちょうど正と負の数のように、互いに打ち消し合うことができるのです。この振る舞いは干渉と呼ばれ、古典力学では見られない量子力学特有の振る舞いをすべて説明します。

振幅加算ウィジェット

下には2つの振幅を足したものが見えます。振幅の大きさと向きを変えてみてください。右側の振幅の大きさにどのような影響があるでしょうか?

q-amplitude-addition-widget

ある結果を測定する確率を求めるには、その結果の振幅の大きさを2乗します。これは、数学的な「トリック」で、最後にすべてをうまく足し合わせることができます。

振幅を確率に変換する

実は、位相と振幅の導入も数学的なトリックなのですが、あまりにうまくいくので、結局は科学者が存在するはずだと結論づけたのです。位相は直接見ることはできませんが、干渉効果があるため、その存在を知ることができるのです。

Hゲートを説明する

Hゲートのシンボル

では、箱の中のこの新しいツールを使って、Hゲートを表現することはできるでしょうか?

開始時の振幅

このルートで説明したように、答えは「イエス」であり、それは位相を含んでいると推測できます。まず、Hゲートがどのように状態 0|0\rangle に作用するかを思い出してください。Hゲートができる前は、状態 0|0\rangle を測定する確率は1だったので、振幅の大きさも1であるはずです。この情報からは位相がわからないので、0と仮定しておきます。

1つのHゲートの適用後

Hゲートを適用した後、0|0\rangle または 1|1\rangle のどちらかを確率 1/21/2 で測定することになります。確率を得るために振幅の大きさを2乗するので、この2つの振幅の大きさは 1/2\sqrt{1/2} でなければなりません。また、1|1\rangle の状態から始めていた場合も同じことが言えます。繰り返しになりますが、この変換が位相にどのような影響を与えるかについてはまだ情報が得られません。実際にどのように変換されても、この実験だけでは気づかないので、まだ推測はしないことにします。

2つのHゲートの適用後(位相なし)

しかし、2つのHゲートを適用すると、振幅が持ちうる位相についての記述ができるようになります。振幅木の最後には、2つの可能な結果につながる4つの異なる枝があります。これらの結果に対する最終的な振幅を計算するためには、確率木と同じように、これらの枝に沿って掛け算をして、振幅を足す必要があります。0%の確率で 1|1\rangle を測定するには、1|1\rangle につながる2つの枝の振幅が逆位相である必要があります。

Hゲートが両方の入力状態でどのように動作すると考えるか

2つのHゲートが連続していると決定論的な結果が得られるので、同じ入力があればHゲートは常に同じように動作するはずです。ここで、何が起こるか1つの推測をします。状態 0|0\rangle に作用すると、すべての出力振幅は同じ方向を向きますが、状態 1|1\rangle に作用すると、状態 1|1\rangle の位相が180°回転します。

2つのHゲートの動作を予測するために木を連鎖させる

これらの木を連鎖させるとき、枝に沿って乗算し、各状態の最終的な振幅を合算するのです。

状態|0>の最終的な振幅を計算する

まず、状態 0|0\rangle になる2つの枝から見てみましょう。上の枝では、1/2×1/2=1/2\sqrt{1/2}\times\sqrt{1/2} = 1/2 とし、0|0\rangle につながるもう一つの枝(これも 1/21/2 となる)と足し算をします。これらを足すと、最終的に状態の振幅の大きさ 0|0\rangle12+12=1\tfrac{1}{2} + \tfrac{1}{2} = 1 となります。これは、0|0\rangle を測定する確率も 11 であることを意味します。

状態|1>の最終的な振幅を計算する

ここまででモデルはうまくいったので、状態 1|1\rangle につながる枝はどうなるかを見てみましょう。これらの枝は両方とも 1/21/2 の大きさで終わりますが、下の枝は反対側を向いています。これは、この2つの振幅が相殺されることを意味します!振幅木では、Hゲートがこの振幅の方向を反転させたことを示すために、マイナス記号を使いました。そうすると、最終的な状態 1|1\rangle の振幅は 00 となり、これは私たちが起こると考えていたことと一致します!

Hゲートの完全な動作

というわけで、私たちの振幅モデルはうまくいきました。これで、Hゲートの完全な記述ができました。

ここで、興味深い、直感に反することが起こりました。知識の欠如を説明するために、確率を使うのです。例えば、コインを投げると、同じ確率で表にも裏にもなります。現実には、コインはこのどちらかの状態になり、私たちはどちらかわからないという事実を処理するために確率を使っているのです。

しかし、この振幅モデルでは、干渉効果が見えないので、量子ビットが特定のルート(「0000 \rightarrow 0 \rightarrow 0 または 0100 \rightarrow 1 \rightarrow 0」)を通ったとは言えません。このため、「量子ビットは 00 11同時に実現することができる!」と言う人がいます。これは、量子ビットの振る舞いを記述する方法として必ずしも正しくないわけではありませんが、量子コンピューティングについて学ぶ人にとって特に有益なものではありません。このような振る舞いは日常生活では見られないので、一般的な言葉はありません。そのため、科学者はこのコースで学ぶ新しい言葉を作りました。

物事をすっきりさせる

これで、振幅木を使ったHゲートの説明ができましたが、木を使うとすぐに面倒なことになります。枝やラベルがたくさんあるため、少ない量子ビットの木でさえ非常に複雑になります。これを簡単にするために、量子コンピューター科学者は「ベクトル」という数学的オブジェクトを使用するのですが、これは単なる数字のリストです。計算の各時点で、我々はベクトルを使ってすべての可能な結果の振幅を追跡することができます。

計算の任意の時点での振幅のリストを通じて、量子コンピューターの状態をどのように表すことができるかを示す画像

現在、量子ビットのシミュレーションは非常に簡単な方法でできています。では、従来のコンピューターを使って完璧にシミュレーションする方法がわかっているのに、実際に動く量子コンピューターを作ろうとする意味はあるのでしょうか?量子ビットの数が少ない場合には、シミュレーションは簡単ですが、量子コンピューターを大量の量子ビットでシミュレーションしようとすると、これらの振幅をすべて記録するのは非常に時間がかかり、多くのメモリーを必要とします。

クイッククイズ

nn 個の量子ビットがある場合、可能な結果はいくつあるか?

  1. nn

  1. n2n^2

  1. 2n2^n

  1. logn\log{n}


もし、上記のようなベクトルを使って nn 個の量子ビットの振る舞いを予測したいのであれば、最大でいくつの振幅を記録しておく必要があるか?

  1. nn 振幅

  1. n2n^2 振幅

  1. 2n2^n 振幅

  1. logn\log{n} 振幅

量子ビットを追加するごとに可能な結果の数は2倍になり、この手法を用いると、ベクトルのサイズも指数関数的に大きくなります。これはすべての量子回路に当てはまるわけではありません。例えば、すべての量子ビットを0にして何もしなければ、出力がどうなるかを予測するのは非常に簡単です。しかし、より難しい量子回路は、回路内の量子ビットの数に応じて指数関数的に増大するアルゴリズムによってのみ、古典コンピューターでシミュレーションできます。難しい量子回路のシミュレーションの上限は、30~40量子ビットの間のどこかになる傾向があります。

まとめ

この章では多くのことを学びましたが、重要なポイントは以下の通りです。

  • 量子力学のルールに従って、オブジェクトからビットを作ることができ、これを「量子ビット」と呼びます。

  • これらの量子ビットは、確率の振幅を使って記述することができます。これは古典的な確率のようなものですが…「位相」を持ちます。

  • これらの振幅は互いに打ち消しあうことができ(干渉と呼ばれる効果)、これがこれまで説明のつかなかった振る舞いを引き起こすのです。

  • 量子ビットをシミュレーションするための最も優れたアルゴリズムは、量子ビットの数に応じて指数関数的にリソースを消費するため、大量の量子ビットをシミュレーションすることは、古典コンピューターには無理です。

量子コンピューターは、古典コンピューターにはできないこと、つまり量子ビットの振る舞いをシミュレートできることを見てきました。古典コンピューターは指数関数的なリソースを必要としますが、量子コンピューターはただ演算を行い、何が起こるかを見ることができるのです。次に興味深いのは、「量子コンピューターは、古典コンピューターが解決できない他の問題を解決できるのか?」ということです。このコースでは、その答えが「イエス」であることを見ていきます。

練習問題

このページにあるすべての量子ビットは、この振幅モデルを使って設計された古典的なプログラムを使ってシミュレーションされています。では、なぜ実際の量子ビットの振る舞いがそうであると信じられるのでしょうか?もし、本物の量子コンピューターで本物の量子ビットを使って遊びたいなら、IBM Quantum Composerをチェックしてみてください。この実験を再現して、デバイス上で動かしてみてはどうでしょうか?

IBM Quantum Composer には他のゲートや命令がたくさん出てきますが、そのほとんどはここで取り上げていないものです。Composerの灰色の命令ボックスは量子ゲートではない、つまり、この章で発見した振幅規則に従わないということを意味します。

自分でやってみよう

振幅の知識を使って、これらのゲートがどのように振幅を変換するのか、計算してみてください。

  • Xゲート

  • Yゲート

  • Zゲート

何から始めたらいいか分からない?

ご安心ください!これはかなり難しい問題なので、ヒントをあげましょう。この3つのゲート(X, Y, Z)はそれぞれ多くても2つの動作しか行いません。0|0\rangle1|1\rangleの状態の振幅を入れ替えることと:

そして/または、1|1\rangleの状態の方向を逆転させることです:

これらのゲートとHゲートを使って、小さな回路を作ってみましょう。調査しているゲートを2つのHゲートの間に挟んでみてください。それぞれのゲートの動作を推測し、振幅木を描いて、正しいかどうかを確認してください。

Hゲート、Zゲート、Xゲートで様々な回路を作ってみてください。あなたのモデルは、正しい結果を予測できますか?

IBM Quantum Composerで試してみましょう