Ch.14
CNN 완전 정복: 커널, 스트라이드, 패딩부터 뼈대의 진화까지
기초 합성곱 → 모던 백본
입력에서 출력까지, 합성곱·풀링·잔차가 왼쪽에서 오른쪽으로 쌓이는 흐름을 떠올려 보세요.
커널이 이미지를 훑어 특징을 만들고, 풀링으로 요약한 뒤 분류로 이어집니다. 깊은 층에서는 잔차 와 스킵 가 더해져 가 됩니다.
입력합성곱풀링완전연결출력
기본 CNN(합성곱 신경망)은 인공지능이 이미지를 이해하게 만든 가장 위대한 발명품입니다. 이 장에서는 CNN의 심장인 커널(Kernel)이 어떻게 이미지를 훑어보는지, 이동 보폭인 스트라이드(Stride)와 여백을 채우는 패딩(Padding)이 무엇인지 아주 쉽고 자세하게 해부합니다.
이러한 기초적인 블록들이 어떻게 조립되어, 깊은 층에서도 학습이 무너지지 않게 만드는 ResNet이나, 현대적인 ConvNeXt 같은 거대한 모던 아키텍처(백본)로 진화해 나가는지 그 흥미로운 과정을 완벽하게 마스터해 봅니다.
수식, 이렇게 읽으면 됩니다 (커널·스트라이드·패딩)
1. 출력 한 변 길이
입력 , 커널 , 패딩 , 스트라이드 일 때
2. 스트라이드·패딩
스트라이드가 크면 같은 영역을 덜 겹쳐 보아 특징맵이 빨리 작아집니다. 패딩은 가장자리가 덜 도장 찍히는 현상을 완화합니다.
3. 표준 Conv 파라미터(편향 포함)
4. 잔차와 모던 백본
같은 스킵은 깊은 CNN을 안정적으로 쌓는 데 쓰이고, 이 위에 ResNet·ConvNeXt 등이 이어집니다.
모던 CNN 아키텍처: 합성곱의 기초부터 ResNet까지
1. 커널(Kernel / Filter): 특징을 찾아내는 돋보기 도장
개념: 커널은 보통 나 크기를 가진 작은 숫자 타일(행렬)입니다. 이 타일이 원본 이미지 위를 미끄러지듯 이동하며, 겹치는 위치의 픽셀과 곱한 뒤 모두 더하는(합성곱) 연산으로 '여기에 가로선이 있는지', '색이 급격히 바뀌는 경계선이 있는지'를 수학적으로 계산합니다.
직관적 비유: '윌리를 찾아라' 게임을 할 때 맨눈으로 그림 전체를 보지 않고, 작은 돋보기를 들고 그림의 일부분씩 집중해서 훑어보는 것과 같습니다. 돋보기(커널)가 찾고자 하는 특정 패턴(예: 빨간 줄무늬)과 잘 맞는 곳을 발견하면 '여기 있다!' 하며 높은 점수(활성화 값)를 도장처럼 쾅 찍어냅니다.
2. 스트라이드(Stride)와 패딩(Padding): 보폭과 안전 방석
스트라이드(Stride): 돋보기(커널)가 한 번에 몇 칸씩 이동할지 정하는 보폭입니다. 1이면 한 칸씩 촘촘하게 훑고, 2면 두 칸씩 건너뛰어 듬성듬성 봅니다. 보폭이 클수록 같은 크기의 입력을 더 빨리 훑어 연산은 상대적으로 가벼워지지만, 결과 특징맵의 가로·세로는 더 빨리 작아집니다.
패딩(Padding): 합성곱을 반복하면 가장자리 픽셀은 중앙보다 덜 겹쳐져 모서리 정보가 상대적으로 약하게 반영되고, 패딩 없이 층을 쌓으면 해상도도 계속 깎입니다. 이를 막기 위해 테두리에 0인 가짜 픽셀을 Zero Padding처럼 덧대 크기를 유지하거나 가장자리도 공정하게 도장 찍히게 합니다.
3. 풀링(Pooling): 핵심만 남기는 요약본
개념: 합성곱으로 나온 수많은 응답 중 가장 뚜렷한 값 위주로 뽑아 공간 크기를 크게 줄입니다. 보통은 구역 안에서 최댓값만 남기는 최대 풀링(Max Pooling)을 씁니다(필요하면 평균 풀링도 쓰입니다).
직관적 비유: 시끄러운 회의실에서 여러 명이 동시에 말할 때, 잔잔한 잡담(배경·약한 응답)은 넘기고 가장 크고 분명한 목소리(강한 특징)만 회의록에 적어 요약하는 것과 같습니다. 용량은 줄이되, 판단에 쓸 핵심 신호는 남깁니다.
4. 채널(Channel)와 3차원 합성곱: 겹겹이 쌓인 페스츄리
개념: 흑백은 채널 1장, 컬러 이미지는 R, G, B 세 장의 얇은 필름이 겹친 채널 3 데이터입니다. 그래서 커널도 평면 한 장이 아니라 입력 채널 두께만큼의 깊이를 가진 3D 블록으로 같은 위치를 한꺼번에 보고 연산합니다. 층이 깊어질수록 가로·세로 해상도는 줄고, 대신 서로 다른 패턴을 담는 필터(출력 채널)가 64, 128, 256…처럼 겹겹이 두꺼운 페스츄리처럼 늘어납니다.
왜 중요한지
파라미터 공유 (효율성의 극대화)
이미지의 모든 픽셀마다 서로 다른 가중치를 두는 전결합 방식은 해상도가 조금만 커져도 가중치 수가 폭발합니다. CNN은 하나의 커널(돋보기)을 공간 전체에 재사용합니다. 넓은 방을 청소할 때 타일마다 청소부를 따로 두는 대신, 한 사람이 빗자루 하나로 방 전체를 쓸고 다니는 것과 비슷합니다. 그래서 학습 파라미터와 연산량(FLOPs) 이 함께 줄고, 스마트폰·실시간 CCTV처럼 제한된 환경에서도 비전 모델이 돌아갈 여지가 생깁니다.
위치 이동에 대한 내성 (Translation Invariance)
강아지가 한가운데 예쁘게 앉아 있든, 왼쪽 구석에 찌그러져 있든 CNN은 같은 '강아지' 특징을 찾아냅니다. 고정된 좌표를 외우는 게 아니라 커널이 이미지 전체를 순회하며 패턴을 스캔하기 때문입니다. 여기에 풀링이 더해지면 픽셀이 조금 흔들리거나 어긋나도 끄떡없는 쪽으로 응답이 정리되어, 실무에서 말하는 견고한 사물 인식에 가깝게 갑니다. (다만 회전·크기까지 완전 불변이라는 뜻은 아닙니다.)
계층적 특징 학습 (부분에서 전체로)
얕은 층은 선·모서리·거친 질감 같은 단순한 단서만 잡고, 깊어질수록 이들을 이어 동그라미·윤곽, 더 나아가 강아지의 눈·자동차 바퀴 같은 객체의 일부로 조립합니다. 레고를 작은 블록부터 쌓아 큰 형태를 만드는 직관과 같습니다. 그래서 같은 백본을 분류뿐 아니라 검출(바운딩 박스)·세그멘테이션으로 확장하기 좋고, 인간 시각 피질의 계층적 처리와도 잘 맞닿습니다.
비전 생태계의 공통 언어이자 필수 교양
PyTorch·TensorFlow에서 `Conv2d`는 숨 쉬듯 쓰이는 기본 모듈입니다. ViT(Chapter 05) 같은 트랜스포머가 유행해도, 이미지를 처음 잘게 쪼개거나 지역적 특징을 뽑을 때는 합성곱이 stem·하이브리드 안에 여전히 섞입니다. ImageNet 사전학습 가중치는 논문과 서비스의 출발점이 되는 경우가 많습니다. ‘이미지를 어떻게 숫자로 바꿀 것인가’에 대한 CNN 문법을 알아야 오픈소스와 최신 논문을 읽고, 고치고, 프로젝트에 맞게 뜯어고칠 수 있습니다.
어떻게 쓰이는지
1단계: 특징 추출 (Feature Extraction) — 흙탕물 정수하기
이미지가 들어오면 [합성곱(특징 찾기) 활성화(예: ReLU, 음수 제거) (선택) 배치 정규화(BN) 풀링(요약)] 이어지는 컨베이어 벨트를 여러 번 통과합니다. 앞쪽 층이 굵은 모래(단순한 선·색)를 거르고, 뒤쪽 층이 더 미세한 잡음까지 걸러 추상적인 형태만 남기는 식으로 설계되는 경우가 많습니다. 결국 배경 잡음은 줄고 ‘어떤 핵심 특징이 어디에 강하게 존재하는지’ 가 담긴 특징맵이 남습니다.
2단계: 1차원으로 펼치기 (Flatten) — 레고 블록 일렬로 줄 세우기
특징 추출이 끝나면 채널·높이·너비가 겹겹인 3차원 특징맵을 한 줄짜리 긴 벡터로 펼칩니다. 복잡하게 쌓인 3D 레고를 분해해 바닥에 일렬로 늘어놓는 것과 비슷합니다. 이때 배치 차원(한 번에 몇 장을 넣는지)은 그대로 두고, 이미지 한 장당 공간·채널만 일렬로 이어 붙입니다. 뒤의 완전연결층이 클래스별 점수를 내기 좋은 형태가 됩니다.
3단계: 최종 분류 (Fully Connected) — 판사의 최종 판결
펼친 벡터를 Dense(완전연결) 층에 넣어 클래스마다 로짓(logit) 을 매깁니다. 다중 분류에서는 소프트맥스로 확률로 바꾸고, 학습 시에는 교차 엔트로피와 짝을 이룹니다. "이 사진은 95% 확률로 고양이입니다"라는 문장은 이 단계의 출력을 사람이 읽기 쉽게 포장한 것입니다.
4단계: 실전 적용 (전이 학습과 미세조정)
실무에서는 수백 층 CNN을 바닥부터 잘 학습시키지 않는 경우가 많습니다. 수백만 장으로 이미 학습된 ResNet, EfficientNet 같은 사전학습 백본(명품 뼈대) 을 가져와 씁니다. 데이터가 적으면 백본 가중치를 동결하고 마지막 분류 헤드(판사) 만 목적에 맞게 갈아 끼운 뒤 재학습합니다. 입력 크기(예: )·RGB 정규화(예: ImageNet 평균/표준편차)는 사전학습 때와 동일한 전처리로 맞춰야 제 성능이 나옵니다. 데이터가 많으면 상위 블록을 풀어 미세조정하는 식으로 조절하고, ViT·하이브리드를 쓸 때도 ‘합성곱으로 국소 특징을 뽑는다’는 직관은 그대로 통합니다.
요약
한 줄 요약: CNN은 커널(돋보기)로 특징을 찾고, 스트라이드(보폭)로 이동하며, 패딩(방석)으로 가장자리를 보호하고, 풀링으로 핵심만 압축 요약하는 완벽한 이미지 분석 시스템입니다.
연결점: 이러한 기초 합성곱과 풀링의 조립법이 발전하여, 정보 손실 없이 층을 무한히 깊게 쌓을 수 있게 만든 ResNet의 잔차 연결(Residual Connection)과 ConvNeXt 등 강력한 모던 CNN으로 이어지는 것입니다.
실무 팁: 딥러닝 코드를 짤 때 가장 많이 겪는 에러가 바로 '크기 불일치(Shape mismatch)'입니다. 출력 크기 계산 공식을 활용해 각 층을 통과할 때마다 데이터의 가로세로 크기와 채널 두께가 어떻게 변하는지 추적(Shape tracking)하는 습관을 들이면 실력이 비약적으로 상승합니다.
문제 풀이를 위한 설명
CNN 문제의 핵심은 출력 특징맵의 크기 계산과 파라미터 수 계산입니다. 이 두 가지 공식만 확실히 외우면 아무리 복잡한 모던 아키텍처의 구조도 쉽게 분석할 수 있습니다.
핵심 공식 1: 출력 크기(해상도) 계산
입력 크기 , 필터 크기 , 패딩 , 스트라이드 일 때 출력되는 한 변의 크기 는 다음과 같습니다.
예시: 이미지에 필터, 패딩 1, 스트라이드 1을 적용하면
가 됩니다. (패딩을 1 주었기 때문에 크기가 줄어들지 않고 유지됩니다.)
핵심 공식 2: 파라미터(가중치) 수 계산
필터의 가로 크기 , 세로 크기 , 입력 채널 , 출력 채널(필터 개수) 일 때, 편향(Bias) 1개를 포함한 총 파라미터 수는:
예시: 필터, 입력 채널 3(RGB), 출력 채널 16일 때
개의 파라미터가 필요합니다.
개념 예시 문제
"CNN에서 패딩(Padding)을 사용하는 주된 목적에 가장 가까운 것은?
① 연산량 증가
② 가장자리 정보 손실 방지 및 크기 유지
③ 색상 공간 변환"
→ 도장을 찍다 보면 가장자리가 깎이는 것을 막기 위해 테두리에 0을 두르는 것입니다. → 정답 2
개념 예시 문제 2
"스트라이드(Stride)를 1에서 2로 늘리면 출력 특징맵의 가로세로 크기는 대략 어떻게 변하는가?"
→ 돋보기가 두 칸씩 건너뛰므로 크기는 약 절반(1/2)으로 줄어듭니다.