다층 퍼셉트론(multi-layer perceptron)
1. 다층 퍼셉트론이란?
선형으로 출력 범위를 구분하지 못할 경우 다층 퍼셉트론을 이용하여 비선형 영역을 정의할 수 있다.
위 그림과 같이 퍼셉트론을 이중 이상으로 중첩하게 되면 단일 퍼셉트론으로 구현하지 못하는 비선형 영역도 정의할 수 있게 된다.
2. XOR 게이트 구현
우선 대표적인 예시인 XOR게이트를 카르노 맵을 이용하여 게이트를 단순화하자.
$$\begin{matrix} Y &=& A \cdot \bar{B} + \bar{A} \cdot B \\ &=& \left(\bar{A} + \bar{B}\right) \cdot \left(A + B \right) \\ &=& \overline{A \cdot B} \cdot \left(A + B \right) \end{matrix}$$
따라서 NAND 게이트, AND 게이트, OR 게이트 각각 하나씩 총 3개의 게이트로 구현할 수 있다.
이를 python으로 구현하면 다음과 같다.
import numpy as np
def AND(x1, x2): #ANDgate
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
bi = -0.7
tmp = np.sum(w*x) + bi
if tmp <= 0:
return 0
elif tmp > 0:
return 1
def OR(x1, x2): #ORgate
x = np.array([x1, x2])
w = np.array([0.5, 0.5])
bi = -0.3
tmp = np.sum(w*x) + bi
if tmp <= 0:
return 0
elif tmp > 0:
return 1
def NAND(x1, x2): #NANDgate
x = np.array([x1, x2])
w = np.array([-0.5, -0.5])
bi = 0.7
tmp = np.sum(w*x) + bi
if tmp <= 0:
return 0
elif tmp > 0:
return 1
def XOR(x1, x2): #XORgate
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
return AND(s1, s2)
>>> XOR(0, 0)
0
>>> XOR(1, 0)
1
>>> XOR(0, 1)
1
>>> XOR(1, 1)
0
Comments
Post a Comment