今回はコーディングや数式はないです。
Qiitaに初めて量子コンピュータのプログラミング記事を投稿したのが
2020/12/17
でした。そこから2ヶ月。手を動かして感じたことを書いてみます。1
量子力学を専門的に学んだこともないですし、pytyonも書けない状況からスタートしました。
量子プログラミングは、ひたすら面倒。
量子プログラミングは、ひたすら面倒です。何が面倒かというと、
- 非常に低レベルな部分からのフルスクラッチを強いられる
ということが、まだそれなりにあるということです。AND,OR,XORなどを並べて
アルゴリズムを実装しているような感じです。これだけでも面倒です。
ライブラリを使うのにもある程度知識は必要
幸いにも、ライブラリがあったりします。ただライブラリといっても optimize()
みたいな
ものではなく、アルゴリズム1つ1つが存在します。
なので、そのアルゴリズムが何を解くもので、何を入力として、何を出力とするのかを
理解していないと使えないというケースが多くあります。
地獄のデバッグ
量子状態は、量子ビット数に対して空間が指数的に広いという特徴があります。
ただ広いだけでは困ってしまうのですが、構造をうまく使ったり縛りを入れることで
半ば裏道のような経路を通って答えにたどり着けたりします。
式変形を紙の上で追うと結構すっきりしているアルゴリズムも多いのですが、
AND,OR,XORなどを並べてアルゴリズムを実装しているような感じ
ですから、、結構な量(数十~数百)の論理演算の組み合わせとなり、typoも発生する可能性が十分あります。
しかし 空間が指数的に広い
ので、どこが間違っているか以前に、「そもそも間違っているのか?」を判断することも容易ではありません。
例えば10量子ビットの回路の場合、ある論理演算の組み合わせは1024 x 1024 の(1つの)複素行列になります。
この成分1つ1つが理論式通りの係数になっているか確認することはほぼ不可能です。
そして、どこの論理演算が間違っているから行列が間違っているのか を特定することも非常に難しいです。
いまはシミュレーターで動作確認できる規模しか扱わない(実機の量子コンピュータがそもそも大規模問題がほぼ出来ないレベル)ので
まだいいですが、シミュレーターで扱えない規模の量子コンピュータになってきますと、「そもそもどうやってデバッグするのか(理想的な挙動が分からない)」という問題が出てきます。
日本の量子コンピュータ技術者は圧倒的に少ない気がする
量子プログラミング自体は、量子力学がわからなくてもできると思います。
ほぼ力学の話は出てきません。代わりに行列とベクトルを多用します。基本的にゴリ押しでいけるっちゃいけます。
ただ、行列とベクトルを多用することに抵抗感がある方も多いですし、量子アルゴリズムを見ても「xxに使えそう!」ということが
自明ではないようなものが多いです。
そういうこともあって、ハードルが高く、基本アルゴリズムのところで諦めている方も多いんじゃないかと思われます。
(よって、人口があまり増えず、結構な頻度で見知った人に遭遇する)
これは、教育カリキュラムが整備されていない状態であるためと思います。
しかし、量子はまだお金になるのかどうかわからない上に、日本企業も本腰という感じはあまりないので、
正直、死に体の日本の大学では手を出す余裕もない環境かもしれません。(個人の印象です)
プログラミング環境は整えやすい
よくもわるくも、現状の量子プログラミングはまだ低級言語です。
なので、python1つあればいいし、そんなに多数の機能は使わないと思います。
「pythonで機械学習」と言われても私は全くわかりません。
それでも「pythonで量子プログラミング」が出来ているのは
「listとarrayとprintぐらいがわかればなんとかなっちゃう」というぐらいに「ほぼ関数電卓」なのが大きいと思います。
私はpythonをやるモチベーションが量子プログラミングにありましたが、これは結構いいやり方だったかもしれない。
そんな人、あまりいないとは思いますが。
ちょっと勉強するだけでもリテラシーが上がっていく
量子コンピュータ関連、各社が自分たちに都合のいいことを言っているケースがすごく多いです。2
「嘘でない範囲で話しを盛る」 のが普通な感じです。量子以外でもよくあることですが、度合いが結構ひどいと思います。
それを見抜く力は、解説本を読むだけでは身につかないと思います。
一次ソースである論文とか教科書をやって、自分で判断していくしかないです。
量子コンピュータを勉強している人は珍しいので、ちょっと勉強するだけでもリテラシーは(偏差値として)かなり上がります。
量子プログラミングしていると、量子ビットとか、エンタングルメントとか、怖がる暇がないというか、飽きるぐらい当たり前に
使っていきますので、第三者から見れば「つよい・・・」という感じになります。
私自身、エンタングルメントとは何かということをよくきかれるのですが、これを自分の言葉で説明できるというのは
良いことです。
(今の)量子コンピュータでできること、できないこと がちょっとわかる
今の量子コンピュータでできること、できないことがちょっとわかるようになります。
「何ができるようになったら革新が起きるのか」もちょっとわかるようになります。
ただ量子コンピュータは量子情報理論やデバイスとも密接に関係していて、非常にディープな分野ですので、
「地図を見ながら歩けるようになる」レベルですら相当の努力が必要でしょう。
結論
こんな人は量子コンピュータに向いていると思う。
- 線形代数が好き
- 量子コンピュータにロマンを感じる
- とにかく勉強することが好き
- ドヤりたい
上記が私ですね。
追記
多くの方に読んでいただけているようです。
ありがとうございます。
結構過激な記述もありますが、あえて編集などはしないことにします。