MLP(Multilayer Perceptron)와 DNN(Deep Neural Network)은 둘 다 인공신경망의 한 형태이지만, 약간의 차이가 있다. 이 둘을 이해하기 위해 가장 기본적인 SLP(Single Layer Perceptron)를 먼저 알아보자.
SLP(Single Layer Perceptron)
SLP는 은닉층(hidden layer)이 없으며 입력층(input layer)과 출력층(output layer)으로만 구성된다. 선형 분류 문제에 적합하며 직선 형태의 결정 경계를 학습할 수 있기 때문에, XOR 문제와 같은 비선형 분류 문제는 해결하지 못한다.
활성화 함수(activation function)는 주로 계단 함수(step function)를 사용하며, 출력은 이진 분류로 나온다.
여기서 계단 함수란 입력값이 특정 임계값(threshold)을 넘으면 1을 출력하고, 그렇지 않으면 0을 출력하는 비선형 함수(nonlinear function)다. 이는 단순히 신경망에서 활성화 여부를 결정하는 데 사용된다.
가장 기본적인 형태의 계단 함수를 살펴보자.
$$ f(x) = \begin{cases}
1, & \text{if } x \geq 0 \\
0, & \text{if } x < 0
\end{cases} $$
이 함수는 입력 \( x \)가 0 이상일 때 1을 출력하고, 0보다 작을 때 0을 출력한다. 하지만 임계값이 0.5라면 0.0001과 0.49도 동일하게 0으로 출력된다는 단점이 있다.
이 계단 함수 자체는 비선형 함수이다. 하지만 SLP는 은닉층이 없기 때문에 여러 개의 비선형 관계를 학습할 수 없고, 따라서 비선형 문제를 해결하는 데 한계가 있다. 비선형 함수가 없으면 입력과 출력 간의 관계는 선형 관계로 제한된다. 따라서 SLP는 데이터를 단순히 선형 결정 경계로만 분류한다.
SLP의 한계를 극복하기 위해 MLP에서 은닉층(hidden layer)을 추가하고, 비선형 활성화 함수인 ReLU, Sigmoid 등을 사용하여 비선형 관계를 학습할 수 있게 만든다.
MLP(Multilayer Perceptron)
MLP는 하나 이상의 은닉층(hidden layer)을 가진 인공신경망을 의미한다. 각 층은 완전 연결(fully connected)되어 있으며 입력층(input layer), 은닉층(hidden layer), 출력층(output layer)으로 구성된다. 각 층의 출력은 비선형 활성화 함수를 통해 계산되며, 이 과정에서 가중치(weight)는 역전파(backpropagation) 알고리즘을 이용하여 업데이트된다.
MLP에서 비선형 함수(nonlinear function)를 사용하는 이유는 실제로 세상에 존재하는 데이터는 선형 방정식만으로 표현하기엔 너무도 많은 특징(feature)과 패턴이 존재하기 때문이다.
일반적으로 MLP는 층의 수가 적고 간단한 신경망 구조를 가리키는 데 많이 사용된다. 주로 선형 분류 문제나 간단한 패턴 인식 문제를 해결하는 데 쓰인다.
DNN (Deep Neural Network)
DNN은 MLP의 일반화된 형태로, 더 많은 은닉층을 가진 신경망을 뜻한다. 이때 은닉층이 많아지면 깊은 구조(Deep Structure)를 가진 신경망이 되므로 ‘Deep’이라는 이름이 붙는다. 일반적으로는 은닉층이 3개 이상일 때 DNN이라 칭하며 단순한 MLP와 구분 짓는다.
DNN은 더 많은 계층과 뉴런을 통해 복잡한 비선형 관계를 학습할 수 있어, 이미지나 음성 인식과 같은 복잡한 문제에 적합하다. 딥러닝에서 자주 언급되는 심층 신경망은 일반적으로 DNN을 뜻하며, CNN, RNN과 같은 특화된 신경망도 모두 DNN의 일종으로 볼 수 있다.
DNN을 응용하여 CNN, RNN, LSTM, GRU 등으로 발전하였고 Attention 메커니즘과 Transformer도 이에 해당한다.
요약하자면 아래와 같다.
- SLP: 은닉층이 없는 가장 단순한 퍼셉트론으로, 선형 분류만 가능하다.
- MLP: 은닉층을 하나 이상 갖춘 다층 퍼셉트론으로, 비선형 분류가 가능하다.
- DNN: 은닉층이 3개 이상인 MLP로, 층이 깊어져 복잡한 문제를 학습할 수 있다.
관련 포스팅
참고 자료
https://bcloved.github.io/Perceptron/
https://dbrang.tistory.com/1537#google_vignette