CNN 합성곱 신경망 원리: 필터와 스트라이드 연산 방식의 핵심 완벽 정리

썸네일

서론: 인공지능의 눈, CNN의 세계로 초대합니다

오늘날 우리는 인공지능이 이미지를 인식하고 분석하는 것이 당연한 시대에 살고 있습니다. 스마트폰의 얼굴 인식 잠금 해제부터 자율주행 자동차가 도로의 표지판과 보행자를 구별하는 기술, 그리고 의료 현장에서 엑스레이나 MRI 영상을 판독해 질병을 찾아내는 AI 의사까지, 이 모든 혁신의 중심에는 CNN(Convolutional Neural Network, 합성곱 신경망)이 자리 잡고 있습니다. 딥러닝, 특히 컴퓨터 비전(Computer Vision) 분야를 공부하고자 하는 분들에게 CNN은 반드시 넘어야 할 산이자, 가장 흥미로운 탐구 대상입니다.

기존의 완전 연결 신경망(Fully Connected Network, DNN)이 데이터를 1차원 배열로 평탄화하여 처리함으로써 이미지 고유의 형상 정보를 잃어버리는 한계가 있었다면, CNN은 이미지의 '공간적 정보(Spatial Structure)'를 그대로 유지하면서 핵심적인 특징을 추출해내는 획기적인 구조를 가지고 있습니다. 이것이 바로 CNN이 이미지 처리 분야에서 독보적인 성능을 발휘하는 이유입니다.

이번 포스팅에서는 CNN 합성곱 신경망 원리의 가장 기초적이면서도 핵심적인 메커니즘인 '필터(Filter)'와 '스트라이드(Stride)'의 연산 방식에 대해 아주 상세하게 파헤쳐 보려 합니다. 이 두 가지 개념을 명확히 이해하는 것은 단순히 용어를 아는 것을 넘어, AI가 세상을 어떻게 '바라보고' 정보를 '압축'하는지 그 본질을 이해하는 첫걸음이 될 것입니다.


1. CNN의 기본 구조와 합성곱(Convolution)의 진정한 의미

CNN은 크게 입력된 이미지에서 유의미한 정보를 뽑아내는 특징 추출(Feature Extraction) 단계와, 추출된 특징을 바탕으로 이미지가 무엇인지 판단하는 분류(Classification) 단계로 나뉩니다. 우리가 오늘 집중적으로 살펴볼 필터와 스트라이드는 바로 이 '특징 추출' 단계의 핵심인 합성곱 층(Convolutional Layer)에서 작동합니다.

그렇다면 '합성곱'이란 도대체 무엇일까요? 수학적으로 복잡하게 정의할 수도 있지만, 직관적으로 이해하는 것이 훨씬 중요합니다. 합성곱은 입력 데이터(이미지) 위를 작은 윈도우(필터)가 슬라이딩하며 훑어가는 과정이라고 정의할 수 있습니다. 마치 어두운 방 안에서 손전등을 비추며 벽에 그려진 그림의 세부적인 부분을 하나하나 확인하는 것과 유사합니다.

이 과정에서 이미지의 각 부분과 필터가 겹치는 영역끼리 연산을 수행하게 되는데, 이를 '합성곱 연산'이라고 합니다. 구체적으로는 필터의 각 칸에 있는 가중치(Weight)와 그에 대응하는 이미지 픽셀 값을 서로 곱한 뒤, 그 결과들을 모두 더하는 '요소별 곱과 합(Element-wise Multiplication and Sum)' 과정을 거칩니다. 이 연산의 결과로 탄생하는 새로운 2차원 데이터가 바로 '특징 맵(Feature Map)'입니다. 이 맵은 원본 이미지보다 크기가 작아질 수도 있고, 원본에는 없던 '엣지(Edge)'나 '질감(Texture)' 같은 고수준의 정보가 강조되어 나타나게 됩니다.


2. 필터(Filter): 이미지 속 숨겨진 특징을 찾아내는 탐정

CNN 합성곱 신경망 원리를 이해하는 데 있어 가장 중요한 첫 번째 열쇠는 바로 필터(Filter)입니다. 학술적으로는 커널(Kernel)이라고도 불립니다. 필터는 보통 3x3, 5x5, 7x7과 같은 작은 정사각형 행렬 형태로 정의되며, 이 행렬 안에는 학습을 통해 끊임없이 업데이트될 가중치(Weight)들이 들어있습니다.

필터의 역할과 기능: 무엇을 보는가?

필터는 이미지 전체를 좌상단부터 우하단까지 훑으며 자신이 담당하는 특정 '패턴'이나 '특징'이 있는지 검사합니다. 예를 들어보겠습니다.

  • 세로선 검출 필터: 이미지 내에서 세로 방향의 픽셀 변화가 급격한 곳(예: 건물의 기둥, 책상의 다리)을 만나면 높은 출력값을 내놓아 해당 위치를 강조합니다.
  • 가로선 검출 필터: 반대로 가로 방향의 변화를 감지하여 지평선이나 책상의 상판 같은 특징을 잡아냅니다.
  • 색상 및 질감 필터: 특정 색상 영역이나 거친 질감, 부드러운 질감 등을 감지하는 필터도 존재할 수 있습니다.

계층적 학습(Hierarchical Learning)

CNN의 층이 깊어질수록(Deep Layer), 필터의 역할은 더욱 고차원적으로 진화합니다. 첫 번째 층의 필터들이 단순한 선이나 점, 색상을 찾았다면, 그 다음 층의 필터들은 이들을 조합하여 눈, 코, 입 같은 부위(Parts)를 인식하고, 더 깊은 층에서는 얼굴 전체나 자동차의 바퀴, 창문 같은 복잡한 객체(Object)를 인식하게 됩니다. 이것이 바로 딥러닝이 인간의 시각 처리 과정을 모방했다고 말하는 이유입니다.

가장 중요한 점은, 과거의 컴퓨터 비전 기술(예: Canny Edge Detector)에서는 사람이 직접 이 필터의 값(가중치)을 수학적으로 설계하고 입력했다는 것입니다. 하지만 딥러닝 기반의 CNN에서는 데이터를 통해 학습하는 과정에서 네트워크가 스스로 목적(예: 개와 고양이 분류) 달성에 가장 적합한 필터 값을 찾아냅니다. 즉, 어떤 필터가 필요한지 인간이 알려주지 않아도 AI가 스스로 특징을 찾아내는 법을 배우는 것입니다.


3. 스트라이드(Stride): 필터의 이동 보폭과 정보의 압축

필터가 이미지를 훑을 때, 한 번에 몇 칸씩 이동할지를 결정하는 매개변수가 바로 스트라이드(Stride)입니다. 'Stride'는 우리말로 '보폭'을 의미합니다. 즉, 필터가 한 번 연산을 마치고 다음 연산을 위해 이동할 때 건너뛰는 픽셀의 수를 말합니다. 이 값은 단순한 이동 거리를 넘어 출력 데이터의 크기와 정보의 밀도를 결정하는 결정적인 역할을 합니다.

스트라이드 설정에 따른 변화와 트레이드오프

스트라이드 값은 출력 데이터인 특징 맵(Feature Map)의 크기(Dimension)를 결정하는 데 지대한 영향을 미치며, 이는 모델의 성능과 연산 효율성 사이의 균형을 맞추는 핵심 요소입니다.

  1. Stride = 1 (세밀한 탐색):

    • 필터가 한 픽셀씩 아주 촘촘하게 이동합니다.
    • 장점: 이미지의 모든 정보를 빠짐없이 훑기 때문에 가장 세밀하게 특징을 추출할 수 있습니다. 정보 손실이 가장 적습니다.
    • 단점: 생성되는 특징 맵의 크기가 입력 이미지와 비슷하거나(패딩 적용 시) 약간 줄어드는 정도에 그칩니다. 결과적으로 연산량이 많아지고 처리 속도가 느려질 수 있습니다.
  2. Stride = 2 이상 (성큼성큼 이동):

    • 필터가 두 칸, 혹은 그 이상씩 건너뛰며 이동합니다.
    • 장점: 특징 맵의 크기가 대략 절반(Stride=2일 때)으로 줄어듭니다. 이는 데이터의 차원을 축소하는 효과(Downsampling)를 가져오며, 전체적인 연산량을 줄이고 모델을 가볍게 만드는 데 도움을 줍니다. 또한, 넓은 영역의 정보를 빠르게 요약하는 효과가 있습니다.
    • 단점: 픽셀을 건너뛰기 때문에 세밀한 정보의 손실이 발생할 수 있습니다. 너무 큰 스트라이드는 중요한 특징을 놓치게 만들 수 있습니다.

스트라이드를 크게 설정하면 정보의 손실이 발생할 수 있지만, 넓은 영역의 정보를 빠르게 압축하여 요약하는 효과가 있습니다. 이를 'Receptive Field(수용 영역)'가 넓어진다고 표현하기도 합니다. 반면 스트라이드를 작게 설정하면 세밀한 정보를 보존하지만 연산 비용이 증가하고 과적합(Overfitting)의 우려가 있을 수 있습니다. 따라서 적절한 스트라이드 값을 설정하는 것은 CNN 합성곱 신경망 원리 설계에서 매우 중요한 하이퍼파라미터 튜닝 과정입니다.


4. 출력 크기(Output Size) 계산 공식과 패딩(Padding)의 존재 이유

필터 크기(Kernel Size), 스트라이드(Stride)를 이해했다면, 입력 이미지가 합성곱 층을 통과했을 때 출력되는 특징 맵의 크기를 계산할 수 있어야 합니다. 이는 신경망 전체의 구조를 설계할 때 필수적인 과정입니다. 여기서 우리는 패딩(Padding)이라는 개념을 잠시 짚고 넘어가야 합니다.

패딩(Padding): 가장자리를 지켜라

필터가 이미지를 훑다 보면 필연적으로 이미지의 가장자리(Border) 부분은 필터의 중앙에 위치할 기회가 적어 정보가 소실되거나, 합성곱 연산을 거칠 때마다 이미지 크기가 계속 줄어드는 문제가 발생합니다. 이를 방지하기 위해 입력 이미지의 테두리에 0과 같은 특정 값으로 채워진 가상의 픽셀을 덧붙이는 것을 패딩이라고 합니다. 패딩을 통해 출력 크기를 입력 크기와 동일하게 유지하거나(Same Padding), 급격한 크기 감소를 막을 수 있습니다.

출력 크기 계산 공식

입력 이미지의 크기를 (W{in} imes H{in}), 필터의 크기를 (F), 스트라이드를 (S), 패딩을 (P)라고 할 때, 출력 크기 (W{out} imes H{out})은 다음과 같이 계산됩니다.

$$ Output\ Size = \frac{(Input\ Size - Filter\ Size + 2 imes Padding)}{Stride} + 1 $$

즉, $$ W{out} = \frac{(W{in} - F + 2P)}{S} + 1 $$

이 공식에서 알 수 있는 핵심 원리는 다음과 같습니다: * 필터 크기(F)가 커지면 출력 크기는 작아집니다. * 스트라이드(S)가 커지면 분모가 커지므로 출력 크기는 그 배수만큼 획기적으로 작아집니다. * 패딩(P)이 있으면 분자가 커지므로 출력 크기 감소를 방지하거나 상쇄합니다.

예시: 32x32 입력 이미지에 5x5 필터를 사용하고, 스트라이드를 1, 패딩을 0으로 설정한다면: ( (32 - 5 + 0) / 1 + 1 = 28 ) 따라서 28x28 크기의 특징 맵이 출력됩니다. 만약 여기서 스트라이드를 2로 바꾼다면 약 14.5가 나오는데, 보통 소수점은 버림(floor) 처리하므로 14x14 크기가 될 것입니다. (보통은 정수 나누기가 딱 떨어지도록 패딩을 조절하는 것이 일반적입니다.)


5. 필터와 스트라이드 조합의 최신 트렌드 및 적용 전략

실전 딥러닝 모델 설계에서는 필터와 스트라이드를 어떻게 조합하여 사용할까요? 최신 연구 트렌드와 함께 살펴보겠습니다.

  • 작은 필터의 중첩 사용: 과거에는 7x7, 11x11 같은 큰 필터를 사용하기도 했지만, VGGNet 이후로는 3x3 같은 작은 필터를 여러 번 중첩해서 사용하는 것이 대세가 되었습니다. 3x3 필터를 두 번 거치면 5x5 필터 한 번과 같은 수용 영역(Receptive Field)을 가지면서도, 파라미터 수는 줄어들고 비선형성(Non-linearity)은 증가하여 학습 효율이 높아지기 때문입니다.
  • Strided Convolution (풀링의 대체): 전통적인 CNN 구조에서는 이미지 크기를 줄이기 위해 '맥스 풀링(Max Pooling)' 같은 별도의 풀링 층을 두었습니다. 하지만 최근 ResNet이나 MobileNet 같은 현대적인 아키텍처에서는 스트라이드가 2인 합성곱 층(Strided Convolution)을 사용하여 특징 추출과 다운샘플링을 동시에 수행하는 방식을 선호하기도 합니다. 이는 모델의 구조를 단순화하면서도 정보 손실을 제어할 수 있는 효율적인 방법입니다.
  • 1x1 합성곱 (Pointwise Convolution): 필터 크기가 1x1인 경우도 있습니다. 공간적인 크기는 줄이지 않으면서 채널(Channel, 깊이)의 수를 조절하여 연산량을 획기적으로 줄이거나(Bottleneck 구조), 비선형성을 증가시키는 목적으로 매우 빈번하게 사용됩니다.

6. 결론: CNN의 마법은 단순한 규칙의 반복에서 시작된다

지금까지 CNN 합성곱 신경망 원리의 핵심인 필터와 스트라이드에 대해 깊이 있게 알아보았습니다. 겉으로 보기에 복잡하고 난해해 보이는 인공지능 기술이, 사실은 덧셈과 곱셈, 그리고 윈도우 이동이라는 단순한 규칙들의 반복과 조합으로 이루어져 있다는 사실이 놀랍지 않나요?

요약하자면 다음과 같습니다: 1. 필터(Filter)는 이미지 위를 날아다니며 숨겨진 특징을 스스로 학습하고 찾아내는 탐지기 역할을 합니다. 2. 스트라이드(Stride)는 필터가 이동하는 보폭을 결정하며, 결과물의 크기(해상도)와 정보의 압축률에 직접적인 영향을 줍니다. 3. 이 두 가지 요소와 패딩의 적절한 조화를 통해 CNN은 이미지의 공간적 구조를 이해하고, 추상화된 정보를 효율적으로 학습하여 인간 수준의 시각 지능을 구현합니다.

필터가 이미지를 어떻게 훑고 지나가는지, 그리고 스트라이드가 어떻게 보폭을 조절하며 정보를 압축하는지 머릿속으로 시각화할 수 있다면, 여러분은 이미 CNN의 작동 원리를 절반 이상 이해한 것입니다. 이 기초를 바탕으로 풀링(Pooling), 활성화 함수(Activation Function), 그리고 다양한 최신 CNN 아키텍처로 지식을 확장해 나간다면, 여러분도 머지않아 딥러닝 전문가로 거듭날 수 있을 것입니다.

신고하기