단순 퍼셉트론 구현 및 개념 정리
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) 방식으로 학습할 수 있습니다. 학습 과정은 다음과 같습니다:
- 가중치와 바이어스를 임의의 작은 값으로 초기화합니다.
- 모든 학습 데이터를 사용하여 아래 단계를 반복합니다:
- 각 입력 데이터 $ 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)에 대해 다룰 예정입니다.
'Python > Deep Learning' 카테고리의 다른 글
| PyTorch Lightning을 이용한 모델 트레이닝 효율화 (0) | 2025.12.17 |
|---|---|
| TensorFlow 및 Keras의 콜백 함수 활용법 (0) | 2025.12.16 |
| PyTorch의 데이터 로딩 및 변환 (Dataset과 DataLoader) (0) | 2025.12.15 |
| TensorFlow의 데이터 입력 파이프라인 (tf.data) (0) | 2025.12.13 |
| 딥러닝 프레임워크에서 GPU 가속 사용법 (0) | 2025.12.12 |