見出し画像

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

こんにちは、デザイナーのヤマモモです!🙇‍♂️
今日も引き続き、大関さんが量子コンピューターを無料で教えてくれるというオンライン講座の第3回目のレポートの後半を書きます😄
前に書いた部分は省略して省エネで書いて行きますので、ご了承ください😣

↑前回の記事

会員登録してない人でもこの動画視聴できますので、是非御覧ください!


前回のおさらい

反転術式

前回は量子回路の事を大関さんが教えてくれました👏
「CZゲート」「PauliX」「CNOTゲート」というものを通ると、反転術式が行われるという事でした。
詳しくは前回の記事を読んでね🥹

ベル回路

n_qubits = 2
dev = qml.device('lightning.qubit', wires=n_qubits)
@qml.qnode(dev)
def circuitBell():
  qml.Hadamard(0)
  qml.CNOT([0,1])
  return qml.state()

いつも通り大関さんからコピペさせていただきます!

ベル回路の状態をイラスト化

前回の復習!
制御量子ビットにアダマールとCNOTゲートが入っております。

1の場合

H(アダマール)で重ね合わせ状態になるので、1の時の場合…
CNOTゲートを通ってターゲット量子ビットが0から1に反転。
両方とも1になります。

0の場合

こちらは0の場合。
0のままなのでスルーで、ターゲット量子ビットも0。
両方とも0になります。

左から「00 / 01 / 10 / 11」の確率を表しています

確率にすると、00が50%、11が50%出ると言っています。
00と11しか出ない状態なんですね🧐

さらに言うと、「私が0の時、あなたも0になる」
「私が1の時、あなたも1になる」という回路という事になります。

エンタングルされた状態

↑の回路のように、同じ動きをする量子ビットが2つあったとしましょう。

新世紀エヴァンゲリオンの第七使徒「イスラフェル」

そう!エヴァの第七使徒 イスラフェルみたいなやつですね👯‍♂️

エンタングル=遠く離れた場所でも同じ状態

片方の量子ビットは「1」を指している時、もう片方の量子ビットも「1」を指している。
2つの量子ビットを遠く離して再度はかると、2つは同じ動きをする👯‍♂️
2つの量子ビットが遠くにいても同じ状態というのを「エンタングルされた状態」または「量子もつれ」と呼ぶそうです。

ふむ。エンタングルの状態はわかったんだけど、その状態になると何かあるのん?と量子素人の感想😥
なので再び同僚のM君に聞いてみました。

■極低温にする等の超特殊な空間を作ることで、量子の世界を作り出している
■量子の世界では不思議なことがいろいろ起こる(量子もつれ、トンネル効果とか)
■それらを賢く活用して、計算をするのに利用している

byM君

ヤマモモ「エンタングルされないと、どうなるの?🤔」
M君「量子の世界で起こる不思議な現象の恩恵が受けられなくなるよ💧」

「エンタングルは量子コンピュータの超コア技術であり、必要不可欠」だとM君は言っていました。
詳細は難しいけど、この不思議な繋がりが量子コンピュータの計算能力を高めているんですね😇ありがとおーM君!✨

量子機械学習に便利な回路

今までアダマールとかCZとかXとか教えてもらいましたが、ベル回路で量子状態を作れるようになりました。
ここで更に新しい回路が追加されます…🫠(2:48:31

AngleEmbeddingを使った回路を作成

入力された数字に応じて角度を回転させる量子回路

機械学習の講義では正解に近づけるため、関数のパーツ(数字を入力したら何か結果を出力するもの)を用意する必要がありました。

今回のAnglermbeddingを使った回路は、量子ビットで結果を測定すると入力に応じて何か結果出てくる回路だそうです。
あれ、じゃあ量子回路って関数と同じ役割?🤔
前回使ったシグモイド関数とかに代用できる!という事で、量子回路を関数パーツとして使うのが量子機械学習なんですってよ😳 (2:53:43)

【おさらい】機械学習とは
関数を自動的に生み出すこと。
線形関数と非線形関数を足し算しまくって複雑な関数を作れば合う関数が見つかるかもね?ということ。

【おさらい】ニューラルネットワークとは

100%正解が出るようになるまで調整する

何か入力し、ニューラルネットワークで調整しながら(何か変化するパラメーターで)正解の出力結果に近づけること💡

でもAnglermbeddingはいつも同じ結果しか出せないそうです(同じ数字を入れたら毎回答えは同じ)
違う結果が出るようにパラメーターを持つ量子回路も必要になるわけっすね🤨

BasicEntanglerLayers

BasicEntanglerLayersという重み付けのパラメーター

BasicEntanglerLayersというパラメーターを導入するそうです。(2:55:56)
wights(重み)というのが「この要素は大事かな?」という重みをかけて足し算して内積をする。(内積って何?😂)
重みが小さければ関係ないと切り捨てるということ。

内積って‥何?

そのうちヤマモモは 考えるをやめた。

量子回路をニューラルネットワークに組み込む

前回同様、Pytorchとかインストールして「とある関数」を生み出します。
目標は前と同じ、この関数に合わせてみろ!ってやつです🤓
今回は大関さんが後半にやる、もっと複雑な関数にヤマモモも挑戦しましたw(4:18:03〜大関さんが試している内容)

こちらが今回合わせてほしい関数

バラバラに散ってる!そして、前より複雑ぅ!!😵‍💫

前回は自分で一次関数と、シグモイド関数を用意して、これで合わせてね?と試してみました。今回はどうするんでしょう?🤔

前回と同様にリシェイプしてパイトーチが使えるテンソル形式に変えます。
これらのデータセットにしてトレーニングデータとテストデータに分けます。(3:16:00)
などここらへんは前回と同じ事をします。

量子回路を用意する

機械学習だけでも難しいのに量子回路入れたらもっと難しくなったよ😇
大関さんの言葉メモを残しておきますね…

量子回路の説明

今回は2量子ビットの結果(2つの数字)が出てくるんですが、
2つの数字のうち、どっちの数字が重要?と重みをかけているそうです。
それによって、どっちの結果が重要かニューラルネットワークが調整してくれる。
で、その結果を1つにまとめているという内容になっているとの事です。
うーーん、難しいなぁ😱

学習結果は如何に!?

結果発表!

おおおお!?頑張っているような気がする!!✨
もう少し中心の高低差がある感じだと尚良しですが…🥺(あと一歩、惜しい!)

これが前回のシグモイド関数で出した初稿

少なくとも前回のシグモイド関数の初稿よりは学習できていると思いますw

【おまけ】アニメーションさせてみる

大関さんの動画はここまでだったんですが…

このQC4U2の解説ページには「アニメーションをさせる」という手順も載っていたので、ヤマモモ挑戦してみました🫡

【GIF】アニメーション結果

な、なんかイメージとちがーーーうwww
もっと線がウネウネ動くイメージだったんだけど、カクカクしてるーー😂

過去に作ったオカメインコのデコメ

学生時代、デコメを作るバイトをしてたんですが…それを思い出しましたw懐かしぃぃ🥹

感想

今回は、第1回目と第2回目の集大成って感じでした…!✨
やっぱり高校数学の話しが出てくるとわからんとです(´・ω・`)💦
でも普通の高校行ってたとしても、数学苦手だったので、わからなかったかもなーーw(開き直り)

でもね「ここは、こういう事かな?」とコードを見てちょーーーっとだけ理解はできるようになってきました!
第1回目よりレベルアップはしてると実感はあります💪
これも大関さんの丁寧な説明のおかげです🥺

第4回の講義はもう見たんですが、何回も繰り返し見ないと理解できないんですよね><
がんばるぞい! ノシ

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

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