パーセプトロンを理解するために、ANDゲートの結果を教師データとして、重みとバイアスの調節をやってみる。
まず、ANDゲートの概念図なり〜
(0,0)を入力したばあいは、0が出力される。
 (1,0)を入力したばあいは、0が出力される。
 (0,1)を入力したばあいは、0が出力される。
 (1,1)を入力したばあいは、1が出力される。
このような出力結果になるように、pythonにて関数を書いてみる。
スカラーのばあい。
 (スカラーという言葉つかいに自信なし。後述のベクトルに合わせて、ためしに、この言葉をつかっている)。
ANDゲートの出力結果になるように、重み(w1,w2)とバイアス(b)には任意の数値を入れてある。
def AND(x1,x2):
 w1,w2,b=0.5,0.5,-0.7
 y=x1*w1+x2*w2+b
 if y<=0:
 return 0
 else:
 return 1
ベクトルをつかったばあい。
 def AND(x1,x2):
 x=np.array([x1,x2])
 w=np.array([0.5,0.5])
 b=-0.7
 y=np.sum(x*w)+b
 if y <=0:
 return 0
 else:
 return 1
ためしてみる。
 AND(0,0)
 0
AND(1,0)
 0
AND(0,1)
 0
AND(1,1)
 1
OK〜
では、このばあい(任意にとったw1,w2,bの数値、順に0.5、0.5,-0.7のばあい)1と0に分かれるx1,x2の領域は、どのようになっているか。
いままで、ANDゲートを実装することを主眼に置いていたけれど、以下、入力値(0,0)、(1,0),(0,1),(1,1)にこだわらず、あくまでも、どのような数値を入力すれば、1と0になるのか、みてみよう。
もういちど、作成した関数をみてみる〜
def AND(x1,x2):
 w1,w2,b=0.5,0.5,-0.7
 y=x1*w1+x2*w2+b
 if y<=0:
 return 0
 else:
 return 1
y=x1*w+x2*w2+bに、
 w1=0.5、w2=0.5,b=-0.7を代入する。
y=0.5×1+0.5×2-0.7
このさい、0が閾値になるので、y=0を代入。
0=0.5×1+0.5×2-0.7
 0.7=0.5×1+0.5×2
 0.5×2=-0.5×1+0.7
両辺を0.5で割る
 x2=x1+0.7/0.5
 x2=x1+1.4
たぶん大丈夫。
 x2=x1+1.4のグラフを書いてみよ〜。
import matplotlib.pyplot as plt
 import numpy as np
 x1=np.arange(-1,1.1,0.1)
 x2=x1+1.4
 
 色を、つけてみよう。
plt.fill_between(x1,x2)

 
 たぶん…ブルーの領域のx1,x2を入力すれば、出力はゼロだったりしそう…
ためしてみよう。
たとえば、
 (x1,x2)=>  ?
 (0.25,0.25)=> 0
 (0.5,1.5)=>1
 (0,1.5)=>1
 (0,1,4)=>0
よさそう。
 ちなみに、x10のさかいは、1.4..だねぇ。
参考:「ゼロから作るDeep Learning」(斎藤康毅/オライリー・ジャパン)

