量子コンピューターで機械学習を学ぼう!「QC4U2」に参加してみた-第1回目-
こんにちは、デザイナーのヤマモモです!🙇♀️🙇♀️
私が勤めている代表の大関さんが量子コンピュータを無料で教えてくれるというオンライン講座がスタートしました!
今回はそのイベントに参加レポートを書きます✨️
私ね、バリバリの文系なんですが。。。こんな理系の分野できるのかな〜と楽しみな半面、心配だったりします🥹
ただ確率振幅さんが、「私も元々文系だった。文系の人でも理系脳持ってたりする。」と言っていて超文系の私でも心強かったです!👍
2/2日(金)17:00〜始まったのですが、私は子供の習い事の送迎でリアルタイムでは見れませんでした😅
なのでアーカイブから勉強してこの感想文をまとめています。
会員登録してない人でもこの動画視聴できますので、是非御覧ください!
ちな、この動画6時間超えやで…🫠なのでほぼ1.75倍速で見ましたw
今回のメインテーマは量子機械学習
今人工知能が熱いですね!文章作ってくれたり、音楽作ったり、絵を書いたり。
人工知能もまっさらな状態だと赤ちゃんと同じで何も知らない状態です👶
これは犬だよ🐶これは猫だよ🐱と教えてあげる事を機械学習と言って、これを量子コンピュータで行うというのが今回のテーマという事です。
んで今回のレジュメがこちら↓
1-1. プログラミング環境の準備
1-2. Pennlylaneの導入および紹介
1-3. 量子ビットを操る
1-4. IBM社製の量子コンピュータを操作する
1-1. プログラミング環境の準備
Googleのアカウントを作って、Colaboratory(コラボラトリー)を開きます!
コラボラトリーってエンジニアから共有されたことはあるけど、結局何やねん?(私もよくわかってない)
このコラボラトリーを使うと、パソコンの開発環境を整えなくても、このweb上でPython使えちゃうよというツールだというのです。
あとは私たちがプログラムという呪文を唱えるだけ。
そうするとコンピュータが計算やら面倒な事をしてくれるのです🤩
1-2. Pennlylaneの導入および紹介
コラボラトリーの利点として、先人たちが作ってくれたライブラリがあるので、それが借りられるそうです。
まずは「!pip install pennylane」と呪文を唱えてペニーレインというものを入れました🪄︎︎✨
他にも色々入れて環境構築は完了しました!
大関さんがコメントにコードを書いてくれたおかげて、めちゃ簡単&大関さんの背景画面と自分の画面見比べて同じだなってわかってめちゃわかりやすかった!
ついに量子コンピュータのプログラミングができるそうです!わくわく😊
ここまでで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でもない状態(重ね合わせの状態)を理解する=量子コンピュータを理解するという事なんだって🥺
Πの小話
piというのはπ(円周率)の事だそうです。
π=180度って大関さんが言ってたんですが、私が数学よくわかんなくてw引用させてもらいます💦
え、ラジアンって初めて聞いた言葉だし、引用読んでも理解できん💦やっぱ数ⅠAしか受けてないからか〜><
まぁいいやw これはpi/2って事なんで180の半分だから90度という図です。
だから↑の画像はちょうど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でどっちがいいかな〜?と占いするのが量子アニーリングの手法なんだそうです🔮✨️
量子アニーリングについては詳しくは別の記事に書きまーす!
関数を作る
量子アニーリングの話をはさんじゃったんですが、講義の話に戻ります!
ここまで色々なコードを書いてきました(私は大関さんのコードをコピペしただけだけど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とは?
shots = backend.configuration().max_shots
↑そのマシン(量子コンピュータ)は最大何発打てますか?と聞いている。
1ショット打つ=量子回路を量子コンピュータに焼き込んで計算する(0か1か測定する)こと。
回路を焼き込むというのは時間がかかるし次から次へと違う計算するのは勿体ないので1回焼きこんだら、それで何発も打ったほうがお得🤩
しかも量子コンピュータは確率的な答えを出してくるから、毎回違う答えを出して来るので(サイコロみたいに)何度も試した方がいいよね🎲
だから何発も打てた方がいい!という事で、何発打てますか?(できる限り多く打てた方がいい)と聞いているらしいです🤔
実際にjobを量子コンピュータに投げる
シミュレーターで書いたように、コードを書いてjobを量子コンピュータに投げました!
めちゃ混んでるのでこのままグルグル待たされ続けています🫠
結果が出たっぽい?
面倒なので放置して、(金曜日だったので)翌週見ると約1時間半かかってジョブが完了されていました。
もはや何を計算してたのか忘れましたw0が10万回出たってこと?なのかな。
受講の感想
という感じで講義をかいつまんで書いてみました。
これを見たからといってプログラミングがすごいできた!という感じはないんですが、あぁ〜こういう事してるのねというザックリとした事が知れたって感じでしょうか。
コピペしてただけですが、プログラミング体験はできた感じがしますw
あとは大関さんがコードを翻訳してくれるので、とっつきにくさは無かったです😎
昔読んだ「ふりがなプログラミング」の本に近いものを感じました。
確率がコントロールされるのが量子コンピュータというのは初耳でしたw大関さんの会社の社員なのに知らなかった😂
量子コンピュータってスーパーコンピュータみたいなイメージあったので、そういう分野が得意なんだと知れました。
でも量子コンピュータがグルグルはできたけど、これがどうやって実務で使うのかまではまだわかりません。
今後の講義に期待です ノシ✨
↑こちらが次回講義の内容です。
↓次の記事
この記事が気に入ったらサポートをしてみませんか?