
量子コンピューターで機械学習を学ぼう!「QC4U2」に参加してみた-第2回目- 前編
こんにちは、デザイナーのヤマモモです!🙇♂️
今日も引き続き、大関さんが量子コンピューターを無料で教えてくれるというオンライン講座の第二回目のレポートを書きます😄
↑これ前回の記事です!
あのね、今回は前回よりパワーアップしてるし本格的に機械学習のコードとか出てくるから前半・後半にわけることにしました。
2/9日(金)17:00〜に配信されているのですが、相変わらず私は子供の習い事の送迎でリアルタイムでは見れませんでした🥲
なのでアーカイブから勉強してこの感想文をまとめています。
会員登録してない人でもこの動画視聴できますので、是非御覧ください!
前回のコード解説がここにあるよ↓
今回のレジュメはこれ↓
第2回 機械学習も始めよう
2-0. 前回の復習
2-1. PyTorchの導入
2-2. ニューラルネットワークの仕組み
2-3. ニューラルネットワークによる回帰
2-0.前回の復習
前回のIBMの量子コンピュータに投げたコードは間違っていたらしいです/(^o^)\ナンテコッタイ
そういや10万打って0が100%だったもんねw
というわけで。その修正講義が入りました。(1:03:56)
一部だけコードが違っていたのでそれを修正して再度量子コンピュータにjobを投げます。
IBMQの結果

π=180度の半分の90度(0と1の中間)を向いた状態の確率がこれです。
[0.5 0.5]なんで0か1が出るのは50%の確率だよーと当然の回答を返してくれました。
↑これは普通のコンピュータが計算した結果
今回は同じ内容を量子コンピュータくんに聞いた結果です!
今回もすぐ計算してくれるわけもなく量子コンピュータくんの列に並んでいたんですが…

完了したと思ったら、まさかのエラー\(^o^)/
でも私のコードミスとかじゃなく、IBM側のエラーっぽいんだよね😟
(この記事を書いてる時)大関さん含め、他のQC4U2のメンバーも同じ状態だったので…
今回は解決策がわからないので、大関さんのデータを借りますね😅

大関さんは3回試してみたそうなのですが、50% 50%のはずなのになんか偏ってない…?
実は現状のIBMマシンだとこれが限界らしく、このくらいの精度しかないんだって😱
こういう事から量子コンピュータはリスクがある=ノイズがあると言われてたりもするのですが、ノイズを補正して(誤り訂正符号というのを作って)リスクを減らしていなかないといけないそうです。
でも毎回1(右側)の方がいつも多いよね?😅
どうやら量子ビットによってクセがあるそうですよ。
これは今回使用した0番目の量子ビットのクセで、これ1番、2番と変えるとまた違ったクセがあるんだって。
なんでクセがあるの?というと量子コンピュータの製造工程でクセがついてしまうそうで。
コメントで「ギターやベースのネック補正みたいですね」と言われてる方がいて、あぁなるほど!🎸
(高校の時バンド組んでて、私はベースやってたのでそれで理解しましたw)
2-1. PyTorchの導入
ここからが今日の講義、機械学習を学ぼうが始まります。
まずPytorchをインポートします。(1:57:41)
PytorchとはMeta社のAI研究グループが開発したオープンソースの機械学習ライブラリ。
すでにコラボラトリーではPytorchはインストールされているそうなので、インポートするだけでOKです✨
そもそも機械学習ってどんな事?
「機械学習=関数の真似っこ」というものらしいです。
先生…私…関数も良くわからないんだーーー😭算数数学嫌いなんだもーん!🤮
なんかXとかYが出てきたのは覚えてる😵💫そのレベルですw

大関さんが簡単に関数の説明をしてくれたんですが、「y=f(x) 」という関数があります。(中学生の時やった気が…🫠)
機械学習というのは「このfの部分」を求める事だそうです。
それを求めるためにxとかyとかのデータをヒントに解く。
それが一次関数なのか二次関数なのか推定するというのが機械学習でやりたいこと👀
関数を求める意味

例えば↑のような画像があったとしましょう。
人間なら「これは🐶の画像ですね」と理解できます。
でも何も知らないコンピュータは🐱か🐶かの判別もつかないのです。
これをコンピュータが理解できるように、🐶の画像を見せたら「これは🐶です」わかるようにする関数を作る必要がある。
その関数を作るために、🐶の特徴何かな?と昔は調べていたけど、そんなものは見当たらなかった…😩
じゃあコンピュータ自身が自動的に関数作ったらいいじゃない!という考えになったそうで( Д ) ゚ ゚

話が飛躍してすぎてサンドウィッチマン状態(?)なんけどw
まぁ、そういう歴史があって機械学習というのは作り出されてきたそうで。
コンピュータが勝手に学習してくれて、🐶の画像から🐶の特徴を関数で生み出してくれる。そして、関数の結果「これは🐶です」と答えるようにしようというのが機械学習のやりたい事。
そのために私たちは、コンピュータ上でデータや画像などを用意してあげなくてはいけないし、コンピュータが使えるようにしなくれはいけないんだって。
2-2. ニューラルネットワークの仕組み
実際に簡単な機械学習を始めよう

今回まずやることは、これは何関数でしょう?とコンピュータくんにクイズをするという事だそうです🧠
大関さんの右にある波グラフで断片的なのヒント(例:黄色い点の数値)を与えて、答えられるかな〜?と。(2:08:10)
↑これはあくまで例
メモ:
numpy=数学の計算などをしてくれるライブラリ
numpyの中にあるrandomとか=乱数発生させる

はい、大関さんのコードコピペで実際にグラフにできました。
(横軸がxで、縦軸がtです。)
皆さんはご存知かもしれませんが、これは三角関数というものなんだって。(三角関数習うの高校2年で、数ⅠAしか履修してない私やってませんw)
これは点を100個生成しているからこのようにきれい並んでいるんですが。

点10個だと人間でも三角関数だとわからないかも?(点100個でも私はわからないけどね😂)
つまりヒント(データ)が多ければ多いほど人間もコンピュータも推定しやすいよね、という事です!
機械学習は外側のデータが正確に予測できない

外側?何の話かなと聞いていたら…
↑の左のような「点を繋げて関数を作りなさい」と言われたら実は色々な線が引けますよね?
この点の内側(画像の中心側)はそこまで大きな差はないけど、点の外側は色んな方向に行ってて予測が難しいよ、というお話だそうです😌
だからデータを用意するときはなるべく外側(端っこ)を取ってきましょうという事でした。(2:19:31)
データをリシェイプする
話それましたが、今出てきた三角関数のxとtのデータを リシェイプ(数学でいうところの行列やベクトルを作ること)をします!(2:23:54)
行列??ベクトル???🫠
ベクトルとか行列って何??

ベクトル=数字が1列に並んでいること
行列=数字が縦横にならぶ状態(※ 画像も行列の一種)
テンソル=数字が縦横奥行きと並んでいる様子。4次元以降もすべてテンソルと言う。
※画像は縦横ピクセル毎に数列が並んでいて、それをコンピュータが視覚的に変換して我々には絵に見えているという事🖼
デザイナーやイラストレーターの方は理解できると思うのですが、Illustratorで作ったデータってベクターっていいますよね?
ベクター(英: Vector)とは、コンピュータグラフィックスなどにおいて、点の座標とそれを結ぶ線(ベクター、ベクトル)などの数値データをもとにして、演算によって画像を再現する方式によって描かれる形式を意味します。画像のサイズを拡大・縮小すると、再計算された線とカーブで都度書き直されて表示されます。
あ、数学的な言葉出てきたよ!👀
なんか繋がった気がしたww
データをリシェイプする(再)
今でてきたxとtのデータを リシェイプ(行列やベクトルを作ること)をします!

(100,1)というのは縦100並べて、横1、数字を並べるのことなんだって。
さっきのクリーパーの説明だったらベクトルの事だね(^^)
今回は1つのデータからは1つしか結果が出てこないから1列で良いのだって。(だから(100,1)と表記)
機械学習は数字を沢山並べるそうです(うへぇ…🤮)
機械学習においてデータというのは行列やテンソルで蓄えることになるので、PyTorchではテンソルという形式を使ってデータを格納します。
私たちが用意した数字の羅列を、テンソルという形式にかぶせてあげればPyTorchが扱えるようになるそうです。(2:26:47)
前半戦の感想
今回から高校数学の内容が入ってきたので、前回より難しい感じはしました🥲
でもこれは普通の高校に行ってる方なら理解できる内容なんだと思います。(私がデザイン学科の高校で数ⅠAしか学んでいないという特殊な環境なだけ)
難しいな〜💦と思いながらも、大関さんはかなり優しく解説・翻訳してくれてるので私でもなんとかここまではついてこれてますw
後半は何回も見返して書いていきますので、お時間いただきま~す🙏
【余談】パイトーチ

PyTorch(パイトーチ)って何回も聞いてたら中華料理の名前に聞こえてきてさーw
ひとまず、AI生成した架空の中華料理「パイトーチ」を置いときますね ノシ