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만 학습
- 이후 상위층 고정 해제 → 전체 모델을 낮은 학습률로 재학습
💡 학습률을 작게 설정해야 사전 학습된 가중치가 손상되지 않음.
🧠 전이학습 단계 요약
- 사전 학습된 기본 모델 불러오기
- 상단에 새로운 분류기(MLP) 추가
- 기본 모델을 일시적으로 고정
- 새로 추가한 분류기를 먼저 학습
- 일부 상위층 고정을 해제하고 함께 재학습
🌐 대표 전이학습 모델
| 모델 | 특징 |
|---|---|
| VGG-16 | 3x3 필터 구조, ImageNet 2014 우승 |
| ResNet | 잔차 연결(Residual Connection)로 깊은 구조 학습 가능 |
| Inception, MobileNet, EfficientNet | 다양한 효율성 기반 구조 |
📘 종합 요약
| 항목 | 핵심 내용 |
|---|---|
| CNN | 이미지 처리에 특화된 구조 (합성곱 + 풀링 + 전결합) |
| 핵심 요소 | 필터, 패딩, 스트라이드, 풀링 |
| 성능 개선 | Dropout, Early Stopping, Data Augmentation |
| 전이학습 | 기존 학습된 모델의 가중치를 재활용하여 효율적 학습 |
| 활용 예시 | 이미지 분류, 객체 탐지, 얼굴 인식 등 |
✨ 한 줄 요약
CNN은 시각 정보를 효율적으로 학습하는 딥러닝의 핵심 구조이며, 전이학습과 성능 개선 기법은 실제 AI 모델의 완성도를 결정짓는 열쇠이다.
728x90
반응형
'학습 > AI' 카테고리의 다른 글
| 임베딩(Embedding) 이란? (0) | 2025.11.13 |
|---|---|
| RNN( Recurrent Neural Network )의 개념 (0) | 2025.11.12 |
| [ 딥러닝 ] Batch의 개념을 비유하여 설명하기 (0) | 2025.11.10 |
| 활성화 함수, 오차 역전파, 경사하강법 (1) | 2025.11.08 |
| 퍼셉트론과 다층 퍼셉트론 (0) | 2025.11.07 |