post Image
エンジニアキャリアゼロのCFOが量子コンピュータを勉強してみる(旅立ち前夜) – 1

はじめに

自己紹介

非エンジニアキャリア一筋でやっておりまして、現在はベンチャーのバックオフィスの責任者をやっております。
コンサルティング会社にいたり金融業界にいたりしまして、金融関連ではM&A→MBA→投資銀行を経て、今に至ります。

なお、ここで記載している内容は私個人の現時点での理解(かつ勉強は道半ば)でありまして、所属する組織等の見解を代表するものではありませんのでご了承ください。今後勉強が進むにつれて内容を修正/更新する可能性があります。

量子コンピュータとは?

量子コンピュータは、私達が普段使う一般的なコンピュータ(以下、従来型のコンピュータまたは古典コンピュータといいます)とは異なる仕組みで動作します。
実用化のあかつきには、重ね合わせなど量子力学ならではの性質を使って、組み合わせ最適化問題などある種の問題を従来型のコンピュータに比べ高速で解くことができるようになると言われています。
すべての分野において量子コンピュータが優位なのかというとそうでもないようなのですが、機械学習や素因数分解においては、古典コンピュータを上回る性能を示す可能性が指摘されており、人工知能(AI)の性能を加速する研究も始まっています。このあたりがとってもわかりやすく、かつパワフルに説明されているのがこちらの本です。
https://amzn.to/2CXdyIv
また、その他の応用分野として、創薬、農業、新材料開発などで活躍することが期待されています。

動機

なぜ量子コンピュータはすごいのか?なぜAIの性能を加速させる可能性があるのか?
わかったようなわからないような感覚がありました。もう少しわかるようにいろいろ見てみよう!
と考えたのが勉強してみようと思った背景です。
幸い、世の中には様々な本が出ていますし、後述する無料オンライン講座もあるので、これらを活用できると考えたというのもあります。また、私自身は現在事業会社のバックオフィスにおりますので日々コードを書いているわけでもないのですが、非エンジニアとしてどこまで理解できるか、に挑んでみようと思います。

夜な夜なビデオを見たり週末にちょこっと見たりと、亀の歩みになるとは思いますが、せっかく新しい分野が勃興するので、垣間見てみようという感じです。

教材について

MIT(マサチューセッツ工科大学)の提供するオンライン講座を受けてみました。無料です。
手始めにQuantum Information Science I, Part 1
というのを一通り受けました。一通りというか、大体2,3回ずつビデオを見たと思うので一通りではないのですが、それなりに味わい深いものがあります。
講座が開かれた時期ならば有償で受講証明も取れたようですが、今は期間終了につき取れなくなっていますのでご注意ください。

講座について

すごく良い講座です。講師のうち一人が書いた Quantum Computation and Quantum Information という本があってこれもとても良いのですが、この講座では初期から課題で手を動かす設計になっているのが違いです。どういうことかというと、本は第1章ではいくつかのアルゴリズムを紹介していて、何ができるかを駆け足で伝える設計になっているのですが(2章目から問題がいっぱい出る)、講座は全く容赦なく、地味な計算がいきなり出てきます。どちらが良いかは勉強中の今の自分には判断できませんが、このオンライン講座を受けて手を動かして初めてわかったことも多いので、これはこれで収穫が大きいと思います。いやになってしまう人も多いと思いますが・・・。

講師は間違いなく豪華。Isaac Chuangは先程の本の著者の一人で、講義はわかりやすく情熱的。文句なしです。
一方講義のほとんどはショア先生。有名なショアのアルゴリズムを生み出した天才です。この人の場合は、天才過ぎて授業がむずいという問題がありますので、これは頑張ってついていくしかありません。計算をサクサク進めていくのですがついていくのが大変というわけです。いつかわかるようになるのかな。。

講座は英語、字幕はあります。日本語字幕はありません。

内容

第1部 量子及び古典計算の基礎

量子計算の歴史から始まり、reversibility(可逆性というのかな)のコンセプトが出てきます。一旦は量子コンピュータから離れ古典コンピュータに関する話になるのですが、可逆論理ゲートとして紹介されるNOTゲート、制御NOTゲート、トフォリゲート、フレドキンゲートなどはあとでも出てくるものなので、基礎をみっちり教えてくれます。

これらを組み合わせて回路を組むのが練習問題になっています。

第2部 量子ビットとテンソル積

ここからはショア先生の出番です。
計算の仕方が出てくるのでいよいよ本格的に手を動かす段階でもあります。
線形代数が出てくるので高校時代の知識を思い出す必要がありますが、テンソル積というのが出てきたりと新しい挑戦も盛り沢山です。

以下、講義や演習問題をやってみて気づいたことを書いておきます。

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

Equivalent quantum states

これは4つの選択肢それぞれにつき計算してみればわかります。
4つ目の式でeが出てくるので身構えるかもしれませんが、オイラーの式
$$ e^{i\theta} = \cos\theta + i\sin\theta $$
を使えば、位相が$\pi /2$のときに$\cos\pi/2$のほうが$0$、$i \sin\pi/2$のほうが$i$になります。なので、
$$  \frac{e^{i\pi /2}+1}{2} \ket{0} = \frac{i+1}{2} \ket{0} $$

おなじく1のほうも
$$  \frac{e^{i\pi /2}+1}{2i} \ket{1} = \frac{i+1}{2} \ket{1} $$
となります。
さて、4つの選択肢のうち1つ目と違うように見えるのですが(実際に違うのですが)、0と1の両方の状態に等しく位相が変換されて(回転されて)いるので、状態としては同じということになります(up to global phaseという表現がありますが、その部分)。

何を言っているかというと、1個めの選択肢の0と1の両方の項に、等しく$\frac{i+1}{\sqrt{2}} $をかけてあげれば4つ目の選択肢になります。このかけてあげた係数は$\pi/4$だけ全体の位相(グローバルフェーズ)を変化させたものに該当するので、それをかけても状態は変わりませんよ、ということと思います。
複素数を使ったここでの取扱はあとで何度も出てくるので、オイラーの公式を確認しておくと良いと思います。(例えばこちらのリンクが参考になります:https://tech.nikkeibp.co.jp/dm/article/COLUMN/20150525/419964/?P=2)
私はこのeの扱いに手間取りましたが、あとで何度も出てくるのでやっておいて損はないと思います。

Valid unitary matrices

この4つ目も複雑に見えますが、計算を普通にやれば大丈夫です。行列のダガー(随伴行列。転置して複素共役を取る)ともとのやつをかけ合わせて単位行列になればOKです。(実際なります)

Continuous rotations of the Bloch sphere

ブロッホ球の上での回転操作を行列で表現するのがテーマです。
$z$軸に関して$\theta$回転するとすると、パウリz行列を使って、

\sigma_z = 
\begin{pmatrix}
1 & 0 \\
0 & -1 
\end{pmatrix}


$$ e^{-i \theta \sigma_z /2 }$$
いきなりなんの計算かと思うわけです。eの右肩にパウリ行列が出てきてなんのことやらと。。

ただ、これはあとの練習問題などでも結構出てくるので、ここで教わる式の展開のしかた(eの右肩に行列が乗っかっているやつを行列で表現する。)は見ておくと良いと思います。
ここでは右肩に乗っているパウリ行列の各要素をexponentiateする(と先生は言っている)ことになります。行列の指数関数というもののようです。ここでは対角行列の指数関数になるので、行列の対角の要素の指数を取ればOKです。(私自身は咀嚼しきれていませんが、一旦は丸呑みします。) その結果、

e^{-i \theta \sigma_z/2 } = 
\begin{pmatrix}
e^{-i \theta /2 } & 0 \\
0 & e^{+i \theta /2 }
\end{pmatrix}

となりますので、これはグローバルに位相を変えてあげると、

\begin{pmatrix}
1 & 0 \\
0 & e^{i \theta}
\end{pmatrix}

これがz軸を中心とした90度の回転操作に該当します。

Single-qubit rotation operators

今度はy軸を中心とした回転。

z行列と違って対角行列ではないので、やり方の一つは、何らかの行列を使って対角化して、先程のz行列と同じように計算するやり方。

授業ではもう一つのやり方をしていて、テイラー展開を使っています。

$$ e^{-i \theta/2 \sigma_y} = I +i \left(\frac{\theta}{2}\right)\sigma_y + \frac{1}{2!}i^2 \left(\frac{\theta}{2}\right)^2\sigma_y^2 + \frac{1}{3!}i^3 \left(\frac{\theta}{2}\right)^3 \sigma_y^3 + \dots $$
偶数番目の項と奇数番目の項をくくると、
$$ = I \bigl(1 -\frac{1}{2!} \left(\frac{\theta}{2}\right)^2 + \frac{1}{4!} \left(\frac{\theta}{2}\right)^4 + \dots \bigr) +i \sigma_y \bigl(\frac{\theta}{2} -\frac{1}{3!} \left(\frac{\theta}{2}\right)^3 + \frac{1}{5!} \left(\frac{\theta}{2}\right)^5 + \dots \bigr)$$

偶数番目の項の集合体は行列としてはI(単位行列)がかかっているので、左上と右下の要素になります。奇数番目の項は$i \sigma_y$がかかっていますので左下1、右上−1のパウリy行列を反映することになります。それぞれの行列の和は、じっと見てもわからないですがそれぞれ$cos$と$sin$になります。マクローリン展開と言うもののようですが、0を中心としたテイラー展開に当たります。

こちらも参考になると思います。
https://whyitsso.net/physics/quantum_mechanics/Pauli_matrices.html

なんだかまどろっこしいことをしているように思いますが、後の練習問題ででてくるので、見ておくと良いと思います。(プロブレムセット3などでもそれが求められます)

長くなりそうなので今回は一旦ここまでにします。引き続き書いていきます。


『 機械学習 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。