Convolution
Summary
Convolution, 한국어로 합성곱, 은 한 함수나 신호를 다른 함수나 신호로 “밀어가며 겹쳐 보고”, 그 겹침의 정도를 계산하는 연산이다. 딥러닝에서는 작은 filter 또는 kernel을 입력 위로 움직이며 local pattern을 찾는 연산으로 쓰인다.
한 문장으로 이해하기
Convolution은 “작은 규칙을 전체 공간에 반복 적용해서, 위치별 반응을 얻는 연산”이다.
이미지에서 edge detector filter를 생각하면 쉽다. 작은 3x3 filter가 이미지의 왼쪽 위부터 오른쪽 아래까지 이동하면서, 각 위치가 edge처럼 보이는지 점수화한다. 이 점수들이 모이면 feature map이 된다.
flowchart LR accTitle: Convolution Local Operator accDescr: A shared kernel is applied to local windows across an input signal or image, producing one output value per position and forming a feature map. input["Input<br/>signal or image"] --> window["Local window<br/>receptive field"] kernel["Kernel<br/>shared weights"] --> dot_product["Dot product<br/>weighted sum"] window --> dot_product dot_product --> one_value["One output value"] one_value --> slide["Slide kernel<br/>across positions"] slide --> feature_map["Feature map"] classDef data fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e3a5f classDef process fill:#f3f4f6,stroke:#6b7280,stroke-width:2px,color:#1f2937 classDef output fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d class input,kernel data class window,dot_product,slide process class one_value,feature_map output
수학적 정의
연속 함수에서의 convolution
두 함수 와 가 있을 때, 1차원 연속 convolution은 다음처럼 정의한다.
여기서 핵심은 다. 를 뒤집고, 만큼 이동시킨 뒤, 와 얼마나 겹치는지를 적분한다. 그래서 convolution은 단순한 곱이 아니라, 한 함수가 다른 함수의 모든 위치 이동과 어떻게 상호작용하는지를 계산한다.
이산 신호에서의 convolution
컴퓨터에서는 보통 연속 함수가 아니라 배열을 다루므로 이산 convolution을 쓴다.
또는 같은 식을 다음처럼 쓸 수 있다.
이 식은 “출력 위치 을 만들기 위해, 입력 주변 값들을 kernel 로 가중합한다”는 뜻이다.
2차원 이미지에서의 convolution
이미지처럼 2차원 입력 와 kernel 가 있으면 다음처럼 쓸 수 있다.
여기서 는 출력 위치이고, 는 kernel 내부 위치다. 즉, 각 출력 픽셀은 입력의 작은 영역을 보고 계산된다.
Convolution과 cross-correlation
딥러닝 라이브러리에서 Conv2d라고 부르는 연산은 수학적으로는 대개 convolution이 아니라 cross-correlation이다.
| 구분 | 식 | 차이 |
|---|---|---|
| Convolution | kernel을 뒤집어서 적용한다. | |
| Cross-correlation | kernel을 뒤집지 않고 그대로 적용한다. |
실전 딥러닝에서는 이 차이가 큰 문제가 되지 않는다. kernel의 값은 학습되기 때문에, 뒤집힌 filter가 필요하면 학습 과정에서 그 방향으로 학습될 수 있다. 그래서 관습적으로 둘 다 convolution layer라고 부른다.
다만 수학적으로는 차이가 있다. 진짜 convolution은 교환법칙과 결합법칙 같은 성질을 가지지만, cross-correlation은 일반적으로 그렇지 않다.
핵심 성질
1. 선형성
Convolution은 선형 연산이다.
즉, kernel을 조합한 결과는 각 kernel을 적용한 결과의 조합과 같다. CNN에서는 이 선형 연산 뒤에 ReLU 같은 non-linearity를 붙여 복잡한 함수를 만든다.
2. 교환법칙
수학적 convolution은 다음을 만족한다.
직관적으로는 둘 중 어느 것을 “신호”로 보고 어느 것을 “filter”로 보아도 같은 결과가 나온다는 뜻이다. 단, CNN에서 쓰는 cross-correlation은 이 성질을 일반적으로 만족하지 않는다.
3. 결합법칙
여러 filter를 순서대로 적용하는 것을 하나의 큰 filter처럼 해석할 수 있다. 이 성질은 신호처리에서 중요하다. CNN에서는 중간에 activation이 들어가기 때문에 전체 네트워크가 단순히 하나의 convolution으로 줄어들지는 않는다.
4. 이동 등변성
Convolution의 가장 중요한 성질은 translation equivariance, 즉 이동 등변성이다.
여기서 는 입력을 만큼 이동시키는 연산이다. 말로 풀면 다음과 같다.
입력이 이동하면, convolution의 출력도 같은 만큼 이동한다.
이것은 CNN이 이미지에 잘 맞는 핵심 이유다. 고양이가 이미지 왼쪽에 있든 오른쪽에 있든, 같은 filter가 같은 pattern을 감지할 수 있다.
5. Fourier domain에서 곱셈이 된다
Convolution theorem에 따르면 시간 또는 공간 domain의 convolution은 Fourier domain에서 곱셈이 된다.
이 성질 때문에 convolution은 주파수 관점에서 filter로 해석된다. 예를 들어 blur filter는 고주파 성분을 줄이고, edge detector는 변화가 큰 고주파 성분에 민감하게 반응한다.
고차원적 함의
1. “선형이고 이동 등변적인 연산”은 본질적으로 convolution이다
Convolution이 중요한 이유는 단순히 이미지에서 잘 작동하기 때문만이 아니다. 더 깊게 보면, 선형성과 이동 등변성을 동시에 요구하면 자연스럽게 convolution이 나온다.
이를 직관적으로 보자. 어떤 선형 연산 이 있고, 이 연산이 입력의 이동에 대해 등변적이라고 하자.
- 임의의 신호 는 여러 impulse의 합으로 볼 수 있다.
- 이 선형이면, 는 각 impulse에 대한 반응의 합이다.
- 이 이동 등변적이면, 한 impulse에 대한 반응을 이동시키면 다른 위치의 impulse 반응이 된다.
- 따라서 전체 출력은 “입력의 각 위치에 동일한 impulse response를 반복 적용한 합”이 된다.
이 구조가 바로 convolution이다. 즉 convolution은 공간 전체에서 같은 규칙을 적용하는 선형 연산의 표준형에 가깝다.
2. Convolution은 local prior를 모델에 넣는다
이미지, 음성, 시계열 데이터에서는 가까운 위치끼리 관련이 큰 경우가 많다. Convolution은 작은 kernel을 쓰기 때문에 한 번에 전체를 보지 않고 local neighborhood를 먼저 본다.
이것은 Inductive Bias다.
| 가정 | convolution에서의 구현 |
|---|---|
| 가까운 값끼리는 관련이 크다 | 작은 kernel과 receptive field |
| 같은 pattern은 여러 위치에서 반복될 수 있다 | weight sharing |
| 입력이 조금 이동해도 의미가 유지될 수 있다 | translation equivariance |
| 복잡한 pattern은 단순 pattern의 조합이다 | 여러 convolution layer의 계층적 조합 |
3. Convolution은 matrix multiplication의 특수한 형태다
2D convolution도 결국은 선형 연산이므로 큰 행렬 곱으로 쓸 수 있다. 다만 그 행렬은 일반 dense matrix가 아니라 Toeplitz 또는 block-Toeplitz 구조를 가진다.
말로 풀면, FC layer는 모든 입력 위치마다 다른 weight를 줄 수 있지만, convolution layer는 같은 kernel weight를 여러 위치에서 반복해서 쓴다.
| 연산 | 행렬 관점 | 의미 |
|---|---|---|
| Fully connected layer | dense matrix | 모든 위치가 모든 출력에 독립적으로 연결 |
| Convolution layer | sparse structured matrix | local 연결과 공유 weight |
이 구조 덕분에 convolution은 parameter 수가 훨씬 적고, 이미지처럼 큰 입력에도 적용 가능하다.
4. Convolution은 “filtering”의 언어다
신호처리에서 convolution은 system이 input에 어떻게 반응하는지를 표현한다. 어떤 linear time-invariant system의 출력은 다음처럼 쓸 수 있다.
여기서 는 impulse response다. 즉, system이 아주 짧은 입력 하나에 어떻게 반응하는지만 알면, 임의의 입력에 대한 출력을 convolution으로 계산할 수 있다.
이 관점에서 CNN의 filter도 비슷하다. filter는 입력의 특정 pattern에 대한 response function이다. edge filter, texture filter, shape filter는 모두 “무엇에 반응할 것인가”를 학습한 local detector로 볼 수 있다.
5. 확률에서도 등장한다
두 독립 확률변수 와 의 합 의 분포는 두 분포의 convolution으로 구한다.
즉 convolution은 “두 원인이 합쳐져 결과를 만들 때, 가능한 모든 조합을 더하는 연산”으로도 볼 수 있다.
CNN에서의 convolution
CNN에서 convolution layer는 보통 다음 형태로 계산된다. 엄밀히는 cross-correlation 형태다.
각 기호의 의미는 다음과 같다.
| 기호 | 의미 |
|---|---|
| 입력 feature map | |
| 출력 feature map | |
| 학습되는 convolution kernel | |
| 출력 채널별 bias | |
| 입력 채널 수 | |
| kernel의 높이와 너비 | |
| stride | |
| padding | |
| 출력 채널 index |
출력 크기
입력 높이가 , kernel 높이가 , padding이 , stride가 , dilation이 라면 출력 높이는 다음과 같다.
너비도 같은 방식으로 계산한다.
parameter 수
출력 채널 수가 라면 parameter 수는 다음과 같다.
마지막 은 bias다. 이 수식에서 중요한 점은 parameter 수가 이미지의 높이와 너비에 직접 비례하지 않는다는 것이다. 같은 filter를 모든 위치에 공유하기 때문이다.
CNN에서 중요한 관련 개념
| 개념 | 의미 | 왜 중요한가 |
|---|---|---|
| Kernel / filter | 입력의 local pattern에 반응하는 작은 weight 배열 | edge, texture, shape 같은 feature를 감지 |
| Feature map | filter를 전체 위치에 적용한 결과 | 어떤 feature가 어디에 있는지 보여줌 |
| Stride | filter가 이동하는 간격 | 출력 해상도와 계산량 조절 |
| Padding | 입력 가장자리에 값을 덧붙이는 것 | 출력 크기 보존, boundary 처리 |
| Dilation | kernel 내부 간격을 벌리는 것 | parameter 수를 늘리지 않고 receptive field 확장 |
| Receptive field | 한 출력 값이 바라보는 입력 영역 | 깊은 layer일수록 더 넓은 문맥을 통합 |
| Pooling | 주변 값을 요약하는 연산 | 약한 shift invariance와 downsampling 제공 |
왜 중요한 연산인가?
Convolution이 중요한 이유는 다음 네 가지로 요약할 수 있다.
| 이유 | 설명 |
|---|---|
| Locality | 가까운 값끼리 먼저 상호작용하게 만든다. 이미지, 음성, 시계열에 잘 맞는다. |
| Weight sharing | 같은 filter를 모든 위치에 적용하므로 parameter 수가 줄고 일반화가 쉬워진다. |
| Translation equivariance | 입력 pattern이 이동하면 출력 pattern도 같이 이동한다. 위치가 바뀐 같은 물체를 감지하기 좋다. |
| Hierarchy | 여러 layer를 쌓으면 edge에서 texture, part, object로 점차 복잡한 feature를 만들 수 있다. |
이 네 가지는 CNN이 fully connected network보다 이미지 처리에 강한 이유다. FC layer는 각 픽셀 위치마다 독립적인 weight를 갖기 때문에, 같은 edge가 위치만 바뀌어도 다른 pattern으로 배울 수 있다. 반면 convolution은 “같은 pattern은 위치가 달라도 같은 filter로 감지할 수 있다”는 가정을 구조 안에 넣는다.
Translation equivariance와 invariance
Convolution 자체는 보통 invariance가 아니라 equivariance를 만든다.
| 개념 | 의미 | 예시 |
|---|---|---|
| Equivariance | 입력이 이동하면 출력도 같은 방식으로 이동한다 | 고양이가 오른쪽으로 이동하면 feature map의 고양이 반응도 오른쪽으로 이동 |
| Invariance | 입력이 이동해도 출력이 거의 변하지 않는다 | 고양이가 어디 있든 class label은 “cat” |
CNN에서 convolution은 translation equivariance를 제공하고, pooling, global average pooling, data augmentation, classifier head 등이 합쳐져 task 수준의 Shift Invariance를 만든다.
한계와 주의점
| 한계 | 설명 |
|---|---|
| Long-range dependency에 약함 | 작은 kernel은 먼 위치의 관계를 한 번에 보지 못한다. 깊게 쌓거나 dilation, attention 등을 써야 한다. |
| 모든 위치에 같은 규칙을 가정 | 위치마다 의미가 크게 다른 데이터에서는 weight sharing이 부적절할 수 있다. |
| Rotation, scale invariance는 자동이 아님 | 물체가 회전하거나 크기가 바뀌는 문제는 별도 augmentation, pooling, equivariant architecture가 필요하다. |
| Boundary effect | padding 방식에 따라 가장자리 출력이 달라질 수 있다. |
| CNN의 convolution은 엄밀히 cross-correlation | 수학적 성질을 논할 때는 둘을 구분해야 한다. |
직관 예시
이동 평균
1D 신호에서 kernel이 다음과 같다고 하자.
이 kernel을 적용하면 각 위치의 값을 주변 세 값의 평균으로 바꾼다. 이것은 smoothing filter다. 노이즈는 줄어들지만 sharp한 변화도 약해질 수 있다.
Edge detection
2D 이미지에서 다음과 같은 kernel은 왼쪽과 오른쪽의 밝기 차이에 반응한다.
밝기가 왼쪽에서 오른쪽으로 크게 바뀌는 위치에서 큰 값이 나온다. CNN의 초기 layer가 edge-like filter를 학습하는 이유도 이와 연결된다.
핵심 요약
| 질문 | 답 |
|---|---|
| Convolution이란? | kernel을 뒤집고 이동시키며 입력과 겹치는 정도를 계산하는 연산 |
| 딥러닝에서 실제로 쓰는 것은? | 대부분 cross-correlation이지만 관습적으로 convolution이라고 부른다. |
| 왜 중요한가? | locality, weight sharing, translation equivariance를 제공한다. |
| CNN에서 역할은? | local pattern detector를 전체 공간에 반복 적용해 feature map을 만든다. |
| 고차원적 의미는? | 선형성과 이동 등변성을 만족하는 연산의 자연스러운 표준형이다. |
| 한계는? | long-range dependency, rotation/scale 변화, boundary effect에는 별도 장치가 필요하다. |
관련 노트
- CNN
- Inductive Bias
- Shift Invariance
- Computer Vision
- Gradient-based learning applied to document recognition
- ReLU
- Backpropagation
참고
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, Chapter 9, “Convolutional Networks”
- Vincent Dumoulin and Francesco Visin, “A guide to convolution arithmetic for deep learning”, 2016
- Yann LeCun, Leon Bottou, Yoshua Bengio, Patrick Haffner, “Gradient-Based Learning Applied to Document Recognition”, 1998
태그
AI DeepLearning CNN Convolution SignalProcessing ComputerVision InductiveBias