오늘 배운 내용
오늘은 스탠포드의 CS231N Deep Learning for CV 강의를 보며 CNN의 작동 원리에 대해 공부했다.
목차
- 이미지 데이터의 표현 방식
- '학습'의 정의와 CNN에서의 의미
- CNN의 주요 개념
- Convolution 연산 과정
- 이미지 데이터의 '중요한 정보'와 CNN의 역할
- 3D Convolution 예시
1. 이미지 데이터의 표현 방식
이미지는 가장 작은 단위인 픽셀들로 구성되며, 각 픽셀은 색상 정보를 가진다.
흑백 이미지는 1개의 채널을 가지며 각 픽셀은 0(검정)부터 255(흰색)까지의 밝기 값으로 표현된다.
컬러 이미지는 3개의 채널(빨강, 초록, 파랑 = RGB)을 가지며, 각 채널의 픽셀마다 0~255의 밝기 값이 할당되는데, 이 세 채널의 조합으로 다양한 색상을 표현한다.

이미지 데이터는 일반적으로 3차원 텐서 형태로 다뤄지며, (Height, Width, Channel)의 형태로 구성된다.
하지만 딥러닝 프레임워크 별로 입력 형태가 다른데 TensorFlow와 Pytorch의 방식은 아래와 같다.
- TensorFlow: (Batch_size, Height, Width, Channel): NHWC
- Pytorch: (Batch_size, Channel, Height, Width): NCHW
2. '학습'의 정의와 CNN에서의 의미
학습이란?
일반적으로 "패턴을 기준으로 가중치들을 수정하는 과정"이라고 정의한다.
이는 데이터의 패턴을 인식하고, 모델의 예측과 실제 값 사이의 손실(Loss)이 작아지는 방향으로 가중치(Weight)를 반복적으로 수정하는 과정이다.
CNN에서의 패턴과 가중치는?
- 패턴: 이미지 내에 존재하는 특징(선, 모서리, 질감, 특정 개체의 부분)을 의미한다.
- 가중치: 주로 필터(Filter) 또는 커널(Kernel) 내부에 담긴 숫자들을 의미하는데, 이 필터들은 이미지 내의 특정 패턴을 감지하는 역할을 한다.
3. CNN의 주요 개념
3.1. Convolution 연산이란?
Convolution 연산은 입력 이미지에 필터(Filter) 또는 커널(Kernel)이라는 작은 가중치 행렬을 적용하여 새로운 피처 맵(Feature Map)을 생성하는 과정이다.
이 연산은 이미지의 공간적 구조를 유지하면서 특징을 추출하는 핵심적인 역할을 한다.
이때 가중치는 특정 시각적 패턴(수직선, 수평선, 대각선, 특정 색상 등)에 반응하도록 학습된다.
필터가 이미지 위를 슬라이딩(Sliding)하면서 픽셀 값과 필터의 가중치를 곱하고 더하는 연산을 수행하여 각 위치에서의 특징 강도를 측정한다.

3.2. 필터(Filter)의 역할과 의미
필터는 컨볼루션 연산의 핵심 구성 요소로, 이미지에서 특정 패턴(특징)을 감지하는 작은 가중치 행렬이다.
❓왜 층별로 여러 개의 필터가 필요할까?
하나의 필터는 하나의 특정 종류의 패턴(수직선 등)만 감지할 수 있다. 하지만 이미지에는 매우 다양한 종류의 패턴(수직선, 수평선, 대각선, 곡선, 특정 색상 영역, 질감 등)이 존재하므로, 여러 개의 필터를 사용하여 각기 다른 패턴을 동시에 감지하고 추출해야 한다.
따라서 각 필터는 이미지의 다양한 특징에 반응하도록 학습된다.
- 저수준 계층(Low-level Layer)의 필터는 주로 선, 모서리, 색상 대비와 같은 원시적이고 일반적인 특징을 감지한다.
- 고수준 계층(High-level layers)의 필터는 저수준 계층에서 추출된 특징들을 조합하여 눈, 코, 바퀴 등과 같은 더 복잡하고 추상적인 특징 또는 객체의 부분을 감지한다.
❓필터 각각의 수치는 무엇을 의미하나?
필터 내부의 각 수치는 해당 필터가 어떤 시각적 패턴에 반응할지 결정하는 가중치다.
이 수치들은 학습 과정을 통해 손실 함수를 최소화하는 방향으로 자동으로 조정되어 특정 패턴을 가장 잘 감지하도록 최적화된다. 예를 들어, 특정 필터의 수치 분포는 수직선에 강하게 반응하도록 학습될 수 있다.
❓CNN 연산 결과 출력은 무엇을 의미하나?
컨볼루션 연산의 출력은 피처 맵(Feature Map)이라고 한다. 각 피처 맵은 원본 이미지에서 특정 필터가 감지한 패턴의 위치와 강도를 나타낸다.
- 여러 개의 필터를 사용하므로, 필터 개수만큼의 피처 맵이 출력된다. 이는 원본 이미지에서 추출된 다양한 종류의 특징들을 나타낸다.
- 이러한 다수의 피처 맵은 다음 계층의 입력으로 사용되어 더 복잡하고 추상적인 특징을 학습하는 데 기여한다. 예를 들어, 1층에서 모서리를 감지한 후, 2층에서는 이 모서리들을 조합하여 원이나 사각형과 같은 더 큰 형태를 감지할 수 있다.

3.3. 각 계층별 수행되는 과정의 의미
1. Convolution Layer (컨볼루션 계층):
- 역할: 입력 이미지나 이전 계층의 피처 맵에서 지역적인 특징(local features)을 추출한다.
- 사용하는 이유: 이미지의 공간적 구조를 보존하면서 다양한 패턴을 감지하기 위해서
- 적용 효과: 특징 추출, 파라미터 공유를 통한 효율성 증가, 번역 등가성(Translation Equivariance, 입력 이미지가 약간 이동(shift 또는 translation)하더라도, 모델의 출력이 크게 변하지 않도록 하는 특성)
- 한계점:
- 회전 및 크기 변화에 취약: 위치 변화에는 강건하지만(변환 등가성), 객체의 회전이나 크기 변화를 잘 처리하지 못한다.
- 계산 비용: 필터의 수, 커널 크기, 입력 데이터의 크기가 커질수록 계산량이 기하급수적으로 증가할 수 있다.
- 정보 손실: 필터 크기보다 작은 미세한 정보나, 필터가 포착하지 못하는 패턴은 손실될 수 있다.
2. Activation Layer (활성화 계층, ReLU 등)
- 역할: 컨볼루션 연산의 선형적인 결과에 비선형성을 도입하여 모델의 표현력을 높인다.
- 사용 이유: 비선형성을 추가하지 않으면 아무리 층을 깊게 쌓아도 결국 하나의 선형 계층과 동일한 결과를 내기 때문에 복잡한 패턴을 학습하기 위해 필수적이다.
- 적용 효과: 모델의 표현력 증대, 비선형 관계 학습 가능.
- 한계점 (ReLU의 경우):
- Dying ReLU 문제: 입력값이 음수일 경우 기울기가 0이 되어 해당 뉴런이 더 이상 학습되지 않는 '죽은 뉴런' 문제가 발생할 수 있다.
- Zero-Centered가 아님: 출력값이 항상 0 이상이므로 학습 과정에서 수렴 속도가 느려질 수 있다.
3. Pooling Layer (풀링 계층):
- 역할: 피처 맵의 공간적 크기를 줄여(다운샘플링) 특징 맵의 차원을 축소한다.
- 사용하는 이유: 모델의 파라미터 수를 줄여 과적합을 방지하고, 계산 비용을 감소시키며, 작은 위치 변화에 대한 불변성(Invariance)을 제공하여 모델을 더 강건하게 만든다.
- 적용 효과: 차원 축소, 계산량 감소, 과적합 방지, 위치 불변성. (예: Max Pooling, Average Pooling)
- 한계점:
- 정보 손실: 특징 맵의 크기를 강제로 줄이는 과정에서 중요한 정보가 손실될 수 있다. 특히 Max Pooling은 최대값 외의 모든 정보를 버리기 때문이다.
- 세부 정보 파괴: 정교한 위치 정보가 중요한 세그멘테이션(Segmentation) 같은 작업에서는 풀링으로 인해 세부 정보가 파괴되어 성능이 저하될 수 있다.

4. Flatten Layer (플래튼 계층)
- 역할: 다차원(예: 3D)의 피처 맵을 1차원 벡터로 평탄화한다.
- 사용 이유: 컨볼루션 계층에서 추출된 특징들을 완전 연결 계층(FC Layer)의 입력 형식에 맞게 변환하기 위해서
- 적용 효과: 완전 연결 계층으로의 데이터 연결 준비.

5. Fully Connected Layer (완전 연결 계층, FC Layer)
- 역할: 평탄화된 특징 벡터를 입력받아 최종적인 분류 또는 회귀 예측을 수행한다.
- 사용 이유: 컨볼루션 계층에서 추출된 특징들을 기반으로 복잡한 의사결정을 내리고, 클래스 간의 관계를 학습하기 위해서
- 적용 효과: 최종 예측 수행
- 한계점:
- 파라미터 수 증가: 뉴런들이 모든 입력에 연결되어 있어 학습할 파라미터 수가 매우 많다. 이는 과적합의 주요 원인이 되며 계산 비용을 증가시킨다.
- 공간 정보 무시: Flatten 계층을 거친 입력을 받기 때문에 이미지의 공간적 구조 정보를 활용하지 못합니다.
- 그래서 최근 CNN 아키텍처(ResNet, EfficientNet 등)는 다층 FC Layer를 거의 사용하지 않고, Global Average Pooling + 1개의 얇은 FC로 대체한다.
예시) ResNet-50의 구조
Conv → Residual Blocks → Global Average Pooling → FC(Linear, num_classes)
이 ResNet 관련 정보는 아래의 다음 포스팅에서 다룰 것이다.
https://choiwonjin.tistory.com/58
[10/17] 아이펠 리서치 15기 TIL | 이미지 인식 모델 AlexNet, VGG-16, ResNet
오늘 배운 내용오늘은 저번 포스팅에서 공부한 CNN을 기반으로 하는 AlexNet, VGG-16, ResNet 세 개의 모델을 공부했다. 목차모델의 복잡성: 깊이(Depth)와 넓이(Width)AlexNetVGG16ResNet1. 모델의 복잡성: 깊이(D
choiwonjin.tistory.com
4. CNN Convolution 연산 과정
Convolution 연산은 입력 이미지에서 다양한 패턴을 감지하고, 이로부터 피처 맵(Feature map)을 생성하는 과정이다.
1. Filter(필터):
- 이미지의 특정 패턴(특징)을 감지하는 작은 가중치 행렬.
- 이 필터가 입력 이미지 위를 슬라이딩하며 연산을 수행.
- 필터의 깊이(채널 수)는 항상 입력 이미지의 채널 수와 동일해야 한다.
2. Stride(스트라이드):
- 필터가 입력 이미지 위를 한 번에 얼마만큼 이동할지를 결정하는 값이다.
- 스트라이드가 크면 필터 이동 간격이 넓어져 출력 피처 맵의 크기가 줄어들고, 수용장(Receptive field)이 더 빠르게 증가한다.

stride 비교
3. Padding(패딩):
- 입력 이미지의 테두리에 픽셀(주로 0)을 추가하여 이미지의 공간적 크기가 컨볼루션 연산 후에도 줄어들지 않도록(또는 특정 크기를 유지하도록) 하는 기법.
- 이미지 가장자리의 정보 손실을 줄이는 효과가 있다.

padding
4. Receptive field(수용장):
- 특정 출력 피처 맵의 한 픽셀이 입력 이미지에서 영향을 받은 영역의 크기.
- 깊은 층으로 갈수록 여러 컨볼루션 및 풀링 연산을 거치면서 수용장은 점점 커지며, 이는 모델이 더 넓은 영역의 정보를 통합하여 복잡한 패턴을 인식할 수 있게 한다.
-

Receptive field
5. Feature map(피처 맵):
- 컨볼루션 연산의 결과물로, 입력 이미지에서 특정 필터가 감지한 패턴의 위치와 강도를 시각화한 것.
- 각 필터마다 고유한 피처 맵이 생성되며, 이들은 다음 계층의 입력으로 사용된다.
5. 이미지 데이터의 '중요한 정보'와 CNN의 역할
5.1. 이미지 데이터에서 중요한 정보:
이미지 데이터에서 중요한 정보는 단순히 픽셀 값의 나열이 아니라, 픽셀 간의 공간적 관계, 즉 지역적인 패턴(모서리, 선, 질감 등)과 이러한 패턴들이 조합되어 형성되는 고수준의 구조(객체, 형태, 배치)이다.
예를 들어, 고양이 이미지에서 눈, 코, 귀의 상대적인 위치와 모양이 고양이라는 객체를 인식하는 데 중요한 정보이다.
5.2. 기존 FC layer로 이미지를 학습할 때의 정보 손실:
1. 공간적 정보 손실:
- 완전 연결(FC) 계층은 다차원 이미지를 1차원 벡터로 평탄화(Flatten)해서 입력받는다. 이 과정에서 픽셀들 간의 원래 공간적인 인접성(어떤 픽셀이 어떤 픽셀 옆에 있는지) 정보가 완전히 사라진다.
2. 파라미터 폭증:
- 모든 입력 픽셀이 모든 뉴런과 연결되므로 이미지 크기가 커질수록 학습해야 할 가중치의 수가 기하급수적으로 늘어나 계산 효율성이 떨어지고 과적합의 위험이 커진다.
5.3. CNN이 정보를 유지하는 방법:
1. 지역적 연결(Local Connectivity):
- 필터는 이미지의 작은 지역에만 연결되어 연산하므로, 픽셀들 간의 지역적인 공간 관계를 유지한다.
2. 가중치 공유(Parameter Sharing):
- 동일한 필터가 이미지의 모든 위치에 적용되므로, 특정 패턴을 감지하는 능력이 이미지 전체에 걸쳐 공유된다.
- 이로 인해 파라미터 수가 크게 줄고, 패턴의 위치가 바뀌어도 감지할 수 있다.
3. 귀납적 편향(Inductive Bias):
- CNN은 지역적 연결과 가중치 공유를 통해 inductive bias를 가진다
- Inductive Bias란 모델이 학습 데이터에서 보지 못한 상황에서도 일반화하여 예측을 수행하기 위해 학습 과정에서 사용되는 일종의 사전 가정(prior assumtion)이다.
- CNN의 Inductive Bias:
- Translation Equivariance (변환 등가성): 가중치 공유로 인해 특정 패턴이 이미지 내의 어느 위치에 나타나더라도 동일한 필터로 감지할 수 있다는 가정이며, 필터가 이미지 위를 슬라이딩하며 동일한 연산을 수행하기 때문에 가능하다.
- Locality (지역성): 이미지 내의 패턴은 주로 인접한 픽셀들 간의 관계에서 형성된다는 가정이며, 필터가 작은 영역에만 집중하여 연산하므로 지역적 특징 추출에 효과적이다.
- CNN은 이러한 inductive bias 덕분에 이미지의 공간적 특징을 효과적으로 추출하고, 객체의 위치 변화에 덜 민감하게 반응하며, 적은 수의 파라미터로도 대규모 이미지 데이터셋에서도 좋은 성능을 보인다.
6. 3D Convolution 예시
아래 그림은 합성곱 연산의 예시이다. C, N_f, O 세 개를 구해보자.

- I : 입력 이미지의 크기
- C_in : 입력 데이터의 채널 수
- k : 가중치가 담긴 커널의 크기
- S : 커널이 작동하는 스트라이드 크기
- P : 패딩(padding) 픽셀 수
- C_out : 출력 피처 맵의 채널 수
- C : 커널의 채널 수
- N_f : 필터의 수
- O : 출력 피처 맵의 크기
커널의 채널 수 C는 입력 데이터의 채널 수 C_in과 일치한다. 즉, C = 3.
필터의 수는 출력의 채널 수 C_out과 일치한다. 즉, N_f = 8
출력 피처 맵의 크기의 수식은 아래와 같다.

여기에 값들을 대입하면,

O = 26 이라는 결과를 얻을 수 있다.
따라서, 출력 피처 맵의 Shape는 (26, 26, 8)이다.
느낀 점, 어려웠던 점
CNN의 개념과 핵심 요소들을 처음으로 접헸고, 공부해봤다.
사실 퍼실님, 그루들과 함께 스탠포드 CS231N 강의를 듣고 난 후, CNN의 구조에 대해서 곧바로 이해가 가진 않았다.
영어로 빠르게 들어서 그런지 컨볼루션 연산 과정, 필터의 쓰임새, 피처 맵이 무엇인지, 풀링은 또 뭔지... 머리 속이 엉망이었다.
개인적으로는 원래 공부할 때 어느 정도까지 개념을 듣고, 나 혼자 천천히 생각해보며 이해하는 시간이 필요한데 3시간 연속으로(물론 퍼실님께서 3~4번 정도 중간에 강의를 멈추며 정리를 해주시긴 했다.) 강의를 들으니 뒤로 갈수록 이해가 쉽지 않았다.
아이펠 하루 일과가 끝나고 새벽까지 CNN에 대해 공부했더니 이제야 좀 감이 잡혔다. 블로그로 또 한번 정리하니 더 확실히 이해가 되는 것 같다.
아직 코드를 돌려보진 않았는데, 더 확실히 기억하려면 주말에 CNN 연산 과정을 코드로 돌려봐야 할 것 같다.
'AI > CV' 카테고리의 다른 글
| [10/22] 아이펠 리서치 15기 TIL | Shallow focus: 인물사진 모드 구현 (0) | 2025.10.23 |
|---|---|
| [10/21] 아이펠 리서치 15기 TIL | 카메라 스티커 앱 만들기 (0) | 2025.10.22 |
| [10/19] 아이펠 리서치 15기 TIL | Grad-CAM (0) | 2025.10.20 |
| [10/17] 아이펠 리서치 15기 TIL | 이미지 인식 모델 AlexNet, VGG-16, ResNet (0) | 2025.10.19 |