Python/Deep Learning

단순 퍼셉트론 구현 및 개념 정리

임베디드 친구 2025. 12. 18. 20:32
반응형

단순 퍼셉트론 구현 및 개념 정리

1. 퍼셉트론(Perceptron)이란?

퍼셉트론(Perceptron)은 인공 신경망(Artificial Neural Network)의 가장 기본적인 단위이며, 생물학적 뉴런(Neuron)을 모방한 모델입니다. 퍼셉트론은 입력 값을 받아 가중치를 곱하고, 이를 합산한 후 활성화 함수(Activation Function)를 적용하여 최종 출력을 결정하는 방식으로 동작합니다.

퍼셉트론은 1958년 프랭크 로젠블랫(Frank Rosenblatt)에 의해 제안되었으며, 논리 게이트(AND, OR, NOT 등)와 같은 간단한 문제를 해결할 수 있습니다. 하지만 XOR 문제와 같은 선형적으로 분리되지 않는 문제를 해결하지 못한다는 한계가 있습니다.

2. 퍼셉트론의 구조 및 동작 원리

퍼셉트론의 기본적인 구조는 다음과 같습니다:

  • 입력(Input): 여러 개의 입력 값 ($ x_1, x_2, ..., x_n $)
  • 가중치(Weight): 각 입력에 곱해지는 가중치 값 ($ w_1, w_2, ..., w_n $)
  • 바이어스(Bias): 결과값을 조정하는 상수 값 ($ b $)
  • 활성화 함수(Activation Function): 최종 출력을 결정하는 함수

퍼셉트론의 수식은 다음과 같이 표현할 수 있습니다:

$$
y = f(\sum_{i=1}^{n} w_i x_i + b)
$$

여기서 $ f $는 활성화 함수입니다. 단순 퍼셉트론에서는 일반적으로 계단 함수(Step Function)를 사용하여 출력을 0 또는 1로 결정합니다.

계단 함수(Step Function)

$$
f(x) = \begin{cases}
1, & x \geq 0 \
0, & x < 0
\end{cases}
$$

3. 단순 퍼셉트론 구현 (Python 코드)

아래는 Python을 사용하여 단순 퍼셉트론을 구현하는 예제입니다.

import numpy as np

def step_function(x):
    return 1 if x >= 0 else 0

def perceptron(x, w, b):
    weighted_sum = np.dot(w, x) + b
    return step_function(weighted_sum)

# 입력 데이터
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])

# AND 게이트를 학습한 가중치와 바이어스
W = np.array([1, 1])  # 가중치
b = -1.5  # 바이어스

# 결과 출력
for x in X:
    y = perceptron(x, W, b)
    print(f"입력: {x}, 출력: {y}")

위 코드는 AND 게이트를 구현한 예제입니다. 여기서 가중치(W)와 바이어스(b)를 설정하여 퍼셉트론이 AND 연산을 수행하도록 만들었습니다.

출력 결과는 다음과 같습니다:

입력: [0 0], 출력: 0
입력: [0 1], 출력: 0
입력: [1 0], 출력: 0
입력: [1 1], 출력: 1

이는 논리 AND 연산과 동일한 결과를 나타냅니다.

4. 퍼셉트론 학습 알고리즘

퍼셉트론은 지도 학습(Supervised Learning) 방식으로 학습할 수 있습니다. 학습 과정은 다음과 같습니다:

  1. 가중치와 바이어스를 임의의 작은 값으로 초기화합니다.
  2. 모든 학습 데이터를 사용하여 아래 단계를 반복합니다:
    • 각 입력 데이터 $ x $ 에 대해 예측 값 $ \hat{y} $ 를 계산합니다.
    • 예측 값과 실제 값 $ y $ 의 차이를 계산하여 오차를 구합니다.
    • 가중치와 바이어스를 다음과 같이 업데이트합니다:
      $$
      w_i \leftarrow w_i + \eta (y - \hat{y}) x_i
      $$
      $$
      b \leftarrow b + \eta (y - \hat{y})
      $$
    • 여기서 $ \eta $ 는 학습률(Learning Rate)입니다.

아래는 퍼셉트론 학습 알고리즘을 구현한 코드입니다.

import numpy as np

def perceptron_train(X, y, lr=0.1, epochs=10):
    w = np.zeros(X.shape[1])  # 가중치 초기화
    b = 0  # 바이어스 초기화

    for epoch in range(epochs):
        for i in range(len(X)):
            y_pred = perceptron(X[i], w, b)
            error = y[i] - y_pred

            # 가중치 및 바이어스 업데이트
            w += lr * error * X[i]
            b += lr * error

    return w, b

# 학습 데이터 (AND 게이트)
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])  # 정답 레이블

# 퍼셉트론 학습
W, B = perceptron_train(X, y)
print(f"학습된 가중치: {W}, 학습된 바이어스: {B}")

5. 퍼셉트론의 한계

퍼셉트론은 단순한 논리 게이트(AND, OR 등)는 학습할 수 있지만, XOR 연산과 같은 선형적으로 분리되지 않는 문제를 해결할 수 없습니다. 이는 퍼셉트론이 선형 분류기(Linear Classifier)이기 때문입니다.

이를 해결하기 위해 다층 퍼셉트론(MLP, Multi-Layer Perceptron)이 등장했으며, MLP는 비선형 활성화 함수를 사용하여 보다 복잡한 문제를 해결할 수 있습니다.

6. 결론

단순 퍼셉트론은 인공 신경망의 기초 개념을 이해하는 데 매우 중요한 모델입니다. 이번 포스팅에서는 퍼셉트론의 개념, 기본 원리, 학습 방법, 그리고 한계점을 살펴보았습니다. 다음 포스팅에서는 다층 퍼셉트론(MLP)과 역전파 알고리즘(Backpropagation)에 대해 다룰 예정입니다.

반응형