합성곱 신경망을 구성하는 기본 요소들
CNN이 어떻게 이미지를 처리하는지 이해했으니, 이제 CNN을 구성하는 핵심 요소들을 자세히 살펴봅시다.
합성곱 계층(Convolutional Layer)
CNN의 가장 중요한 구성 요소는 합성곱 계층입니다. 이 계층은 이미지의 부분적 특징들을 뽑아내는 역할을 합니다.
여기서 말하는 "부분적 특징"이란 무엇일까요? 이미지 전체를 한 번에 분석하는 것이 아니라, 작은 영역씩 보면서 그 영역의 특징을 찾는다는 의미입니다. 예를 들어, 모서리(엣지), 질감(texture), 반복되는 패턴(pattern) 같은 것들이 부분적 특징입니다. 합성곱 계층은 이미지 전체를 훑으면서 이런 부분적 특징들을 모두 찾아내고, 그 결과를 새로운 이미지 형태로 표현합니다.

필터(Filter, Kernel): 특징을 찾아내는 도구
합성곱 계층에서 실제 일을 하는 것이 바로 필터(Filter) 또는 커널(Kernel)입니다. 필터는 작은 크기의 가중치 행렬입니다.

필터의 크기는 보통 매우 작습니다. 예를 들어, 3×3, 5×5 같은 크기의 정사각형 행렬입니다. 이 작은 필터가 이미지 위를 이동하면서, 마치 돋보기로 한 부분씩 살펴보는 것처럼, 그 영역의 정보를 분석합니다.
필터는 어떻게 작동할까요? 필터가 이미지의 특정 영역 위에 놓여집니다. 필터의 각 원소와 그 아래의 이미지 픽셀값을 곱합니다. 그 후 모든 곱셈 결과를 더합니다. 이 합이 바로 이 영역의 특징을 나타내는 한 개의 출력값이 됩니다.
구체적인 예를 들어봅시다. 모서리를 감지하는 필터를 생각해봅시다. 이 필터는 밝은 부분과 어두운 부분이 만나는 경계선을 찾도록 설계됩니다. 필터가 이미지의 한 부분에 왼쪽은 밝고 오른쪽은 어두운 영역을 만나면, 필터의 계산 결과는 매우 큰 양수가 됩니다. 이것은 "여기에 수직 엣지가 있다"는 신호입니다.
필터를 이미지 위에서 이동시키면서 이 과정을 반복하면, 원본 이미지에서 모서리만 강조된 **특징 맵(Feature Map)**이 만들어집니다. 마치 원본 사진의 "엣지 버전"을 만드는 것과 같습니다.
스트라이드(Stride): 필터의 이동 간격 조절
필터가 이미지를 훑을 때, 한 번에 몇 픽셀씩 움직일 것인가를 결정하는 것이 스트라이드입니다. 스트라이드는 간단해 보이지만, 신경망의 성능과 효율성을 크게 좌우하는 중요한 파라미터입니다.
예를 들어, 스트라이드가 1이면 필터를 1픽셀씩 이동시킵니다. 3×3 필터가 8×8 이미지 위를 스트라이드 1로 이동한다면, 가로로 6번, 세로로 6번 움직이므로 총 36개의 계산을 수행합니다. 그 결과 특징 맵은 6×6 크기가 됩니다. 이 방식은 이미지의 세밀한 정보를 최대한 유지합니다.
반면, 스트라이드가 2면 필터를 2픽셀씩 이동시킵니다. 같은 8×8 이미지에서는 가로로 3번, 세로로 3번 움직이므로 결과 특징 맵은 3×3 크기가 됩니다. 이제 이미지 크기가 절반으로 축소되었고, 계산량도 크게 줄어듭니다.
스트라이드가 커질수록, 출력되는 특징 맵의 크기는 작아집니다. 계산량은 줄어들지만, 동시에 건너뛰는 정보가 많아져서 세부 정보 손실의 위험이 커집니다. 반대로 스트라이드가 작을수록, 특징 맵은 커지고 계산량이 많아집니다.
따라서 스트라이드는 정확도(더 많은 정보 유지)와 효율성(더 빠른 계산) 사이의 균형을 맞추는 중요한 도구입니다. 실제로 신경망을 설계할 때 스트라이드 값은 신중하게 선택해야 합니다.
패딩(Padding): 이미지 경계 정보의 손실 방지
지금까지 설명한 스트라이드와는 별도로, 합성곱 연산에는 또 다른 중요한 문제가 있습니다. 바로 이미지 크기의 축소입니다.
생각해봅시다. 3×3 필터를 사용해서 8×8 이미지에 합성곱을 적용하면, 결과 특징 맵은 6×6 크기가 됩니다. 이미지 크기가 줄어듭니다. 만약 여러 합성곱 계층을 연속으로 거친다면 어떻게 될까요? 첫 번째 계층 후 6×6, 두 번째 계층 후 4×4, 세 번째 계층 후 2×2... 이런 식으로 계속 줄어들어서, 결국 이미지가 너무 작아져서 의미 있는 정보를 거의 모두 잃어버리게 됩니다.
더욱 문제가 되는 것은 경계 부분의 정보 손실입니다. 이미지의 가장자리에 있는 픽셀들을 생각해봅시다. 이 픽셀들은 필터의 중심이 될 기회가 매우 적습니다. 따라서 경계 부분의 특징들은 충분히 처리되지 않고 무시될 가능성이 높습니다. 예를 들어, 강아지의 귀가 이미지의 가장자리에 있다면, 그 부분의 정보가 제대로 처리되지 않을 수 있다는 의미입니다.
이를 해결하기 위해 고안된 기법이 바로 패딩(Padding)입니다. 패딩은 매우 우아한 해결책입니다. 이미지의 가장자리 주위에 추가적인 행과 열을 덧붙이는 것입니다. 보통은 이 추가된 부분을 0으로 채웁니다.
구체적인 예를 들어봅시다. 5×5 이미지의 주위에 한 줄씩 0을 추가하면 7×7이 됩니다.

이제 3×3 필터를 스트라이드 1로 적용하면, 결과는 5×5이 됩니다. 원본 이미지의 크기가 그대로 유지됩니다.
패딩의 효과는 여러 가지입니다. 첫째, 여러 합성곱 계층을 거쳐도 이미지 크기가 너무 빨리 줄어들지 않습니다. 이는 신경망이 충분히 깊어질 수 있음을 의미합니다. 더 많은 계층을 쌓을수록 더 복잡한 특징을 학습할 수 있습니다.
둘째, 경계 정보가 충분히 처리됩니다. 경계에 있는 픽셀들도 이제 필터의 중심이 될 수 있으므로, 경계 부분의 중요한 특징들이 무시되지 않습니다. 강아지의 귀가 이미지의 가장자리에 있어도, 그 부분이 제대로 처리될 확률이 훨씬 높아집니다.
즉, 패딩은 출력 크기를 조절하고 동시에 경계 정보를 보존하는 중요한 기법입니다. 실제로 대부분의 현대적 CNN 모델들은 패딩을 적극적으로 사용합니다.
채널과 필터의 관계: RGB 이미지 처리의 핵심
지금까지의 설명에서는 하나의 필터가 하나의 값을 출력한다고 가정했습니다. 하지만 실제 이미지는 RGB 3개 채널로 이루어져 있습니다. 또한 하나의 합성곱 계층에는 여러 개의 필터가 있을 수 있습니다. 이 모든 것이 어떻게 함께 작동하는지 이해하는 것이 중요합니다.
먼저 필터와 입력 채널의 관계를 봅시다. 가장 기초적인 경우부터 시작하겠습니다. 입력이 RGB 이미지라면, 즉 3개의 채널을 가지고 있다면, 각 필터도 3차원 구조를 가져야 합니다.

구체적으로, 3×3 크기의 필터라고 하면, 실제로는 3×3×3 크기입니다. 높이 3, 너비 3, 그리고 깊이(채널)도 3입니다. 이 필터가 RGB 이미지의 한 영역 위에 놓여질 때, 다음과 같이 작동합니다:
- 필터의 R 채널(3×3)과 이미지의 R 채널(3×3 영역)을 곱합니다.
- 필터의 G 채널(3×3)과 이미지의 G 채널(3×3 영역)을 곱합니다.
- 필터의 B 채널(3×3)과 이미지의 B 채널(3×3 영역)을 곱합니다.
이 세 가지 곱셈 결과를 모두 더합니다. 결과는 단 하나의 숫자입니다. 즉, 3×3×3 필터는 3차원 입력 데이터를 처리해서 1차원의 스칼라 값을 출력합니다. 이것이 중요한 의미를 가집니다. 한 개의 필터는 RGB의 모든 컬러 정보를 동시에 통합하면서 처리합니다. 필터는 "이 영역의 빨강, 초록, 파랑 정보를 모두 고려했을 때, 이것이 엣지인가?"라는 질문에 답하는 것입니다. 이는 매우 자연스럽고 효율적인 처리 방식입니다.
이제 필터의 개수에 대해 생각해봅시다. 한 합성곱 계층에 얼마나 많은 필터가 있을 것인가는 개발자가 직접 결정합니다. 예를 들어, 32개의 필터가 있다고 하면, 32가지의 서로 다른 특징을 동시에 찾는다는 의미입니다:
- 필터 1: 수직 엣지를 감지
- 필터 2: 수평 엣지를 감지
- 필터 3: 대각선 패턴을 감지
- 필터 4: 특정 색상 조합을 감지
- ... (필터 32까지)
그 결과 출력은 높이 × 너비 × 32 크기가 됩니다. 32는 출력 채널의 개수, 즉 "출력 특징 맵의 깊이"입니다. 이제 매우 중요한 개념을 정리합시다: 입력 채널 수는 필터의 깊이를 결정하고, 필터의 개수는 출력 채널 수를 결정합니다. 이것이 무엇을 의미할까요? 만약 입력이 RGB 3채널이고 필터가 32개라면:
- 각 필터의 크기: 3×3×3 (높이×너비×입력채널)
- 출력 특징 맵의 크기: (높이×너비×32) (높이×너비×필터개수)
그런데 만약 입력이 더 많은 채널을 가지고 있다면 어떻게 될까요? 예를 들어, 이전 합성곱 계층의 출력이 64개 채널을 가지고 있다면:
- 각 필터의 크기: 3×3×64 (높이×너비×입력채널)
- 출력 특징 맵의 크기: (높이×너비×32) (동일한 필터 개수 32개)
중요한 점은, 입력 채널이 64개로 늘어났어도, 필터의 총 개수는 여전히 32개라는 것입니다. 필터가 더 많이 필요한 것이 아니라, 각 필터가 더 많은 채널 정보를 처리하게 되는 것입니다. 이것이 CNN의 효율성을 유지하는 메커니즘입니다.
즉, "입력 채널 수 = 한 필터가 보는 깊이", "필터의 개수 = 출력 채널 수"라는 관계가 성립합니다. 이 관계를 이해하는 것이 CNN 구조를 설계할 때 매우 중요합니다.
풀링 계층(Pooling Layer)
합성곱 계층을 통해 특징들을 추출했으니, 이제 이 정보를 효율적으로 처리해야 합니다. 합성곱 계층의 출력(특징 맵)은 여전히 꽤 큽니다. 만약 이 크기 그대로 다음 계층으로 보낸다면 어떤 일이 발생할까요?
생각해봅시다. 처음 입력 이미지가 224×224×3이었다고 합시다. 첫 번째 합성곱 계층을 거친 후 특징 맵이 224×224×32가 됩니다(패딩을 사용했다고 가정). 이것이 여러 계층을 거치면서 점점 깊어져서, 결국 완전 연결층(fully connected layer)에 도달한다면, 입력 노드의 개수가 엄청나게 많아집니다. 224×224×128 크기의 특징 맵이라면, 총 6,422,528개의 뉴런이 필요합니다. 이것은 계산량의 폭발을 의미합니다.
더 심각한 문제는 과적합의 위험입니다. 너무 많은 정보가 다음 계층으로 전달되면, 신경망이 훈련 데이터의 세부 사항까지 모두 외워버리는 경향이 있습니다. 이를 해결하기 위해 고안된 것이 풀링 계층(Pooling Layer)입니다. 풀링 계층의 역할은 명확합니다: 이미지의 크기를 줄이면서 가장 중요한 정보만 유지하는 것입니다.
풀링이 하는 일을 구체적으로 설명하면, 특징 맵을 작은 영역들로 나누고, 각 영역에서 대표적인 값 하나를 선택합니다. 이렇게 하면 이미지 크기는 축소되고, 계산량이 감소하면서도, 중요한 특징들은 보존됩니다.
추출된 중요한 정보가 보다 압축된 형태로 다음 계층에 전달되며, 위치 변화에 대한 강건성도 제공합니다. 이것이 풀링의 두 가지 주요 이점입니다. 먼저 첫 번째를 설명하겠습니다.

최대 풀링(Max Pooling): 가장 강한 신호만 선택
풀링의 가장 일반적인 방식은 최대 풀링(Max Pooling)입니다. 이름 그대로, 각 영역에서 가장 큰 값만 뽑아냅니다.구체적으로 어떻게 작동하는지 실제 예시로 보겠습니다. 4×4 크기의 특징 맵이 있고, 2×2 크기의 Max Pooling을 적용한다고 합시다. 2×2 풀링 윈도우를 왼쪽 위부터 오른쪽 아래로 이동시키면서 각 영역의 최댓값을 추출합니다.
왼쪽 위 영역:
[13, 20]
[ 8, 12]
→ 최댓값: 20
오른쪽 위 영역:
[30, 0]
[ 3, 0]
→ 최댓값: 30
왼쪽 아래 영역:
[34, 70]
[111, 80]
→ 최댓값: 111
오른쪽 아래 영역:
[33, 5]
[10, 23]
→ 최댓값: 33
결과:
[20, 30]
[111, 33]
이제 원본 4×4 특징 맵이 2×2로 축소되었습니다. 크기는 4분의 1로 줄어들었습니다.
Max Pooling의 철학을 이해하는 것이 중요합니다. 각 영역에서 가장 강한 신호(가장 큰 값)만 선택합니다. 이것이 의미하는 바는: "이 영역에는 뚜렷한 특징이 있다"는 신호만 다음 계층으로 전달하겠다는 것입니다. 약한 신호들은 무시합니다. 약한 신호는 중요하지 않은 정보를 의미하므로, 이를 제거함으로써 신경망이 더 중요한 패턴에 집중할 수 있게 해줍니다.
평균 풀링(Average Pooling): 영역 전체의 정보 유지
Max Pooling과는 다른 접근 방식도 있습니다. 평균 풀링(Average Pooling)은 각 영역의 평균값을 계산합니다. 같은 예시에서 평균 풀링을 적용하면:
왼쪽 위 영역:
[13, 20]
[ 8, 12]
→ 평균: (13 + 20 + 8 + 12) / 4 = 13.25
오른쪽 위 영역:
[30, 0]
[ 3, 0]
→ 평균: (30 + 0 + 3 + 0) / 4 = 8.25
왼쪽 아래 영역:
[34, 70]
[111, 80]
→ 평균: (34 + 70 + 111 + 80) / 4 = 73.75
오른쪽 아래 영역:
[33, 5]
[10, 23]
→ 평균: (33 + 5 + 10 + 23) / 4 = 17.75
결과:
[13.25, 8.25]
[73.75, 17.75]
Max Pooling 결과 [20, 30, 111, 33]과 비교하면, Average Pooling은 완전히 다른 결과를 보여줍니다.
평균 풀링의 특징을 생각해봅시다. 각 영역 전체의 평균적인 특징을 반영합니다. 최댓값만 취하는 것이 아니라, 영역 전체의 정보를 조금씩 유지하는 방식입니다. 결과적으로 Max Pooling보다는 더 많은 정보가 남아있습니다. 반면, 노이즈(불필요한 정보)에는 좀 더 민감할 수 있습니다.
풀링의 또 다른 중요한 이점: 위치 변화에 대한 강건성
풀링의 또 다른 중요한 효과가 있습니다. 바로 위치 변화에 대한 강건성(robustness to spatial translation)입니다.
실제 세계의 이미지 인식 문제를 생각해봅시다. 강아지 사진을 분류하는 CNN을 학습시켰다고 합시다. 이 CNN은 강아지의 코를 감지하는 필터를 학습했습니다. 그런데 중요한 질문이 있습니다: 이 필터는 강아지의 코가 항상 정확히 같은 위치에 있어야만 반응해야 할까요? 아니면 약간 다른 위치에 있어도 반응해야 할까요?
현실적으로는 후자여야 합니다. 사진마다 강아지의 자세가 다를 수 있기 때문입니다. 강아지가 카메라를 향해 바라볼 때도 있고, 옆모습을 보여줄 때도 있습니다. 같은 강아지의 코라도 위치가 약간씩 달라집니다. Max Pooling은 이 문제를 자연스럽게 해결합니다. 어떤 신호가 2×2 영역 중 어디에 있든, Max Pooling은 그것을 찾아냅니다. 신호가 왼쪽 위에 있든, 오른쪽 아래에 있든, Max Pooling의 결과는 동일합니다(가장 큰 값).
위치 변화에 대한 강건성이란, 이미지 내 객체의 위치가 약간 바뀌거나 이동해도, 모델이 해당 객체를 잘 인식할 수 있는 능력을 의미합니다. 이는 CNN이 실제 세계의 복잡한 이미지를 처리할 수 있게 해주는 매우 중요한 특성입니다.
예를 들어, 5×5 영역에서 특징이 조금 왼쪽에 있다가 다른 이미지에서는 조금 오른쪽에 있어도, 2×2 Max Pooling 후의 결과는 거의 같을 것입니다. 이로 인해 CNN은 객체의 위치 변화에 덜 민감하게 반응하며, 더 일반화된(generalized) 특징을 학습할 수 있습니다.
'인공지능 > Computer Vision(CV)' 카테고리의 다른 글
| 컴퓨터 비전 입문하기[2] - 왜 합성곱 신경망이 필요한가? (0) | 2026.01.08 |
|---|---|
| 컴퓨터 비전 입문하기[1] - 컴퓨터 비전과 영상 처리 (1) | 2026.01.08 |
| Computer Vision Major Task List - (2): Object Detection (0) | 2023.09.07 |
| Computer Vision Major Task List - (1): Image Classification (0) | 2023.07.20 |
| GAN(Generative Adversarial Networks) 이해하기 (0) | 2023.06.30 |