LoginSignup
4
2

More than 5 years have passed since last update.

2章 パーセプトロンの実装 ゼロから作るDeeplearningのいいとこだけ切り取る

Last updated at Posted at 2017-02-25

パーセプトロンとは?

パーセプトロンとは、複数の信号を入力として受取、一つの信号を出力します。
パーセプトロンの信号は1or0の二値の値です。今回は0を流さない、1を流すに対応させて記述します。

ゲートの種類

AND

x1 x2 y
0 0 0
1 0 0
0 1 0
1 1 1

NAND

x1 x2 y
0 0 1
1 0 1
0 1 1
1 1 0

OR

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 1

パーセプトロンの実装

簡単な実装

  • AND関数を定義
def AND(x1, x2)
    w1, w2, theta = 0.5, 0.5, 0.7
    temp = x1*w1+x2*w2
    if tmp <= theta:
        return 0
    elif tmp > theta:
        return 1

パラメータのw1, w2, thetaは関数内で初期化し、重み付きの入力の総和が閾値を超えると1を返し、それ以外は0を返します。それでゃ、図2-2のとおり出力されるか確認しましょう。

AND(0, 0) # 0
AND(1, 0) # 0
AND(0, 1) # 0
AND(1, 1) # 1

期待した挙動が得られました。

同様にNANDもORも実装することができます。

重みとバイアスの導入

y = 0(b+w1x1+w2x2 <= 0)
    1(b+w1x1+w2x2 >  0)
>>>import numpy as np
>>>x = np.array([0,1])
>>>w = np.array([0.5, 0.5])
>>>b = -0.7
>>>w*x
>>>array([0. , 0.5])
>>>np.sum(w*x)
0.5
>>>np.sum(w*x) + b
-0.19999999996

重みとバイアスによる実装

def AND(x1, x2):
   x = np.array([x1, x2])
   w = np.array([0.5, 0.5])
   b = -0.7
   tmp = np.sum(w*x) + b
   if tmp <= 0:
       return 0
   else:
       return 1

def NAND(x1, x2):
   x = np.array([x1, x2])
   w = np.array([-0.5, -0.5])
   b = 0.7
   tmp = np.sum(w*x) + b
   if tmp <= 0
      return 0
   else:
      return 1

def OR(x1, x2):
   x = np.array([x1, x2])
   w = np.array([0.5, 0.5])
   b = -0.2
   tmp = np.sum(w*x) + b
   if tmp <= 0
       return 0
   else:
       return 1

XORゲート

XORゲートは排他的論理和とも呼ばれる論理回路です。

OR

x1 x2 y
0 0 0
1 0 1
0 1 1
1 1 0

この結果を式で表すことが難しい。

多層パーセプトロン

パーセプトロンではXORゲートを表現できませんでした。しかし、それは層を重ねることによって可能になる。

既存ゲートの組み合わせ

NANDとORの組み合わせの値とANDによってXORゲートは表現することが可能。

XOR

|x1|x2|s1|s2|y|
|---|---|---|
|0|0|1|0|0|
|1|0|1|1|1|
|0|1|1|1|1|
|1|1|0|1|0|

XORの実装

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)

XOR(0, 0) # 0
XOR(1, 0) # 1
XOR(0, 1) # 1
XOR(1, 1) # 0

XORは2層のパーセプトロンです。
複数重ねたパーセプトロンを多層パーセプトロンと言うことがあります。
層を重ねるとより柔軟な表現を行うことが可能。

まとめ

  • パーセプトロンは入出力を備えたアルゴリズム。ある入力を与えたら、決まった値が出力される。
  • パーセプトロンでは、[重み]と[バイアス]をパラメーターとして設定する。
  • パーセプトロンを用いれば、ANDやORゲートなどの論理回路を表現できる。
  • XORゲートは単相のパーセプトロンでは表現できない。
  • 2層のパーセプトロンを用いれば、XORゲートを表現することができる。
  • 単相のパーセプトロンは線形領域だけしか表現できないのに対して、多層のパーセプトロンは非線形領域を表現することができる。
  • 多層のパーセプトロンはコンピューターを表現できる。
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2