🍉しいたげられたしいたけ

NO WAR! 戊争反察Ceasefire Now! 䞀刻も早い停戊を

排他的論理和EORを機械孊習で実珟しようずしたらバタフラむ効果が発生したその

「AIの考えるこずはわからん」ずいう蚀葉がある。あるかどうか知らない。今、思い぀いた。

前々回「その」ず前回「その」でグラフを描画した埌にダンプした重み W1、W2 ず バむアス b1、b2 の倀を、Excel シヌトにたずめおみた。Excel の衚はホヌムペヌゞビルダヌに貌り぀けるず html に自動倉換しおくれるので、ホヌムペヌゞビルダヌ経由でブログにも貌り付けおみる。

たずは「その」すなわち初期倀重み0.1の堎合。䞞めなしず䞞め73桁のデヌタを採ったが、スペヌスの郜合で今回の蚘事には䞞め5桁たでを茉せる。

  䞞めなし 7桁 6桁 5桁
W1[0][0] 4.00632453 3.44539626 -1.86501773 3.84608801
W1[0][1] 0.74621904 0.73045915 -4.61775425 0.18855283
W1[0][2] -4.45154713 -4.26451676 3.55631742 -4.60571661
W1[1][0] -4.41780543 -4.25213382 -1.88107736 -4.37482109
W1[1][1] 0.3158155 0.51924299 -4.61879971 0.4782215
W1[1][2] 4.06376368 3.47807515 3.55773063 3.94866908
b1[0] 2.88515978 3.72557846 -1.10349328 2.90711841
b1[1] 3.49637772 4.69945879 1.53527639 3.87535165
b1[2] 2.9176136 3.73723392 -5.55997762 3.17658877
W2[0][0] 7.52188442 11.62101214 1.26900181 7.4825227
W2[0][1] -7.51900942 -11.61813714 -1.26612681 -7.4796527
W2[1][0] 5.85674287 11.18154668 4.25877394 6.49566576
W2[1][1] -5.84908476 -11.17388848 -4.25111594 -6.48800576
W2[2][0] 7.60501813 11.66302433 4.42342661 7.59086115
W2[2][1] -7.57634126 -11.63434753 -4.39474961 -7.56218115
b2[0] -17.24374337 -30.40488191 -2.23040188 -17.8918042
b2[1] 17.24374337 30.40488191 2.23040188 17.8918042

 

次に「その」すなわち初期倀重み50の堎合。これはもずもずデヌタを間匕いお茉せたんだった。

  䞞めなし 6桁 4桁 2桁
W1[0][0] 3.10715279 3.10715289 3.10710145 3.09749693
W1[0][1] -6.92996836 -6.92996828 -6.92997272 -6.92642448
W1[0][2] -8.0399468 -8.03994567 -8.04005328 -8.03894874
W1[1][0] -3.65469687 -3.65469717 -3.6547279 -3.65772763
W1[1][1] -2.36826359 -2.36826367 -2.36824909 -2.36530438
W1[1][2] 7.24733878 7.24733962 7.2472656 7.2475458
b1[0] -2.79170761 -2.79170755 -2.79167077 -2.78123196
b1[1] 1.27328557 1.27328572 1.27327315 1.27206239
b1[2] -4.31921463 -4.3192158 -4.31912361 -4.32347713
W2[0][0] -6.51184203 -6.51184149 -6.51186187 -6.50319204
W2[0][1] 7.94933953 7.94933949 7.94936187 7.94319204
W2[1][0] 6.5981932 6.59819307 6.59822748 6.60072934
W2[1][1] -2.7691377 -2.76913807 -2.76912748 -2.77072934
W2[2][0] 1.59700312 1.59700329 1.59701523 1.59685762
W2[2][1] 12.74142788 12.74142871 12.74138477 12.74314238
b2[0] 1.84055305 1.8405531 1.84053306 1.83860683
b2[1] -1.84055305 -1.8405531 -1.84053306 -1.83860683

  「その」の結論郚分で述べた通り、たずは「その」のほうは初期倀を䞞めた桁数の範囲たで W1、W2、b1、b2 の結果がもれなく䞀臎しおいるこずを確認したかった。「その」では、そのような珟象はいっさい芋られない。

れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装

れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装

  • 䜜者:æ–Žè—€ 康毅
  • 発売日: 2016/09/24
  • メディア: 単行本゜フトカバヌ
 

せっかく Excel に貌り付けたので、もう少しいじっおみた。

Excel ではクリックで簡単に衚瀺桁数を倉曎できる。「その」の衚の小数点以䞋を1桁衚瀺にしおみた。 

  䞞めなし 7桁 6桁 5桁
W1[0][0] 4.0 3.4 -1.9 3.8
W1[0][1] 0.7 0.7 -4.6 0.2
W1[0][2] -4.5 -4.3 3.6 -4.6
W1[1][0] -4.4 -4.3 -1.9 -4.4
W1[1][1] 0.3 0.5 -4.6 0.5
W1[1][2] 4.1 3.5 3.6 3.9
b1[0] 2.9 3.7 -1.1 2.9
b1[1] 3.5 4.7 1.5 3.9
b1[2] 2.9 3.7 -5.6 3.2
W2[0][0] 7.5 11.6 1.3 7.5
W2[0][1] -7.5 -11.6 -1.3 -7.5
W2[1][0] 5.9 11.2 4.3 6.5
W2[1][1] -5.8 -11.2 -4.3 -6.5
W2[2][0] 7.6 11.7 4.4 7.6
W2[2][1] -7.6 -11.6 -4.4 -7.6
b2[0] -17.2 -30.4 -2.2 -17.9
b2[1] 17.2 30.4 2.2 17.9

 

さらに久しぶりに Microsoft Mathematics を䜿っお怜算しおみたくなった。

https://cdn-ak.f.st-hatena.com/images/fotolife/w/watto/20210321/20210321112147.png

Python でもできるが GUI の芖芚的な快適さはやはり魅力なのだ。

正盎に蚀うず、最初は手蚈算で怜算しようずしたが蚈算間違いが倚発しお収拟が぀かなくなったためキカむに頌るこずにしたのだが。私は孊生時代からずっずそんな調子だ。

 

やろうずしおいるこずは、䞊掲各衚の数倀が、排他的論理和 EOR を実珟しおいるこずの確認である。

たずは「その」結果の小数点以䞋1桁衚瀺の衚から「䞞めなし」デヌタを䜿っお、入力 x ず1局重み W1 の積を蚈算させたずころ。䞊掲スクリヌンショットの蚈算結果りむンドりに衚瀺されおいるものず同じである。

数匏で曞くず「xW1」である。Micosoft Matimatics のスクショも数匏だけど。

f:id:watto:20210321113749p:plain

 

䞊掲スクショの結果にバむアス b1 を加算したずころ。

数匏で曞くず「xW1+b1」である。

f:id:watto:20210321230045p:plain

Python ではブロヌドキャスト挔算斎藀康毅『れロから䜜るDeep Learning 』(O'LEILLY) P14 参照を行うが Microsoft Mathematics にはブロヌドキャスト機胜はないので、b1 は1行目の倀を24行目にコピペしおいる。

 

2局ニュヌラルネットワヌクシステムでは掻性化関数ずしお1局目ず2局目の間にシグモむド関数『れロから䜜るDeep Learning 』P45を噛たせるが、ここはざっくり行列芁玠が正なら 1、負なら 0 で近䌌する。

その䞊で、W2 ずの行列積を蚈算する。 

f:id:watto:20210321230220p:plain

䞊掲スクショ入力欄の1項目は「xW1 + b1」のシグモむド関数出力を前述の方法で近䌌したもので、これを「Z1」ず呌称する。これたで茉せた Python コヌドでも、同じ倉数名を䜿甚しおいる。

Z1 を眺めるだけでも、䜕をしようずしおいるか芋圓぀く。1列目ず3列目の AND をずれば目的の排他的論理和が埗られるはずである。

そうするず2列目は䜙分のはずだが、W1、b1 の列数を2にするず結果が安定的に埗られなかったこずは「その」で述べた通り。3列以䞊が必芁だったのだ実際に詊したのは匊ブログに曞いた3、4列以䞊は5列だけだが。5列でも結果が埗られた。

「自由床が足りない」ずいうや぀だろうか 「自由床」ずいう甚語を定矩するこずは今の私には䞍可胜で、感芚的に蚀っおいるだけなのだが。

 

話が長くなった。ひず぀䞊のスクショでやっおいるこずを数匏で曞くず「Z1W2」である。

次のスクショでは「Z1W2+b2」の挔算を行っおいる。出力の盎前である。b2 は Python ではブロヌドキャストだが、1行目を各行にコピペしおいるのは b1 のずきず同じ。

f:id:watto:20210321230328p:plain

最終出力は゜フトマックス関数『れロから䜜るDeep Learning』P66を噛たせおいるが、1列目が EOR の吊定を、2列目が EOR を構成しおいるのは䞀目瞭然だ。

远蚘

なんで1行目をEORの吊定、2行目をEORにしたかずいうず、タネ本『れロから䜜るDeep Learning』が出力にもう䞀段 numpy の argmax() 関数ずいうのを噛たせおいるのを螏襲したためP80。ちゃんず意味があるのだが、うっかり忘れおいお自分でも軜く混乱した。

远蚘おわり 

以䞊の結果は、それでも比范的わかりやすい郚類ではないかず思っおいる。 逆に蚀うず、埌でわけのわからない結果が出おくる。 

「その」にグラフが奇劙な動きを芋せたず曞いた6桁䞞めdecimals=6のケヌス。

やはり Excel で小数点以䞋1桁衚瀺させた倀を䜿甚しおいる。

xW1 の蚈算結果。

f:id:watto:20210321142553p:plain

 

xW1 + b1。

f:id:watto:20210321142646p:plain

 

今回もシグモむド関数のおおざっぱな近䌌ずしお各芁玠が正なら 1、負なら 0 ず眮き換えお Z1 ずした。そしお W2 ずの積をずった。 

f:id:watto:20210321143254p:plain

䞞めなし蚈算は瀺さなかったが7桁䞞め、5桁䞞めもそうでは2列目が䜙剰次元だったが、今回の6桁䞞めの堎合、䜙剰次元が1列目に倉化しおいるこずが目を匕く。䜙剰次元ずいう蚀葉も定矩なしで語感だけで䜿っおいたす。䜙剰次元にちょっずはみ出すこずができるず収束しやすくなる、みたいな。理論物理孊にそんな孊説あるのかな 党くの思い぀きで蚀っおたす。

䞞めなしの䜙剰次元は1で埋たっおいたが、今回は0で埋たっおいる。

 

念のため + b2 の蚈算結果も。

f:id:watto:20210321144445p:plain 

 

私自身あんたりわかっおいない、いい加枛な定矩の甚語をもう䞀぀持ち出したい。カオス理論に「アトラクタヌ」ずいう抂念がある。「匕っ匵るもの」ずいう意味で、恒星のたわりを惑星や圗星や小惑星が呚回するむメヌゞを持おばいいのではないだろうか。アトラクタヌの呚囲で芏則正しい呚回運動をする倩䜓もあれば、叀兞的なカオスずしお有名な「䞉䜓問題」の理論に基づき極めお䞍芏則な動きをする倩䜓もある。

排他的論理和を構成する各倉数を倚次元空間の座暙ず芋るず、この倚次元空間にはアトラクタヌが耇数存圚するはずである。䟋えばかりにW1の1行目の䞉次元座暙  (x, y, z) がアトラクタヌだったずするず、匏の察象性から順番を入れ替えた (y, z, x) ず (z, x, y) もアトラクタヌになるはずだただし x ≠ y、y ≠ z、z ≠ x。もちろんそれに応じおW1の二行目、 b1、W2、b2 も芁玠の順番が入れ替わる。 

 

䞞め6桁のケヌスは、䞞めなしのケヌスず異なるアトラクタヌに匕き぀けられおしたったかのように芋える。

しかし䞞め7桁のケヌス、䞞め5桁のケヌス だっお、䞞めなしず同じアトラクタヌを目指しおいるずいう保蚌はどこにもないのだ。

比范のため「その」すなわち初期倀重み 50 の W1、b1、W2、b2 ダンプ衚を小数点以䞋1桁衚瀺するず、圓然ながら䞞めなし䞞め2桁の結果は区別぀かなくなる。

  䞞めなし 6桁 4桁 2桁
W1[0][0] 3.1 3.1 3.1 3.1
W1[0][1] -6.9 -6.9 -6.9 -6.9
W1[0][2] -8.0 -8.0 -8.0 -8.0
W1[1][0] -3.7 -3.7 -3.7 -3.7
W1[1][1] -2.4 -2.4 -2.4 -2.4
W1[1][2] 7.2 7.2 7.2 7.2
b1[0] -2.8 -2.8 -2.8 -2.8
b1[1] 1.3 1.3 1.3 1.3
b1[2] -4.3 -4.3 -4.3 -4.3
W2[0][0] -6.5 -6.5 -6.5 -6.5
W2[0][1] 7.9 7.9 7.9 7.9
W2[1][0] 6.6 6.6 6.6 6.6
W2[1][1] -2.8 -2.8 -2.8 -2.8
W2[2][0] 1.6 1.6 1.6 1.6
W2[2][1] 12.7 12.7 12.7 12.7
b2[0] 1.8 1.8 1.8 1.8
b2[1] -1.8 -1.8 -1.8 -1.8

 

この数倀に基づく怜算結果が、わけわからんのだ。

たずは入力 x ず1局目重み W1 の積。

f:id:watto:20210321230735p:plain

 

1局目バむアス b1ずの和をずる。xW1 + b1 である。

䟋によっおブロヌドキャストができないから、1行目を24行目にコピペしおいる。

f:id:watto:20210321231246p:plain

 

今回は先の2぀の怜算ず異なり、1 or 0 の近䌌では巧くいかなかった。

そこで䞊掲スクショの出力を Python のシグモむド関数に入力し、その結果を小数点以䞋1桁で䞞めたものを Z1 ずした。

そこたでやるなら怜算も Python でやったほうが早かったず思ったが、やっおみなければわからないこずは、しばしばある。

Z1 ず 2局目の重み W2 の積 Z1W2 の蚈算である。

f:id:watto:20210321231507p:plain

 

さらに2局目のバむアス b2 を加算しおいる。Z1W2 + b2 である。

f:id:watto:20210321232031p:plain

なんなんだこれは

1行目1列目 2列目、2行目1列目  2列目、3行目1列目  2列目、4行目1列目 2列目だから、出力で゜フトマックス関数を噛たせれば確かにこれでも 1列目EORの吊定、2列目EOR になるけど、先ほどの初期倀重み 0.1 のずきの鮮やかな察称性ずは䌌おも䌌぀かないではないか

だがこの倀こそが、初期倀の差が小数点以䞋の䞞めの桁数皋床ではびくずもしない匷力なアトラクタヌであるはずなのだが、なぜAIがこのアトラクタヌを遞択したのか、人間には芋圓぀かない。少なくずも私には芋圓぀かない。

たこずAIの考えるこずはわからん。

スポンサヌリンク

Â