Convolution layer에 대한 설명 및 예시

Bean·2025년 4월 27일
0

인공지능

목록 보기
15/123

1. Convolution Layer란?

Convolution Layer(합성곱 층)는 딥러닝 모델, 특히 CNN(Convolutional Neural Network)에서 사용하는 층입니다.
주요 역할은 “입력 데이터(예: 이미지, 시계열 데이터)에서 중요한 특징(feature)을 뽑아내는 것”입니다.

1.1. 작동 원리

  • 작은 필터(또는 커널)을 가지고 입력 데이터 위를 쓱쓱 움직이며(슬라이딩)
  • 겹치는 부분끼리 곱하고 더해서 하나의 값을 만듭니다.
  • 이걸 반복해서 하나의 feature map(특징 맵)을 만듭니다.

즉,
"필터 × 입력 데이터" → "특징 추출"

특징

  • 파라미터 수가 적습니다. (전체 입력을 연결하는 Fully Connected Layer보다 훨씬 적어요.)
  • 지역적인 패턴(부분 특징)을 잘 포착합니다.
  • 스트라이드(몇 칸씩 이동할지), 패딩(입력을 둘러싸는 여백) 등을 조절해서 다양한 크기의 출력을 만들 수 있습니다.
  • 여러 개의 필터를 사용하면 여러 특징을 동시에 추출할 수 있어요!

그림으로 보면 이런 느낌이에요:
(필터) × (입력 조각) → (출력 값 하나)
→ 이렇게 해서 전체 feature map을 채워 나갑니다.

2. Convolution layer 예시 I

1D Convolution에서 입력 채널이 3개인 경우 어떻게 연산되는지 간단한 예제를 하나 보여드릴게요.


조건

  • 입력: (채널 수 = 3, 길이 = 5)
  • 커널: (입력 채널 = 3, 커널 크기 = 3)
  • 출력 채널 수: 1개
  • 스트라이드: 1
  • 패딩: 없음

입력 텐서 (3채널)

Input[0] (채널 0): [1, 2, 3, 4, 5]
Input[1] (채널 1): [5, 4, 3, 2, 1]
Input[2] (채널 2): [1, 1, 1, 1, 1]

커널(weight) (입력 채널마다 따로 있음)

Weight[0] (채널 0용): [1, 0, -1]
Weight[1] (채널 1용): [0, 1, 0]
Weight[2] (채널 2용): [1, 1, 1]

연산 방법 요약
1. 각 채널별로: 입력에 해당 채널의 커널을 1D 컨볼루션 (dot product) 적용합니다.
2. 채널별 결과를 합산합니다.
3. (옵션) bias 추가 (지금은 생략할게요.)


Step-by-Step 계산

첫 번째 위치 (Input index 0 ~ 2)

  • 채널 0: (1×1) + (2×0) + (3×-1) = 1 + 0 - 3 = -2
  • 채널 1: (5×0) + (4×1) + (3×0) = 0 + 4 + 0 = 4
  • 채널 2: (1×1) + (1×1) + (1×1) = 1 + 1 + 1 = 3

합산: (-2) + 4 + 3 = 5


두 번째 위치 (Input index 1 ~ 3)

  • 채널 0: (2×1) + (3×0) + (4×-1) = 2 + 0 - 4 = -2
  • 채널 1: (4×0) + (3×1) + (2×0) = 0 + 3 + 0 = 3
  • 채널 2: (1×1) + (1×1) + (1×1) = 1 + 1 + 1 = 3

합산: (-2) + 3 + 3 = 4


세 번째 위치 (Input index 2 ~ 4)

  • 채널 0: (3×1) + (4×0) + (5×-1) = 3 + 0 - 5 = -2
  • 채널 1: (3×0) + (2×1) + (1×0) = 0 + 2 + 0 = 2
  • 채널 2: (1×1) + (1×1) + (1×1) = 1 + 1 + 1 = 3

합산: (-2) + 2 + 3 = 3


최종 출력

[5, 4, 3]

정리

  • 입력 3채널 각각에 대해 컨볼루션 결과를 구한 다음,
  • 같은 위치끼리 더해서 하나의 출력값으로 만듭니다.
  • 따라서 최종 결과는 (출력 채널 수, 길이) = (1, 3)이 됩니다.

3. Convlution layer 예시 II

1D Convolution에서 입력 길이와 출력 길이를 같게 만들고 싶으면
"padding"을 적절히 설정하면 됩니다.

조금 자세히 설명하면:

1D convolution의 출력 길이 공식은 이렇습니다:

Output Length=Input Length+2×PaddingKernel SizeStride+1\text{Output Length} = \left\lfloor \frac{\text{Input Length} + 2 \times \text{Padding} - \text{Kernel Size}}{\text{Stride}} \right\rfloor + 1

여기서

  • stride = 1
  • padding을 잘 설정하면
    → 입력 길이 = 출력 길이 가 됩니다.

예시

  • 입력 길이: 5
  • 커널 크기: 3
  • stride: 1
  • padding: 1

계산해보면:

Output Length=5+2×131+1=(5)+1=6\text{Output Length} = \left\lfloor \frac{5 + 2 \times 1 - 3}{1} \right\rfloor + 1 = (5) + 1 = 6

어? 6이네요. 입력이 5였는데 6이 됐습니다.
→ padding을 약간 다르게 잡아야 해요.

정확히 입력과 출력 길이를 같게 만들려면

padding은 이렇게 설정해야 합니다:

Padding=Kernel Size12\text{Padding} = \frac{\text{Kernel Size} - 1}{2}

즉, 커널 크기가 홀수여야 (예: 3, 5, 7) padding을 정확히 나눌 수 있어요.

  • 커널 크기 3이면 padding=1
  • 커널 크기 5이면 padding=2
  • 커널 크기 7이면 padding=3

이렇게 하면 입력 길이와 출력 길이가 똑같아집니다.

정리

  • stride = 1
  • 커널 크기 = 홀수 (3, 5, 7, …)
  • padding = (커널 크기 - 1) / 2

이렇게 세팅하면 됩니다!

profile
AI developer

0개의 댓글