Multi-Layer Perceptron (MLP)
A A

SLP vs. MLP...

Fully-Connected 2-Layer MLP

 

MLP는 일반적으로 fully-connected 형태이다.

 

🔢 Mathematical Equation

Input Layer Forward Math

(b = bias)

 

output y는 input*weight의 weighted sum에 활성화 함수를 적용함으로써 얻어진다.

 

각각의 output을 얻는 과정을 하나의 matrix equation- 가중치 행렬과 input 벡터의 곱으로 표현할 수 있다.

즉, weight 행렬의 크기는 input size와 output size 등 뉴런의 개수에 비례한다.

실제 컴퓨터는 위와 같은 행렬곱으로 계산한다.

 

Multi-Layer Perceptron에서 weight는 행렬 형태로 존재한다.

 

 

Output Layer Forward Math

output layer에서도 마찬가지로, 가중치 행렬과 input 벡터의 곱으로 계산할 수 있다.

(이때, 이전 레이어의 output이 현재 레이어에서 input으로 사용된다.)

 

 

Putting it together

 

첫 번째 레이어의 equation을 두 번째 레이어에 대입한다.

 

 

🤷‍♀️ Need for Multiple Layers

XOR Problem

결론: Single Layer Perceptron은 XOR 연산을 구현할 수 없다.

 

Case 1: Single Layer

Exclusive-OR

 

XOR 연산은 두 input 값이 다른 경우에만 output이 1인 연산이다.

input을 하나의 feature로 본다면 feature space 상에서의 point로 표현할 수 있다.

feature space에서 뉴런이 하는 역할은 line을 그어서 feature 공간을 2개로 분리하는 것이다.
(Classification)

 

 

그림 왼쪽 상단의 뉴런은 XOR 연산처럼 작동한다.

input 1 input 2 output
0 0 0
0 1 1
1 0 1
1 1 0

 

활성화 함수 f(x)는 x가 0보다 크거나 같을 때 1을, 0보다 작을 때 0을 반환하는 함수라고 하자. (그냥 output 그대로 출력)

식을 정리하면 `y = ax + b`와 같은 형태가 된다.

 

이때, SLP는 선형 분리(직면/평면) 가능한 문제만 풀 수 있다.

어떤 직선을 그려도 0과 1을 분리할 수 없으므로, 하나의 뉴런만으로는 이 문제를 해결할 수 없다.

 

그렇다면 뉴런을 한 층 더 쌓아보자.

 

 

Case 2: Multiple Layer

비선형 조합이 가능한 MLP를 사용하면 XOR 문제를 구현할 수 있다.

참고: MLP equation

 

 

원래 weight과 bias는 학습을 통해 얻어내야 하지만, 값이 주어졌다고 해 보자.

 

MLP는 이전 레이어의 output을 현재 레이어의 input으로 사용한다.

활성화 함수로는 ReLU 함수를 사용했다.

ReLU 함수

 

input activation [[x0], [x1]] 벡터의 경우의 수는 4가지가 존재한다.

각각을 계산해보면 다음과 같은 결과가 나온다.

  • [[0], [1]] = 0
  • [[0], [1]] = 1
  • [[1], [0]] = 1
  • [[1], [1]] = 0

1개의 뉴런은 feature space 상에서 0과 1을 구분할 수 없었지만, 한 층을 더 쌓으면 구분하는 것이 가능하다.

 

 

혹은 Batch Computing을 적용해서, 위 4개의 벡터를 하나의 행렬에 넣어서 계산할 수도 있다.

Batch Computing 적용

 

input 레이어의 계산은 input 행렬과 weight 행렬의 행렬곱이 된다.

(이때, bias는 각각의 벡터마다 적용해야 하기 때문에 4개로 복제해야 한다는 점에 유의해야 한다!)

Batch Computing 행렬곱 계산

결과는 같다.

 

 

원래의 feature space에서 line을 그리면 XOR 문제를 해결할 수 없었다.

Multi-Layer Perceptron에서는, input 레이어의 output이 새로운 feature space를 만든다.

(feature transformation)

 

새로운 feature space에서는 0과 1을 분리하는 line을 그리는 것이 가능해진다.

이렇듯 feature space에 변화가 일어나는 것을 feature extraction이라고 표현한다.

새롭게 추출된 feature space에서 분류를 하거나 결정을 내린다.

 

레이어를 더 많이 쌓을수록 feature를 추출하고 feature space를 변화시키면서 표현력이 커진다.

 

 

🎯 Training a Multi-Layer Perceptron

위의 XOR 연산 예시에서는 weight 값과 bias 값이 주어져 있었다.

하지만 실제로는 최적의 weight과 bias를 찾는 알고리즘을 만들어야 한다.

이러한 값들을 얻는 과정이 바로 training이다.

 

(Supervised Training을) 수학적 공식으로 표현하면 다음과 같다.

Mathematical expression

 

이걸 analytically하게 풀지는 않을 것이다.

대신 Gradient Descent를 사용한다.

 

Gradient Descent

 

왼쪽 그래프는 weight에 따른 cost function이다.

weight 값은 작은 랜덤 숫자로 초기화된다.

gradient descent를 적용하면 steepest direction을 찾을 수 있고, 표면의 point가 아래로 이동한다.

이를 반복적으로 적용하다 보면 local minimum point에 도달한다.

 

gradient descent를 사용한다는 것은 weight을 찾기 위해 gradient를 찾아야 한다는 것을 의미한다.

(각 weight에 대한 cost function의 gradient, 위 그림 우측 하단의 식 참고)

 

 

그렇다면 weight에 대한 cost function의 그래디언트는 어떻게 계산해야 할까?

(weight 그래디언트)

 

Back to a Single Neuron

가장 단순한 구조인 싱글 뉴런으로 돌아가서 어떻게 미분이 이루어지는지 이해해볼 필요가 있다.

Chain Rule을 통해 특정 weight wi에 대해 cost가 얼마나 민감하게 변하는지 계산해 보자.

SLP

 

1단계: 미분하기

(o-ot)에서 ground truth인 ot는 상수이기 때문에 무시할 수 있다.

 

2단계: Chain Rule 적용하기

출력 o를 가중치 wi에 대해 편미분한 값은 바로 얻을 수 없다.

맨 위의 식에서 o를 도출하는 과정을 다시 보자.

z는 wi의 함수이고, `o = f(z)`에서, output은 z의 함수이다.

여기서 chain rule을 적용해 원래 식을 확장시킬 수 있다.

첫 번째 식은 f'(z)로, 두 번째 식은 해당 weight 값에 해당하는 input xi 값으로 계산된다.

 

 

전체 식:

Single Neuron

 

따라서 weight 그래디언트는 error * 활성화 함수의 미분 * input으로 구성된다.

같은 패턴이 모든 다른 뉴런에 대해 적용된다.

 

 

Multi-Layer Perceptron에 적용하기

Problem Statement

 

 

Gradient descent 공식에 weight 행렬을 넣어보면 다음과 같다.

 

이제 weight gradient를 찾는 데에 아까 배웠던 패턴을 적용시켜 보자.

 

Chain Rule

 

input은 x(i), hidden unit은 z(j), output은 y(k)이다.

x와 z 사이의 가중치를 w(j,i), z와 y 사이의 가중치를 w(k,j)로 두었다.

y(k)를 구하는 식은 오른쪽 수식처럼 정리할 수 있다.

 

 

이제 이 식을 참고해서 두 번째 레이어의 weight 그래디언트부터 계산해 보자.

전체 식은 아래와 같다.

2nd layer weight gradient

 

처음 식에서 y(k) = f(a(k)), a(k) = Σw(j,i)z(j) 였다.

Chain rule을 적용하면, w(k,j)에 대한 y(k)의 그래디언트는 f'(a(k))*z(j)로 정리된다.

이런 식으로 두 번째 레이어의 weight에 대한 그래디언트를 구할 수 있다.

 

 

다음으로, 첫 번째 레이어의 weight에 대한 그래디언트를 계산한다.

구하는 과정은 생략했다.

1st layer weight gradient

 

패턴

 

정리하면 다음과 같다.

weight gradient(1) = activation gradient(1) x input(1)
activation gradient(1) = activation gardient(2) x weight(2)

 

1층의 weight을 얼마나 업데이트할지 정하려면,

해당 weight가 연결된 뉴런이 받은 오차(=activation gradient)와 그 weight가 곱해졌던 입력값을 곱해야 한다.

즉 입력값이 크고 오차도 크면 가중치를 더 많이 수정해야 한다.

 

1층의 오차는 2층의 오차로 구성된다.

이렇듯 오차는 이전 층으로 전파되는데, 이런 프로세스를 Backpropagation이라고 한다.

 

 

📝 Summary

  • Multi-Layer Perceptron에서 weight는 행렬 형태로 존재한다.
  • 가중치 행렬의 사이즈는 해당 레이어의 input 뉴런과 output 뉴런의 개수에 비례한다.
  • 레이어를 여러 층 사용하는 이유는 하나의 뉴런만으로는 XOR 논리연산을 구현할 수 없기 때문이다.
  • 레이어를 더 많이 쌓을수록 feature를 추출하고 feature space를 변화시키면서 표현력이 커진다.

'𝐄𝐰𝐡𝐚 > 인공지능' 카테고리의 다른 글

Various CNN Models  (0) 2025.04.30
Training Dynamics  (0) 2025.04.28
Deep Neural Network  (1) 2025.04.18
Neural Network Basics  (0) 2025.04.16
Introduction to Deep Learning  (0) 2025.04.14
Copyright 2024. GRAVITY all rights reserved