딥러닝/혁펜하임의 Easy! 딥러닝

[Chapter 7] 왜 CNN이 이미지 데이터에 많이 쓰일까?

꾸준함. 2025. 2. 7. 22:46

1. CNN은 어떻게 인간의 사고방식을 흉내 냈을까?

  • CNN (Convolutional Neural Network)은 인간의 시각 처리 방식에서 영감을 받은 딥러닝 모델이며 핵심은 컨볼루션 (Convolution) 연산에 있음
  • 기존의 Fully-Connected 레이어는 모든 입력 노드를 모든 출력 노드에 연결하는 반면 CNN의 컨볼루션 레이어는 입력의 일부분만을 보는 `국소적 연결`을 사용
    • 이는 마치 신경 다발을 잘 끊어놓은 것과 같음
    • 컨볼루션 레이어도 FC 레이어와 마찬가지로 weight를 곱하고 bias를 더한 후 activation을 통과하는 기본 과정은 동일하지만 전체가 아닌 일부분만을 연결한다는 점이 가장 큰 차이점
    • 이러한 국소적 연결 구조가 CNN의 독특한 특성을 만들어냄

 

  • 아래 연구 결과들은 시각 정보 처리가 전체적으로 이루어지는 것이 아니라 부분적인 정보들을 조합하여 이루어질 수 있음을 시사하며 CNN은 이런 인간의 시각 처리 방식을 모방
    • 대표적인 연구로 1959년부터 1960년대 초반에 걸쳐 진행된 Hubel과 Wiesel의 고양이 시각 피질 연구는 두 가지 중요한 사실을 밝혀냄
      • 첫째, 특정 뉴런들이 시야의 특정 부분에만 반응한다는 것 (예: 어떤 뉴런은 시야의 왼쪽 상단에서 오는 자극에만 반응하고, 다른 뉴런은 중앙 부근의 자극에만 반응하는 식)
      • 둘째, 뉴런들이 특정 모양이나 방향의 자극에 선택적으로 반응한다는 것 (예: 어떤 뉴런은 수직선에만 반응하고, 다른 뉴런은 수평선에만 반응하며, 또 다른 뉴런들은 특정 각도의 선 또는 원형 같은 특정 형태에만 반
    • 이후의 연구들은 더 복잡한 형태나 패턴에 반응하는 뉴런들도 발견했으며 해당 발견들은 뇌가 복잡한 이미지를 다양한 기본 요소들로 분해하여 처리한다는 것을 시사
    • 이후 인간을 대상으로 한 연구들에서도 유사한 결과가 확인되었음
      • ex) fMRI를 이용한 연구들은 인간의 시각 피질에서도 특정 영역이 특정 시각 자극에 선택적으로 반응한다는 것을 보여주었음
      • 어떤 영역은 얼굴 인식에 특화되어 있고 또 다른 영역은 글자 인식에 특화되어 있다는 식

 

  • CNN의 또 다른 특징은 `위치별 특징 추출`
    • 눈, 코, 입과 같은 이미지 내의 요소들의 위치 정보를 유지하면서 특정 패턴을 찾아내는 능력을 의미
    • 이 기능은 이미지의 구조적 특성을 파악하는 데 핵심적인 역할을 수행하며 이는 효과적인 이미지 인식의 기반이 됨

 

정리하면 컨볼루션 연산은 `위치별 패턴 찾기`를 수행하며 따라서 CNN을 사용한다는 것은 AI에게 `이미지의 픽셀들을 무작위로 존재하는 것이 아니라, 의미 있는 패턴을 이루고 있다`는 중요한 사전 정보를 제공하는 것과 같으며 이러한 패턴들을 결합하여 CNN은 복잡한 이미지 패턴을 효과적으로 학습하고 인식할 수 있게 되는 것입니다.

 

2. 이미지 인식에서 FC 레이어가 가지는 문제

  • 이미지가 수많은 픽셀로 구성되어 있을 때 이미지를 곧바로 Fully-Connected 레이어에 통과시킬 경우 모델은 각 픽셀을 지나치게 세세하게 분석하게 됨
    • 이는 마치 강아지 사진의 모든 픽셀을 하나하나 들여다보고 강아지라고 인식하려는 것과 같은 효과
    • 이 방식은 픽셀들 사이의 공간적 관계나 전체적인 패턴을 직접적으로 고려하지 않고 대신, 모든 픽셀의 값이 동등하게 중요하다고 가정하고 이들의 복잡한 조합을 통해 `강아지다움`을 판단하려고 함
    • 즉, 이는 픽셀들의 배열이 만드는 전체적인 패턴이나 구조를 직접적으로 인식하는 것이 아니라 개별 픽셀값에 과도한 의미를 부여하는 방식
    • 사람이 강아지 사진을 인식할 때는 픽셀값을 하나하나 보지 않고 전체적인 모습을 통해 판단하는 반면 해당 방식은 모든 픽셀을 동등하게 취급하기 때문에 오히려 세부 사항에 지나치게 집중하여 `나무만 보고 숲을 보지 못하는` 문제 발생

 

  • 주목할만한 점은, 학습 및 테스트 데이터의 모든 이미지에 대해 동일한 규칙으로 픽셀의 위치를 섞은 후 FC 레이어를 학습시키더라도, 그 성능은 원본 이미지로 학습한 경우와 거의 차이가 없을 것이라는 점
    • FC 레이어에서는 모든 입력 픽셀이 모든 출력 노드와 연결되어 있어, 픽셀들 간의 상대적 위치 정보가 손실되기 때문
    • 결과적으로 FC 레이어가 이미지의 공간적 구조나 픽셀의 위치 정보를 효과적으로 활용하지 못한다는 것을 의미
    • 반면, 인간에게 픽셀이 섞인 이미지를 보여주고 강아지와 고양이를 구별하라고 하면 상당히 어려워할 것이며 이는 FC 레이어를 곧바로 이미지에 통과시키는 방식은 인간의 시각 처리 방식과 큰 차이가 있음을 보여줌
    • 따라서 FC 레이어가 아닌, 이미지의 구조적 특성을 고려할 수 있는 새로운 방식의 레이어가 필요함

 

정리하면 AI에게 픽셀들의 위치와 배치가 중요하다는 사전 정보를 제공하여 특징(예: 강아지의 눈, 코, 입)이 어디에 위치하는지를 인식할 수 있도록 유도해야 하며 이러한 접근을 가능하게 하는 것이 바로 컨볼루션 연산입니다.

 

https://www.nature.com/articles/s41598-023-30442-0

 

3. 컨볼루션의 동작 방식

아래 그림처럼 5*5 크기의 25개 픽셀로 이루어진 이미지가 컨볼루션 레이어에 입력된다고 가정해 봅시다.

  • FC 레이어와 달리 컨볼루션은 이미지의 일부분만 연결함
  • 이렇게 일부분만 연결하여 weight를 곱하고, bias를 더한 뒤 activation 함수를 통과시켜 하나의 노드를 생성
  • 다음으로 한 칸 오른쪽으로 이동하여 같은 동작을 수행하고 여기서 주목할 점은 weight와 bias를 재사용한다는 것 (좌상단에서 사용했던 9개의 wieght 값과 한 개의 bias 값을 그대로 유지)
  • 이는 동일한 파라미터 세트로 이미지 전체를 스캔하는 것과 같음
  • 이 과정을 오른쪽 끝까지 반복한 뒤 다시 처음 위치로 돌아가 아래로 한 칸 이동하여 같은 동작을 수행하고 이를 반복하여 이미지의 왼쪽부터 오른쪽 아래까지 전체를 빠짐없이 스캔함
  • 이렇게 전체를 스캔하는 이유는 이미지의 모든 부분에서 특정 패턴이나 특징을 추출하기 위해서임
  • ex) 강아지 사진을 분석할 때 눈이 항상 이미지의 상단에 위치하리란 법이 없으며 강아지가 누워있는 사진일 경우 눈이 임지의 하단에 위치할 수도 있음. 이미지 전체를 균일하게 스캔함으로써, 눈과 같은 중요한 특징이 어디에 있든 놓치지 않고 추측할 수 있음
  • 그리고 이렇게 가까이 밀집된 픽셀들만을 연결함으로써 위치 정보가 보존되며 (예: 왼쪽 위의 9 픽셀만을 연결해 만들어진 노드는 `좌상단을 담당하는 노드`) 각 노드가 특정 영역을 담당한다는 특별한 의미를 갖게 됨
  • FC 레이어도 이론적으로는 왼쪽 위 9 개의 픽셀에 대한 weight만 0이 아닌 값을 갖고 나머지는 0으로 학습된다면 `좌상단을 담당하는 노드`로 만들 수 있지만 실제로 FC 레이어가 이런 식으로 학습될 확률은 매우 낮음

 

https://medium.com/towards-data-science/intuitively-understanding-convolutions-for-deep-learning-1f6f42faee1

 

  • 동일한 weight 세트를 사용해 이미지 전체를 스캔하기 때문에, 해당 weight 세트가 특정 패턴을 찾아다니는 효과를 얻게 되어 마치 눈, 코, 귀와 같은 특정 특징을 찾아 이미지 전체를 탐색하는 것과 유사
    • 컨볼루션에 사용되는 이 weight 세트는 행렬로 표현할 수 있으며, 이를 커널 (Kernel) 혹은 필터 (Filter)라고 부름
    • 물론 컨볼루션 레이어에는 bias도 포함되어 있으며 wieght와 bias 모두 이미지를 스캔하는 동안 해당 값이 변하지 않고 재사용됨
    • 이를 통해 이미지 내 어느 위치에서든 동일한 특징을 일관되게 추출할 수 있음

 

3.1 컨볼루션은 어떻게 위치별 특징을 추출할까?

먼저, 컨볼루션 레이어에 통과시킬 간단한 이미지를 준비했으며 해당 이미지에 필터를 적용하여 컨볼루션을 수행해 보겠습니다.

  • 그림에서 `*` 기호는 컨볼루션 연산을 나타내며 필터는 3 * 3 크기의 커널로, 이미지의 3 * 3 영역만을 연결하며 필터 내의 숫자들은 각 위치의 weight를 나타냄
  • 컨볼루션 과정은 필터를 이미지의 좌상단부터 시작하여 한 칸씩 이동하면서 각 위치에서 필터와 이미지 영역을 곱하고 그 결과를 더하는 방식으로 진행됨
  • 이는 마치 필터가 `나와 비슷한 패턴을 가진 부분이 어디 있나?`라고 묻고 다니며 이미지 전체를 탐색하는 것과 같음
  • 이러한 컨볼루션 연산의 핵심인 곱하고 더하는 행위는 수학적으로 두 벡터 간의 내적과 동일
    • 3 * 3 필터는 9개의 숫자로 이루어진 9차원 벡터로 볼 수 있고, 이미지의 각 3 * 3 영역 또한 같은 방식으로 9차원 벡터로 표현 가능
    • 내적은 두 벡터의 유사성을 측정하는 방법 중 하나이므로, 필터가 이미지를 돌아다니며 수행하는 연산은 사실상 `이미지의 각 부분과 필터 사이의 유사도를 위치별로 측정하는 것`과 같음

 

https://medium.com/@alejandro.itoaramendia/convolutional-neural-networks-cnns-a-complete-guide-a803534a1930

 

위와 같은 과정을 통해 필터가 가진 특정 특징을 이미지에서 추출할 수 있습니다.

  • 이렇게 얻은 결과 이미지는 원본 이미지에 어떤 특징이 어디에, 얼마나 강하게 존재하는지를 보여줌
  • 위 Feature Map에서는 가운데에 해당 필터와 유사한 특징이 가장 강하게 존재한다는 것을 의미

 

컨볼루션은 사실 신호 처리 분야에서 필터의 출력을 계산하기 위한 연산으로 제안되었으며 이후 이미지 처리 분야에 도입되면서 이미지의 특징을 추출하거나 변형을 가하는 강력한 도구로 재해석되었습니다.

  • 컨볼루션의 결과는 사용된 필터의 특성에 따라 다양하게 해석될 수 있으며
  • 이러한 해석에 따라 컨볼루션은 이미지의 특정 패턴 강조, 노이즈 제거, 윤곽선 검출 등 다양한 이미지 처리 작업을 수행하는 데 활용됨

 

3.2 특징 맵 (Feature Map)

  • 앞서 살펴본 석처럼 컨볼루션 레이어는 하나의 이미지에서 다양한 특징을 추출할 수 있음
    • 가로 필터, 세로 필터 등 여러 종류의 필터를 사용하여 이미지의 다양한 특징을 포착
    • 이렇게 컨볼루션을 통해 얻은 결과를 Feature Map이라고 부르며 이는 말 그대로 이미지의 특정 특징을 나타내는 지도
    • ex) 세로 필터로는 세로 특징 맵을, 가로 필터로는 가로 특징 맵을, 대각선 필터로는 대각선 특징 맵을 얻을 수 있음

 

https://www.jeremyjordan.me/convolutional-neural-networks/

 

위 그림은 4개의 필터 및 bias를 적용하여 네 개의 특징 맵을 추출한 결과를 보여줍니다.

  • 이렇게 얻은 여러 특징 맵은 단순히 더하거나 옆으로 또는 세로로 쌓지 않고, 깊이 방향의 채널 축으로 쌓아 결과를 만듦
  • 이 방식은 위치 정보를 유지하고 각 채널이 추출한 특징 정보를 분리하여 보존함
  • 만약 특징 맵들을 더하거나 평면적으로 쌓는다면, 어떤 특징을 추출한 맵인지, 어디에 해당 특징이 있는지를 구분할 수 없게 됨

 

컨볼루션 레이어에서 학습 가능한 파라미터는 필터가 가지는 weight와 bias인 반면, 커널의 크기와 사용할 필터의 개수는 개발자가 직접 설정해야 하는 하이퍼파라미터입니다.

  • 이러한 구조를 통해 CNN은 이미지의 다양한 특징을 효과적으로 학습하고 추출할 수 있게 됨

 

3.3 어떤 특징을 추출할지 AI가 알아낸다!

  • CNN의 가장 놀라운 점은 이미지에 `어떤 특징을 추출해야 분류를 잘 수행할 수 있는지를 AI 스스로 학습`한다는 것
    • 각 필터의 weight 행렬이 어떤 형태여야 할지를 AI가 스스로 결정
    • ex) 강아지와 고양이를 분류하는 문제가 주어졌을 때 CNN을 사용한다면 사람이 직접 어떤 특징을 봐야 두 동물을 구별할 수 있을지 고민할 필요 없이, AI가 학습을 통해 중요한 특징들을 찾아냄

 

  • 이러한 해석이 가능한 이유는 컨볼루션 필터의 역할에 있음
    • 필터는 자신이 가진 패턴이 이미지 내 어디 있는지를 찾아다님
    • 필터가 가지는 weight가 학습 파라미터이기 때문에 어떤 패턴으로 스캔해야 할지, 즉 어떤 특징을 추출해야 할지를 학습을 통해 결정
    • CNN의 weight와 bias 역시 역전파를 통해 구한 그래디언트를 기반으로 하는 최적화 기법을 통해 Loss를 줄이는 방향으로 업데이트됨
    • 정리하면 학습의 기본 원리는 다른 신경망과 동일하지만, 컨볼루션이라는 연산을 사용함으로써 이러한 특별한 해석이 가능해짐

 

4. 다채널 입력에 대한 컨볼루션

다채널 입력에 대한 컨볼루션은 필터의 채널 수를 입력 이미지의 채널 수와 동일하게 맞춘다는 간단한 규칙만 기억하면 됩니다.

  • ex) RGB 이미지에 대해 컨불루션을 수행할 때는 필터의 채널 수도 3으로 맞춤
  • 커널 사이즈를 3 * 3로 가정할 경우 필터의 크기는 3 * 3 * 3
  • 컨볼루션 연산 자체는 기존과 동일하며 필터를 이미지의 좌상단에 위치시키고, 내적을 계산 후 bias를 더하고 활성화 함수를 통과시켜 하나의 값을 얻음
  • 이 과정을 통해 하나의 필터로 하나의 특징 맵을 만들어내며 다채널 입력의 경우 R, G, B 세 채널의 정보를 모두 활용하여 특징을 추출한다는 점이 단일 채널 입력과의 차이점

 

https://makeagif.com/gif/convolution-rgb-image-mT1rkl

 

단일 채널 컨볼루션과 동일하게 여러 개의 필터를 사용하여 여러 개의 특징 맵을 얻을 수 있으며 필터마다 다른 커널 사이즈를 사용할 수 있고, 정사각형뿐만 아니라 직사각형 형태도 가능하며 이는 하이퍼파라미터이므로 필요에 따라 조정할 수 있습니다.

  • 아래 이미지는 두 번째 필터도 3 * 3크기로 가정했으며 이렇게 첫 번째 컨볼루션 레이어를 통과하여 두 가지 특징을 추출할 수 있음
  • 이처럼 하나의 컨볼루션 레이어는 여러 개의 필터를 가져 여러 특징을 추출할 수 있으며 모든 필터의 채널 수는 입력 채널 수와 동일해야 함
  • 컨볼루션 레이어의 필터 Shape은 `필터 개수 * 채널 * 행 * 열`로 표현할 수 있으며 여기서는 2 * 3 * 3 * 3로 표기할 수 있고 이는 3 * 3 * 3 크기의 필터를 두 개 사용했다는 것을 의미
  • 채널은 입력의 채널 수에 의해 자동으로 결정되므로 실제로 설정 가능한 하이퍼파라미터는 필터 개수, 행, 그리고 열

 

https://www.researchgate.net/figure/Convolutions-on-RGB-image_fig2_352014077

 

4.1 Shape 계산 예제

아래 이미지를 토대로 입력 각 Layer에서의 입력층, 출력층 Shape을 계산해 보겠습니다.

  • 입력 이미지의 Shape: 3 * 30 * 30 (채널 * 행 * 열)
  • Convolution Layer 1의 커널 필터 Shape: 10 * 3 * 5 * 5 (필터 개수 * 채널 * 행 * 열)
  • Convolution Layer 1의 출력 Shape: 10 * 26 * 26 (채널 * 행 * 열)
    • 출력 폭(Width), 높이(Height):

 

  • Convolution Layer 2의 커널 필터 Shape: 5 * 10 * 3 * 3 (필터 개수 * 채널 * 행 * 열)
  • Convolution Layer 2의 출력 Shape: 5 * 24 * 24 (채널 * 행 * 열)
    • 출력 폭(Width), 높이(Height): 26 - 3

 

https://ai.stackexchange.com/questions/17004/does-each-filter-in-each-convolution-layer-create-a-new-image

 

5. 1 * 1 컨볼루션의 의미

컨볼루션 연산에서 커널 사이즈를 1 * 1로 줄이면 단 하나의 픽셀만 보는 것이므로 언뜻 보기에는 큰 의미가 없어 보이지만 이 작은 변화가 모델의 구조와 효율성에 지대한 영향을 미칩니다.

  • 일반적인 컨볼루션의 기능인 공간적 특징 추출과는 달리 `특징 맵 간의 가중합 (Weighted Sum)`이라는 새로운 관점으로 해석할 수 있음
  • 즉, 각 행 * 열 위치별로 여러 채널에서 들어온 값을 가중합 하여 새로운 출력 채널을 만드는 방식
  • 1 * 1 컨볼루션은 마치 요리사가 레시피를 조정하듯, 입력된 특징들 중 어떤 것은 많이 넣고, 어떤 것은 적게 넣어 새로운 특징 맵을 만들어내는 과정
  • ex) 입력이 (채널 수 C_in, 높이 H, 너비 W)라면 1 ×1 컨볼루션 필터의 형태는 (C_out × C_in × 1 × 1)
    • 여기서 C_out은 출력 채널 수를 의미
    • 결과적으로 (H×W) 위치마다 C_in개의 값들에 대한 가중합을 통해 C_out개의 새로운 채널을 얻게 됨

 

https://community.deeplearning.ai/t/difference-between-1-1-convolution-and-pointwise-convolution/149338

 

공간적 특징 추출과의 차이점

1×1 컨볼루션에서 필터 크기가 1 ×1이므로, ‘같은 위치’에 해당하는 픽셀만 보고 연산이 일어나며 주변 픽셀(좌우·상하)이 전혀 고려되지 않습니다.

  • 3 ×3, 5 ×5 등 크기가 큰 필터: 인접 픽셀들과의 상호작용을 감지하여 경계, 괴선, 텍스처 등을 추출
  • 1 ×1 필터: 채널끼리의 조합만을 고려

 

이 차이로 인해 1×1 컨볼루션은 주로 ‘채널 차원 축소(또는 확장)’ 및 ‘채널 재조합’에 사용되며, 흔히 공간 정보를 새롭게 “만들기”보다는 공간 위치는 그대로 두고 채널을 변화시키는 역할을 담당합니다.

 

이렇게 1 * 1 컨볼루션은 간단하면서도 강력한 도구로, 특징 맵들을 효과적으로 조합하고 변형하여 채널 수를 조절하는 데 사용됩니다.

이를 통해 모델은 더 복잡하고 추상적인 특징을 학습할 수 있게 되며, 동시에 모델의 복잡도와 연산량을 조절할 수 있어 결과적으로 성능 향상과 계산 효율성 개선에 기여합니다.

 

6. Padding & Stride

컨볼루션 레이어를 적용할 때 주로 사용되는 두 가지 중요한 옵션이 있습니다.

  • Padding
  • Stride

 

6.1 Padding

Convolution을 적용하기 전, 입력 이미지(또는 특성 맵)의 테두리 주변에 인위적으로 픽셀 값을 추가하여 크기를 확장해 주는 과정을 패딩(Padding) 이라고 합니다.

보통 0 값을 채우는 경우가 많아 `Zero Padding`이라고도 부르지만, 경우에 따라서는 후술 할 더 복잡한 값을 채우기도 합니다.

패딩은 다음과 같은 두 가지 중요한 목적을 가지고 있습니다:

  • 이미지 크기 유지: 패딩을 하지 않으면 컨볼루션으로 인해 매번 출력 맵의 가로 * 세로 크기가 줄어들 수 있습니다.
    • ex) 3 ×3 필터를 적용할 때 테두리 부분을 계산할 수 없어 결과적으로 출력이 작아지며 이를 방지하기 위해 테두리를 적절히 메워(예: 폭·높이에 각각 1픽셀씩 추가) 컨볼루션 연산 후에도 입력과 같은 크기를 유지하도록 하는 것

 

  • 테두리 정보 보존: 이미지(또는 중간 특성 맵)의 가장자리 정보를 손실 없이 반영하기 위해서도 패딩이 필요하며 만약 패딩이 없다면, 테두리 부분은 내부 픽셀보다 상대적으로 적은 횟수로 필터에 의해 연산되므로 테두리에서 나타나는 특징을 놓칠 가능성이 있음
  1.  

 

Zero Padding 외 다른 Padding 방법은 다음과 같습니다.

  • Constant Padding: 0 또는 1 등 지정된 상숫값으로 Padding (Zero-Padding은 이의 특별한 케이스) 
  • Replicate Padding: 이미지의 가장자리 픽셀을 복제하여 Padding
  • Reflect Padding: 이미지의 경계를 거울처럼 반사시켜 Padding

 

정리하면 Padding은 이미지의 가장자리 정보가 컨볼루션 과정에서 충분히 고려되도록 가장자리에 0을 추가하며 동시에 추가된 0 값은 원본 데이터에 최소한의 영향을 주면서 이미지의 크기를 유지할 수 있게 합니다. (Zero Padding의 경우)

결과적으로 이미지의 모든 부분이 분석에 균형 있게 기여할 수 있게 되어 특징 추출의 품질이 향상되고 이는 전반적인 모델의 성능 개선으로 이어집니다.

이러한 장점 때문에 Padding, 특히 Zero-Padding은 CNN 설계에서 널리 사용되는 중요한 기법입니다.

 

6.2 Stride

Stride는 Convolution을 수행할 때, 필터를 얼마나 ‘건너뛰면서’ 이동할지를 의미합니다.

  • 한 번의 연산 후 다음 연산 위치로 이동하는 간격을 나타낸다고 볼 수 있음
  • 일반적으로 딥러닝 라이브러리에서 스트라이드 값을 1로 설정하면 필터가 매 픽셀마다 한 칸씩 옆으로(또는 아래로) 이동
  • 만약 스트라이드를 2로 설정하면 필터가 두 칸씩 건너뛰면서 적용

 

Stride를 키우는 주된 이유는 다음과 같습니다.

  • 특징 추출의 효율성: 큰 Stride를 사용할 경우 이미지를 더 넓은 간격으로 살펴보게 되어 세세한 특징보다는 전반적인 특징을 추출하는 데 도움이 됨
  • 계산량 감소: Stride를 늘리면 출력 크기가 줄어들어 연산량이 감소하고 이는 모델의 학습과 추론 속도를 향상함

 

그러나 너무 큰 Stride는 중요한 정보의 손실을 초래하여 모델의 성능을 저하시킬 수 있으므로 Stride는 모델의 성능과 계산 효율성 사이의 균형을 고려하여 적절히 설정해야 합니다.

 

Padding과 Stride를 적절히 조합하여 사용할 경우 네트워크의 성능과 효율성을 크게 향상할 수 있으며 이 두 요소는 CNN 설계에서 중요한 하이퍼파라미터로 작용합니다.

 

https://studentsxstudents.com/training-a-convolutional-neural-network-cnn-on-cifar-10-dataset-cde439b67bf3

 

7. Pooling 레이어

Pooling 레이어는 입력 데이터의 공간적 크기를 줄이면서 중요한 특징을 보존하는 역할을 수행합니다.

  • CNN을 구성할 때 컨볼루션 레이어와 함께 자주 사용되는 레이어
  • 해당 레이어의 특징은 학습 가능한 파라미터가 없다는 점

 

Pooling의 주요 기법으로는 Max Pooling과 Average Pooling이 있습니다.

  • Max Pooling: 지정된 영역에서 최댓값을 선택
  • Average Pooling: 평균을 구하여 해당 영역을 대표하는 값으로 사용

 

이러한 Pooling 작업은 각 특징 맵 (채널)에 독립적으로 적용되므로, 채널의 수는 변하지 않습니다.

 

https://pub.towardsai.net/introduction-to-pooling-layers-in-cnn-dafe61eabe34

 

Pooling 레이어는 다음의 중요한 이점을 제공합니다.

  • 데이터 압축: 공간적 크기를 줄여 정보를 압축하고 중요한 특징 보존
  • 계산 효율성 향상: 데이터 크기 감소로 후속 레이어의 연산량과 메모리 사용을 줄임
  • Overfitting 위험 감소: 모델의 복잡도를 낮춰 일반화 능력 향상함
  • 특징의 불변성 증가: 입력의 작은 변화나 위치 변동에 덜 민감해짐

 

특별한 경우로, Pooling의 커널 크기를 입력 이미지의 전체 크기와 동일하게 설정할 경우 Global Pooling이라고 하며 특히 GAP (Global Average Pooling)이 자주 사용됩니다.

  • GAP은 각 특징 맵의 모든 값들의 평균을 게산하여, 특징 맵 하나를 하나의 값으로 압축하며 이는 주로 모델의 마지막 부분에서 특징을 효과적으로 요약하는 역할
  • GAP의 주요 장점은 입력 이미지의 크기에 대한 유연성을 제공한다는 점
    • GAP는 주로 CNN의 마지막 부분에서 다중 분류를 위한 Fully-Connected 레이어 직전에 사용됨
    • GAP을 사용하지 않으면 입력 이미지의 크기가 변경될 때마다 FC 레이어의 구조를 수정해야 하는 제약이 생김
    • 반면, GAP는 각 특징 맵을 하나의 값으로 압축하여 FC 레이어에 전달하므로 입력 이미지의 크기에 관계없이 항상 고정된 크기의 출력을 FC 레이어에 제공 가능
    • 이에 따라 CNN은 다양한 크기의 입력 이미지를 유연하게 처리할 수 있게 되며, 이는 실제 응용에서 크기가 다양한 이미지를 다룰 때 특히 유용함
    • 또한, GAP은 모델의 파라미터 수를 크게 줄여 모델의 복잡도를 낮추고 Overfitting 위험을 줄이는데 기여함

 

https://www.researchgate.net/figure/Difference-between-fully-connected-layer-and-global-average-pooling-layer_fig2_339096868

 

8. CNN의 전체 구조: 특징 추출부터 분류까지

컨볼루션과 Pooling을 반복하면 특징 맵의 크기는 점점 작아지는 반면 깊이는 점점 깊어지며 이는 각 픽셀이 점점 더 넓은 범위의 정보를 표현하게 되며, 동시에 더 많은 종류의 특징을 포착하게 된다는 것을 의미합니다.

  • 추출할 특징의 수는 하이퍼파라미터이기 때문에 설정하기 나름이지만 일반적으로 컨볼루션 레이어들을 거치면서 점점 더 많은 특징을 추출하도록 구성함
  • 아래 컨볼루션 레이어에서는 5개의 특징 맵을 생성 했으며 가로와 세로 길이를 약 2배씩 축소된 것을 확인할 수 있음

 

https://kvirajdatt.medium.com/calculating-output-dimensions-in-a-cnn-for-convolution-and-pooling-layers-with-keras-682960c73870

 

이러한 과정을 거치면서 CNN은 크기는 작지만 다양한 특징을 포착한 여러 개의 특징 맵을 생성 하며 각 특징 맵은 서로 다른 특징을 담당합니다.

이처럼 컨볼루션과 Pooling 레이어를 통해 이미지의 복잡한 정보를 점진적으로 추상화하고 압축할 수 있으며 이 고자어은 `나무를 보는 것으로 시작해 숲을 보는` 능력을 AI에게 부여합니다.

  • 초기 층에서는 선이나 모서리 같은 저수준 특징 (나무)을 추출하고, 더 깊은 층에서는 이를 조합하여 눈, 코, 귀와 같은 의미 있는 고수준 특징 (숲)을 추출할 수 있게 됨

 

컨볼루션과 Pooling 레이어를 통해 이미지의 복잡한 정보를 점진적으로 추상화하고 압축할 수 있는 것은 알았는데 이렇게 계층적으로 추출된 특징들을 어떻게 최종적으로 분류에 활용할 수 있을까?

  • 이미지의 모든 픽셀에 대해 직접 FC 레이어를 적용하면, 각 픽셀 단위로 과도한 가중치가 부여될 수 있고 이미지의 공간적 구조를 제대로 반영하기 어려움
  • 이를 보완하기 위해 CNN 구조에서는 먼저 Convolution과 Pooling 계층을 통해 이미지의 복잡한 정보를 점진적으로 추상화하고 압축하며 이 과정에서 저수준 (에지, 코너 등)부터 고수준 (형태, 패턴)의 특징들이 상위 계층으로 갈수록 차근차근 정제됨
  • 이렇게 추상화된 ‘고수준’ 특징 맵들은 개별 픽셀 차원에서 나오는 잡음을 어느 정도 걸러낸 상태이므로, 이제는 모든 위치의 모든 특징 요소를 종합해 판단해야 하며 이를 위해 마지막에 사용하는 것이 바로 MLP (또는 FC 레이어)

 

https://larbifarihi.medium.com/classifying-cats-and-dogs-using-convolutional-neural-networks-cnns-ce6bc7bad64d

 

정리하면 CNN의 전체 구조는 다음과 같이 작동합니다.

  • 컨볼루션과 Pooling 레이어: 이미지의 공간적 구조를 보존하면서 점진적으로 추상화된 특징을 학습함
  • MLP: 충분히 정제된 정보들을 종합적으로 분석하여 최종 분류를 수행함

 

이러한 구조는 단순히 FC 레이어만을 처음부터 사용하는 것보다 훨씬 효율적이고 정확한 이미지 분류를 가능하게 합니다.

 

9. VGGNet 완벽 해부

VGGNet은 Oxford 대학교의 Visual Geometry Group에서 개발한 모델로, 2014년 ImageNet 챌린지에서 2위를 차지했습니다.

  • ImageNet 챌린지는 약 128만 개의 훈련 이미지, 5만 개의 검증 이미지, 10만 개의 테스트 이미지를 사용하여 1,000개의 클래스로 사진을 분류하는 대회이며 해당 데이터셋은 다양한 객체, 동물, 풍경 등을 포함하고 있어 컴퓨터 비전 분야에서 중요한 벤치마크로 활용됨
  • 2012년 AlexNet을 시작으로 딥러닝 모델들이 대회에 참가하기 시작했고, 2015년부터는 딥러닝 모델들이 인간의 분류 성능을 뛰어넘는 결과를 보여주고 있음

 

VGGNet은 여러 버전이 제안되었는데 아래 그림이 나타내는 모델은 `D` 버전입니다.

  • 이 모델의 모든 컨볼루션 레이어는 Padding = 1, Stride = (1, 1)을 사용
  • Max Pooling은 2 * 2 크기로 Stride = (2, 2)를 사용하여 통과할 때마다 이미지의 크기를 가로, 세로 각각 절반으로 줄임

 

 

https://wikidocs.net/164796

 

9.1 `D` 모델 분석

  • 입력: 224 * 224 크기의 RGB 이미지 (Shape: 3 * 224 * 224)
  • 첫 번째 컨볼루션 블록
    • `conv3-64`: 커널 크기 3 * 3인 컨볼루션, 64개 필터 사용 (Shape: 64 * 3 * 3 * 3)
    • 결과 Shape: 64 * 224 * 224
    • 한번 더 `conv3-64` 통과 (필터 Shape: 64 * 64 * 3 * 3)
    • 결과 Shape: 64 * 224 * 224
    • Max Pooling으로 크기 축소
    • 결과 Shape: 64 * 112 * 112 (채널 수 유지)

 

  • 두 번째 컨볼루션 블록
    • `conv3-128`: 128개 필터 (Shape: 128 * 64 * 3 * 3)
    • 결과 Shape: 128 * 112 * 112
    • 다시 `conv3-128` 통과 (필터 Shape: 128 * 128 * 3 * 3)
    • 결과 Shape: 128 * 112 * 112
    • Max Pooling으로 크기 축ㄱ소
    • 결과 Shape: 128 * 56 * 56 (채널 수 유지)

 

  • 이러한 패턴이 계속 반복되며, 세 번째 블록부터는 연속 3개의 컨볼루션 레이어를 사용
    • 블록을 거치며 필터의 수는 두 배씩 증가하는 것을 확인 가능
    • 64 -> 128 -> 256 -> 512

 

  • 마지막 컨볼루션 블록을 통과한 후에는 512 * 7 * 7 크기의 특징 맵을 얻음
    • 이는 224 * 224 크기의 입력 이미지가 5번의 Max Pooling을 거쳐 각 차원이 2^5으로 나눠진 결과

 

 

  • 컨볼루션 블록들을 모두 통과한 뒤 모델은 MLP를 사용하여 최종 분류를 수행하며 과정은 다음과 같음
    • Flatten: 512 * 7 * 7 크기의 특징 맵을 25,088개의 1차원 벡터로 변환 (3차원 데이터를 1차원으로 Flatten)
    • MLP
      • FC-4096: 25,088개 노드를 4,096개 노드로 연결
      • 다시 FC-4096: 4,096개 노드 유지
      • FC-1000: 최종적으로 1,000개 노드로 축소 (ImageNet의 1,000개 클래스에 대응)
    • Softmax와 Cross-Entropy Loss: 마지막 1,000개 노드에 Softmax를 적용하고 Cross-Entropy Loss 계산

 

  • 역전파와 최적화: 계산된 Loss를 바탕으로 역전파를 수행하여 그래디언트를 구하고, Adam과 같은 최적화 알고리즘을 사용하여 전체 네트워크의 파라미터 업데이트

 

9.2 VGGNet의 한계

VGGNet은 초기 CNN 모델로서 몇 가지 한계점을 가지고 있습니다.

  • 파라미터 분포의 불균형: `E` 모델인 VGG-19 모델은 총 1억 4천만개 가량의 파라미터를 가지고 있는데, 이 중 약 1억 2천만 개가 MLP에 집중되어 있으며 이는 특징 추출 (컨볼루션 레이어)보다 분류 (MLP)에 과도하게 치중된 구조
  • Overfitting 위험: 많은 파라미터가 MLP에 집중되어 있어 Overfitting의 위험이 높으며 이는 모델이 훈련 데이터에 과도하게 맞춰져 새로운 데이터에 대한 일반화 능력이 떨어질 수 있음을 의미
  • 계산 비용: 깊은 구조와 많은 파라미터로 인해 학습과 추론에 많은 계산 자원이 필요

 

그럼에도 불구하고 VGGNet의 단순하고 규칙적인 구조는 큰 장점이 되어, 후속 연구에 많은 영향을 미쳤습니다.

특히 ResNet은 VGGNet의 기본 구조를 기반으로 삼고, 여기에 Skip-Connection이라는 혁신적인 요소를 추가해 더 깊은 네트워크의 학습을 가능하게 했습니다.

이는 VGGNet의 단순한 구조가 있었기에 가능한 발전이었으며, 이후 많은 CNN 모델들이 이러한 접근 방식을 채택하게 되었습니다.

 

9.3 Receptive Field 개념과 여러 번 컨볼루션 레이어를 통과하는 이유

VGGNet의 특징 중 하나는 동일한 크기의 컨볼루션 레이어를 여러 번 거친 후 Max Pooling 을 통과하는 구조인데 이러한 구조가 가져오는 효과를 이해하기 위해서는 Receptive Field 개념을 알아야 합니다.

  • Receptive Field란 출력 레이어의 한 픽셀이 입력 이미지의 어느 정도 영역을 참조하는지를 나타내며 이는 하나의 결과 픽셀을 만들기 위해 입력 이미지의 얼마만큼의 영역이 관여하는지를 의미
  • ex) 3 * 3 크기의 컨볼루션 필터는 상대적으로 작은 영역만을 볼 수 있어 224 * 224 크기의 원본 이미지에서 머리나 다리와 같은 큰 패턴을 한 번의 3 * 3 컨볼루션으로 찾아내기는 어렵지만 3 * 3 컨볼루션을 여러 번 거치면 Receptive Field를 점진적으로 넓혀 이러한 문제를 해결할 수 있음

 

https://www.genspark.ai/

 

이처럼 3 * 3 컨볼루션을 반복적으로 적용함으로써, 네트워크는 점진적으로 더 넓은 영역의 정보를 처리할 수 있으며 이는 작은 필터를 사용하면서도 큰 패턴을 효과적으로 인식할 수 있게 해주는 VGGNet의 핵심 아이디어 중 하나입니다.

 

얼핏 보기에는 컨볼루션 레이어를 여러 번 사용하는 것이 비효율적으로 보여 다음과 같은 질문을 할 수 있습니다.

5 * 5 컨볼루션을 사용하면 단일 레이어로도 동일한 5 * 5 Receptive Field를 얻을 수 있는데, 왜 굳이 3 * 3 컨볼루션을 두 번 통과시켜 같은 결과를 얻으려 할까?

이 질문에 답하기 위해 두 접근 방식을 비교해 보면, VGGNet 설계의 몇 가지 중요한 이점을 발견할 수 있습니다.

  • 파라미터 효율성: 3 * 3 컨볼루션을 두 번 사용하면 총 18개 (3 * 3 * 2)의 파라미터가 필요한 반면, 5 * 5 컨볼루션은 25개의 파라미터가 필요
  • 비선형성 증가: 3 * 3 컨볼루션을 두 번 사용하면 두 번의 Activation 함수를 통과하게 되는 반면 5 * 5 컨볼루션은 한 번의 활성화 함수를 통과함, 활성화 함수를 더 많이 통과할수록 모델의 비선형성이 증가하여, 더 복잡한 패턴을 학습할 수 있는 능력이 향상됨
  • 영역별 집중도 차이: 컨볼루션의 `집중도`를 시각화하면 그 차이를 더 명확히 이해할 수 있으며 여기서 `집중도`란 특정 픽셀값을 계산할 때 주변 픽셀들의 영향력을 나타내는 개념

 

결론적으로 이러한 접근 방식은 CNN이 `선택과 집중`을 효과적으로 수행할 수 있게 합니다.

  • 여러 번의 Convolution으로 마치 누적된 확장을 얻어 전체 패턴(예: 오브젝트의 윤곽, 전체적인 모양)도 파악할 수 있게 됨
  • 담당하는 위치를 가장 집중해서 보면서도 주변 정보를 고려할 수 있게 되어 작은 필터를 연이어 사용하면 세부 특징을 놓치지 않고 학습하기 좋아짐
  • 이러한 특성 덕분에 VGGNet 등은 깊은 구조 속에서도 비선형성을 충분히 확보하고, 파라미터 수를 낭비하지 않으면서 높은 성능을 발휘할 수 있음

 

10. CNN에 대한 추가적인 고찰

CNN의 구조와 작동 원리를 더 깊이 이해하기 위해 몇 가지 중요한 점들을 추가로 살펴보겠습니다.

 

먼저, CNN의 마지막 단계에서 MLP를 사용하는 이유를 복습하자면 다음과 같습니다.

  • CNN은 초기 단계에서는 서로 멀리 떨어진 픽셀들을 직접 연결하지 않고 인접한 픽셀 간의 연결을 통해 지역적인 특징을 추출
  • 하지만 이미지를 최종적으로 판단할 때는 각 영역의 특징을 종합적으로 고려해야 하므로 CNN을 통해 정제된 지역적 특징들을 얻은 후, 이를 바탕으로 이미지 전체를 판단하는 과정이 필요
  • 이 때문에 모든 영역에서 추출된 특징을 종합적으로 고려할 수 있는 MLP가 CNN의 마지막 부분에 사용되는 것
  • 앞서 살펴본 VGGNet을 예로 들자면 512 * 7 * 7 크기의 마지막 특징 맵에서 각 픽셀의 Receptive Field는 224 * 224 전체 이미지를 완전히 포함하지 못합니다.
    • 양 끝에 있는 두 픽셀을 이미지의 일부 영역만을 담고 있음
    • 따라서 이미지 전체 정보를 활용하기 위해 이 두 영역의 정보를 모두 사용하는 MLP를 연결하는 것

 

VGGNet은 Max Pooling을 다섯 번만 수행하는데 그 이유는 Pooling을 너무 많이 할 경우 공간 정보를 과도하게 잃게 되어 특징이 `어디에 얼마나 있는지`에 대한 정보에서 `어디에`라는 부분이 모호해질 수 있기 때문입니다.

그러나 흥미롭게도, InceptionNet이나 ResNet과 같이 더 뛰어난 성능을 보이는 모델들은 최종 MLP를 통과하기 전에 GAP를 적용하여 특징 맵을 1 * 1 크기로 줄입니다.

GAP를 사용하면 각 특징 맵의 평균값만 남기 때문에 공간적 정보가 크게 손실되는데도 불구하고 위 접근이 빛을 발할 수 있었던 이유는 다음과 같습니다.

  • InceptionNet이나 ResNet은 특징 맵의 크기가 7 * 7로 줄어든 후에도 추가적인 컨볼루션 레이어를 거치며 이에 따라 마지막 특징 맵의 각 픽셀이 거의 이미지 전체의 정보를 포함하게 됨
  • 이 모델들은 VGGNet보다 훨씬 깊은 구조를 가지고 있어 더 고수준의 의미 있는 특징들을 추출할 수 있음

 

결론적으로 InceptionNet이나 ResNet의 경우 이미지 전체를 포괄하는 매우 고수준의 의미 있는 특징들을 추출했기 때문에 GAP를 적용하더라도 충분히 분류 문제를 풀 수 있습니다.

  • 정보 손실을 감수해서라도 GAP를 사용하는 이유는 파라미터 수를 크게 줄여 Overfitting을 방지하기 위함
  • 또, 위 두 모델은 GAP 이후에 단 한 층의 FC 레이어만을 통과시키는데 이는 MLP에 과도하게 의존하지 않고 컨볼루션의 장점을 최대한 활용할 수 있게 해주기 때문

 

여태까지 CNN의 이미지 처리 능력에 국한하여 살펴보았지만 CNN의 강력한 특징 추출 능력은 다양한 분야에 적용할 수 있습니다.

이를 잘 보여주는 흥미로운 예로, 3차원 공간에 배치된 온도계 문제가 있습니다.

가로, 세로, 높이로 각각 10개씩, 총 1,000개의 온돈계가 있고, 중앙의 온도계가 고장 났다고 가정했을 때 주변 온도계들의 정보를 이용해 중앙 온도를 에측하는 문제를 풀어볼 수 있습니다.

  • 핵심 정보는 온도계들의 위치 정보이며 중앙에 가까운 온도계의 값이 더 중요할 것이라는 점을 AI가 인식해야 함
  • 만약 단순히 FC 레이어를 사용할 경우 온도계의 위치 정보를 효과적으로 활용하기 어려움
  • CNN은 각 온도계의 위치 관계를 유지하면서 정보를 처리할 수 있기 때문에 이런 경우 입력 데이터를 3차원 행렬로 구성하고 CNN을 적용하면 문제를 더 잘 해결할 수 있음
  • ex) 3 * 3 * 3 크기의 3D 컨볼루션을 사용할 경우 중앙 온도계 주변의 26개 온도계 정보를 직접적으로 활용할 수 있고 이는 온도의 공간적 분포를 고려한 예측이 가능하게 함

 

정리하면 CNN의 핵심은 신경망 연결 구조를 효과적으로 설계한 것입니다.

  • 기존 FC 레이어가 모든 픽셀을 동시에 고려하려 했던 것과 달리 CNN은 `선택과 집중`을 통해 이 문제를 해결
  • 필터의 weight를 공유하고 이미지를 스캔하는 방식으로 패턴을 추출하며, 위치적으로 가까운 노드들의 정보를 먼저 조합한 후 점진적으로 더 넓은 영역의 정보를 통합함
  • 이러한 접근 방식은 멀리 있는 픽셀들의 정보도 활용하되, 여러 단계의 정제 과정을 거친 후에 활용하게 하며 이를 통해 CNN은 지역적 특징과 전역적 정보를 모두 효괒거으로 포착할 수 있게 되어, 이미지 처리 분야에서 탁월한 성능을 보이게 되었음

 

그러나 CNN도 회전이나 크기 변화에 대한 불변성이 부족하다는 한계가 있습니다.

  • 똑바로 서 있는 고양이 이미지로 학습한 CNN은 거꾸로 된 고양이 이미지를 인식하는 데 어려움을 겪을 수 있음
  • 또한, 학습된 크기와 다른 크기의 객체를 인식하는 데도 제한이 있음
  • 이러한 한계를 극복하기 위해 데이터 증강이나 특수한 구조의 CNN 등 다양한 기법들이 연구되고 있음

 

참고

혁펜하임의 Easy! 딥러닝

반응형