OR回路に関しては、前記事のExcelシートにおいてセルB13~D16に入っている真理値表データのうち、D14とD15を 1 に変更するだけである。真理値表データや初期値、それに微小値などの数値データは、いくらでも上書きが可能である。
今回もcsvファイルのダンプを貼り付ける。前回のcsvとの相違点は13行目と14行目だけだから、ファイルを保存していただいた方はExcelで開いてデータを書き換えていただいた方が早いのだが。
追記:
csvファイルのダンプはエントリー末尾に移動しました。サイドバーにはみ出して範囲選択がしづらかったので。
追記おわり
前回と同様の手中でマクロをボタンに登録すると、やはりだいたい60回くらいクリックした頃から、すなわち真理値表の「学習」を15回くらい繰り返した頃から、x と y が両方とも 1 のとき「推定値」の値が負、それ以外の場合には正になるはずである。もちろんこの回数は重み W0、W1、W2 の初期値によって変化する。
ボタンのクリックを何百回か繰り返していると、「2乗和誤差」の値はどんどん小さくなり、「参考値エリア」の「傾き」はおよそ - 1 に、「x 切片」と「 y 切片」は共に 0.4 前後の値に近づくと思われる。
前回同様、「学習」の概念図をグラフに表すと、こんなイメージである。
真理値表のデータを変更することによって、OR回路のみならずNAND回路(AND回路の否定)や…
NOR回路(OR回路の否定)も、学習させることができる。
すなわち次の不等式において
W0x + W1y + W2 > 0
重みW0とW1が負であれば、両辺に -1 を掛けることにより
- W0x - W1y - W2 < 0
という不等式が実現可能である。
AND、OR、NAND、NOR それぞれの真理値表データにおいて、重みW0、W1、W2の初期値をいずれも0.5とし、マクロボタンを100回クリックしたとき、すなわち「学習」を25回繰り返したところ、W0、W1、W2の値は、次表のようになった。
W0 | W1 | W2 | |
AND | 1.27433 | 1.20832 | -2.17074 |
OR | 1.74447 | 1.77601 | -0.3671 |
NAND | -1.57819 | -1.61533 | 0.2447 |
NOR | -1.09802 | -1.03452 | 1.94745 |
やり直すたびに微妙に値が違うことが気になったが、論理回路が構成できていればいいということにして、気にしないことにする。
* * *
問題はXOR(排他的論理和)回路である。XORの真理値表は次のようになる。
x | y | t |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
これを直交座標上にプロットすると次のようになり、これまでと違って一次不等式による構成が不可能であろうことは、ただちに予想される。
実際、上掲Excelシート上の真理値表データを次のように変更すると、マクロボタンをどれだけクリックしても「2乗和誤差」の値は小さくならず、「推定値」に正しい結果は得られない。すなわちXOR回路を「学習」することはできない、ということだ。
XOR回路を実現するためには、もうひと工夫を付け足すことが必要である。
そしてその工夫を付け足したとき、機械学習でできることが一気に拡がるのである。
追記:
今回のエントリーの最初にスクリーンショットを示したOR回路を学習させるExceシートのcsvダンプです。サイドバーにはみ出して範囲指定がしづらかったので移動しました。
重み,W0,W1,W2,,,,,,,
,1.283922956,1.310624771,-0.000851633,,,,,,,
入力,x,y,t,,,推定値,,シグモイド関数,,2乗和誤差
0,1,1,1,,,=B2*B4+C2*C4+D2,,=1/(1+EXP(-1*G4)),,=0.5*(I4-D4)^2
,,,,,,,,,,
,dW0,dW1,dW2,,数値微分作業エリア,,,,,
結果,=B$4*$K9,=C$4*$K9,=(K8-K4)/G7,,h,0.0001,,,,
,,,,,推定値+h,=G4+G7,,=1/(1+EXP(-1*G8)),,=0.5*(I8-D4)^2
,W0-dW0,W1-dW1,W2-dW2,,,,,,数値微分,=(K8-K4)/G7
更新値,=B2-B7,=C2-C7,=D2-D7,,,,,,,
,,,,,参考値エリア,,,,,
index,x,y,t,,,,,,,
=A4+1,0,0,0,,傾き,=-C2/B2,x切片,=-D2/B2,y切片,=-D2/C2
,0,1,1,,,,,,,
,1,0,1,,,,,,,
,1,1,1,,,,,,,
"=MOD(A13,4)","=INDEX(B13:B16,$A$13,1)","=INDEX(C13:C16,$A$13,1)","=INDEX(D13:D16,$A$13,1)",,,,,,,
追記:
すみません、2019年8月3日付拙記事 より、以下をこの記事にも転載します。
すみません、ブラウザ画面からダンプ部分をコピーしてメモ帳に貼り付け、拡張子を.csvに変更して保存というのを自分で試すと、ダブルクリックで開いたとき文字化けが発生するという現象が生じ、いろいろ調べたのですが改善されませんでした。Windows10+Chromeです。
そこで拡張子.txtで保存し、Excelの「開く」より「すべてのファイル(*.*)」を指定して読み込んだところ、文字化けが起きませんでした。ただし「テキストファイルウィザード 2 / 3」「区切り記号」の「□カンマ(C)」にチェックを入れる必要があります。ご参考まで。
追記おわり
次回:
スポンサーリンク