또르르'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), 커널 크기를 (KH,KW), 출력 크기를 (OH,OW)로 나타냄)

 

 

 

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

 

만약 출력을 OC개로 출력하고 싶다면 OC개의 커널 수가 필요합니다.

 

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 순으로 계산되게 됩니다.

다음 그림과 같습니다.

(각 δ는 미분값을 의미합니다.)

 

https://www.edwith.org/bcaitech1

 

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

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

https://www.edwith.org/bcaitech1


✅ Karpathy의 계산 그래프

 

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

 

  • 덧셈 노드에서의 역전파

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

 

zx=1,zy=1

 

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

 

  • 곱셈 노드에서의 역전파

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

 

zx=y,zy=x

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

 

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

 


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

 

https://www.edwith.org/bcaitech1

 

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

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

 

Comments