CNN Preview

CNN Preview


Convolution 연산

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

image.png


Convolution연산은 이와 달리 커널(kernel)을 입력 벡터 상에서 움직여가면서 선형모델과 함성함수가 적용되는 구조이다.

모든 $i$에 대해 적용되는 커널은 $V$로 같고 커널의 사이즈만큰 $x$상에서 이동하면서 적용한다. 활성화 함수를 제외한 Convolution연산도 선형변환에 속한다.

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

image.png

CNN에서 사용하는 연산은 사실 정확히 따지면 convolution이 아니고 cross-correlation이라 부른다. 원래 convolution연산은 +가 아니라 -로 계산되는 값이다.

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

Convolution_of_box_signal_with_itself2.gif

Convolution_of_spiky_function_with_box2.gif

영상처리에서 Convolution을 보고 싶다면 아래 사이트에서 확인해 보자.

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

image.png

데이터의 성격에 따라 사용하는 커널이 달라진다. 음성이나 텍스트 같은 1D, 흑백영상 같은 2D, 컬러 영상같은 같은 3D에 따라 사용 커널이 다르다. $i,j,k$가 바뀌어도 커널$f$의 값은 바뀌지 않는다.



2차원 Convolution 연산

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

image.png

image.png

행렬 곱이 아니라 각 원소끼리의 곱이 일어난다.

입력 크기를 $(H,W)$, 커널 크기를 $(K_{H},K_{W})$, 출력 크기를$(O_{H},O_{W})$라 하면 출력 크기는 다음과 같이 계산한다.

image.png

가령 28x28 입력을 3x3커널로 2D-Conv연산을 진행하면 출력의 크기는 26x26이 된다.



3차원 Convolution 연산

채널이 여러개인 2차워 입력의 경우 즉, 3차원인 경우 2차원 Convolution을 채널 개수만큼 적용한다고 생각하면 된다.

image.png

3차원부터는 행렬이 아닌 텐서라 부른다.


image.png

✅ 3D-Conv연산에서 커널의 채널 수와 입력의 채널수가 같아야 한다.


텐서를 직육면체 블록으로 이해해 보자

image.png

커널에서 곱한 값이 다 하나로 합쳐지기 때문에 채널의 개수는 1개로 나오게 된다.
📌 그렇다면 출력에도 채널이 여러 개로 만들려면 어떻게 해야 할까?

image.png

위 그림과 같이 커널을 $O_{C}$개 사용하게 되면 출력도 $O_{C}$를 가지는 텐서가 된다.



Convolution의 역전파

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

image.png

위와 같이 Convolution연산에 미분을 하면 Convolution이 나온 걸 확인 할 수있다. Discrete일 때도 마찬가지로 성립한다.

👀 그림으로 이해해 보자.

image.png

위 그림을 보면 커널은 크기는 3이고 입력은 5이므로 출력은 5-3+1값이나와서 3인것을 확인 할 수 있다. 각각의 출력에대한 역전파를 보게 되면

image.png

입력이 $X3$에 대해서 보게 되면 $X3$에서 각각 출력을 만들때 사용한 가중치가 위와 같이 사용되었다.$O1$를 출력할때 $w_{3}$, $O2$를 출력할때 $w_{2}$, $O3$를 출력할때 $w_{1}$을 사용하였다. 그에 따른 그래디언트 벡터에 대응되는 가중치를 사용하게 된다.


image.png

$O3$가 $X3$에 대해서 $W1$을 통해서 그래디언트를 전달했기 때문에 $W1$의 그래디언트인 $\delta_{3}$에 입력값 $X3$을 곱해서 전달한다. 나머지도 각각 계산하면 위와 같이 전달 된다.

image.png

그래디언트는 다른 입력들에 대해서도 똑같이 적용되기 때문에 위와 같이 $W1$에서 $X1$은 $O1$에 $X2$은 $O2$에 $X3$은 $O3$에 대응되고 모든 그레디언트를 더하면 결국 Convolution연산과 같이 나온다.

'AI > 이론' 카테고리의 다른 글

RNN 맛보기  (0) 2021.02.04
Computer Vision Applications  (0) 2021.02.03
CNN - 1x1 Convolution  (0) 2021.02.03
CNN - Convolution  (0) 2021.02.03
Optimization  (0) 2021.02.02
뉴럴 네트워크 - MLP(이론)  (0) 2021.02.01
PyTorch basic  (0) 2021.02.01
베이즈 통계학  (0) 2021.02.01

+ Recent posts