logo

합성곱 신경망

다층 신경망의 문제점

  • 이미지는 2차원이지만 다층 신경망의 입력은 1차원
  • 이미지를 2차원 → 1차원으로 flatten하여 입력
  • 2차원 이미지를 1차원으로 flatten하면서 공간적 정보가 사라짐
  • Dense 레이어는 입력의 크기 × 출력의 크기만큼 파라미터가 필요
  • 이미지의 크기가 커지면 파라미터가 폭증

합성곱 신경망 Convolutional Neural Network

  • 합성곱 신경망은 입력 이미지를 작은 단위로 나누어 각각을 처리
    • 이 작은 단위를 필터(filter) 또는 커널(kernel)이라고 부름
    • 필터는 이미지의 특징을 추출하는 역할
  • 컴퓨터 비전에서 가장 널리 사용되어 온 방식
    • 최근에는 비전 트랜스포머라는 모델도 널리 사용
  • 작은 크기의 필터를 반복 적용하여 부분적인 패턴을 인식
  • 필터의 값은 데이터로부터 학습

Linear Layer와 Conv1D Layer 연결 방식 비교

합성곱 레이어

  • Receptive Field: 이미지에서 필터가 적용되는 영역
  • Feature Map: 합성곱 레이어의 출력 결과
    • 이미지에서 발견된 특징을 사상(map)한 것이므로 feature map이라고 함

합성곱 레이어의 receptive field 예시

부분에서 전체로

  • 합성곱 신경망은 여러 가지 필터들을 이용해 이미지의 한 작은 부분에서 특징들을 그리고 여러 개의 필터를 사용하여 입력 이미지에서 다양한 특징을 추출
  • 사람의 얼굴을 인식한다면, 처음에는 수직선, 수평선, 대각선 등의 특징을 추출
  • 이렇게 추출한 특징들에 다시 필터를 적용하면 좀 더 큰 특징을 추출할 수 있음
  • 선들이 모여 이루는 눈, 코, 입 같은 부분들이 됨
  • 여기에 다시 필터를 또 적용하면 부분이 모여서 이루는 얼굴 전체를 추출할 수 있음

낮은 수준 특징에서 높은 수준 특징으로 이어지는 CNN 특징 추출 과정

합성곱 적용의 효과

  • 커널 또는 필터의 수만큼 채널이 바뀌는 효과가 있음
  • 피처 맵의 크기는 감소
  • 다양한 필터를 적용하여 하나의 이미지로부터 여러 가지 특징들을 추출

합성곱과 풀링을 거치며 피처 맵 크기와 채널이 바뀌는 과정

CNN의 기본 구조

  • 특징 추출 부분과 분류 부분으로 구성
  • 합성곱 신경망의 전반부에는 부분적 특징들을 추출하기 위해 합성곱 레이어를 사용
  • 합성곱 신경망의 후반부에는 추출된 특징을 바탕으로 최종 예측을 하기 위해 Dense 레이어를 사용
  • 두 부분 사이에 Flatten

CNN의 특징 추출 부분과 분류 부분 구조

CNN

model = keras.models.Sequential([
    keras.layers.Rescaling(1/255),
    keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
    keras.layers.MaxPooling2D((2,2)),
    keras.layers.Flatten(),
    keras.layers.Dense(10),
])

풀링 pooling

  • 서브샘플링(subsampling) 또는 다운샘플링(downsampling)이라고도 함
  • 이미지 또는 특징 맵의 크기를 축소
  • 이미지의 세부적인 특징이 전체 이미지를 분류하는데 크게 중요하지 않은 경우가 많으므로 성능에는 영향이 적음
  • 적용할 합성곱 레이어의 수가 줄어듦 → 학습할 파라미터가 줄어듦
  • 최대 풀링(Max Pooling):
    • 이미지에서 작은 부분(예: 2x2)들에서 최댓값(가장 강한 특징)을 추출
    • CNN에 주로 사용
  • 평균 풀링(Average Pooling):
    • 이미지에서 평균값을 추출

원본 이미지와 다운샘플링된 이미지 비교

풀링을 반복 적용해 특징 맵 크기를 줄이는 과정

패딩 padding

  • 이미지의 테두리에 빈 픽셀을 추가
  • 제로(zero) 패딩:
    • 패딩 없음
    • 입력보다 출력 이미지가 작음

제로 패딩 예시

  • 하프(half) 패딩 / 세임(same) 패딩:
    • 필터 크기의 절반만큼 패딩
    • 입력과 출력의 이미지가 같음

하프 패딩 또는 세임 패딩 예시

  • 풀(full) 패딩
    • 필터 크기 - 1만큼 패딩
    • 모든 픽셀에 필터의 모든 부분이 적용됨
    • 출력이 입력보다 큼

풀 패딩 예시

패딩

model = keras.models.Sequential([
    keras.layers.Rescaling(1/255),
    keras.layers.Conv2D(32, (3,3), activation='relu', padding='same'),
    keras.layers.Flatten(),
    keras.layers.Dense(10),
])

스트라이드 stride

  • 필터를 적용하는 간격
  • 풀링을 사용하는 대신 필터를 일정 간격으로 띄워서 사용하기도 함

stride 적용 예시 1

stride 적용 예시 2

stride 적용 예시 3

stride 적용 예시 4

스트라이드

model = keras.models.Sequential([
    keras.layers.Rescaling(1/255),
    keras.layers.Conv2D(32, (3,3), strides=(2,2), activation='relu'),
    keras.layers.Flatten(),
    keras.layers.Dense(10),
])
model.compile(optimizer=keras.optimizers.SGD(learning_rate=0.001),
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
model.fit(np.expand_dims(x_train, -1),  # (N, 28, 28) → (N, 28, 28, 1) 색상 채널 추가
          y_train, epochs=5, batch_size=32)
Previous
정칙화