목적

  • MNIST 데이터셋을 사용하여 CNN의 학습 설정(batch size, 모델 구조, learning rate)에 따른 성능 변화를 분석
  • AlexNet의 주요 기법(ReLU, Dropout, Overlapping Pooling 등)을 적용하여 학습 효율과 과적합 억제 효과를 검증

실험 1: BATCH_SIZE 비교

실험 환경

  • 모델: SimpleCNN
  • 변수: batch size [64, 128, 1024]
  • 고정: optimizer=Adam, lr=0.001, epoch=5
  • 데이터셋: MNIST (28×28 grayscale) 데이터 분할 및 전처리
    • Train / Validation / Test = 48,000 : 12,000 : 10,000
    • 검증 데이터 비율: 0.2 (20%)

모델 구조

  • 입력: (1, 28, 28) MNIST 흑백 이미지
  • Conv 블록 1: Conv2d(1→32, 3×3) → BatchNorm → ReLU → MaxPool(2×2)
  • Conv 블록 2: Conv2d(32→64, 3×3) → BatchNorm → ReLU → MaxPool(2×2)
  • FC 블록: Flatten → Linear(3136→128) → ReLU → Dropout(0.5) → Linear(128→10)
  • 출력: (B, 10), softmax는 `CrossEntropyLoss`에서 처리

변수 요약

변수유형주요 파라미터출력 크기
conv1Conv2d1→32, k=3, p=1(B, 32, 28, 28)
pool1MaxPool2dk=2, s=2(B, 32, 14, 14)
conv2Conv2d32→64, k=3, p=1(B, 64, 14, 14)
pool2MaxPool2dk=2, s=2(B, 64, 7, 7)
fc1Linear3136→128(B, 128)
fc2Linear128→10(B, 10)

실험 내용

  • batch size 변화에 따른 학습 안정성과 일반화 성능 비교
  • step 수 변화가 수렴 속도 및 손실 곡선에 미치는 영향 관찰

실험 상세

Batch SizeTrain AccuracyValidation AccuracyTrain LossValidation LossRelative Time
64 (녹색)0.9440.98950.1790.03751.157 min
128 (주황)0.9340.98430.2120.05231.104 min
1024 (회색)0.9360.98320.2170.05741.251 min

batchsize_step.png batchsize_table.png batchsize_relative.png

  • Small Batch (녹색)
    • 손실 곡선의 진폭이 크고 진동이 많음 → 학습 과정이 불안정하게 보임
    • gradient noise가 커 다양한 방향으로 탐색하며 빠르게 손실 감소
  • Large Batch (회색)
    • 손실 곡선이 부드럽고 진동이 거의 없음 → 학습이 안정적으로 진행
    • gradient noise가 작아 수렴 방향이 일정하지만 탐색 범위가 제한적
    • step 수 감소에도 불구하고 학습 시간 증가
      • 가능한 요인
      • step당 처리 데이터 증가로 인한 메모리 접근 및 I/O 비용 상승
      • GPU 병렬 처리 포화로 인한 커널 실행 순차화
      • CPU–GPU 간 데이터 전송 병목(transfer bottleneck) 발생
      • step 수 감소보다 step당 연산 비용 증가 폭이 더 큼

결론

  • 작은 Batch
    • weight 업데이트 빈도가 높아 세밀한 학습이 가능
    • gradient noise가 커서 flat minima 탐색에 유리 → 일반화 성능 우수
    • 손실 곡선의 진동이 크고 학습 안정성이 낮음
    • GPU 자원 활용 효율이 낮아 학습 속도가 느림
    • 불안정한 학습 경향 때문에 작은 learning rate 설정이 적합
  • 큰 Batch
    • gradient 계산이 안정적이고 손실 곡선이 부드럽게 수렴
    • 탐색 범위가 제한되어 sharp minima로 수렴할 가능성 있음 → 일반화 성능 저하
    • GPU 자원 활용 효율이 높고 학습 속도가 빠름
    • 안정적인 학습 특성 덕분에 큰 learning rate 적용이 가능
  • 종합
    • 작은 Batch: 높은 일반화 성능 / 낮은 안정성
    • 큰 Batch: 높은 안정성 / 낮은 일반화 성능
    • 학습 안정성과 일반화 성능 사이에 명확한 Trade-Off 존재
    • 데이터 크기, 하드웨어 자원, 학습 목적에 따라 Batch Size–Learning Rate 조합을 조정하는 것이 중요

고찰

  • LearningRate를 함께 조절하여 비교

실험 2: ReLU vs Sigmoid

실험 환경

  • 모델: SimpleCNN_Sigmoid (ReLU → Sigmoid 적용)
  • 변수: 활성화 함수 [ReLU, Sigmoid]
  • 고정: optimizer=Adam, lr=0.001, epoch=5, batch size=64
  • 데이터셋: MNIST (28×28 grayscale)
    데이터 분할 및 전처리
    • Train / Validation / Test = 48,000 : 12,000 : 10,000
    • 검증 데이터 비율: 0.2 (20%)

모델 구조

  • 입력: (1, 28, 28) MNIST 흑백 이미지
  • Conv 블록 1: Conv2d(1→32, 3×3) → BatchNorm → Sigmoid → MaxPool(2×2)
  • Conv 블록 2: Conv2d(32→64, 3×3) → BatchNorm → Sigmoid → MaxPool(2×2)
  • FC 블록: Flatten → Linear(3136→128) → Sigmoid → Dropout(0.5) → Linear(128→10)
  • 출력: (B, 10), softmax는 `CrossEntropyLoss`에서 처리

변수 요약

변수유형주요 파라미터출력 크기
conv1Conv2d1→32, k=3, p=1(B, 32, 28, 28)
pool1MaxPool2dk=2, s=2(B, 32, 14, 14)
conv2Conv2d32→64, k=3, p=1(B, 64, 14, 14)
pool2MaxPool2dk=2, s=2(B, 64, 7, 7)
fc1Linear3136→128(B, 128)
fc2Linear128→10(B, 10)

실험 내용

CNN의 활성화 함수를 ReLUSigmoid로 각각 설정하였을 때 비교

  • 학습 속도
  • 손실 곡선의 형태
  • 최종 정확도 비교

실험 상세

sigmoid_step.png sigmoid_table.png sigmoid_relative.png

  • ReLU (녹색)
    • 손실이 빠르게 감소하며 학습 초반 수렴 속도가 매우 빠름
    • 손실 곡선이 안정적이며 진동 폭이 작음 → gradient 흐름이 원활함
  • Sigmoid (보라색)
    • 초기 손실이 크게 시작하며 감소 속도가 느림
    • 손실 곡선의 완만한 감소 → 학습 효율이 낮고 수렴 속도 저하
  • Tanh(이미지상 X)
    • ReLU와 크게 차이점 없음

결론

  • ReLU(Rectified Linear Unit)
    • 항상 양의 출력을 내보내기 때문에 기울기가 0에 수렴하지 않고 일정하게 유지
    • 비선형성을 유지하면서도 계산이 단순하고, 학습 속도가 빠름.
  • Sigmoid
    • 입력의 절대값이 크면 gradient가 0으로 수렴함
    • 출력이 포화(saturating)되는 구간 발생
    • gradient가 0에 수렴하 gradient vanishing 현상으로 학습이 정체되는 구간 존재

고찰

  • 데이터셋 변경 후 Tanh 함수 비교

실험 3: Dropout

실험 환경

  • 모델: SimpleCNN_Dropout
  • 변수: Dropout p [0.0, 0.3, 0.5]
  • 고정: optimizer=Adam, lr=0.001, epoch=5, batch size=64
  • 데이터셋: MNIST (28×28 grayscale) 데이터 분할 및 전처리
    • Train / Validation / Test = 48,000 : 12,000 : 10,000
    • 검증 데이터 비율: 0.2 (20%)

모델 구조

  • 입력: (1, 28, 28) MNIST 흑백 이미지
  • Conv 블록 1: Conv2d(1→32, 3×3) → BatchNorm → ReLU → MaxPool(2×2)
  • Conv 블록 2: Conv2d(32→64, 3×3) → BatchNorm → ReLU → MaxPool(2×2)
  • FC 블록: Flatten → Linear(3136→128) → ReLU → Dropout(p) → Linear(128→10)
  • 출력: (B, 10), softmax는 `CrossEntropyLoss`에서 처리

변수 요약

변수유형주요 파라미터출력 크기
conv1Conv2d1→32, k=3, p=1(B, 32, 28, 28)
pool1MaxPool2dk=2, s=2(B, 32, 14, 14)
conv2Conv2d32→64, k=3, p=1(B, 64, 14, 14)
pool2MaxPool2dk=2, s=2(B, 64, 7, 7)
fc1Linear3136→128(B, 128)
fc2Linear128→10(B, 10)

실험 내용

  • Dropout 확률을 0.0, 0.3, 0.5로 설정하여 학습 성능 비교
  • 동일한 초기 가중치 설정 및 학습 조건 유지
  • 각 모델의 학습/검증 손실 곡선 및 최종 Test Accuracy를 비교
  • 과적합 억제 효과 및 수렴 속도 차이를 분석

실험 상세

dropout_step.png batchsize_table.png dropout_relative.png

  • 초록색: SimpleCNN (Dropout 고정 0.5)
    • 모듈 기반 구조(ReLU·Pool 개별 정의) 연산 그래프가 단순 동일한 드롭아웃 비율임에도 학습 시간이 가장 짧음
  • Dropout=0.0 (파랑색): SimpleCNN_Dropout
    • 초기 손실 감소가 가장 빠름.
    • 과적합 억제 장치가 없어서 네트워크가 빠르게 학습함.
  • Dropout=0.3 (주황색): SimpleCNN_Dropout
    • 약간 더 느리지만, 여전히 안정적인 감소.
  • Dropout=0.5 (회색): SimpleCNN_Dropout
    • 초반 학습 속도가 가장 느림.
    • 절반의 뉴런이 비활성화되어 학습 정보가 줄어들기 때문.

결론

  • Dropout 비율에 따라 학습 속도와 일반화 성능 간의 뚜렷한 트레이드오프가 존재.
  • Dropout이 낮을수록 초반에 빠르게 손실이 감소
  • Dropout이 높은 경우 초반 학습 속도는 비교적 느리지만, 손실 변동이 적고 안정적으로 수렴.

고찰

  • 데이터셋을 변경하여 진행해볼 것.
  • 가벼운 CNN일 경우 0.5의 Dropout은 학습이 느려지거나 underfitting이 생길 수 있음.

MNIST 실험 한계 및 고찰

  • MNIST 데이터셋의 특성의 한계
    1. 입력 이미지가 단순함. (28×28, 1채널, 배경 없음)
    2. 클래스 수가 10개로 적고, 각 클래스 간 구분이 명확함.
    3. 데이터 복잡도가 낮아, 기본적인 CNN 구조만으로도 충분히 높은 정확도 달성 가능.
  • 약간의 학습 곡선 차이는 존재하지만 크지 않음 > CIFAR-10 데이터셋으로 확장.