1. 퍼셉트론 (Perceptron)
가장 기본적인 인공 신경망의 단위
구조
입력층 → 가중치 합 → 활성화 함수 → 출력
수학적 표현
입력값의 가중치 합:
출력 (활성화 함수 적용):
- : 입력 벡터
- : 가중치 벡터
- : 편향 (bias)
- : 활성화 함수
퍼셉트론의 작동 원리
- 입력 받기: 여러 개의 입력 신호를 받음
- 가중치 곱하기: 각 입력에 가중치를 곱함
- 합산: 모든 가중치 곱을 더하고 편향을 더함
- 활성화: 활성화 함수를 통과시켜 출력 생성
퍼셉트론의 한계
XOR 문제:
- 선형 분리 불가능한 문제를 해결할 수 없음
- 단일 퍼셉트론으로는 AND, OR은 구현 가능하지만 XOR은 불가능
- 해결책: 다층 퍼셉트론 (MLP)
예시:
X1 | X2 | XOR |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
단일 직선으로는 XOR의 0과 1을 분리할 수 없습니다.
2. 다층 퍼셉트론 (Multi-Layer Perceptron, MLP)
여러 개의 층으로 구성된 신경망으로 XOR 문제와 같은 복잡한 패턴을 학습할 수 있습니다.
구조
입력층 → 은닉층 1 → 은닉층 2 → ... → 출력층
층의 종류:
- 입력층 (Input Layer): 데이터를 받는 층
- 은닉층 (Hidden Layer): 중간 계산을 수행하는 층 (1개 이상)
- 출력층 (Output Layer): 최종 예측값을 출력하는 층
왜 “다층”인가?
- 표현력 증가: 여러 층을 쌓으면 더 복잡한 함수를 표현 가능
- 계층적 특징 학습: 낮은 층에서는 단순한 패턴, 높은 층에서는 복잡한 패턴 학습
- 비선형 문제 해결: 은닉층의 활성화 함수가 비선형성을 부여
3. 순전파 (Forward Propagation)
데이터가 입력층에서 출력층으로 흐르는 과정
순전파 과정
1층 계산:
2층 계산:
최종 출력:
변수 설명
- : 전체 층의 개수
- : l번째 층의 가중치 행렬
- : l번째 층의 편향 벡터
- : l번째 층의 선형 결합 값
- : l번째 층의 활성화 값
- : 활성화 함수
순전파 예시 (Python)
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 2층 신경망 순전파
def forward_propagation(X, W1, b1, W2, b2):
# 1층 계산
z1 = np.dot(W1, X) + b1
a1 = sigmoid(z1)
# 2층 계산 (출력층)
z2 = np.dot(W2, a1) + b2
a2 = sigmoid(z2)
return a2
# 예시 사용
X = np.array([[0.5], [0.3]]) # 입력
W1 = np.random.randn(4, 2) # 1층 가중치 (4개 뉴런)
b1 = np.random.randn(4, 1) # 1층 편향
W2 = np.random.randn(1, 4) # 2층 가중치 (1개 출력)
b2 = np.random.randn(1, 1) # 2층 편향
output = forward_propagation(X, W1, b1, W2, b2)
print(f"예측값: {output}")
4. 신경망의 용량 (Capacity)
층의 개수 (Depth)
얕은 신경망 (2-3층):
- 간단한 패턴 학습
- 빠른 학습
- 과적합 위험 낮음
깊은 신경망 (4층 이상):
- 복잡한 패턴 학습
- 계층적 특징 추출
- 더 적은 파라미터로 더 복잡한 함수 표현
- 과적합 위험 높음
뉴런의 개수 (Width)
적은 뉴런:
- 표현력 제한
- 과소적합 위험
많은 뉴런:
- 높은 표현력
- 과적합 위험
- 많은 계산량
선택 가이드
문제 유형 | 추천 구조 |
---|---|
간단한 분류 | 2-3층, 64-256 뉴런 |
복잡한 분류 | 3-5층, 128-512 뉴런 |
이미지 | CNN (별도 문서 참조) |
시계열 | RNN/LSTM (별도 문서 참조) |
5. 전연결층 (Fully Connected Layer)
모든 입력이 모든 출력에 연결된 층
특징
- 각 뉴런이 이전 층의 모든 뉴런과 연결
- MLP의 기본 구성 요소
- Dense Layer라고도 불림
파라미터 수 계산
한 층의 파라미터 수:
- : 입력 차원
- : 출력 차원
- 첫 번째 항: 가중치
- 두 번째 항: 편향
예시:
- 입력: 784 (28×28 이미지)
- 은닉층: 128 뉴런
- 파라미터: (784 × 128) + 128 = 100,480개
6. 실습: 간단한 MLP 구현
Keras 구현
from tensorflow import keras
from tensorflow.keras import layers
# 3층 신경망 생성
model = keras.Sequential([
layers.Input(shape=(784,)), # 입력층
layers.Dense(128, activation='relu'), # 은닉층 1
layers.Dense(64, activation='relu'), # 은닉층 2
layers.Dense(10, activation='softmax') # 출력층
])
# 모델 요약
model.summary()
PyTorch 구현
import torch
import torch.nn as nn
class SimpleMLP(nn.Module):
def __init__(self):
super(SimpleMLP, self).__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 10)
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.fc1(x))
x = self.relu(self.fc2(x))
x = self.fc3(x)
return x
# 모델 생성
model = SimpleMLP()
print(model)
7. 신경망 시각화
간단한 2층 신경망 구조
입력층 (2) 은닉층 (3) 출력층 (1)
x1 -------- h1 --------
\/ \/ y
x2 -------- h2 --------
/\ /\
\/ \/
h3
각 연결선은 학습 가능한 가중치를 나타냅니다.
핵심 요약
퍼셉트론
- ✅ 가장 기본적인 신경망 단위
- ✅ 선형 분리 가능한 문제만 해결
- ❌ XOR 같은 비선형 문제 해결 불가
다층 퍼셉트론 (MLP)
- ✅ 여러 층을 쌓아 복잡한 패턴 학습
- ✅ 비선형 문제 해결 가능
- ✅ 계층적 특징 학습
순전파
- ✅ 입력 → 은닉층 → 출력 방향으로 계산
- ✅ 각 층에서 선형 변환 + 활성화 함수 적용
- ✅ 최종 출력이 예측값
다음 학습
이제 신경망의 구조를 이해했으니 다음을 학습하세요:
- 활성화_함수 (Activation Function) - 신경망에 비선형성을 부여하는 함수들
- 손실_함수와_최적화 - 신경망이 학습하는 방법
- 정규화_기법 (Regularization) - 과적합을 방지하는 기법들