Convolutional Neural Networks (CNN, 합성곱 신경망) 개념 정리

컴퓨터 비전 분야는 딥러닝의 발전과 함께 눈부신 성장을 이루었습니다. 그 중심에는 바로 Convolutional Neural Network (CNN), 우리말로는 합성곱 신경망이 있습니다. CNN은 특히 이미지나 비디오 데이터 분석에 강력한 성능을 보여주며, 이미지 분류, 객체 탐지, 얼굴 인식 등 다양한 분야에서 핵심적인 역할을 하고 있습니다.

이번 포스팅에서는 CNN이 무엇인지, 왜 필요한지, 그리고 어떤 구성 요소로 이루어져 있는지 차근차근 알아보겠습니다.

왜 이미지 분석에 CNN이 특별할까요?

기존의 완전 연결 신경망(Fully Connected Neural Network, FCNN)으로 이미지를 분석하려면 몇 가지 문제가 있었습니다.

  1. 공간 정보의 손실: 이미지를 FCNN에 입력하려면 보통 픽셀들을 일렬로 길게 펼치는 'Flattening' 과정을 거칩니다. 이 과정에서 픽셀 간의 공간적인 관계(예: 어떤 픽셀이 다른 픽셀의 옆이나 위에 있는지) 정보가 사라지게 됩니다. 이미지에서 객체를 인식하려면 이러한 공간적 구조가 매우 중요한데 말이죠.
  2. 과도한 계산량: 고해상도 이미지는 수많은 픽셀로 이루어져 있습니다. 각 픽셀을 FCNN의 입력 노드로 사용하고 모든 노드를 연결하면, 학습해야 할 가중치(파라미터)의 수가 기하급수적으로 늘어납니다. 이는 엄청난 계산 비용과 과적합(Overfitting)의 위험을 초래합니다.

CNN은 이러한 문제들을 해결하기 위해 인간의 시각 처리 방식을 모방한 독창적인 구조를 사용합니다.

영감의 시작: 인간의 시각 처리 방식

CNN의 핵심 아이디어는 인간이 세상을 보는 방식에서 영감을 얻었습니다. 1950~60년대 Hubel과 Wiesel의 연구는 시각 피질의 뉴런들이 전체 시야가 아닌, 특정 지역적 영역(Local Receptive Field)에만 반응한다는 것을 밝혔습니다. 즉, 작은 영역의 시각 정보를 처리하는 뉴런들이 모여 전체 이미지를 인식한다는 것입니다. 또한, 이 뉴런들은 서로 겹치는 영역을 담당하며 계층적으로 작동하여 단순한 선에서 복잡한 형태까지 인식합니다.

CNN은 이러한 '지역적 특징 인식'과 '계층적 구조'를 수학적으로 구현한 것입니다.

CNN의 핵심 구성 요소

CNN은 주로 다음 세 가지 핵심 레이어(층)들을 조합하여 구성됩니다.

1. 합성곱 층 (Convolutional Layer)

CNN의 심장과 같은 부분입니다. 합성곱 층은 이미지의 공간적 구조를 유지하면서 특징(Feature)을 추출하는 역할을 합니다.

  • 필터 (Filter / Kernel): 작은 크기의 행렬로, 이미지의 특정 패턴(예: 수직선, 수평선, 특정 색상 조합 등)을 감지하는 역할을 합니다. 이 필터의 값들이 바로 학습되는 가중치입니다.

  • 합성곱 (Convolution) 연산: 필터가 이미지 위를 일정한 간격(Stride)으로 이동하면서, 필터와 겹치는 이미지 영역의 각 픽셀 값과 필터 값을 곱한 후 모두 더하는 연산입니다. (엄밀히는 Cross-correlation 연산이지만, 딥러닝에서는 편의상 Convolution이라 부릅니다.)

입력 이미지에 샤프닝 필터를 적용해 가장자리 정보를 강조하는 컨볼루션 연산의 예를 보여줍니다.
컨볼루션 연산 예시 (샤프닝 필터, Source)
  • 특성 맵 (Feature Map / Activation Map): 필터가 이미지 전체를 훑고 지나가며 계산된 결과들을 모아놓은 행렬입니다. 이는 원본 이미지에서 필터가 감지한 특정 패턴이 어디에 얼마나 강하게 나타나는지를 보여주는 '지도'와 같습니다. 아래 그림은 실제 이미지에 CNN 필터를 적용했을 때 나타나는 특성 맵(활성화 맵)의 예시입니다. 네트워크가 이미지의 어떤 부분에 주목하고 어떤 특징을 추출하는지 시각적으로 보여줍니다.

실제 이미지가 CNN에 입력될 때 각 계층에서 추출되는 특징 맵이 어떻게 시각화되는지 보여주며, 필터들이 이미지의 다양한 부분에 반응하는 과정을 나타냅니다.
CNN 피처 맵 시각화(source)

합성곱 층 주요 특징 및 파라미터

  • 지역적 연결 (Local Connectivity): 필터는 이미지의 일부 영역에만 적용되므로, 출력 뉴런은 입력 이미지의 특정 지역과만 연결됩니다. 이는 FCNN과 달리 전체 픽셀을 한 번에 보지 않아 계산 효율성을 높입니다.
  • 파라미터 공유 (Parameter Sharing): 하나의 필터(동일한 가중치 세트)가 이미지 전체 영역을 이동하며 동일하게 적용됩니다. 이는 학습할 파라미터 수를 획기적으로 줄여주고, 이미지 내에서 특징의 위치가 변하더라도 동일하게 감지할 수 있게 합니다(Translation Invariance).
  • 스트라이드 (Stride): 필터가 한 번에 이동하는 칸 수를 의미합니다. 스트라이드가 크면 특성 맵의 크기는 작아집니다.
  • 패딩 (Padding): 이미지 가장자리의 정보 손실을 줄이고, 합성곱 연산 후 특성 맵의 크기를 조절하기 위해 이미지 주변에 특정 값(주로 0)을 채우는 것을 의미합니다. 'Same' 패딩은 출력 크기를 입력 크기와 유사하게 유지하고, 'Valid' 패딩은 패딩을 사용하지 않아 출력 크기가 줄어듭니다.
  • 입력 채널과 필터 깊이: 컬러 이미지(RGB)는 3개의 채널(깊이)을 가집니다. 이때 합성곱 필터도 동일한 깊이(3)를 가져야 하며, 각 채널별로 연산한 결과를 합산하여 최종 특성 맵의 한 지점 값을 계산합니다.
  • 다중 필터: 하나의 합성곱 층에는 여러 개의 필터를 사용할 수 있습니다. 각 필터는 다른 종류의 특징을 추출하며, 사용된 필터의 개수만큼 특성 맵(출력 채널)이 생성됩니다.

2. 풀링 층 (Pooling Layer)

풀링 층(Subsampling Layer라고도 함)은 추출된 특성 맵의 크기를 줄여 계산량을 감소시키고, 주요 특징만 남겨 약간의 위치 변화에도 모델이 덜 민감하게 만드는 역할을 합니다.

  • 작동 방식: 특성 맵을 일정 구역으로 나눈 뒤, 각 구역에서 특정 값 하나를 선택하여 크기를 줄입니다. 합성곱 층과 마찬가지로 필터처럼 영역을 이동하며(Stride 존재), 보통 겹치지 않게 이동합니다.
  • 종류:
    • 최대 풀링 (Max Pooling): 각 구역에서 가장 큰 값을 선택합니다. 가장 두드러진 특징을 보존하는 경향이 있어 널리 사용됩니다.

2x2 필터와 스트라이드 2를 사용해 입력 피처 맵에서 최대값만 추출해 크기를 줄이는 맥스 풀링 과정을 시각적으로 설명합니다.
맥스 풀링(Max Pooling) 연산[source]
    • 평균 풀링 (Average Pooling): 각 구역의 값들의 평균을 선택합니다. 모든 특징을 고려하지만, Max Pooling보다 성능이 떨어지는 경우가 많습니다.

    • 풀링 층은 학습되는 파라미터가 없다는 특징이 있습니다.


      3. 완전 연결 층 (Fully Connected Layer) & Flattening

      여러 번의 합성곱과 풀링 과정을 거쳐 이미지의 주요 특징들이 추출되면, 이 특징들을 바탕으로 최종적인 분류(예: '고양이'인지 '개'인지)를 수행해야 합니다.

      • Flattening: 여러 개의 2D 특성 맵들을 1차원 벡터로 길게 펼치는 과정입니다.

      • 완전 연결 층 (Fully Connected Layer): 다음 그림처럼, 여러 개의 2D 특성 맵들은 Flattening 과정을 통해 1차원 벡터로 펼쳐진 후, 완전 연결 층으로 전달되어 최종 분류를 수행합니다.

      2차원 피처 맵을 1차원 벡터로 평탄화한 후, 여러 개의 완전 연결층을 거쳐 최종 출력을 생성하는 과정을 설명합니다.
      CNN의 평탄화(Flattening) 및 완전 연결 계층[source]

      CNN의 전체 구조 (예시)

      일반적인 CNN 구조는 아래 그림과 같이 특징 추출(Feature Extraction) 단계와 분류(Classification) 단계로 나눌 수 있습니다. 특징 추출 단계에서는 주로 합성곱 층과 풀링 층을 반복적으로 사용하여 이미지의 의미 있는 특징들을 학습하고, 분류 단계에서는 완전 연결 층을 통해 추출된 특징들을 바탕으로 최종적인 판단(예: 클래스 분류)을 내립니다.

      입력 이미지가 컨볼루션과 풀링 계층을 거쳐 특징을 추출한 뒤, 완전 연결 계층에서 분류가 이루어지는 CNN의 전반적인 구조를 보여줍니다.
      CNN 구조 다이어그램(source)

      Input Image → [Conv → Activation(ReLU) → Pool] → [Conv → Activation(ReLU) → Pool] → ... → Flatten → Fully Connected → Output

      • 합성곱 층 다음에는 보통 ReLU와 같은 활성화 함수(Activation Function)를 적용하여 비선형성을 추가합니다.
      • [Conv → Activation → Pool] 블록을 여러 겹 쌓으면서, 초기 층에서는 이미지의 저수준 특징(선, 모서리 등)을, 후반 층으로 갈수록 고수준의 복잡한 특징(눈, 코, 귀 등 객체의 부분)을 학습하게 됩니다.

      마무리하며

      CNN은 이미지 데이터의 공간적 특성을 효과적으로 학습하고 파라미터 효율성을 높여 컴퓨터 비전 분야에 혁명을 가져왔습니다. 합성곱 층을 통해 지역적 특징을 추출하고, 풀링 층으로 데이터 크기를 줄이며 강건함(Robustness)을 확보하고, 마지막으로 완전 연결 층에서 분류를 수행하는 이 일련의 과정은 매우 강력한 패턴 인식 능력을 보여줍니다.

      LeNet-5, AlexNet, VGG, ResNet 등 다양한 CNN 아키텍처들이 개발되면서 성능은 계속 발전해왔습니다. CNN의 기본 원리를 이해하는 것은 이미지 기반 딥러닝을 공부하는 데 있어 가장 중요한 첫걸음이 될 것입니다.