Python/Deep Learning

뉴런과 퍼셉트론: 기초부터 이해하기

임베디드 친구 2025. 11. 23. 17:38
728x90
반응형

뉴런과 퍼셉트론: 기초부터 이해하기

1. 뉴런이란?

1.1 생물학적 뉴런

딥러닝의 기초가 되는 인공 신경망(Artificial Neural Network, ANN)은 인간의 뇌에서 영감을 받아 개발되었습니다. 인간의 뇌에는 수십억 개의 뉴런(Neuron)이 존재하며, 뉴런들은 신호를 주고받으며 복잡한 연산을 수행합니다.

뉴런은 크게 다음과 같은 요소로 구성됩니다.

  • 수상돌기(Dendrite): 다른 뉴런으로부터 신호를 받아들이는 역할을 합니다.
  • 신경세포체(Cell Body): 입력된 신호를 처리하고, 특정 조건을 만족하면 신호를 전달합니다.
  • 축삭(Axon): 신호를 다음 뉴런으로 전달하는 역할을 합니다.
  • 시냅스(Synapse): 뉴런 간 연결 부위로, 신호의 강도를 조절합니다.

1.2 인공 뉴런

인공 신경망에서는 생물학적 뉴런의 개념을 수학적으로 모델링한 인공 뉴런(Artificial Neuron)을 사용합니다. 인공 뉴런은 다음과 같은 과정을 거쳐 출력을 계산합니다.

  1. 입력 값(X1, X2, ..., Xn)과 가중치(W1, W2, ..., Wn)를 곱하여 가중 합을 계산합니다.
  2. 바이어스(b)를 추가합니다.
  3. 활성화 함수(Activation Function)를 적용하여 최종 출력을 결정합니다.

이를 수식으로 나타내면 다음과 같습니다.

$$ Y = f\left( \sum_{i=1}^{n} W_i X_i + b \right) $$

여기서 $f$는 활성화 함수이며, 신경망이 비선형적인 문제를 해결할 수 있도록 도와줍니다.

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

2.1 퍼셉트론의 개념

퍼셉트론(Perceptron)은 인공 뉴런의 기초적인 형태로, 로젠블랫(Frank Rosenblatt)이 1958년에 개발한 알고리즘입니다. 퍼셉트론은 선형 분류 문제를 해결할 수 있으며, 가장 단순한 형태의 인공 신경망이라고 할 수 있습니다.

퍼셉트론은 다음과 같은 구조를 가집니다.

  • 여러 개의 입력 노드(Input Nodes)
  • 각 입력에 곱해지는 가중치(Weights)
  • 가중 합에 더해지는 바이어스(Bias)
  • 결과를 결정하는 활성화 함수(Activation Function)

2.2 퍼셉트론의 동작 원리

퍼셉트론의 출력은 입력 값과 가중치의 선형 조합을 통해 결정되며, 활성화 함수를 이용하여 특정 임계값 이상이면 1, 그렇지 않으면 0을 출력하는 방식으로 동작합니다.

퍼셉트론의 수식은 다음과 같습니다.

$$ Y = f\left( \sum_{i=1}^{n} W_i X_i + b \right) $$

활성화 함수로는 단위 계단 함수(Unit Step Function)를 사용할 수 있습니다.

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

2.3 퍼셉트론의 예제 구현

아래는 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)

# 입력 데이터 (예: AND 게이트)
X_data = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
Y_data = np.array([0, 0, 0, 1])  # AND 게이트 정답

# 가중치와 바이어스 초기값 설정
W = np.array([1, 1])
b = -1.5

# 퍼셉트론 실행
for X, Y in zip(X_data, Y_data):
    output = perceptron(X, W, b)
    print(f"입력: {X}, 출력: {output}, 실제 값: {Y}")

위 코드는 AND 게이트를 구현한 퍼셉트론 모델입니다. 퍼셉트론은 논리 연산을 수행할 수 있으며, 적절한 가중치와 바이어스를 설정하면 원하는 논리 연산을 학습할 수 있습니다.

3. 퍼셉트론의 한계

퍼셉트론은 선형 분류 문제를 해결할 수 있지만, XOR 문제와 같은 비선형 문제를 해결할 수 없습니다. 이는 퍼셉트론이 단일 선형 분리선을 사용하여 데이터를 나누기 때문입니다.

이를 해결하기 위해 다층 퍼셉트론(MLP, Multi-Layer Perceptron)과 같은 심층 신경망이 개발되었습니다. 다층 퍼셉트론에서는 은닉층(Hidden Layer)을 추가하여 비선형 문제를 해결할 수 있도록 설계되었습니다.

4. 퍼셉트론의 확장: 다층 퍼셉트론(MLP)

다층 퍼셉트론(MLP)은 하나 이상의 은닉층을 가지며, 각 층에서 비선형 활성화 함수를 적용하여 더 복잡한 문제를 해결할 수 있도록 설계되었습니다. 대표적인 활성화 함수로는 ReLU(Rectified Linear Unit), Sigmoid, Tanh 등이 있습니다.

아래는 간단한 다층 퍼셉트론의 구조입니다.

$$ Y = f_3(W_3 f_2(W_2 f_1(W_1 X + b_1) + b_2) + b_3) $$

여기서 각 함수 $f$는 활성화 함수를 의미하며, 신경망이 비선형적인 특성을 학습할 수 있도록 도와줍니다.

4.1 다층 퍼셉트론의 구현 예제

아래는 Python과 TensorFlow/Keras를 이용한 간단한 다층 퍼셉트론 구현 예제입니다.

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# 데이터 준비 (XOR 문제)
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
Y = np.array([[0], [1], [1], [0]])

# 모델 생성
model = Sequential([
    Dense(4, activation='relu', input_shape=(2,)),
    Dense(1, activation='sigmoid')
])

# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 모델 학습
model.fit(X, Y, epochs=1000, verbose=0)

# 예측 결과 출력
print(model.predict(X))

5. 결론

퍼셉트론은 인공 신경망의 기초 개념을 이해하는 데 중요한 모델입니다. 하지만 단일 퍼셉트론은 선형 분류 문제만 해결할 수 있으며, XOR과 같은 비선형 문제는 해결할 수 없습니다. 이를 극복하기 위해 다층 퍼셉트론이 개발되었으며, 현대의 신경망 모델들은 이러한 개념을 확장하여 강력한 성능을 발휘하고 있습니다.

반응형

'Python > Deep Learning' 카테고리의 다른 글

인공신경망(ANN)의 개념과 역사  (0) 2025.11.22