Boostcamp AI Tech

[Boostcamp Day-3] AI Math - CNN 첫걸음

ju_young 2021. 8. 4. 23:26
728x90

Convolution 연산

Convolution 연산은 고정된 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조이다. 1차원으로는 다음과 같은 그림으로 표현할 수 있다.

다음과 같이 2차원으로 확인하면 좀 더 이해하기 편할 것이다.

commons.wikimedia.org

Convolution 연산을 다음과 같이 연속적인 공간과 이산적인 공간으로 나누어서 수식을 표현할 수 있다.

함수 g를 신호, 함수 f를 커널이라고 하며 이 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링하는 것을 의미한다. 하지만 사실 CNN에서 사용하는 연산은 '-'가 아닌 '+'로 사용한 cross-correlation을 사용한다. 그렇지만 전체공간에서 +인지 -인지는 중요하지 않기때문에 통상적으로 convolution 이라고한다.

 

시각화를 통해 확인해보면 다음과 같이 표현되는 것을 볼 수 있는데 파란색은 신호, 빨간색은 커널, 검은색은 결과를 나타낸다고 이해하면된다. 또한 아래 그림을 통해 커널이 변하지 않고 움직이는 것(translation invariant)을 확인할 수 있고 노란색 영역 표시로 국소적(local)으로 적용된다는 사실 또한 확인할 수 있다.

wikipedia
wikipedia

다음 사이트에서는 Convolution을 사용한 다양한 영상처리를 확인해볼 수 있다.

Image Kernels explained visually (setosa.io)

 

Image Kernels explained visually

An image kernel is a small matrix used to apply effects like the ones you might find in Photoshop or Gimp, such as blurring, sharpening, outlining or embossing. They're also used in machine learning for 'feature extraction', a technique for determining the

setosa.io

 

Convolution은 다음과 같이 1, 2, 3차원 등 다양한 차원에서 계산이 가능하다. 또한 아래 수식을에서 f(p), f(p, q), f(p, q, r)커널은 i, j, k가 바뀌어도 바뀌지 않는다.

 

2차원 Convolution

2차원 Convolution은 위에서 gif 이미지로 보았듯이 커널을 움직여가면서 계산해가는 것을 확인할 수 있었다. 그런데 입력크기와 커널크기에 따라 출력크기를 어떻게 알 수 있을까? 실제로는 stride, padding도 포함하여 출력크기를 계산할 수 있는데 여기서는 커널크기에 따른 출력크기를 계산하는 방법을 알아보겠다.

입력크기를 (H, W)라고 했을때 각 위치에 맞는 커널 크기를 뺀 후 +1을 하면된다.

 

만약 RGB 이미지일 경우 채널이 3개가 존재하는데 이때 각 채널의 개수만큼 커널이 적용된다고 생각하면 된다.

 

Convolution 연산의 역전파

Convolution 연산은 커널이 모든 입력데이터에 공통으로 적용되기 때문에 역전파를 계산할 때도 Convolution 연산이 나온다. 수식으로 확인하면 다음과 같다.

다시 그림으로 다음과 같이 이해하기 쉽게 표현할 수 있다.

 

728x90