Home > Study > AI Algorithm Structure > Day4: Deep Learning

Day4: Deep Learning

Compare Perceptron, Multi Layer perceptron XOR Gate


1. 네트워크 구조의 차이

Perceptron

- Single layer : 입력층과 출력층만 존재하며, 입력값에 가중치와 바이어스를 더한 뒤 바로 출력

self.weights = np.zeros(input_size)
self.bias = 0

- 활성화 함수: 계단함수와 같은 단순한 함수를 사용한다.

Multi Layer Perceptron

- Multi layer : 입력층, 은닉층, 출력층으로 구성된다.

self.w1 = np.random.randn(input_size, hidden_size)
self.b1 = np.zeros(hidden_size)
self.w2 = np.random.randn(hidden_size, output_size)
self.b2 = np.zeros(output_size)

- 활성화 함수: sigmoid, tanh 등 연속적이고 미분 가능한 함수 사용. 각 층마다 적용한다.

2. 순전파 연산의 차이

Perceptron

- 입력층 -> 출력층

linear_output = np.dot(x, self.weights) + self.bias
return self.activation(linear_output)

Multi Layer Perceptron

- 입력층 -> 은닉층 -> 출력층

self.z1 = np.dot(x, self.w1) + self.b1
self.a1 = sigmoid(self.z1)
self.z2 = np.dot(self.a1, self.w2) + self.b2
self.a2 = sigmoid(self.z2)
return self.a2

3. 가중치 업데이트 방식의 차이

Perceptron

- 단순 업데이트

update = self.lr * (target - prediction)
self.weights += update * x1
self.bias += update

Multi Layer Perceptron

- 역전파(Backpropagation) 사용

출력층 오차를 은닉층까지 전파하여 모든 가중치/바이어스를 미분값(gradient)으로 업데이트한다

# 출력층 오차
error_output = self.a2 - y
delta2 = error_output * sigmoid_diff(self.z2)
# 은닉층 오차
error_hidden = np.dot(self.w2, delta2)
delta1 = error_hidden * sigmoid_diff(self.z1)
# 가중치 업데이트
self.w2 -= self.lr * np.outer(self.a1, delta2)
self.b2 -= self.lr * delta2
self.w1 -= self.lr * np.outer(x, delta1)
self.b1 -= self.lr * delta1

4. 문제 해결 능력의 차이

Perceptron

- 퍼셉트론: XOR처럼 선형적으로 구분 불가능한 문제는 절대 풀 수 없음. 단일 직선(혹은 평면)만으로 데이터를 나눈다.

Multi Layer Perceptron

- MLP: 은닉층의 비선형 변환 덕분에 XOR 등 복잡한 패턴도 학습 가능. 실제로 MLP 코드는 XOR 문제를 성공적으로 해결할 수 있음

5. 코드 예시

Perceptron

  • 출력층 오차만 사용

    class Perceptron:
      def __init__(self, input_size, ...):
          self.weights = np.zeros(input_size)
          self.bias = 0
      def predict(self, x):
          return self.activation(np.dot(x, self.weights) + self.bias)
      def train(self, X, y):
    

    Multi Layer Perceptron

  • 여러 층 순전파

  • 역전파로 모든 층 가중치 업데이트

    class MLP:
      def __init__(self, input_size, hidden_size, output_size, ...):
          self.w1 = np.random.randn(input_size, hidden_size)
          self.b1 = np.zeros(hidden_size)
          self.w2 = np.random.randn(hidden_size, output_size)
          self.b2 = np.zeros(output_size)
      def forward(self, x):
      def backward(self, x, y):
    

6. 요약

구분 퍼셉트론 MLP
층 구조 입력-출력(단일층) 입력-은닉-출력(다층)
가중치/바이어스 1개(입력→출력) 2세트(입력→은닉, 은닉→출력)
순전파 한 번의 선형 연산+활성화 여러 층의 선형 연산+비선형 활성화 반복
학습 방식 출력층 오차로 단순 업데이트 역전파로 모든 층의 가중치/바이어스 업데이트
활성화 함수 계단함수/시그모이드(단순) 시그모이드/탄젠트 등(비선형, 미분 가능)
문제 해결력 선형 문제만 해결(XOR 불가) 비선형 문제(XOR 등) 해결 가능