Python/Deep Learning

심층 신경망(Deep Neural Network, DNN)의 구조와 원리

임베디드 친구 2025. 12. 3. 20:54
728x90
반응형

심층 신경망(Deep Neural Network, DNN)의 구조와 원리

1. 개요

딥러닝(Deep Learning)의 핵심 요소 중 하나는 심층 신경망(Deep Neural Network, DNN)입니다. DNN은 다층 퍼셉트론(MLP: Multi-Layer Perceptron)의 확장된 형태로, 입력층(Input Layer), 여러 개의 은닉층(Hidden Layer), 출력층(Output Layer)으로 구성됩니다. 이 글에서는 DNN의 구조와 동작 원리를 자세히 살펴보고, 예제 코드를 통해 실제 구현 방법을 설명하겠습니다.

2. 심층 신경망의 구조

2.1 입력층(Input Layer)

입력층은 신경망에 데이터를 제공하는 역할을 합니다. 입력층의 뉴런 개수는 입력 데이터의 특징(feature) 개수와 동일합니다.

2.2 은닉층(Hidden Layer)

은닉층은 신경망에서 중요한 계산이 이루어지는 부분입니다. 하나 이상의 은닉층을 포함하는 신경망을 심층 신경망(DNN)이라고 합니다. 각 은닉층은 가중치(Weights)와 편향(Bias)을 갖는 뉴런들로 이루어져 있으며, 활성화 함수(Activation Function)를 적용하여 비선형성을 부여합니다.

2.3 출력층(Output Layer)

출력층은 최종 결과를 도출하는 역할을 합니다. 출력층의 뉴런 개수는 문제 유형에 따라 달라지며, 분류(Classification) 문제에서는 클래스 개수, 회귀(Regression) 문제에서는 1개 또는 여러 개가 될 수 있습니다.

3. 심층 신경망의 동작 원리

DNN의 학습 과정은 다음과 같은 단계로 이루어집니다.

3.1 순전파(Forward Propagation)

순전파는 입력 데이터를 이용해 신경망을 통해 출력을 계산하는 과정입니다. 각 층의 뉴런은 이전 층의 출력을 받아 가중치와 편향을 적용한 후, 활성화 함수를 통해 새로운 출력을 생성합니다.

수식으로 표현하면 다음과 같습니다.

$$
Z^{(l)} = W^{(l)}A^{(l-1)} + b^{(l)}
$$

$$
A^{(l)} = \sigma(Z^{(l)})
$$

여기서,

  • $ W^{(l)} $: $ l $ 번째 층의 가중치 행렬
  • $ b^{(l)} $: $ l $ 번째 층의 편향 벡터
  • $ A^{(l-1)} $: 이전 층의 활성화 함수 결과
  • $ \sigma $: 활성화 함수
  • $ Z^{(l)} $: 가중합
  • $ A^{(l)} $: 활성화 함수 적용 후 출력

3.2 비용 함수(Cost Function)

비용 함수는 신경망의 예측값과 실제 값 사이의 차이를 평가하는 함수입니다. 주어진 데이터에 대해 모델이 얼마나 잘 학습했는지를 측정합니다. 대표적인 비용 함수로는 다음과 같은 것들이 있습니다.

  • 평균 제곱 오차(MSE: Mean Squared Error) - 회귀 문제
  • 교차 엔트로피(Cross-Entropy) - 분류 문제

3.3 역전파(Backpropagation)

역전파는 신경망의 가중치를 최적화하기 위한 알고리즘입니다. 출력층에서 계산된 오차를 기반으로 가중치를 업데이트합니다. 역전파는 다음과 같은 단계를 거칩니다.

  1. 비용 함수의 기울기(Gradient) 계산
  2. 각 층의 가중치 및 편향의 변화량(Gradient Descent) 계산
  3. 가중치와 편향 업데이트

역전파의 핵심 수식은 다음과 같습니다.

$$
\frac{\partial J}{\partial W^{(l)}} = \delta^{(l)} A^{(l-1)T}
$$

$$
\delta^{(l)} = \frac{\partial J}{\partial A^{(l)}} \odot \sigma'(Z^{(l)})
$$

여기서,

  • $ J $: 비용 함수
  • $ \delta^{(l)} $: $ l $ 층의 오차
  • $ \sigma' $: 활성화 함수의 미분값
  • $ \odot $: 요소별(element-wise) 곱

4. 심층 신경망 구현 예제 (TensorFlow/Keras 활용)

다음은 TensorFlow와 Keras를 이용하여 간단한 DNN을 구현하는 코드입니다.

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dense

# 샘플 데이터 준비
import numpy as np
np.random.seed(42)
X_train = np.random.rand(1000, 10)  # 10개의 특징을 가진 1000개의 데이터
y_train = np.random.randint(0, 2, 1000)  # 이진 분류 데이터

# DNN 모델 정의
model = keras.Sequential([
    Dense(64, activation='relu', input_shape=(10,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid')  # 이진 분류이므로 sigmoid 활성화 함수 사용
])

# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 모델 학습
model.fit(X_train, y_train, epochs=20, batch_size=32)

5. 결론

심층 신경망(DNN)은 여러 개의 은닉층을 포함하는 인공신경망의 확장된 형태로, 다양한 머신러닝 및 딥러닝 문제를 해결하는 데 널리 사용됩니다. DNN의 핵심 개념은 입력층, 은닉층, 출력층으로 구성되며, 순전파와 역전파를 통해 학습이 이루어집니다. 또한 TensorFlow/Keras를 이용하면 비교적 간단하게 DNN을 구현하고 실험할 수 있습니다.

이 글을 통해 DNN의 구조와 원리를 이해하고, 실제 구현 방법을 익히는 데 도움이 되었기를 바랍니다.

반응형