devson 2024. 3. 3. 22:41

perceptron은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다.

 

아래는 2개의 입력을 받는 perceptron이다.

  • $ x $ : 입력
  • $ w $ : 가중치(weight)로 말 그대로 해당 입력이 얼마나 중요한지를 나타낸 값이다.
    • 이 값이 크면 출력에 영향을 더 크게 미친다.
  • $ b $ : 편향(bias)으로 해당 뉴런이 얼마나 쉽게 활성화될 수 있느냐를 조절하는 값이다.
    • 이 값이 크면 입력이 작더라도 활성화될 수 있다.
  • $ y $ : 출력

출력의 경우 노드에 전달된 값의 합이 0을 넘을 때 1을 출력하며, 0을 넘지 않으면 0을 출력한다.

 

그러면 이 임계값에 대해서는 아래와 같이 나타낼 수 있다.

 

$ y = 
\begin{cases} 
0 & \text{if } w_1x_1 + w_2x_2 + b \leq 0 \\
1 & \text{if } w_1x_1 + w_2x_2 + b > 0
\end{cases} $

 

Perceptron의 한계와 MLP(multi-layer perceptron)

논리 회로를 통해 perceptron의 한계에 대해 알아보고 다층 perceptron으로 이 한계를 극복하는 것에 대해 알아보자.

 

Logic gate

perceptron을 사용하여 논리 회로를 만들 수도 있다.

AND, NAND, OR gate를 perceptron으로 만들어보자.

 

AND gate

𝓧₁ 𝓧₂ 𝑦
0 0 0
0 1 0
1 0 0
1 1 1

 

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

 

NAND gate

𝓧₁ 𝓧₂ 𝑦
0 0 1
0 1 1
1 0 1
1 1 0

 

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

 

OR gate

𝓧₁ 𝓧₂ 𝑦
0 0 0
0 1 1
1 0 1
1 1 1

 

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

 

XOR gate

다른 논리회로는 perceptron으로 만들 수 있는데, XOR gate의 경우 perceptron으로 만들 수가 없다.

𝓧₁ 𝓧₂ 𝑦
0 0 0
0 1 1
1 0 1
1 1 0

 

AND, NAND, OR gate 같은 경우 아래와 같이 $x_1, x_2$ 에 대해 직선(한 층의 perceptron)을 통해 출력을 구분할 수 있다.

 

하지만 XOR gate의 경우 직선을 통해 출력을 구분할 수가 없다.

즉, 한 층의 perceptron으로는 XOR gate를 구현할 수 없다.

-> 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다

 

하지만 직선이 아니라면 출력을 구분할 수가 있게 된다.

 

MLP로 XOR gate 구현

기존의 논리 회로를 조합하여 XOR gate를 만들 수 있다.

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

 

이를 perceptron으로 표현하면 아래와 같고, 이렇게 여러 층으로 perceptron을 구성한 것을 MLP(multi-layer perceptron)이라고 한다.

 

이처럼 단층 perceptron으로는 표현하지 못했던 것을 층을 늘려서 표현할 수 있게된다.