Skip to Content
독학사독학사 3단계딥러닝10. CNN 기본 연산: 합성곱·패딩·스트라이드·풀링

이번 문서의 목표: 이 파일을 다 읽으면 합성곱(convolution) 연산을 필터·채널 관점에서 이해하고, 출력 크기 공식 (NF+2P)/S+1(N-F+2P)/S+1을 실제 숫자로 계산하며, 풀링(pooling)과 완전연결층(fully connected layer)의 역할 차이를 설명할 수 있다.

왜 이미지에는 완전연결층만으로 부족한가

쉽게 말하면: 완전연결층은 이미지의 모든 픽셀을 독립된 숫자로 취급해서, 옆 픽셀과의 관계(모양·경계)라는 중요한 정보를 놓친다.

05편에서 다룬 다층 퍼셉트론(MLP, Multi-Layer Perceptron)의 완전연결층(fully connected layer)은 입력 벡터의 모든 원소를 다음 층의 모든 노드와 연결한다. 예를 들어 28×2828 \times 28 크기의 흑백 이미지를 MLP에 넣으려면, 이를 784784개의 숫자로 한 줄로 펼쳐야 한다. 이 과정에서 “이 픽셀의 오른쪽 옆 픽셀이 무엇인가”처럼 이미지의 공간적 구조(spatial structure, 픽셀들이 2차원 격자로 배열되어 있고 이웃한 픽셀끼리 관련이 깊다는 성질)가 완전히 사라진다.

또한 완전연결층은 이미지 크기가 커질수록 파라미터(parameter, 가중치와 편향을 통틀어 부르는 말) 수가 폭발적으로 늘어난다. 224×224224 \times 224 크기의 컬러(RGB, 빨강·초록·파랑 3채널) 이미지를 펼치면 224×224×3=150,528224 \times 224 \times 3 = 150{,}528개의 입력 노드가 되고, 이를 은닉 노드 1,000개짜리 층에 완전연결하면 가중치만 1억 5천만 개가 넘는다.

합성곱 신경망(Convolutional Neural Network, CNN)은 이 두 문제를 해결하기 위해 고안됐다. 이미지를 통째로 펼치는 대신, 작은 필터(filter)를 이미지 위에서 이동시키며 국소적인 패턴(경계선, 질감 등)을 감지한다. 이렇게 하면 공간적 구조를 유지하면서도, 필터 하나를 이미지 전체에 재사용하므로 파라미터 수가 훨씬 적어진다.

합성곱 연산: 필터와 커널

쉽게 말하면: 작은 숫자 격자(필터)를 이미지 위에서 한 칸씩 움직이며, 겹치는 부분끼리 곱해서 다 더한 값을 새로운 이미지의 한 칸으로 만든다.

필터(filter)는 커널(kernel)이라고도 부르며, 작은 크기(예: 3×33 \times 3, 5×55 \times 5)의 숫자 격자다. 이 필터를 입력 이미지의 왼쪽 위부터 시작해 오른쪽·아래로 한 칸씩(또는 몇 칸씩) 이동시키면서, 필터가 겹치는 영역의 값들과 필터의 값들을 각각 곱한 뒤 모두 더하는 연산을 합성곱(convolution)이라 부른다.

5×55 \times 5 입력에 3×33 \times 3 필터를 적용하는 예로 직접 계산해 보자. 입력(input)과 필터(filter)를 다음과 같이 정한다.

입력 II (5×5):

1 2 3 0 1 0 1 2 3 0 1 0 1 2 3 2 1 0 1 2 0 2 1 0 1

필터 FF (3×3):

1 0 1 0 1 0 1 0 1

필터를 입력의 왼쪽 위 3×33 \times 3 영역(행 02, 열 02)에 겹쳐서 계산해 보면, 이 영역은 다음과 같다.

1 2 3 0 1 2 1 0 1

합성곱 결과의 한 칸은 겹치는 위치끼리 곱한 값을 모두 더한 것이다.

(1×1)+(2×0)+(3×1)+(0×0)+(1×1)+(2×0)+(1×1)+(0×0)+(1×1)(1{\times}1) + (2{\times}0) + (3{\times}1) + (0{\times}0) + (1{\times}1) + (2{\times}0) + (1{\times}1) + (0{\times}0) + (1{\times}1)

각 항을 정리하면 1+0+3+0+1+0+1+0+11 + 0 + 3 + 0 + 1 + 0 + 1 + 0 + 1이 되고, 이를 모두 더하면 다음과 같다.

1+0+3+0+1+0+1+0+1=71 + 0 + 3 + 0 + 1 + 0 + 1 + 0 + 1 = 7

이 값 77이 출력 특징 맵(feature map, 합성곱의 결과로 만들어지는 새로운 격자)의 왼쪽 위 첫 번째 칸이 된다. 필터를 오른쪽으로 한 칸 옮겨 같은 계산을 반복하면 다음 칸의 값을 얻고, 이를 이미지 전체에 반복하면 전체 특징 맵이 완성된다. 이렇게 필터의 값(가중치)은 위치와 무관하게 이미지 전체에서 공유(weight sharing, 가중치 공유)된다는 점이 완전연결층과의 결정적 차이다. 같은 필터가 “경계선을 찾는 역할”을 하도록 학습되면, 그 필터는 이미지의 어느 위치에 있든 같은 방식으로 경계선을 찾아낸다.

채널(channel)은 이미지가 몇 개의 값 격자로 이루어져 있는지를 뜻한다. 흑백 이미지는 채널이 1개, RGB 컬러 이미지는 채널이 3개다. 입력 채널이 여러 개면 필터도 같은 수의 채널을 가지며, 각 채널별로 합성곱을 계산한 뒤 그 결과를 모두 더해 하나의 출력 값을 만든다. 하나의 필터는 입력이 몇 채널이든 결과적으로 특징 맵 1장을 만들어내며, 서로 다른 패턴(예: 세로선, 가로선, 특정 색 조합)을 감지하는 필터를 여러 개 두면 그만큼 여러 장의 특징 맵이 쌓인 출력을 얻는다.

패딩과 스트라이드

쉽게 말하면: 패딩은 이미지 가장자리에 여백을 둘러줘서 크기가 줄어드는 것을 막고, 스트라이드는 필터가 한 번에 몇 칸씩 건너뛰며 이동할지를 정한다.

필터를 이미지 전체에 적용하면 출력 특징 맵은 입력보다 작아진다. 위 예시에서도 5×55\times5 입력에 3×33\times3 필터를 적용하면 출력은 3×33\times3으로 줄어든다. 층을 거듭 쌓을수록 이미지가 계속 작아지는 것을 막고, 가장자리 픽셀도 안쪽 픽셀만큼 충분히 계산에 참여시키기 위해 패딩(padding)을 쓴다.

패딩은 입력 이미지의 가장자리에 값이 0인 픽셀을 둘러싸는 것을 말한다(이를 zero-padding이라 한다). 패딩을 PP칸 두면 입력의 가로·세로 크기가 각각 2P2P만큼 늘어난 것과 같은 효과가 난다(양쪽에 PP칸씩 붙기 때문이다).

스트라이드(stride)는 필터가 한 번의 이동에서 몇 칸씩 건너뛰는지를 나타낸다. 스트라이드 1은 한 칸씩(가장 촘촘하게), 스트라이드 2는 두 칸씩 건너뛰며 이동한다는 뜻이다. 스트라이드가 클수록 필터가 이미지를 덜 촘촘하게 훑으므로 출력 특징 맵의 크기가 작아진다.

출력 크기 계산 공식

쉽게 말하면: 입력 크기, 필터 크기, 패딩, 스트라이드를 알면 출력이 몇 칸짜리 격자가 될지 공식 하나로 바로 구할 수 있다.

합성곱 층의 출력 크기(한 변의 길이)는 다음 공식으로 계산한다.

O=NF+2PS+1O = \frac{N - F + 2P}{S} + 1
  • OO: 출력 특징 맵의 한 변의 크기(가로 또는 세로. 정사각형 입력·필터를 가정하면 가로·세로가 같다)
  • NN: 입력의 한 변의 크기
  • FF: 필터(커널)의 한 변의 크기
  • PP: 패딩으로 둘러싼 칸 수(한쪽 기준)
  • SS: 스트라이드(필터 이동 칸 수)

앞서 계산한 예시로 이 공식을 검산해 보자. 입력 N=5N=5, 필터 F=3F=3, 패딩 P=0P=0(패딩 없음), 스트라이드 S=1S=1이었다.

O=53+2×01+1=21+1=3O = \frac{5 - 3 + 2 \times 0}{1} + 1 = \frac{2}{1} + 1 = 3

공식대로 출력이 3×33\times3이 나와, 앞서 직접 필터를 이동시키며 얻은 결과와 일치한다.

이번에는 패딩을 1칸 추가한 경우를 계산해 보자. 입력 N=5N=5, 필터 F=3F=3, 패딩 P=1P=1, 스트라이드 S=1S=1이라 하면 다음과 같다.

O=53+2×11+1=41+1=5O = \frac{5 - 3 + 2 \times 1}{1} + 1 = \frac{4}{1} + 1 = 5

패딩을 1칸 두니 출력이 입력과 같은 5×55\times5 크기로 유지된다. 이렇게 출력 크기를 입력과 똑같이 유지하는 패딩 방식을 Same 패딩이라 부르고, 패딩을 전혀 쓰지 않아 출력이 작아지는 방식을 Valid 패딩이라 부른다.

이번에는 스트라이드를 2로 바꿔 계산해 보자. 입력 N=7N=7, 필터 F=3F=3, 패딩 P=0P=0, 스트라이드 S=2S=2라 하면 다음과 같다.

O=73+2×02+1=42+1=2+1=3O = \frac{7 - 3 + 2 \times 0}{2} + 1 = \frac{4}{2} + 1 = 2 + 1 = 3

스트라이드를 2로 늘리자 출력이 5×55\times5가 아니라 3×33\times3으로 더 작아진 것을 볼 수 있다. 스트라이드가 클수록 필터가 이미지를 성기게 훑으므로 출력 크기가 줄어드는 것을 공식으로도, 직관으로도 확인할 수 있다.

자주 틀리는 점: 공식의 2P2PPP로 착각해서 계산하는 실수가 잦다. 패딩은 이미지의 양쪽(위아래 또는 좌우)에 각각 PP칸씩 붙으므로 반드시 2P2P로 계산해야 한다. 또한 (NF+2P)/S(N-F+2P)/S가 정수로 나누어떨어지지 않으면 그 패딩·스트라이드·필터 조합은 애초에 유효하지 않다는 뜻이므로, 값을 조정해야 한다.

파라미터 수 계산

쉽게 말하면: 합성곱 층의 파라미터 수는 이미지 크기와 무관하고, 오직 필터의 크기·채널·개수에만 좌우된다.

합성곱 층 하나의 파라미터 수는 다음과 같이 계산한다.

파라미터 수=(F×F×Cin+1)×Cout\text{파라미터 수} = (F \times F \times C_{in} + 1) \times C_{out}
  • F×FF \times F: 필터 한 장의 가로·세로 크기
  • CinC_{in}: 입력 채널 수
  • +1+1: 필터마다 붙는 편향(bias) 1개
  • CoutC_{out}: 이 층에서 사용하는 필터의 개수(즉 출력 채널 수)

예를 들어 입력 채널이 3(RGB), 필터 크기가 3×33\times3, 필터 개수가 16개인 합성곱 층의 파라미터 수를 계산해 보자.

파라미터 수=(3×3×3+1)×16=(27+1)×16=28×16=448\text{파라미터 수} = (3 \times 3 \times 3 + 1) \times 16 = (27+1) \times 16 = 28 \times 16 = 448

앞서 언급한 완전연결층(입력 150,528개 → 은닉 1,000개, 파라미터 1억 5천만 개 이상)과 비교하면, 합성곱 층은 이미지 크기(가로·세로)와 무관하게 필터 크기·채널 수·필터 개수에만 파라미터 수가 좌우되므로 압도적으로 적은 파라미터로 큰 이미지를 처리할 수 있다. 이것이 CNN이 이미지 처리에 적합한 두 번째 이유(첫 번째는 공간적 구조 보존)다.

풀링: 특징 맵을 압축한다

쉽게 말하면: 특징 맵을 작은 구역으로 나누고, 각 구역에서 가장 큰 값(또는 평균값) 하나만 남겨 크기를 줄인다.

풀링(pooling)은 합성곱으로 얻은 특징 맵의 크기를 줄이는 연산이다. 대표적으로 두 가지가 있다.

  • 최대 풀링(max pooling): 지정한 구역(예: 2×22\times2) 안에서 가장 큰 값 하나만 남긴다.
  • 평균 풀링(average pooling): 지정한 구역 안 값들의 평균을 남긴다.

4×44\times4 특징 맵에 2×22\times2 최대 풀링(스트라이드 2)을 적용하는 예를 보자.

1 3 2 4 5 6 1 2 0 1 8 3 2 4 5 7

왼쪽 위 2×22\times2 구역은 1 3 / 5 6이므로 최대값은 66이다. 오른쪽 위 구역 2 4 / 1 2의 최대값은 44다. 왼쪽 아래 구역 0 1 / 2 4의 최대값은 44, 오른쪽 아래 구역 8 3 / 5 7의 최대값은 88이다. 따라서 최대 풀링 결과는 다음과 같은 2×22\times2 특징 맵이 된다.

6 4 4 8

풀링 층에도 앞서 배운 출력 크기 공식이 그대로 적용된다(단, 풀링에는 학습되는 파라미터가 없다). 풀링 창 크기 F=2F=2, 스트라이드 S=2S=2, 패딩 P=0P=04×44\times4 입력에 대입하면 다음과 같다.

O=42+2×02+1=22+1=2O = \frac{4 - 2 + 2 \times 0}{2} + 1 = \frac{2}{2} + 1 = 2

계산대로 2×22\times2 출력이 나와 위 결과와 일치한다.

풀링의 역할은 두 가지다. 첫째, 특징 맵의 크기를 줄여 이후 층의 연산량과 파라미터 수를 줄인다. 둘째, 약간의 위치 변화에 둔감(invariance, 불변성)하게 만든다. 예를 들어 어떤 특징이 원래 위치에서 한두 칸 옆으로 이동해도, 풀링 구역 안에만 있으면 최대값(또는 평균)은 크게 달라지지 않는다.

구분합성곱(Convolution)풀링(Pooling)
학습 파라미터있음(필터 가중치·편향)없음
목적특징(패턴) 추출특징 맵 크기 축소, 위치 불변성 확보
대표 연산곱셈 후 합산최댓값 또는 평균값 선택
출력 크기 공식(NF+2P)/S+1(N-F+2P)/S+1(NF+2P)/S+1(N-F+2P)/S+1(동일 공식, 패딩은 보통 0)

완전연결층과 합성곱층 비교

쉽게 말하면: 합성곱층은 국소적인 패턴을 이미지 전체에서 공유해서 찾고, 완전연결층은 그렇게 뽑아낸 특징을 종합해 최종 판단을 내린다.

CNN의 전형적인 구조는 합성곱층과 풀링층을 여러 번 반복해 이미지에서 점점 더 추상적인 특징(경계선 → 질감 → 부분 형태 → 전체 객체)을 뽑아낸 다음, 마지막에 완전연결층을 두어 이 특징들을 종합해 분류나 회귀 등 최종 출력을 만든다.

구분완전연결층합성곱층
연결 방식모든 입력이 모든 출력 노드에 연결필터가 지역적인 영역에만 연결(local connectivity)
파라미터 공유없음(위치마다 독립된 가중치)있음(같은 필터를 전체 위치에서 공유)
공간 구조 보존보존되지 않음(1차원으로 펼쳐짐)보존됨(2차원 격자 유지)
파라미터 수입력·출력 크기에 비례해 매우 큼필터 크기·채널 수에만 좌우, 이미지 크기와 무관
주 사용 위치신경망의 마지막(분류·회귀 출력)신경망의 앞·중간(특징 추출)

다음 편에서는 이런 합성곱·풀링·완전연결층을 실제로 어떻게 쌓았는지, LeNet·AlexNet·VGG·ResNet 같은 대표 CNN 구조를 통해 살펴본다.

핵심 정리

  • 합성곱은 작은 필터를 이미지 위에서 이동시키며 겹치는 영역의 곱셈-합산을 반복하는 연산이며, 필터 가중치를 이미지 전체에서 공유해 파라미터 수를 크게 줄인다.
  • 출력 크기 공식은 O=(NF+2P)/S+1O=(N-F+2P)/S+1이며, 패딩은 양쪽에 각각 붙으므로 2P2P로 계산해야 한다.
  • 합성곱 층의 파라미터 수는 (F×F×Cin+1)×Cout(F\times F \times C_{in}+1)\times C_{out}으로, 이미지 크기와 무관하게 필터 크기·채널·개수에만 좌우된다.
  • 풀링(최대·평균)은 학습 파라미터 없이 특징 맵 크기를 줄이고 위치 변화에 대한 둔감성을 높인다.
  • 완전연결층은 공간 구조를 버리고 모든 노드를 연결하는 반면, 합성곱층은 지역 연결과 가중치 공유로 공간 구조를 보존한다.

마무리 복습

문제 14지선다
7×77\times7 입력에 3×33\times3 필터, 패딩 P=0P=0, 스트라이드 S=1S=1을 적용했을 때 출력 특징 맵의 한 변 크기는?
문제 24지선다
5×55\times5 입력에 3×33\times3 필터를 적용해 출력 크기를 입력과 동일한 5×55\times5로 유지하려면(스트라이드 1일 때), 패딩 P는 얼마여야 하는가?
문제 34지선다
입력 채널이 3, 필터 크기가 5×55\times5, 필터 개수가 8개인 합성곱 층의 파라미터 수는? (편향 포함)
문제 44지선다
다음 4×44\times4 특징 맵에 2×22\times2 최대 풀링(스트라이드 2)을 적용했을 때 왼쪽 위 2×22\times2 구역 2 1 / 4 3의 풀링 결과 값은?
문제 54지선다
완전연결층과 합성곱층의 차이에 대한 설명으로 옳지 않은 것은?
문제 64지선다
풀링(pooling) 층에 대한 설명으로 옳은 것은?

참고 자료

Last updated on