또르르's 개발 Story

[12-1] Convolution 연산 이해하기 본문

부스트캠프 AI 테크 U stage/이론

[12-1] Convolution 연산 이해하기

또르르21 2021. 2. 3. 01:09

다층신경망(MLP)은 각 뉴런들이 선형모델과 활성함수로 모두 연결된 (fully connected) 구조였습니다.

 

https://priorprobability.com/2016/09/18/taxonomy-of-univariate-distributions/

 

1️⃣ Convolution 연산 이해하기

 

하지만 Convolution 연산은 이와 달리 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조입니다. 아래 그림과 같이 $x$를 모두 활용하는 것이 아니라 $k$벡터에 해당하는 사이즈만 움직여가면서 연산하는 방식입니다.

따라서 가중치 행이 존재하지 않고 kernel에 따라 공통적으로 적용되기 때문에 parameter 사이즈를 많이 줄일 수 있습니다.

 

https://priorprobability.com/2016/09/18/taxonomy-of-univariate-distributions/

 

Convlution 연산의 수학적 의미는 "신호(signal)를 커널을 이용해 국소적으로 증폭 또는 감소시켜서 정보를 추출 또는 필터링"하는 것을 뜻합니다.

아래 수식에서 $z$를 움직여가면서 적분을 하거나 더해주는 방법입니다. ($z$, $i$는 kernel)

 

하지만 CNN에서 사용하는 연산은 사실 convolution이 아니고 cross-correlation이라고 부릅니다.

 

 

커널은 정의역 내에서 움직여도 변하지 않고(translation invariant) 주어진 신호에 국소적(local)으로 적용합니다.

아래 그림에서 파란색은 신호, 빨간색은 커널, 검은색은 결과를 나타냅니다.

 

 

https://en.wikipedia.org/wiki/Convolution

 

https://en.wikipedia.org/wiki/Convolution

 

Convolution 연산은 1차원뿐만 아니라 다양한 차원에서 계산이 가능합니다.

 

 

예를 들어, 2차원 convolution (2D-conv)은 두 개의 위치 $i$, $j$에 따라 움직입니다.
여기서 $i$, $j$, $k$값이 바뀌어도 커널 $f$의 값은 바뀌지 않습니다.

 

 

2️⃣ 2차원 Convolution 연산 이해하기


2D-Conv 연산은 커널(kernel)을 입력벡터 상에서 움직여가면서 선형모델과 합성함수가 적용되는 구조입니다.

 

아래와 같은 커널 $f(p,q)$와 입력 $g(i+p, j+q)$이 있을 때 아래와 같은 matrix 연산이 일어나게 됩니다.

 

https://www.edwith.org/bcaitech1

 

https://www.edwith.org/bcaitech1

 

2차원 Convolution 과정을 거친 후, 출력 크기는 다음과 같습니다.

(입력 크기를 $(H, W)$, 커널 크기를 $(K_{H}, K_{W})$, 출력 크기를 $(O_{H}, O_{W})$로 나타냄)

 

 

 

3️⃣ 3차원 Convolution 연산 이해하기

 

3차원은 대표적으로 RGB를 말할 수 있습니다.

3차원부터는 행렬을 tensor라고 부릅니다.

 

RGB에서 2차원 Convolution을 3번 적용한다고 생각하면 됩니다.

 

https://www.edwith.org/bcaitech1

 

3차원 Convolution에서는 특히, 커널과 입력의 Channel 수를 맞추는 것이 중요합니다.

아래 사진과 같이 커널의 channel은 C개이며, 3차원 입력의 channel도 C개로 맞춰야 계산이 가능합니다.

이때 출력으로 나오는 channel수는 1개입니다.

 

https://www.edwith.org/bcaitech1

 

만약 출력을 $O_{C}$개로 출력하고 싶다면 $O_{C}$개의 커널 수가 필요합니다.

 

https://www.edwith.org/bcaitech1

 

 

4️⃣ Convolution 연산의 역전파


Convolution 연산은 커널이 모든 입력데이터에 공통적으로 적용되기 때문에 역전파를 계산할 때도 Convolution 연산이 나옵니다.

 

만약, 입력 $X$에 대해 커널 $W$를 convolution한 값이 $O$일 때, 순전파는 아래와 같이 진행됩니다.

 

https://www.edwith.org/bcaitech1

 

여기서 입력 $X3$에서 출력 $O1, O2, O3$가 나오기 위해서는 커널 $W3, W2, W1$ 순으로 계산되게 됩니다.

다음 그림과 같습니다.

(각 $\delta$는 미분값을 의미합니다.)

 

https://www.edwith.org/bcaitech1

 

이때, backpropagation을 위해 $\delta_{1}, \delta_{2}, \delta_{3}$이 들어오게 되면, Karpathy의 계산그래프 형태로 표현이 가능합니다.

(Karpathy의 계산 그래프 : 곱셈 노드의 역전파는, 순전파로 받은 입력에 대해 서로 바꾸어 곱해 진행함)

https://www.edwith.org/bcaitech1


✅ Karpathy의 계산 그래프

 

https://towardsdatascience.com/back-propagation-simplified-218430e21ad0

 

  • 덧셈 노드에서의 역전파

덧셈 노드에서의 역전파는 그 값을 그대로 흘려보냅니다. $z = x + y$라는 식이 있을 때, $z$에 대한 $x$의 미분값은 1이 됩니다. ($y$도 마찬가지입니다) 어떤 값에 1을 곱하면 자기 자신이 됩니다.

 

$$\frac {\partial z} {\partial x} = 1,  \frac {\partial z} {\partial y} =1$$

 

https://excelsior-cjh.tistory.com/171

 

  • 곱셈 노드에서의 역전파

곱셈 노드에서의 역전파는 상대의 변수만큼을 그 계산 값으로 취합니다. $z=xy$라는 식이 있을 때 $z$에 대한 $x$의 미분 값은 y가 됩니다. ($y$도 마찬가지입니다.) 

 

$$\frac {\partial z} {\partial x} = y,  \frac {\partial z} {\partial y} = x$$

https://excelsior-cjh.tistory.com/171

 

따라서 선형회귀 $y = Wx + b$ 식에서 backpropagation을 진행하면 가중치 $W1$와 입력 $X3$에 대한 그레디언트 $\delta_{1}$는 아래와 같이 표현이 가능합니다.

 


따라서 입력 $X3$에서 커널 $W1, W2, W3$에 전달되는 그레디언트 값은 아래와 같습니다.

 

https://www.edwith.org/bcaitech1

 

이런 식으로 Convolution 연산의 backpropagation을 표현하면 아래 수식과 같습니다.

즉, 각 커널에 들어오는 모든 그레디언트를 더하면 결국 convolution 연산과 같습니다.

 

Comments