다층 퍼셉트론(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(x1x2):            #ANDgate
    x = np.array([x1, x2])
    w = np.array([0.50.5])
    bi = -0.7
    tmp = np.sum(w*x) + bi
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

def OR(x1x2):             #ORgate
    x = np.array([x1, x2])
    w = np.array([0.50.5])
    bi = -0.3
    tmp = np.sum(w*x) + bi
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

def NAND(x1x2):           #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(x1x2):            #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