머신러닝, 딥러닝 ML, DL/이론

[Deep Learning] 9. CNN, 합성곱 계층, 패딩, 스트라이드

킹남지 2021. 8. 11. 20:00
반응형

앞 포스팅에서 CNN에 합성곱 계층(Convolution Layer)풀링 계층(Pooling Layer)이 사용되는 것을 확인했습니다.

 

이번에는 합성곱 계층의 연산과 패딩(Padding), 스트라이드(Stride)에 대해 알아보겠습니다.

 

합성곱 연산

합성곱 계층에서는 합성곱 연산을 처리합니다.

 

합성곱 연산은 예시를 보면 바로 이해가 됩니다.

합성곱 연산 예시

 $\circledast$ 은 합성곱 연산을 나타냅니다.

예시에서 합성곱 연산의 왼쪽이 입력 데이터이고, 오른쪽이 필터(또는 커널이라고 부릅니다.)입니다.

그림과 같이 합성곱 연산은 입력 데이터에 필터를 적용합니다. 

 

(합성곱 계층에서는 데이터를 특징 맵(Feature Map)이라고 부르기도 합니다. 입력 데이터는 입력 특징 맵, 출력 데이터는 출력 특징 맵이라고 부릅니다. 같은 의미로 받아들여주세요.)

 

 

합성곱 연산의 계산 과정을 순서대로 보겠습니다.

연산은 윈도우(Window, 그림에서 입력 데이터에 회색으로 표시된 부분)를 일정 간격으로 이동해가며 필터를 적용합니다.

계산 과정

그림에서 보이듯이, 윈도우를 옮겨가면서 입력과 필터에 대응하는 원소끼리 곱하고 그 총합을 구합니다.

그 후 총합을 출력의 해당 장소에 저장합니다. 이 과정을 모든 장소에서 수행하면 연산의 출력이 완성됩니다.

 

CNN에서는 필터의 매개변수(원소 값)가 '가중치'에 해당합니다!

 

편향은 따로 존재합니다.

편향을 포함한 과정

편향을 포함하면 위 그림과 같이 나타낼 수 있습니다.

편향은 필터를 적용한 후의 데이터에 더해진다는 점에 주의해야합니다.

또한 편향은 항상 하나(1*1)만 존재해 그 하나의 값이 필터를 적용한 모든 원소에 더해집니다.

 

패딩

앞에서는 입력 데이터 자체에 합성곱 연산을 적용했습니다.

합성곱 연산을 수행하기 전 입력 데이터 주변을 특정 값으로 채우기도 합니다. (주로 0으로 채웁니다.)

 

이렇게 입력 데이터 주변을 특정 값으로 채우는 것을 패딩(Padding)이라고 합니다.

 

아래는 폭이 1인 패딩을 적용한 예시입니다. (그 안의 값은 0입니다.)

폭이 1인 패딩 예시

(4,4)의 입력 데이터가 사방에 폭이1씩 늘어나 (6,6)이 됐습니다.

 

위와 같이 패딩은 주로 출력 크기를 조정할 목적으로 사용합니다.

 

스트라이드

필터를 적용하는 간격(윈도우를 옮기는 간격)을 스트라이드(Stride)라고 합니다.

위의 예시에서는 모두 한 칸씩 윈도우를 옮기며 합성곱 연산을 했으니, 스트라이드가 1인 경우였죠.

 

스트라이드를 2로 지정한다면, 그대로 필터를 적용하는 윈도우가 두 칸씩 이동합니다.

스트라이드가 2인 경우

 

 

합성곱 연산 후 출력 데이터 크기

각 값에 따라 정리를 한번 해보겠습니다. 

 

1. 필터의 크기가 커지면 출력 데이터의 크기는 줄어듭니다.

2. 스트라이드가 커지면 출력 데이터의 크기는 줄어듭니다.

3. 패딩의 폭이 커지면 출력 데이터의 크기는 커집니다.

 

입력 데이터의 크기를 $(H, W)$, 필터 크기를 $(FH, FW)$ 출력 데이터의 크기를 $(OH, OW)$,

패딩의 폭을$P$, 스트라이드의 크기를 $S$라고 두고, 관계를 수식으로 나타내보겠습니다.

 

$OH = \frac{H + 2P - FH}{S} + 1$

$OW = \frac{W + 2P - FW}{S} + 1$

 

예시를 만들어서 합성곱 연산을 진행해보고, 수식이 맞는지 연습해보시기 바랍니다.

수식은 막 따로 외우지 않아도 이해하고 쓰다보면 자연스럽게 외워질겁니다.

 

이때 출력의 크기는 정수로 나누어 떨어지는 값이어야 한다는 점에 주의해주시기 바랍니다.

(출력의 크기는 원소의 개수에 대응되는데 (3.5, 3.5)같은 값은 말이 안되니 당연합니다.)

 

합성곱 연산, 패딩, 스트라이드에 대해 정리했습니다.

처음보면 새로운 용어가 많고, 어려울 수 있지만 중요한 내용입니다.

 

읽어주셔서 감사합니다 ^^

 

[참고자료]

[1] 밑바닥부터 시작하는 딥러닝1 (사이토 고키)

반응형