見出し画像

量子コンピューターで機械学習を学ぼう!「QC4U2」に参加してみた-第1回目-

こんにちは、デザイナーのヤマモモです!🙇‍♀️🙇‍♀️
私が勤めている代表の大関さんが量子コンピュータを無料で教えてくれるというオンライン講座がスタートしました!
今回はそのイベントに参加レポートを書きます✨️

私ね、バリバリの文系なんですが。。。こんな理系の分野できるのかな〜と楽しみな半面、心配だったりします🥹
ただ確率振幅さんが、「私も元々文系だった。文系の人でも理系脳持ってたりする。」と言っていて超文系の私でも心強かったです!👍

2/2日(金)17:00〜始まったのですが、私は子供の習い事の送迎でリアルタイムでは見れませんでした😅
なのでアーカイブから勉強してこの感想文をまとめています。
会員登録してない人でもこの動画視聴できますので、是非御覧ください!

ちな、この動画6時間超えやで…🫠なのでほぼ1.75倍速で見ましたw


今回のメインテーマは量子機械学習

今人工知能が熱いですね!文章作ってくれたり、音楽作ったり、絵を書いたり。
人工知能もまっさらな状態だと赤ちゃんと同じで何も知らない状態です👶
これは犬だよ🐶これは猫だよ🐱と教えてあげる事を機械学習と言って、これを量子コンピュータで行うというのが今回のテーマという事です。
んで今回のレジュメがこちら↓

  • 1-1. プログラミング環境の準備

  • 1-2. Pennlylaneの導入および紹介

  • 1-3. 量子ビットを操る

  • 1-4. IBM社製の量子コンピュータを操作する

1-1. プログラミング環境の準備

Googleのアカウントを作って、Colaboratory(コラボラトリー)を開きます!
コラボラトリーってエンジニアから共有されたことはあるけど、結局何やねん?(私もよくわかってない)

Colaboratoryとは
Colaboratory(略称: Colab)は、Google Research が提供するサービスです。 Colab では、誰でもブラウザ上で Python を記述、実行できるため、機械学習、データ分析、教育に特に適しています。

Google:よくある質問( https://research.google.com/colaboratory/faq.html?hl=ja#:~:text=Colaboratory%EF%BC%88%E7%95%A5%E7%A7%B0%3A%20Colab%EF%BC%89%E3%81%AF,%E3%81%AB%E7%89%B9%E3%81%AB%E9%81%A9%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)

このコラボラトリーを使うと、パソコンの開発環境を整えなくても、このweb上でPython使えちゃうよというツールだというのです。
あとは私たちがプログラムという呪文を唱えるだけ。
そうするとコンピュータが計算やら面倒な事をしてくれるのです🤩

1-2. Pennlylaneの導入および紹介

コラボラトリーの利点として、先人たちが作ってくれたライブラリがあるので、それが借りられるそうです。
まずは「!pip install pennylane」と呪文を唱えてペニーレインというものを入れました🪄︎︎✨

初めてコラボラトリーを触ったぞ!

他にも色々入れて環境構築は完了しました!
大関さんがコメントにコードを書いてくれたおかげて、めちゃ簡単&大関さんの背景画面と自分の画面見比べて同じだなってわかってめちゃわかりやすかった!

youtubeの画面にコードが出るのでわかりやすい!

ついに量子コンピュータのプログラミングができるそうです!わくわく😊
ここまでで1時間半!ながーーい!\(^o^)/

1-3. 量子ビットを操る

量子ビットを回転させる

ここからdevとかdefとかコードの解説しつつ、仮面ライダーとかセーラームーンとかCCさくらの雑談を経て(?)量子コンピュータを回転させるコードを入力しました。

こんな感じ

RXって書いてあるんですが、R=rotate=回転させる) / X=X軸という指示が書いてあります。
どうやら量子ビット、X軸に回転するらしいです(?)
(RZとかRYにすれば、Z軸やY軸も回転するんだって)

あとプログラミングの豆知識として「.」(ドット)というのは「〜の」と読むそうです。
なので、これはqmlのX軸をtheta(角度)分 回転させるよ、という意味だそうです。

回転させた量子ビットをイラスト化する

これだけだと良くわからないので、今の量子の状態をイラスト化できるようです。( 1:48:23〜 )
大関さんの解説の通りコードを入力して…

量子の向いてる方向のイラスト

イラスト出てきた!🥳
これが今の回路の様子(量子ベクトル=量子の向いてる方向)を絵にして表示してくれました!
これでもよくわかんないけどw

量子ベクトルを球体で描画する

もっとわかりやすくするために、次は球体の中に回路の様子を描画させるそうです。(2:07:13〜)
またまた大関さんのコードを入力…

球体の中の量子の向きを表示

なんか3D球体の中に矢印が出てきた!!🥳
この球体(ブロッホ球というらしい)の中の量子ベクトル(量子の向いてる方向)表示させているんだって。
【ピンク枠の中】にcircuit(-2)と書かれていますが、これは量子ビットをX軸-2回転した状態だそうです。
※circuitは回路という英語。

上向きが0で、下向きが1

上が0で、下が1

このブロッホ球…上が0で、下が1と書かれているんですが、これはビットの事だそうです。
通常のパソコンが0と1で描画するように、量子の世界では矢印の上向きが0、下向きが1と表すとのこと。
この↑画像だと0と1の間を矢印が横向きに指してるけど、0でも1でもないという謎の状態になりますね?🤔
大関さんいわく、この0でもない1でもない状態(重ね合わせの状態)を理解する=量子コンピュータを理解するという事なんだって🥺

Πの小話

pi=π=180度
pi/2=180度の半分だから90度

piというのはπ(円周率)の事だそうです。
π=180度って大関さんが言ってたんですが、私が数学よくわかんなくてw引用させてもらいます💦

πは何で角度180°を表しているのか
答えは、πを角度を表すために使用する場合には、「度(°)」ではなくて、「ラジアン(radian)」という単位で表されているからである。
ラジアンとは、国際単位系における角度の単位であり、「1ラジアン」は「円の半径に等しい長さの弧の中心に対する角度」と定義される。1ラジアンは通常の「度数法」では、(180/π)°で、約57.29578°に相当することになる。
これにより、πラジアンは180°であり、2πラジアンが360°であり、(π/2)ラジアンが90°ということになる。

ニッセイ基礎研究所:円周率πが現われる世界(3)-πが角度180°ってどういう意味-( https://www.nli-research.co.jp/report/detail/id=57132?site=nli )

え、ラジアンって初めて聞いた言葉だし、引用読んでも理解できん💦やっぱ数ⅠAしか受けてないからか〜><
まぁいいやw これはpi/2って事なんで180の半分だから90度という図です。

pi/2=180度の半分だから90度
=0と1の半分を指している

だから↑の画像はちょうど0と1の半分を指しています。

0でも1でもない状態とは

ここの話が面白かったので抜粋。
量子コンピュータ=0でも1でもない状態というのは多くの人が誤解しているというのです😨

ブロッホ球の図

例えばこの画像(ブロッホ球の図)のように0と1のちょうど中間を矢印が指している状態ってどんな状態なのでしょうか?
私は普通に0.5じゃね?🤪と安易に考えましたwがこれは違うんだって!

矢印の向きがどんな方向だとしても、量子コンピュータは普通のコンピュータのように0か1で答えを出してくる。
0か1しか出さないなら、それって通常のコンピュータと同じ結果じゃん?と思いませんか?🤔

★今までのコンピュータ
今までのコンピュータは指の動きのように0か1のスイッチする動きしかできなかったもの。

今までのコンピュータのイメージ

★量子コンピュータ
量子コンピュータも答えは0か1だけど、ぐるぐる回って答えを出す。(手首をぐるぐる回すイメージ)
でも、このぐるぐる回る途中の複雑な動きが重要なんだって。
その動き複雑な計算ができるかも?と言われているらしいよ。

量子コンピュータのイメージ

確率が変わる

じゃあ矢印の方向って何を表しているの?
実はこの矢印の向きで0か1か出す確率が変わるという事だそうです。
ブロッホ球の中の矢印が完全に上向きだったら0が100%出る。完全に下向きなら1が100%出る。
この矢印の上下の傾きによって0がxx%、1がxx%出るでしょう!となるそうです。
大関さんいわく、天気予報の降水確率と同じで確率がコントロールされるのが量子コンピュータなんだって☔️

量子アニーリングは占いみたいなもの

量子コンピュータといえば、量子アニーリングという言葉をご存知ですか?
私は入社したばかりの頃、量子コンピュータ=量子アニーリングと思っていたのですが、量子アニーリングとは量子コンピュータを使った最適化の「方法」の事です。
量子アニーリングの得意分野は0か1どっちかに決めてほしい問題に適応しています。
例えば目的地までの道案内で最短経路を探すような問題だと、右に行く、左に行く、バスに乗る、電車に乗るなどの選択肢を0と1で表現しているんだって🚌💨

バスに乗るか、電車に乗るか…

でも最初右に行っていいか、左に行っていいかわからない状態だから、0と1が50%ずつ出るフラットな状態にする。
そこから0と1でどっちがいいかな〜?と占いするのが量子アニーリングの手法なんだそうです🔮✨️
量子アニーリングについては詳しくは別の記事に書きまーす!

0と1どっちがいいかな〜?

関数を作る

量子アニーリングの話をはさんじゃったんですが、講義の話に戻ります!
ここまで色々なコードを書いてきました(私は大関さんのコードをコピペしただけだけどw)
このようなコードは今後何回も使うそうなんですが、これを毎回書くの大変だよね?ってことで、この書いたコードを省略できる=関数にするといいよ〜と教えてもらいました。

関数の書き方

複数あったコードを1行にまとめることができました。
↓私用メモ

def [関数の名前](state): 以下関数にしたいコード


アニメーションにする

量子ビット(矢印)が動いて確率を動かす事ができるまでできたのですが、実際に動いてないとよくわかんないよねって事でアニメーションにしていきます!

アニメーション生成してるよ

ここからはフォルダを作ったりAPNG(アニメーションPNG)をインストールしたり、ちょっとプログラミングっぽい内容をやりました。(2:52:14〜)
さっき作った関数も出てきたし、プログラミングしてるぜ!かっこいい〜という気持ちでw(コピペしてるだけなのにw)
んで書き出すのにちょっと時間かかったけど、実際に作ったフォルダの中にAPNG生成されてた!!😳

量子ビットの回転のアニメーション

じゃーん!すごいじゃろー!🤩
APNGで生成されたんだけど、noteではアニメーションされなかったのでgifに変換したから、ガタガタしててすまんね😥💦

量子ビット(矢印)を自由自在に動かすことが量子コンピュータの中で起こっているというのが可視化されました。
この画像はループしちゃってるんですが、最後の結果(0が出るか1が出るか)という確率が重要という事です。

確率だから適当であやふや…信用ないなーと思いそうですが、動かす器用さを利用して答えを確実に出すための工夫ができるのが量子コンピュータの特性✨
今までは0か1しかスイッチでしか出せなかったけど、ぐるぐる回せるんだから複雑な計算もできるようになるじゃない?という事だそうです。

0と1が何%の確率で出るか調べる

次に確率を調べることをしました。(2:40:41〜)

確率を調べる

π=180度の半分の90度(0と1の中間)を向いた状態の確率がこれです。
[0.5 0.5]なんで0か1が出るのは50%の確率だよーと当然の回答を返してくれました👀

1-4. IBM社製の量子コンピュータを操作する

あれ、今やってたのって量子コンピュータではないんですか?と私も混乱しました😂
今までやってたのはコラボ上で量子コンピュータを動かすシミュレーターだそうで💦実際に動かしてるわけじゃないんだって!
そうだったのー😳💦てっきり量子コンピュータ動かしてるかと思ってたw
という事でIBMのサイトで会員登録をして、コラボラトリーに戻りIBMトークンを連携させます。

max_shotsとは?

max-shots
shots = backend.configuration().max_shots

↑そのマシン(量子コンピュータ)は最大何発打てますか?と聞いている。

1ショット打つ=量子回路を量子コンピュータに焼き込んで計算する(0か1か測定する)こと。
回路を焼き込むというのは時間がかかるし次から次へと違う計算するのは勿体ないので1回焼きこんだら、それで何発も打ったほうがお得🤩
しかも量子コンピュータは確率的な答えを出してくるから、毎回違う答えを出して来るので(サイコロみたいに)何度も試した方がいいよね🎲
だから何発も打てた方がいい!という事で、何発打てますか?(できる限り多く打てた方がいい)と聞いているらしいです🤔

実際にshots数を聞くと10万発打てるよと返ってきました

実際にjobを量子コンピュータに投げる

シミュレーターで書いたように、コードを書いてjobを量子コンピュータに投げました!
めちゃ混んでるのでこのままグルグル待たされ続けています🫠

量子コンピュータの順番待ち中

結果が出たっぽい?

0が10万回出た?

面倒なので放置して、(金曜日だったので)翌週見ると約1時間半かかってジョブが完了されていました。
もはや何を計算してたのか忘れましたw0が10万回出たってこと?なのかな。

受講の感想

という感じで講義をかいつまんで書いてみました。
これを見たからといってプログラミングがすごいできた!という感じはないんですが、あぁ〜こういう事してるのねというザックリとした事が知れたって感じでしょうか。
コピペしてただけですが、プログラミング体験はできた感じがしますw

あとは大関さんがコードを翻訳してくれるので、とっつきにくさは無かったです😎
昔読んだ「ふりがなプログラミング」の本に近いものを感じました。

確率がコントロールされるのが量子コンピュータというのは初耳でしたw大関さんの会社の社員なのに知らなかった😂
量子コンピュータってスーパーコンピュータみたいなイメージあったので、そういう分野が得意なんだと知れました。
でも量子コンピュータがグルグルはできたけど、これがどうやって実務で使うのかまではまだわかりません。
今後の講義に期待です ノシ✨

↑こちらが次回講義の内容です。
↓次の記事


この記事が参加している募集

最近の学び

この記事が気に入ったらサポートをしてみませんか?