합성곱 신경망, 즉 CNN은 작은 국소 패턴을 찾고 그것들을 더 큰 패턴으로 결합하는 신경망입니다. 이미지에서는 초기 층이 주로 경계선이나 모서리를 감지하고, 중간 층은 질감이나 부분 구조를 감지하며, 더 깊은 층은 이런 신호를 이용해 최종 예측을 만듭니다.
핵심 아이디어는 가중치 공유입니다. CNN은 모든 픽셀-위치 쌍마다 별도의 가중치를 학습하는 대신, 같은 작은 필터를 여러 위치에서 재사용합니다. 그래서 원본 이미지에 바로 완전연결층을 적용하는 것보다 훨씬 효율적이고, 같은 종류의 패턴을 여러 위치에서 감지하는 데도 유리합니다.
합성곱 신경망이 하는 일
완전연결층에서는 각 출력이 한 번에 모든 입력값에 의존할 수 있습니다. 반면 CNN은 더 구조적입니다. CNN은 보통 필터라고 부르는 작은 커널을 사용해 한 번에 하나의 국소 영역만 봅니다.
단일 채널 입력 와 커널 에 대해, 하나의 출력 원소는 다음과 같이 쓸 수 있습니다.
이것이 합성곱 층의 국소 가중합 아이디어입니다. 많은 머신러닝 라이브러리에서 실제로 구현되는 연산은 뒤집힌 수학적 합성곱이라기보다 교차상관(cross-correlation)에 가깝지만, 실용적인 직관은 같습니다. 커널이 입력 위를 훑으면서 특징 맵을 만들어냅니다.
특징 맵은 학습된 패턴이 어디에서 강하게 나타나는지를 보여줍니다.
공유 필터가 왜 도움이 될까
같은 수직 경계선이 이미지의 왼쪽 위 모서리에 있든 중앙 근처에 있든, 우리는 보통 모델이 둘 다 알아차리길 원합니다. CNN은 같은 필터 파라미터를 여러 위치에서 재사용함으로써 이를 가능하게 합니다.
이 방식은 실용적으로 두 가지 효과를 냅니다.
- 원본 이미지에 대한 완전연결층과 비교해 학습해야 할 파라미터 수를 줄입니다.
- 하나의 고정된 위치를 외우기보다 반복해서 나타나는 국소 패턴을 감지하도록 네트워크를 유도합니다.
이런 재사용은 CNN이 이미지 작업에서 효과적이었던 이유 중 하나입니다.
기본적인 CNN 아키텍처는 어떻게 생겼을까
기본적인 CNN은 보통 다음과 같은 흐름을 따릅니다.
- 합성곱 층
- ReLU 같은 활성화 함수
- 선택적인 풀링 또는 다운샘플링
- 추가 합성곱 블록
- 최종 예측 층
초기 층은 보통 단순한 국소 구조를 포착합니다. 더 깊은 층은 이런 반응들을 결합해 더 크고 과제에 특화된 특징을 만듭니다.
풀링은 필수는 아니지만, 사용할 경우 공간 차원을 줄여 이후 층이 더 압축된 표현으로 작업할 수 있게 합니다. 대표적인 예가 최대 풀링(max pooling)으로, 각 작은 영역에서 가장 큰 값만 남깁니다.
스트라이드가 이고 패딩이 이면, 입력에 커널을 적용했을 때 출력은 이 됩니다. 이 크기 규칙은 예제가 맞는지 확인할 때 유용합니다.
예제로 보기: CNN 특징 맵은 어떻게 만들어질까
다음 입력 이미지를 보겠습니다.
다음 커널을 사용합니다.
스트라이드는 , 패딩은 없다고 가정합니다. 입력이 이고 커널이 이므로 출력은 반드시 이어야 합니다. 커널의 모든 원소가 이므로 각 출력값은 하나의 영역의 합이 됩니다.
왼쪽 위 출력값은 다음과 같습니다.
오른쪽으로 한 칸 이동한 영역은
이므로
가능한 모든 위치에 대해 계산하면
이 출력이 바로 특징 맵입니다. 값이 클수록 커널이 강하게 일치하는 패턴을 찾았다는 뜻입니다. 여기서는 완전한 밝은 블록이 있는 위치에서 필터가 가장 강하게 반응합니다.
이제 ReLU를 적용해도 모든 원소가 이미 음수가 아니므로 아무것도 바뀌지 않습니다. 그다음 스트라이드 의 최대 풀링을 적용하면, 풀링된 출력은 다음과 같습니다.
이 과정이 새로운 정보를 만드는 것은 아닙니다. 대신 가까운 영역에서 가장 강한 반응을 남기고 공간 격자를 줄입니다.
이 예제는 단순하지만 핵심 메커니즘을 분명하게 보여줍니다. 필터가 슬라이드하며 국소 가중합을 계산하고, 패턴이 어디에 나타나는지에 대한 맵을 만듭니다.
CNN은 학습 중에 무엇을 배우는가
위의 커널은 손으로 정한 것이지만, 실제 CNN에서는 필터 값이 데이터로부터 학습됩니다. 학습 과정에서는 그 값들을 조정해 만들어지는 특징 맵이 과제에 유용해지도록 합니다.
과제가 이미지 분류라면, 네트워크는 클래스를 구분하는 데 도움이 되는 필터를 학습합니다. 과제가 분할이나 탐지라면, 이후 층은 그 출력에 맞게 학습됩니다. 기본 메커니즘은 같습니다. 순전파, 손실, 역전파, 파라미터 업데이트입니다.
CNN을 배울 때 흔한 실수
CNN은 그냥 "이미지 분류기"라고 생각하기
이미지는 가장 대표적인 예시이지만, CNN의 본질은 국소 구조와 공유 필터에 있습니다. 가까운 값들의 관계가 중요하다면, 같은 아이디어는 이미지 밖의 문제에도 유용할 수 있습니다.
풀링이 항상 필요하다고 가정하기
풀링은 흔하지만 보편적인 것은 아닙니다. 어떤 아키텍처는 대신 스트라이드 합성곱으로 공간 크기를 줄이고, 어떤 아키텍처는 더 오랫동안 공간 정보를 많이 유지합니다.
스트라이드와 패딩을 무시하기
특징 맵의 크기는 이런 선택에 따라 달라집니다. 스트라이드나 패딩을 바꾸면 출력의 모양뿐 아니라 각 유닛이 볼 수 있는 국소 이웃도 함께 바뀝니다.
층을 단지 공식으로만 보기
합성곱 공식은 중요하지만, 아키텍처 전체도 중요합니다. CNN은 합성곱, 활성화, 층의 적층, 학습이 함께 작동하기 때문에 효과를 냅니다.
합성곱 신경망이 유용한 경우
CNN은 이미지 분류, 객체 탐지, 분할 같은 컴퓨터 비전 작업에 널리 사용됩니다. 또한 국소 패턴이 의미 있는 일부 신호 처리와 시퀀스 문제에도 등장합니다.
입력에 뚜렷한 격자 구조나 순서 있는 이웃 구조가 있을 때 특히 유용합니다. 이런 조건이 약하다면 다른 아키텍처가 더 적합할 수 있습니다.
CNN을 더 쉽게 이해하게 해주는 사고방식
CNN을 작은 패턴부터 시작해 깊이가 깊어질수록 더 추상적인 패턴을 다루는 패턴 탐지기로 생각해 보세요. 한 층은 "이 작은 패턴이 여기 나타나는가?"를 묻습니다. 이후 층은 "이 단순한 패턴들이 결합되어 더 의미 있는 무언가가 되는가?"를 묻습니다.
그래서 CNN은 "합성곱"이라는 단어 자체보다 특징 맵에 집중할 때 더 이해하기 쉽습니다.
직접 바꿔서 해보기
같은 입력을 유지하되, 커널을 다음과 같이 바꿔 보세요.
특징 맵을 다시 계산해 보고, 이제 어떤 영역에서 큰 양수 또는 음수 반응이 나오는지 확인해 보세요. 이 작은 변화만으로도 서로 다른 필터가 서로 다른 패턴을 어떻게 감지하는지 훨씬 분명하게 이해할 수 있습니다.