티스토리 뷰

728x90
반응형

1. 학습 목표

  1. 딥러닝의 기본 구조(입력층, 은닉층, 출력층)를 이해한다.
  2. 신경망 학습의 과정(순전파, 손실 계산, 역전파)을 학습한다.
  3. Python을 사용해 간단한 신경망 모델을 구현한다.

2. 딥러닝이란?

1) 정의

  • 딥러닝은 머신러닝의 한 분야로, **인공 신경망(Artificial Neural Network)**을 사용해 데이터를 학습합니다.
  • 다층 구조를 통해 데이터를 처리하며, 복잡한 패턴을 학습할 수 있습니다.

2) 딥러닝의 특징

  1. 자동 특징 추출:
    • 사람이 데이터를 분석해 특징을 추출할 필요 없이, 신경망이 학습 과정에서 특징을 자동으로 추출.
  2. 대량의 데이터 처리:
    • 딥러닝은 대량의 데이터를 학습하며, 데이터가 많을수록 성능이 좋아짐.
  3. 비선형 관계 학습:
    • 단순한 선형 관계를 넘어 복잡한 데이터 간의 관계를 학습 가능.

3. 신경망의 기본 구조

1) 구성 요소

  1. 입력층(Input Layer):
    • 데이터를 신경망에 입력하는 층.
    • 입력 데이터는 숫자 형태로 변환되어 전달됨.
    • 예: 이미지의 픽셀 값(28x28 이미지는 784개의 숫자로 변환).
  2. 은닉층(Hidden Layer):
    • 입력 데이터에서 특징을 추출하고 학습하는 층.
    • 여러 개의 은닉층으로 구성되며, 활성화 함수를 사용해 비선형성을 추가.
    • 예: ReLU(Rectified Linear Unit), Sigmoid.
  3. 출력층(Output Layer):
    • 모델의 예측 결과를 출력하는 층.
    • 출력 결과는 분류 문제에서는 확률 값, 회귀 문제에서는 실수 값.

2) 동작 과정

  1. 순전파(Forward Propagation):
    • 입력 데이터를 통해 각 층의 출력을 계산.
    • 예측 결과를 생성.
  2. 손실 계산(Loss Calculation):
    • 예측 값과 실제 값의 차이를 계산.
    • 손실 함수 사용:
      • 분류 문제: 교차 엔트로피(Cross Entropy).
      • 회귀 문제: 평균 제곱 오차(Mean Squared Error, MSE).
  3. 역전파(Backward Propagation):
    • 손실 값으로 가중치를 업데이트.
    • 기울기(Gradient)를 계산하고 **옵티마이저(Optimizer)**를 사용해 가중치 조정.
  4. 가중치 업데이트(Weight Update):
    • 옵티마이저(예: SGD, Adam)를 사용해 학습 속도와 방향을 조절.

4. 딥러닝 학습 과정

1) 주요 단계

  1. 초기화:
    • 모델의 가중치(weight)와 편향(bias)을 초기화.
  2. 순전파:
    • 입력 데이터를 네트워크에 전달해 출력 결과 생성.
  3. 손실 계산:
    • 예측 값과 실제 값의 차이를 계산.
  4. 역전파:
    • 손실을 기반으로 가중치의 기울기를 계산.
  5. 가중치 업데이트:
    • 옵티마이저를 사용해 가중치를 업데이트.
  6. 반복(Epoch):
    • 위 과정을 데이터셋에 대해 여러 번 반복.

5. 활성화 함수(Activation Function)

1) 주요 활성화 함수

  1. ReLU (Rectified Linear Unit):
    •  
    f(x) = \text{max}(0, x) ]
    • 음수를 0으로 변환, 양수는 그대로 출력.
    • 딥러닝에서 가장 많이 사용.
  2. Sigmoid:
    •  
    f(x) = \frac{1}{1 + e^{-x}} ]
    • 출력 값을 0과 1 사이로 변환.
    • 분류 문제에서 사용.
  3. Tanh:
    •  
    f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} ]
    • 출력 값을 -1과 1 사이로 변환.

6. 딥러닝 실습: 간단한 신경망 구현

아래는 Python과 TensorFlow/Keras를 사용해 간단한 신경망을 구현하는 코드입니다.

실습: MNIST 손글씨 숫자 분류

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.datasets import mnist

# 1. 데이터 로드 및 전처리
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0  # 정규화

# 2. 신경망 모델 생성
model = Sequential([
    Flatten(input_shape=(28, 28)),  # 입력층
    Dense(128, activation='relu'), # 은닉층
    Dense(10, activation='softmax') # 출력층
])

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

# 4. 모델 학습
model.fit(x_train, y_train, epochs=5)

# 5. 모델 평가
loss, accuracy = model.evaluate(x_test, y_test)
print(f"테스트 정확도: {accuracy}")

7. 복습 질문

  1. 딥러닝과 머신러닝의 가장 큰 차이점은 무엇인가요?
  2. 신경망의 은닉층에서 활성화 함수가 필요한 이유는 무엇인가요?
  3. 순전파와 역전파의 과정을 설명해 보세요.

8. 학습 결과

  • 딥러닝 신경망의 기본 구조와 학습 과정을 이해.
  • 간단한 신경망 모델을 구현하고 학습 과정을 실습.
  • 활성화 함수와 학습 단계(순전파, 역전파)에 대한 개념 정리
728x90
반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형