1. 퍼셉트론 (Perceptron)

가장 기본적인 인공 신경망의 단위

구조

입력층 → 가중치 합 → 활성화 함수 → 출력

수학적 표현

입력값의 가중치 합:

출력 (활성화 함수 적용):

  • : 입력 벡터
  • : 가중치 벡터
  • : 편향 (bias)
  • : 활성화 함수

퍼셉트론의 작동 원리

  1. 입력 받기: 여러 개의 입력 신호를 받음
  2. 가중치 곱하기: 각 입력에 가중치를 곱함
  3. 합산: 모든 가중치 곱을 더하고 편향을 더함
  4. 활성화: 활성화 함수를 통과시켜 출력 생성

퍼셉트론의 한계

XOR 문제:

  • 선형 분리 불가능한 문제를 해결할 수 없음
  • 단일 퍼셉트론으로는 AND, OR은 구현 가능하지만 XOR은 불가능
  • 해결책: 다층 퍼셉트론 (MLP)

예시:

X1X2XOR
000
011
101
110

단일 직선으로는 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)

  • ✅ 여러 층을 쌓아 복잡한 패턴 학습
  • ✅ 비선형 문제 해결 가능
  • ✅ 계층적 특징 학습

순전파

  • ✅ 입력 → 은닉층 → 출력 방향으로 계산
  • ✅ 각 층에서 선형 변환 + 활성화 함수 적용
  • ✅ 최종 출력이 예측값

다음 학습

이제 신경망의 구조를 이해했으니 다음을 학습하세요:

  1. 활성화_함수 (Activation Function) - 신경망에 비선형성을 부여하는 함수들
  2. 손실_함수와_최적화 - 신경망이 학습하는 방법
  3. 정규화_기법 (Regularization) - 과적합을 방지하는 기법들

딥러닝_기초 (Deep Learning Fundamentals)