퍼셉트론 1

Siho·2025년 12월 17일

AI

목록 보기
1/2

#퍼셉트론이란

프랭크 로젠블렛FrankRosenblatt^{Frank Rosenblatt}이 1957년에 고안한 알고리즘이다.
다수의 신호를 입력으로 받아 하나의 신호를 출력한다.
출력 신호는 0 또는 1의 값을 가진다.

아래는 2개의 입력을 받는 퍼셉트론 예시이다.

2개 입력의 퍼셉트론

x는 입력신호, y는 출력신호, w는 가중치이다.
그림의 원을 뉴런 혹은 노드라고 부른다.
입력 노드가 출력 노드로 보내질 때는 각각 고유한 가중치가 곱해져 합산된다.
이때 정해진 한계점을 넘어 설 때만 1을 출력한다.
이 지점(임곗값)을 θ\theta 기호로 표현하면 다음 수식으로 나타낼 수 있다.

y={0,if(w1x1+w2x2θ)1,if(w1x1+w2x2>θ)y= \begin{cases} 0, if (w_1x_1 + w_2x_2 \leq \theta)\\ 1, if (w_1x_1 + w_2x_2 \gt \theta) \end{cases}

퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여하며, 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다.

#기본적인 논리 게이트

AND 게이트

x1x_1x2x_2yy
000
010
100
111

w1x1+w2x2>θw_1x_1+w_2x_2\gt\theta
모든 입력이 1일 때, θ\theta를 초과하도록 가중치를 설정한다.

ex.(w1=1.0w_1 = 1.0, w2=1.0w_2 = 1.0, θ=1.5\theta = 1.5)

x1x_1x2x_2w1x1+w2x2w_1x_1+w_2x_2w1x1+w2x2>θw_1x_1+w_2x_2\gt\thetayy
000false0
011false0
101false0
112true1

NAND 게이트

x1x_1x2x_2yy
001
011
101
110

모든 입력이 1일 때, θ\theta를 초과하지 않도록 가중치를 설정한다.
사실상 AND 게이트를 구현하는 모든 매개변수의 부호를 반전하면 NAND 게이트가 된다.

ex.(w1=1.0w_1 = -1.0, w2=1.0w_2 = -1.0, θ=1.5\theta = -1.5)

x1x_1x2x_2w1x1+w2x2w_1x_1+w_2x_2w1x1+w2x2>θw_1x_1+w_2x_2\gt\thetayy
000true1
01-1true1
10-1true1
11-2false0

OR 게이트

x1x_1x2x_2yy
000
011
101
111

입력 신호 중 하나 이상이 1일 때, θ\theta를 초과하도록 가중치를 설정한다.

ex.(w1=1.0w_1 = 1.0, w2=1.0w_2 = 1.0, θ=0.5\theta = 0.5)

x1x_1x2x_2w1x1+w2x2w_1x_1+w_2x_2w1x1+w2x2>θw_1x_1+w_2x_2\gt\thetayy
000false0
011true1
101true1
112true1

#퍼셉트론 구현

AND 게이트 구현

def AND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1 * w1 + x2 * w2
  if tmp <= theta:
    return 0
  elif tmp > theta:
    return 1

AND 게이트 퍼셉트론 구현

가중치와 편향 도입

앞서 구현한 AND게이트는 직관적이고 알기 쉬우나, 이후를 생각하여 다른 방식으로 수정해보자.
θ\theta를 좌변으로 이항하고, 기호 표기를 바꾸면 아래의 식으로 바뀐다.

y1={0,if(w1x1+w2x2θ)1,if(w1x1+w2x2>θ)y2={0,if(b+w1x1+w2x20)1,if(b+w1x1+w2x2>0)\begin{aligned} y_1&= \begin{cases} 0, if (w_1x_1 + w_2x_2 \leq \theta)\\ 1, if (w_1x_1 + w_2x_2 \gt \theta) \end{cases}\\ y_2&= \begin{cases} 0, if (b + w_1x_1 + w_2x_2 \leq 0)\\ 1, if (b + w_1x_1 + w_2x_2 \gt 0) \end{cases} \end{aligned}

원래는 신호와 가중치를 곱해서 모두 더한 값을 임곗값과 비교했다면, 지금은 편향으로 바꾸어 더한 다음 0과 비교하고 있다.
즉, 비교 기준점을 θ\theta에서 0으로 바꾸겠다는 의미다.

한번 코드를 만들어보자

import numpy as np
def AND(x1, x2):
  x = np.array([x1, x2])    # 입력
  w = np.array([0.5, 0.5])  # 가중치
  b = -0.7                  # 편향

  tmp = np.sum(x * w) + b    # 가중치 * 입력 + 편향
  if tmp <= 0:
    return 0
  else:
    return 1

AND 게이트 퍼셉트론 편향 구현

입력과 가중치를 곱해서 모두 합한 것에 편향을 더한 다음 0과 비교를 하는 식으로 수정되었다.

#한계

그러나 지금까지의 퍼셉트론으로는 XOR 게이트를 구현하기에는 문제가 있다.

XOR 게이트는 배타적 논리합이라는 특징을 가지고 있다.
두 입력이 같다면 0, 다르다면 1을 출력한다.
이를 구현하기 위해서는 어떻게 가중치를 설정하면 될까?

x1x_1x2x_2yy
000
011
101
110

사실 지금까지 본 퍼셉트론으로는 XOR을 구현할 수 없다. 어째설까?

집중력을 위해 여기서 한번 쉬고 다음 글에서 이어서 학습해보자

참고자료

저서: 밑바닥부터 시작하는 딥러닝 1
LaTeX Markdown
LaTeX 기호 모음

profile
Siho-ily

0개의 댓글