728x90

퍼셉트론이란?

퍼셉트론(Perceptron)은 다수의 신호를 입력으로 받고, 그 결과로 하나의 신호를 출력하는 것을 말한다.

퍼셉트론하면 대표적으로 보던 바로 그 그림이다.

x1과 x2는 이제 0과 1로 이루어진 입력신호이고, w1과 w2는 그 입력에 곱해지는 가중치이다.

이렇게 구해진 x1 * w1 + x2 * w2가 정해진 값 세타를 넘으면 1을 출력한다.

이를 식으로 나타내면

이렇게 나오게 되며, 가중치가 클수록 해당 신호가 중요하다는 의미가 된다.

 

논리회로

  • AND 게이트

입력 신호와 출력 신호의 대응표를 진리표라고 하는데, AND 게이트의 진리표는 다음과 같다.

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

 

AND는 입력이 모두 1일 때만, 1을 반환한다.

 

  • NAND 게이트

NAND는 Not AND를 의미한다.

AND의 결과를 뒤집으면 된다.

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

 

  • OR 게이트

OR 신호는 입력 신호 중 하나면 1이면, 1을 반환한다.

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

 

퍼셉트론 구현하기

간단한 코드로 한 번 구현해보자.

AND 게이트를 구현한다면, 다음과 같을 것이다.

def and_gate(
    x1,
    x2,
    w1: float = 0.5,
    w2: float = 0.5,
    theta: float = 0.7,
  ):
  y = x1 * w1 + x2 * w2
  if y <= theta:
    return 0
  else:
    return 1

 

여기서 theta를 넘겨서 수식을 편집해보면

b + w1x1 + w2x2 <= 0이 될 것이다.

여기서 b는 theta에 -1을 곱한 값이다.

그리고 여기서 b는 편향(bias)라고 한다.

퍼셉트론은 입력 신호에 가중치를 곱한 값과 bias를 합하여 0이 넘는지를 확인하고 값을 출력한다.

 

편향을 도입해서 and_gate를 수정해보자.

import numpy as np

def and_gate(
    x1,
    x2,
    w1: float = 0.5,
    w2: float = 0.5,
    theta: float = 0.7,
) -> int:
  x = np.array([x1, x2])
  w = np.array([w1, w2])
  b = theta * -1
  y = np.sum(x * w)  + b
  if y <= 0: return 0
  else: return 1

 

이거를 조금만 수정하면 nand_gate, or_gate도 바로 만들 수 있다.

import numpy as np

def nand_gate(
    x1,
    x2,
    w1: float = 0.5,
    w2: float = 0.5,
    theta: float = 0.7,
) -> int:
  x = np.array([x1, x2])
  w = np.array([-w1, -w2])
  b = theta
  y = np.sum(x * w)  + b
  if y <= 0: return 0
  else: return 1
import numpy as np

def or_gate(
    x1,
    x2,
    w1: float = 0.5,
    w2: float = 0.5,
    theta: float = 0.7,
) -> int:
  x = np.array([x1, x2])
  w = np.array([-w1, -w2])
  b = theta * -1
  y = np.sum(x * w)  + b
  if y <= 0: return 0
  else: return 1

 

퍼셉트론의 한계

하지만 지금까지의 식으로는 XOR을 만들 수 없다.

이런 선형으로는 XOR을 만들 수 없기 때문이다.

 

그렇기에 지금까지 만든 퍼셉트론을 쌓아서 XOR을 표현해야 한다.

 

다층 퍼셉트론

이렇게 XOR 게이트를 연결해서 만들 수 있다.

import numpy as np

def xor_gate(
    x1,
    x2,
    w1: float = 0.5,
    w2: float = 0.5,
    theta: float = 0.7,
) -> int:
  s1 = nand_gate(x1, x2, w1, w2, theta)
  s2 = or_gate(x1, x2, w1, w2, theta)
  y = and_gate(s1, s2, w1, w2, theta)
  return y

 

x1, x2를 0층

s1, s2를 1층

y를 2층이라고 하며, 이렇게 퍼셉트론을 쌓아 올린 구조를 다층 퍼셉트론이라고 한다.

이렇게 다층 퍼셉트론은 단층 퍼셉트론에서는 해결하지 못했던 문제를 해결 가능하다.

'인공지능 > 딥러닝' 카테고리의 다른 글

학습 관련 기술들  (0) 2026.06.21
오차역전파법  (0) 2026.06.20
신경망 학습  (0) 2026.06.15
신경망  (0) 2026.06.10

+ Recent posts