[Deep Learning] Multi-layer Perceptron의 구조와 수학적 관계

nomadicsoul·2026년 3월 20일

deeplearning

목록 보기
4/19

"딥러닝은 '가중치(WW) 곱하기'와 '활성화(ff) 함수'라는 두 개의 릴레이 바톤을 서로 다른 층(Layer)에 걸쳐 무한히 이어가는 과정입니다."

이 모델은 데이터를 받아서 예측값(y^\hat{y})을 내놓기까지, 서로 다른 3개의 함수(Layer)가 꼬리에 꼬리를 무는 합성함수 구조입니다.

  • '층(Layer)'을 세는 국제 표준: 가중치(Weight) 기준딥러닝에서 레이어를 셀 때는 데이터를 담는 '노드 층'이 아니라, 데이터를 변형시키는 '파라미터(가중치) 층'을 기준으로 합니다.
    • 첫 번째 가중치 뭉치 (W(1),b(1)W^{(1)}, b^{(1)}): Input \to Layer 1 사이 (1층)
    • 두 번째 가중치 뭉치 (W(2),b(2)W^{(2)}, b^{(2)}): Layer 1 \to Layer 2 사이 (2층)
    • 세 번째 가중치 뭉치 (W(3),b(3)W^{(3)}, b^{(3)}): Layer 2 \to Output 사이 (3층)

즉, 변환(Transformation)이 세 번 일어나기 때문에 3-Layer라고 부르는 것입니다.
'학습 가능한 층'만 세여 입력층은 학습하지 않으므로 제외합니다.

  • 각 레이어의 노드 개수:
    1. 입력층 (Input Layer): 데이터를 받는 곳입니다. 바이어스 노드(1)를 제외하고 4개의 입력(x1x4x_1 \dots x_4)이 있습니다.
    2. 레이어 1 (Hidden Layer 1 - 초록색): 데이터를 특징으로 변환하는 첫 번째 층입니다. 4개의 노드(a1(1)a4(1)a^{(1)}_1 \dots a^{(1)}_4)로 구성됩니다.
    3. 레이어 2 (Hidden Layer 2 - 파란색): 더 복잡한 추상적 특징을 추출하는 두 번째 층입니다. 3개의 노드(a1(2)a3(2)a^{(2)}_1 \dots a^{(2)}_3)로 구성됩니다.
    4. 출력층 (Output Layer - 빨간색): 최종 예측 결과를 내놓는 곳입니다. 우리가 분류하려는 클래스의 개수와 같은 3개의 노드(a1(3)a3(3)a^{(3)}_1 \dots a^{(3)}_3)로 구성됩니다.
레이어 이름수학적 인덱스노드 개수 (바이어스 제외)특징
Input LayerLayer 0 (보통 안 침)4개 (x1x4x_1 \sim x_4)입력 데이터 그 자체 (함수 연산 없음)
Hidden Layer 1Layer 14개 (a1(1)a4(1)a^{(1)}_1 \sim a^{(1)}_4)첫 번째 함수 f1f_1의 결과물
Hidden Layer 2Layer 23개 (a1(2)a3(2)a^{(2)}_1 \sim a^{(2)}_3)두 번째 함수 f2f_2의 결과물
Output LayerLayer 33개 (a1(3)a3(3)a^{(3)}_1 \sim a^{(3)}_3)세 번째 함수 f3f_3의 결과물 (예측값)

많은 분이 중간에 있는 'Hidden Layer'의 개수만 세어 이 모델을 2층이라고 생각하곤 합니다. 하지만 딥러닝에서 레이어의 숫자는 '데이터가 가중치(WW)라는 필터를 몇 번 통과하느냐'를 의미합니다.

이 모델에서는 입력 데이터가 출력층에 도달하기까지 총 3번의 선형 결합(내적)과 활성화 함수를 거칩니다. 따라서 수학적으로는 3개의 함수가 중첩된 f3(f2(f1(x)))f_3(f_2(f_1(x))) 구조, 즉 3-Layer 모델이 정답입니다!


2. 그림의 수학적 표기법 (Notation)

블로그 글에 이 표를 복사해서 넣으면 독자들이 수식을 읽는 데 큰 도움이 됩니다.

표기 (Notation)정체해석 (Interpretation)
xx입력 벡터모델에 들어가는 4차원 원본 데이터 (x1x4x_1 \dots x_4)입니다.
a(l)a^{(l)}활성화 벡터ll번째 레이어를 통과한 결과물(Activation)입니다.
W(l)W^{(l)}가중치 행렬ll번째 레이어의 입력과 출력을 연결하는 '지식'입니다. (선들의 집합)
b(l)b^{(l)}바이어스 벡터ll번째 레이어에 더해지는 '고정 편향'입니다. (그림에서 '1' 노드)
ReLU활성화 함수데이터를 비선형으로 변환하는 함수입니다. (zz가 0보다 작으면 0, 크면 zz 그대로)
Softmax최종 활성화 함수출력값을 0~1 사이의 확률값으로 변환하여 합이 1이 되게 만듭니다.
y^\hat{y}예측값 벡터모델이 최종적으로 내놓은 예측 확률(y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3)입니다.

3. 수학적 관계 해석 (Forward Pass)

1. 노드 하나는 '벡터 내적'의 결과물입니다

그림에서 Layer 1의 초록색 노드 a1(1)a^{(1)}_1을 자세히 보세요. 입력층의 모든 노드(x1,x2,x3,x4x_1, x_2, x_3, x_4)에서 선이 들어오고 있죠? 이 선 하나하나가 바로 가중치(ww)입니다.

이 관계를 인덱스를 써서 내적으로 표현하면 다음과 같습니다.

  • ① 선형 결합 (Linear Combination)
    먼저 활성화 함수를 통과하기 전의 값(z1(1)z^{(1)}_1)을 구합니다.
    • z1(1)=i=14(w1,i(1)xi)+b1(1)=w1(1)x+b1(1)z^{(1)}_1 = \sum_{i=1}^{4} (w^{(1)}_{1,i} \cdot x_i) + b^{(1)}_1 = \mathbf{w}^{(1)}_1 \cdot \mathbf{x} + b^{(1)}_1
      • xix_i: ii번째 입력값 (데이터)
      • w1,i(1)w^{(1)}_{1,i}: ii번째 입력이 1번 레이어의 1번 노드로 갈 때 곱해지는 가중치
      • b1(1)b^{(1)}_1: 1번 레이어의 1번 노드에 더해지는 바이어스
  • ② 비선형 활성화 (Non-linear Activation)
    • a1(1)=ReLU(z1(1))a^{(1)}_1 = \text{ReLU}(z^{(1)}_1)

2. 레이어 전체로 확장하기 (General Form)

  • 이를 일반화해서 ll번째 레이어의 jj번째 노드가 출력하는 값 aj(l)a^{(l)}_j를 정의합니다.

    • aj(l)=f(i=1nl1wj,i(l)ai(l1)+bj(l))a^{(l)}_j = f\left( \sum_{i=1}^{n_{l-1}} w^{(l)}_{j,i} \cdot a^{(l-1)}_i + b^{(l)}_j \right)

      • nl1n_{l-1}: 이전 레이어의 노드 개수
      • ai(l1)a^{(l-1)}_i: 이전 레이어의 ii번째 노드에서 보내온 신호
      • wj,i(l)w^{(l)}_{j,i}: 이전 레이어의 ii번째 노드에서 현재 레이어의 jj번째 노드로 연결된 가중치
      • ff: 활성화 함수 (ReLU, Softmax 등)

MLP 3-Layer

그림에 나온 수식을 벡터 내적 관점으로 '체인 룰'을 다시 쓰면 이렇습니다.

① 입력층 \to 레이어 1 (초록색) (j=14j=1 \dots 4):

  • aj(1)=ReLU(i=14wj,i(1)xi+bj(1))a^{(1)}_j = \text{ReLU}\left( \sum_{i=1}^{4} w^{(1)}_{j,i} x_i + b^{(1)}_j \right)
  • 원본 데이터 xx에 가중치 행렬 W(1)W^{(1)}을 곱하고 바이어스 b(1)b^{(1)}를 더합니다. (선형 연산)
  • 그 결과에 비선형 활성화 함수인 ReLU를 씌워 첫 번째 특징 벡터 a(1)a^{(1)}을 만듭니다.

② 레이어 1 (초록색) \to 레이어 2 (파란색) (j=13j=1 \dots 3):

  • aj(2)=ReLU(i=14wj,i(2)ai(1)+bj(2))a^{(2)}_j = \text{ReLU}\left( \sum_{i=1}^{4} w^{(2)}_{j,i} a^{(1)}_i + b^{(2)}_j \right)
  • Output Layer (j=13j=1 \dots 3): aj(3)=Softmax(i=13wj,i(3)ai(2)+bj(3))a^{(3)}_j = \text{Softmax}\left( \sum_{i=1}^{3} w^{(3)}_{j,i} a^{(2)}_i + b^{(3)}_j \right)
  • 1층의 결과물 a(1)a^{(1)}을 입력으로 받습니다.
  • 여기에 다시 가중치 W(2)W^{(2)}와 바이어스 b(2)b^{(2)}를 연산하고, ReLU를 씌워 더 고차원적인 특징 벡터 a(2)a^{(2)}를 만듭니다.

③ 레이어 2 (파란색) \to 출력층 (빨간색)(j=13j=1 \dots 3):

  • y^j=Softmax(i=13wj,i(3)ai(2)+bj(3))\hat{y}_j = \text{Softmax}(\sum_{i=1}^{3} w^{(3)}_{j,i} a^{(2)}_i + b^{(3)}_j)

  • 최종 단계입니다. 2층의 결과물 a(2)a^{(2)}에 가중치 W(3)W^{(3)}와 바이어스 b(3)b^{(3)}를 연산합니다.

  • 마지막으로 활성화 함수를 ReLU가 아닌 Softmax를 사용합니다. 이는 결과물(y^\hat{y})을 "이 데이터가 1번 클래스일 확률은 70%, 2번은 20%..."와 같이 확률로 해석하기 위해서입니다.


왜 '내적'으로 이해하는 게 중요한가요?

"벡터 내적은 두 벡터의 '유사도'를 측정하는 도구입니다."

  • 가중치 벡터(w\mathbf{w})를 하나의 '필터(Pattern)'라고 생각해보세요.
  • 입력 데이터(x\mathbf{x})가 들어왔을 때, 가중치와 데이터의 내적값이 크다는 것은 "내가 찾던 패턴이 데이터에 들어있다!"라고 노드가 외치는 것과 같습니다.
  • 결국 딥러닝은 수많은 가중치 벡터(wj\mathbf{w}_j)들을 조정하여, 데이터 속에 숨겨진 다양한 패턴들을 가장 잘 찾아내도록 내적의 결과값을 최적화하는 과정인 셈입니다.
profile
꾸준히

0개의 댓글