perceptron

IKNOW·2024년 10월 6일

퍼셉트론: 다수의 신호에서 하나의 출력 신호

퍼셉트론은 여러 입력 신호를 받아 하나의 출력 신호를 생성하는 알고리즘이다. 입력 신호는 각각의 가중치(weight)를 가지며, 뉴런에 도달한 신호의 총합이 정해진 임계값(threshold)을 초과할 때 1을 출력한다. 이를 뉴런이 "활성화된다"고 표현한다.

수식으로 나타내면 다음과 같다.

y={0  (w1x1+w2x2θ)1  (w1x1+w2x2θ)y = \begin{cases} & 0\;(w_1x_1+w_2x_2\le\theta)\\ & 1\;(w_1x_1+w_2x_2\ge\theta) \end{cases}

퍼셉트론 구현

간단한 논리 회로로 AND 게이트를 구현해보자.

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

위 코드는 두 입력값 x1, x2에 가중치를 곱한 후 그 합이 임계값 theta를 넘는지 확인하여 1 또는 0을 반환한다.

가중치와 편향 도입

앞서 구현한 AND 게이트는 직관적이지만, 퍼셉트론의 일반적인 형태를 위해 임계값을 편향(bias)으로 바꾸어 다음과 같이 수정할 수 있다.

y={0  (b+w1x1+w2x20)1  (b+w1x1+w2x20)y = \begin{cases} & 0\;(b+w_1x_1+w_2x_2\le0)\\ & 1\;(b+w_1x_1+w_2x_2\ge0) \end{cases}

여기서 b는 편향으로, 뉴런이 얼마나 쉽게 활성화되는지를 조절한다.

이를 파이썬으로 구현하면 다음과 같다.

import numpy as np

def AND(x):
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w * x) + b
    return 1 if tmp > 0 else 0

이제 입력 신호의 가중치 합과 편향을 합쳐 그 결과가 0을 넘으면 1을 출력한다.

NAND, OR 게이트 구현

비슷한 방식으로 NAND와 OR 게이트도 구현할 수 있다.

def NAND(x):
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w * x) + b
    return 1 if tmp > 0 else 0
def OR(x):
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w * x) + b
    return 1 if tmp > 0 else 0

퍼셉트론의 한계

단일 퍼셉트론은 선형 영역을 나누는 데는 유용하지만, 비선형 영역을 나누지 못한다. 예를 들어 XOR 게이트는 단일 퍼셉트론으로 구현할 수 없다.

다층 퍼셉트론

비선형 문제를 해결하기 위해 퍼셉트론을 여러 층으로 쌓아 다층 퍼셉트론(multi-layer perceptron, MLP)을 만들 수 있다. 다층 퍼셉트론을 통해 XOR 게이트도 구현 가능하다.

기존 게이트로 XOR 구현하기

앞서 구현한 AND, NAND, OR 게이트를 사용해 XOR 게이트를 구성할 수 있다.

def XOR(x):
    s1 = NAND(x)
    s2 = OR(x)
    y = AND(np.array([s1, s2]))
    return y

XOR 게이트는 NAND, OR, AND 게이트를 조합하여 다층 퍼셉트론으로 구현할 수 있다. 이렇게 층을 쌓음으로써 비선형 영역까지 표현할 수 있다.

요약

퍼셉트론: 여러 입력 신호를 받아 하나의 출력 신호를 생성하는 알고리즘.
가중치와 편향: 가중치는 입력 신호의 영향력을 조절하며, 편향은 뉴런의 활성화 여부를 조절한다.
단일 퍼셉트론의 한계: 선형 영역만 나눌 수 있어 XOR 같은 비선형 문제는 해결할 수 없다.
다층 퍼셉트론: 여러 층을 쌓아 비선형 문제를 해결할 수 있으며, XOR 게이트를 구현할 수 있다.

profile
조금씩,하지만,자주

0개의 댓글