개발 창고/AI

딥러닝(Deep Learning) 기본 개념: CNN과 RNN 이해하기

Royzero 2025. 8. 12. 22:00
반응형

1. 딥러닝이란 무엇인가?

딥러닝(Deep Learning)은 다층 인공신경망(Artificial Neural Network) 을 기반으로 한 머신러닝 기법입니다.
머신러닝의 한 분야이지만, 복잡한 데이터(이미지·음성·텍스트 등) 를 처리하는 데 특히 강력합니다.


1.1 인공신경망의 기본 구조

인공신경망은 사람의 뇌 구조에서 영감을 받아 뉴런(Neuron)층(Layer) 으로 구성됩니다.

  • 입력층(Input Layer): 데이터가 들어오는 부분
  • 은닉층(Hidden Layer): 뉴런들이 데이터를 가공·변환
  • 출력층(Output Layer): 최종 예측값 산출

예시: 사진(입력) → 여러 층을 거쳐 특징 추출 → ‘고양이’ 예측(출력)


2. 딥러닝과 머신러닝의 차이

구분 머신러닝 딥러닝
특징 추출 사람이 직접 정의 모델이 자동으로 학습
데이터량 적은 데이터로도 가능 대규모 데이터 필요
연산 자원 CPU 중심 GPU 필수(대규모 학습)
예시 의사결정트리, SVM CNN, RNN, Transformer

3. CNN과 RNN의 차이


3.1 CNN (Convolutional Neural Network)

  • 이미지 처리에 특화된 딥러닝 구조
  • 합성곱(Convolution) 연산으로 이미지의 특징(가장자리, 색, 패턴)을 자동 추출
  • 구조: 합성곱층 → 풀링층 → 완전연결층

활용 사례

  • 이미지 분류(고양이/강아지 구분)
  • 얼굴 인식
  • 자율주행 자동차의 도로 인식

3.2 RNN (Recurrent Neural Network)

  • 순차 데이터(시간·문장 등)를 처리하는 데 특화
  • 이전 단계의 출력이 다음 단계의 입력으로 들어감 → 메모리 기능
  • 변형 구조: LSTM, GRU (장기 의존성 문제 해결)

활용 사례

  • 자연어 처리(번역, 챗봇)
  • 주가 예측
  • 음성 인식

4. 딥러닝 개발 기본 과정

  1. 데이터 준비: 이미지·텍스트·음성 등
  2. 전처리: 정규화, 토큰화 등
  3. 모델 설계: CNN, RNN, Transformer 등 선택
  4. 학습: GPU 환경에서 파라미터 최적화
  5. 평가: 정확도, 손실값(loss) 측정
  6. 배포: 실서비스 환경에 적용

5. 실습 – CNN으로 MNIST 손글씨 숫자 분류하기

이번 실습에서는 TensorFlow/Keras를 활용해 간단한 CNN 모델을 구현합니다.
MNIST 데이터셋은 0~9 손글씨 이미지(28x28 픽셀)로 구성되어 있습니다.

환경 준비

pip install tensorflow

import tensorflow as tf
from tensorflow.keras import layers, models

# 1. 데이터 로드
mnist = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()

# 2. 데이터 전처리
X_train = X_train.reshape(-1, 28, 28, 1).astype("float32") / 255.0
X_test = X_test.reshape(-1, 28, 28, 1).astype("float32") / 255.0

# 3. 모델 구성
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)),
    layers.Conv2D(64, (3, 3), activation="relu"),
    layers.MaxPooling2D((2, 2)),
    layers.Flatten(),
    layers.Dense(64, activation="relu"),
    layers.Dense(10, activation="softmax")
])

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

# 5. 학습
model.fit(X_train, y_train, epochs=3, validation_data=(X_test, y_test))

# 6. 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print("테스트 정확도:", f"{test_acc*100:.2f}%")

예상 출력 예시

Epoch 1/3
1875/1875 [==============================] - 12s 6ms/step - loss: 0.1389 - accuracy: 0.9587 - val_loss: 0.0464 - val_accuracy: 0.9858
Epoch 2/3
...
테스트 정확도: 98.60%

6. 오늘의 핵심 요약

  • 딥러닝은 다층 인공신경망 기반 머신러닝 기법
  • CNN은 이미지, RNN은 순차 데이터 처리에 강점
  • MNIST 예제에서 CNN으로 높은 정확도 달성 가능

반응형