본문 바로가기
학습/AI

합성곱 신경망(CNN), 신경망 성능 개선, 전이학습

by 황성안 2025. 11. 11.
728x90
반응형

🎯 학습 목표

  • 합성곱 신경망(CNN)의 개념과 구조를 이해한다.
  • Keras를 활용해 CNN을 구성할 수 있다.
  • 신경망의 성능을 개선하는 다양한 방법을 이해한다.
  • 전이학습(Transfer Learning)의 원리와 활용법을 익힌다.

🧩 1. 합성곱 신경망 (Convolutional Neural Network, CNN)

🔹 CNN이란?

  • 이미지 처리에 특화된 인공신경망 구조
  • 위치 변화나 형태 변화에도 강건(robust) 한 인식 성능
  • 기존 MLP(다층 퍼셉트론)는 이미지의 위치·크기에 민감 → CNN으로 해결

🧠 CNN의 등장

  • 1950년대 고양이 시각 피질 실험에서 영감을 얻음
  • Yann LeCun 교수가 1998년 LeNet-5 제안 → 이미지 인식 혁신
  • 2010년대 이후 CNN 기반의 이미지 처리 연구 급성장

⚙️ CNN의 기본 구조

입력(Input)
 ↓
합성곱층(Convolution)
 ↓
활성화(ReLU)
 ↓
풀링(Pooling)
 ↓
(반복)
 ↓
전결합층(FC, MLP)
 ↓
출력(Output)
구성 요소 역할
Convolution Layer 필터(커널)를 통해 이미지의 특징(feature) 추출
Activation (ReLU) 비선형성 부여
Pooling Layer 중요 정보만 남기고 데이터 크기 축소
Flatten Layer 2D → 1D 변환 후 MLP로 전달
Fully Connected Layer 분류 수행 (Softmax 등)

🔸 CNN의 특징 추출 단계

단계 역할
1단계 단순 패턴(선, 모양 등) 추출
2단계 복합 패턴(코, 눈, 입 등) 추출
3단계 객체 전체 인식 (예: 고양이, 자동차)

🔹 합성곱(Convolution) 연산

  • 입력 이미지의 일부 영역만 필터(kernel)를 적용해 특징을 추출
  • 필터 = 학습 가능한 가중치 집합(W)
  • 전체 이미지를 다 계산하지 않고 국소 영역(Local Receptive Field) 만 계산

Feature Map=Input∗Filter+Bias\text{Feature Map} = \text{Input} * \text{Filter} + \text{Bias}Feature Map=Input∗Filter+Bias


🧱 CNN 주요 개념

🟢 패딩 (Padding)

  • 합성곱 후 출력 크기가 줄어드는 문제를 해결하기 위해 입력의 가장자리에 0을 채워 넣는 것
  • padding='same': 입력과 출력 크기를 동일하게 유지
  • padding='valid': 패딩을 사용하지 않음

🔵 스트라이드 (Stride)

  • 필터를 이동시키는 간격
  • 예: stride=2 → 출력 크기가 1/4로 감소

🟣 풀링 (Pooling)

  • 특징맵의 크기를 줄여 정보 요약
  • Max Pooling: 구역 내 최댓값 선택
  • Average Pooling: 구역 내 평균값 선택
  • 효과: 연산량 감소, 위치 변화에 대한 강건성 향상

🧮 Keras에서 CNN 구성 예시

from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

model = Sequential([
    Conv2D(filters=32, kernel_size=(5,5), padding='same',
           activation='relu', input_shape=(28,28,1)),
    MaxPooling2D(pool_size=(2,2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dense(10, activation='softmax')
])
파라미터 설명
filters 사용하는 필터(커널)의 개수
kernel_size 필터의 크기 (행, 열)
padding 입력 경계 처리 방식 (‘same’ or ‘valid’)
activation 활성화 함수 설정 (relu, sigmoid, softmax 등)
input_shape 입력 데이터의 크기 (가로, 세로, 채널 수)
strides 필터 이동 간격 (행, 열)

🚀 2. 신경망 성능 개선 방법

⚠️ 과대적합(Overfitting) 문제

훈련 데이터에는 잘 맞지만 새로운 데이터에서는 성능이 저하되는 현상


🔧 해결 방법

기법 설명
조기 종료 (Early Stopping) 검증 손실이 증가하기 전 학습 중단
드롭아웃 (Dropout) 일부 뉴런을 랜덤하게 비활성화 → 과도한 학습 방지
데이터 증강 (Data Augmentation) 기존 데이터를 회전·이동·확대 등으로 인위적으로 늘림

🧪 Dropout 예시

  • 학습 시: 일부 노드를 랜덤 비활성화 (0~1 사이 비율 설정)
  • 예측 시: 모든 노드를 사용 (성능 최대화)
from tensorflow.keras.layers import Dropout
model.add(Dropout(0.3))

🖼️ 이미지 데이터 증강 예시 (ImageDataGenerator)

from tensorflow.keras.preprocessing.image import ImageDataGenerator

datagen = ImageDataGenerator(
    rotation_range=360,
    width_shift_range=0.1,
    height_shift_range=0.1,
    shear_range=0.5,
    zoom_range=0.3,
    horizontal_flip=True,
    vertical_flip=True
)
옵션 설명
rotation_range=360 0~360° 회전
width_shift_range=0.1 수평 이동 (10%)
height_shift_range=0.1 수직 이동 (10%)
shear_range=0.5 시계 반대 방향 변형
zoom_range=0.3 0.7~1.3배 확대/축소
flip 수평·수직 반전

🔄 3. 전이학습 (Transfer Learning)

🧩 개념

  • 이미 학습된 모델의 지식(가중치)을 다른 유사 문제에 활용하는 기법
  • 데이터가 부족한 상황에서도 높은 학습 효율을 확보

⚙️ 전이학습 방식

1️⃣ 특성 추출 (Feature Extraction)

  • 사전 학습된 CNN의 ‘특성 추출부’만 사용
  • 기존 분류기(MLP)는 새로운 문제에 맞게 새로 구성
  • 원본 데이터와 너무 다를 경우, 상위 몇 개 층만 재사용

2️⃣ 미세 조정 (Fine-tuning)

  • 사전 학습된 네트워크의 일부를 재학습(fine-tune)
  • 초기엔 CNN의 하위층 고정 → 상위층과 MLP만 학습
  • 이후 상위층 고정 해제 → 전체 모델을 낮은 학습률로 재학습

💡 학습률을 작게 설정해야 사전 학습된 가중치가 손상되지 않음.


🧠 전이학습 단계 요약

  1. 사전 학습된 기본 모델 불러오기
  2. 상단에 새로운 분류기(MLP) 추가
  3. 기본 모델을 일시적으로 고정
  4. 새로 추가한 분류기를 먼저 학습
  5. 일부 상위층 고정을 해제하고 함께 재학습

🌐 대표 전이학습 모델

모델 특징
VGG-16 3x3 필터 구조, ImageNet 2014 우승
ResNet 잔차 연결(Residual Connection)로 깊은 구조 학습 가능
Inception, MobileNet, EfficientNet 다양한 효율성 기반 구조

📘 종합 요약

항목 핵심 내용
CNN 이미지 처리에 특화된 구조 (합성곱 + 풀링 + 전결합)
핵심 요소 필터, 패딩, 스트라이드, 풀링
성능 개선 Dropout, Early Stopping, Data Augmentation
전이학습 기존 학습된 모델의 가중치를 재활용하여 효율적 학습
활용 예시 이미지 분류, 객체 탐지, 얼굴 인식 등

✨ 한 줄 요약

CNN은 시각 정보를 효율적으로 학습하는 딥러닝의 핵심 구조이며, 전이학습과 성능 개선 기법은 실제 AI 모델의 완성도를 결정짓는 열쇠이다.


 

 

728x90
반응형