量子コンピューターで機械学習を学ぼう!「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ゲートが入っております。
H(アダマール)で重ね合わせ状態になるので、1の時の場合…
CNOTゲートを通ってターゲット量子ビットが0から1に反転。
両方とも1になります。
こちらは0の場合。
0のままなのでスルーで、ターゲット量子ビットも0。
両方とも0になります。
確率にすると、00が50%、11が50%出ると言っています。
00と11しか出ない状態なんですね🧐
さらに言うと、「私が0の時、あなたも0になる」
「私が1の時、あなたも1になる」という回路という事になります。
エンタングルされた状態
↑の回路のように、同じ動きをする量子ビットが2つあったとしましょう。
そう!エヴァの第七使徒 イスラフェルみたいなやつですね👯♂️
片方の量子ビットは「1」を指している時、もう片方の量子ビットも「1」を指している。
2つの量子ビットを遠く離して再度はかると、2つは同じ動きをする👯♂️
2つの量子ビットが遠くにいても同じ状態というのを「エンタングルされた状態」または「量子もつれ」と呼ぶそうです。
ふむ。エンタングルの状態はわかったんだけど、その状態になると何かあるのん?と量子素人の感想😥
なので再び同僚のM君に聞いてみました。
ヤマモモ「エンタングルされないと、どうなるの?🤔」
M君「量子の世界で起こる不思議な現象の恩恵が受けられなくなるよ💧」
「エンタングルは量子コンピュータの超コア技術であり、必要不可欠」だとM君は言っていました。
詳細は難しいけど、この不思議な繋がりが量子コンピュータの計算能力を高めているんですね😇ありがとおーM君!✨
量子機械学習に便利な回路
今までアダマールとかCZとかXとか教えてもらいましたが、ベル回路で量子状態を作れるようになりました。
ここで更に新しい回路が追加されます…🫠(2:48:31)
AngleEmbeddingを使った回路を作成
機械学習の講義では正解に近づけるため、関数のパーツ(数字を入力したら何か結果を出力するもの)を用意する必要がありました。
今回のAnglermbeddingを使った回路は、量子ビットで結果を測定すると入力に応じて何か結果出てくる回路だそうです。
あれ、じゃあ量子回路って関数と同じ役割?🤔
前回使ったシグモイド関数とかに代用できる!という事で、量子回路を関数パーツとして使うのが量子機械学習なんですってよ😳 (2:53:43)
【おさらい】機械学習とは
関数を自動的に生み出すこと。
線形関数と非線形関数を足し算しまくって複雑な関数を作れば合う関数が見つかるかもね?ということ。
【おさらい】ニューラルネットワークとは
何か入力し、ニューラルネットワークで調整しながら(何か変化するパラメーターで)正解の出力結果に近づけること💡
でもAnglermbeddingはいつも同じ結果しか出せないそうです(同じ数字を入れたら毎回答えは同じ)
違う結果が出るようにパラメーターを持つ量子回路も必要になるわけっすね🤨
BasicEntanglerLayers
BasicEntanglerLayersというパラメーターを導入するそうです。(2:55:56)
wights(重み)というのが「この要素は大事かな?」という重みをかけて足し算して内積をする。(内積って何?😂)
重みが小さければ関係ないと切り捨てるということ。
内積って‥何?
量子回路をニューラルネットワークに組み込む
前回同様、Pytorchとかインストールして「とある関数」を生み出します。
目標は前と同じ、この関数に合わせてみろ!ってやつです🤓
今回は大関さんが後半にやる、もっと複雑な関数にヤマモモも挑戦しましたw(4:18:03〜大関さんが試している内容)
バラバラに散ってる!そして、前より複雑ぅ!!😵💫
前回は自分で一次関数と、シグモイド関数を用意して、これで合わせてね?と試してみました。今回はどうするんでしょう?🤔
前回と同様にリシェイプしてパイトーチが使えるテンソル形式に変えます。
これらのデータセットにしてトレーニングデータとテストデータに分けます。(3:16:00)
などここらへんは前回と同じ事をします。
量子回路を用意する
機械学習だけでも難しいのに量子回路入れたらもっと難しくなったよ😇
大関さんの言葉メモを残しておきますね…
今回は2量子ビットの結果(2つの数字)が出てくるんですが、
2つの数字のうち、どっちの数字が重要?と重みをかけているそうです。
それによって、どっちの結果が重要かニューラルネットワークが調整してくれる。
で、その結果を1つにまとめているという内容になっているとの事です。
うーーん、難しいなぁ😱
学習結果は如何に!?
おおおお!?頑張っているような気がする!!✨
もう少し中心の高低差がある感じだと尚良しですが…🥺(あと一歩、惜しい!)
少なくとも前回のシグモイド関数の初稿よりは学習できていると思いますw
【おまけ】アニメーションさせてみる
大関さんの動画はここまでだったんですが…
このQC4U2の解説ページには「アニメーションをさせる」という手順も載っていたので、ヤマモモ挑戦してみました🫡
な、なんかイメージとちがーーーうwww
もっと線がウネウネ動くイメージだったんだけど、カクカクしてるーー😂
学生時代、デコメを作るバイトをしてたんですが…それを思い出しましたw懐かしぃぃ🥹
感想
今回は、第1回目と第2回目の集大成って感じでした…!✨
やっぱり高校数学の話しが出てくるとわからんとです(´・ω・`)💦
でも普通の高校行ってたとしても、数学苦手だったので、わからなかったかもなーーw(開き直り)
でもね「ここは、こういう事かな?」とコードを見てちょーーーっとだけ理解はできるようになってきました!
第1回目よりレベルアップはしてると実感はあります💪
これも大関さんの丁寧な説明のおかげです🥺
第4回の講義はもう見たんですが、何回も繰り返し見ないと理解できないんですよね><
がんばるぞい! ノシ
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?