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이다.

구분차이
Convolutionkernel을 뒤집어서 적용한다.
Cross-correlationkernel을 뒤집지 않고 그대로 적용한다.

실전 딥러닝에서는 이 차이가 큰 문제가 되지 않는다. 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이 나온다.

이를 직관적으로 보자. 어떤 선형 연산 이 있고, 이 연산이 입력의 이동에 대해 등변적이라고 하자.

  1. 임의의 신호 는 여러 impulse의 합으로 볼 수 있다.
  2. 이 선형이면, 는 각 impulse에 대한 반응의 합이다.
  3. 이 이동 등변적이면, 한 impulse에 대한 반응을 이동시키면 다른 위치의 impulse 반응이 된다.
  4. 따라서 전체 출력은 “입력의 각 위치에 동일한 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 layerdense matrix모든 위치가 모든 출력에 독립적으로 연결
Convolution layersparse structured matrixlocal 연결과 공유 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 mapfilter를 전체 위치에 적용한 결과어떤 feature가 어디에 있는지 보여줌
Stridefilter가 이동하는 간격출력 해상도와 계산량 조절
Padding입력 가장자리에 값을 덧붙이는 것출력 크기 보존, boundary 처리
Dilationkernel 내부 간격을 벌리는 것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 effectpadding 방식에 따라 가장자리 출력이 달라질 수 있다.
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에는 별도 장치가 필요하다.

관련 노트


참고

  • 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