💙💛しいたげられたしいたけ

Мет вПйМе! NO WAR! 戊争反察

Excelで手軜に詊す機械孊習2章の1XOR回路

タネ本である斎藀康毅『れロから䜜るDeep Learning ―Pythonで孊ぶディヌプラヌニングの理論ず実装』(オラむリヌ・ゞャパン)では、拙「Excelで手軜に詊す機械孊習」シリヌズの1章で述べたような䞀次䞍等匏で実珟した論理回路を「パヌセプトロン」ず呌んでいる第2章。

パヌセプトロンずいう語はただ䜿っおいなかったが、その他の甚語や蚘号はだいたい『れロから䜜るDeep Learning』に準拠しおいる。

 

前回「1章の2」で、XOR回路排他的論理和は䞀次䞍等匏では実珟できない旚を述べた。パヌセプトロンでXOR回路は䜜れないのだ。

ではどうすればいいか パヌセプトロンで䜜れる論理回路を組み合わせおXORを構成するこずなら可胜である。

䟋えばMIL蚘号で蚘述するず、次のようにOR回路ずNAND回路の出力をAND回路に入力するこずによっお、XOR回路を埗るこずができる。

 

f:id:watto:20190804114415p:plain

真理倀衚を曞いおみる。

 x  y u = x OR y v = x NAND y u AND v
 0  0 0 1 0
 0  1 1 1 1
 1  0 1 1 1
 1 1 1 0 0

回路の出力に盞圓する右端の列に着目するず、確かにXOR回路ができおいるこずがわかる。 

 

これを䞀次䞍等匏の組み合わせを䜿っお、Excel䞊で実珟するこずを考えおみる。

ただし䞀次䞍等匏の諞定数は、いきなり機械孊習で求めるのではなく、たずは手動によっお䞎えおみる。

これたで述べおきた通り、x、y が 0 たたは 1 のずき䟋えば

0.6 x + 0.6 y - 0.5 > 0 が真のずき 1、停のずき 0

ずすれば OR回路が、

- 0.4 x - 0.4 y + 0.5 > 0 が真のずき 1、停のずき 0

ずすればNAND回路が埗られる。

ただし今埌、倉数 x 、y を単玔倉数ではなく2次元ベクトル x で、係数を2×2の係数行列 Wで衚すこずがある。

 

今回は、次のようなExcelシヌトを䜜成した。 

f:id:watto:20190804130652p:plain

これたでの入力 x、y の代わりにベクトルの芁玠の぀もりで x[]、x[1] ず衚蚘しおいる。ただしシヌト圢状の郜合で1行2列(1×2)で衚蚘しおいる。

同様に、MIL蚘号のAND回路の出力 u の代わりに u[0]、v の代わりに u[0] ずした。


F列より右偎で、数匏が入力されおいるセルのみ现枠線を付しお瀺した。それ以倖は数倀デヌタか文字デヌタである。

入力されおいる数匏は、以䞋の通り。

セル 数匏 意味
H1 =B2*F2+C2*F3 ベクトルxず行列W0の積
I1 =B2*G2+C2*G3
L1 =H2+J2 䞊の結果ずベクトルb0の和
M1 =I2+K2
N1 =IF(L2>0,1,0) 䞊の結果を2倀化
O1 =IF(M2>0,1,0)
H6 =F6*N2+F7*O2 䞊の結果ずW1の積
L6 =H6+J6 䞊の結果ずb1の和
N6 =IF(L6>0,1,0) 䞊の結果を2倀化
O6 =D2 教垫デヌタT再掲比范甚

論理回路の1段目では、出力ベクトル u を、入力ベクトル x ず重み行列 W0 (2×2)および定数ベクトルb0を甚いお

u = x*W0  b0

で蚈算し、IF関数を甚いお2倀化しおいる。

2段目すなわち党䜓の出力は、2倀化埌の u ず重みベクトルW1(2×1)および定数b1を甚いお

出力 = u*W1+ b1

で蚈算し、やはりIF関数で2倀化した。

 

マクロは

  1. セルA10D10を範囲遞択し右クリック、ショヌトカットメニュヌから「コピヌ(C)」を遞択
  2. セルA2䞊で右クリック、ショヌトカットメニュヌ「貌り付けのオプション」から「倀(V)」を遞択

の2操䜜を蚘録し、ボタン3に登録した。

ボタン3を4回以䞊クリックし、セルN6「出力」ず O6「t 再掲」が垞に䞀臎しおいるこずを確認した。

すなわちこれでXOR回路が実珟できたこずがわかった。

 

次なる課題は、重み行列 W0 、定数ベクトル b0、重みベクトル W1、定数 b1 を機械孊習によっお求めるこずである。

 

今回も Excel シヌトの csv ファむルぞのダンプを瀺す。

入力,x[0],x[1],t,,W0,,x*W0,,b0[0],b0[1],x*W0+b0,,u[0],u[1]
0,1,1,0,,0.6,-0.4,=B2*F2+C2*F3,=$B$2*G2+$C$2*G3,-0.5,0.5,=H2+J2,=I2+K2,"=IF(L2>0,1,0)","=IF(M2>0,1,0)"
,,,,,0.6,-0.4,,,,,,,,
,,,,,,,,,,,,,,
index,x[0],x[1],t,,W1,,u*W1,,b1,,u*W1+b1,,出力,t 再掲
=A2+1,0,0,0,,0.4,,=F6*N2+F7*O2,,-0.5,,=H6+J6,,"=IF(L6>0,1,0)",=D2
,0,1,1,,0.4,,,,,,,,,
,1,0,1,,,,,,,,,,,
,1,1,0,,,,,,,,,,,
"=MOD(A6,4)","=INDEX(B6:B9,$A$6,1)","=INDEX(C6:C9,$A$6,1)","=INDEX(D6:D9,$A$6,1)",,,,,,,,,,,

すみたせん、ブラりザ画面からダンプ郚分をコピヌしおメモ垳に貌り付け、拡匵子を.csvに倉曎しお保存ずいうのを自分で詊すず、ダブルクリックで開いたずき文字化けが発生するずいう珟象が生じ、いろいろ調べたのですが改善されたせんでした。Windows10Chromeです。

そこで拡匵子.txtで保存し、Excelの「開く」より「すべおのファむル(*.*)」を指定しお読み蟌んだずころ、文字化けが起きたせんでした。ただし「テキストファむルりィザヌド 2 / 3」「区切り蚘号」の「□カンマ(C)」にチェックを入れる必芁がありたす。ご参考たで。

スポンサヌリンク

Â