본문 바로가기

자연어 처리 과정

CNN의 연산

개요

CNN에 존재하는 두 가지 연산인 filter, (max)pooling을 살펴보도록 하자.

 

Filter of Convolutioin layer

Convolution layer는 도대체 어떻게 사진의 정보를 담아서 사진을 알아볼 수가 있는 걸까?

 

그 비밀은 바로 Convolution layer의 filter에 숨겨져 있다.

컴퓨터가 보는 사진은 아래의 모습과 같다.

사진 속의 -1을 0이라고 생각하자.

그럼 그냥 사진의 사이즈에 맞게 0과 1이 가득 차있는 어떤 숫자의 조합일 뿐인 것이다.

 

Filter가 사진의 정보를 담는 방법은 바로 사진의 일부분을 filter로 만들어 input image에 matching을 시키는 것이다.

 

사진의 맨 왼쪽 위에서부터 오른쪽 아래 끝부분까지 filter로 쭉 matching을 시켜보면서 element-wise로 값을 계산한 후

값을 저장해놓는데, 그 값을 저장해놓은 곳을 바로 activation map이라고 한다.

 

즉, 값이 클수록 해당 filter와 matching이 잘 된 부분임을 뜻하는 것이다.

 

만약 우리의 input image가 32x32x3이고 convolution layer의 filter를 5x5 사이즈로 설정했다고 해보자.

그리고 우리가 filter의 개수를 총 6개로 설정해놨다고 해보자.

 

그럼 우리는 각기 다른 패턴을 가진 5x5 filter 6개를 가지고 32x32x3에다가 각각의 패턴들을 matching 시켜보는 것이다.

그렇게 되면 우리는 이러한 covolution layer를 통과하면 총 6개의 activation map을 갖게 된다.

이제 이 6장의 activation map을 가지고 포갠다면 우리는 28x28x6 크기의 이미지를 갖게 된다.

이걸 input image라고 생각한다면?

여기에 또 Covolution layer를 통과시킬 수 있는 것이다!

 

위와 같은 모양의 연산이 필터마다 이루어진다.

 

위는 Covolution layer를 통과한 input image의 output size를 계산할 수 있는 공식이다.

W: input image의 nxn의 n

F: filter의 fxf의 f

P: padding값

S: stride값

위는 Convolution layer를 통과할 때 발생하는 parameter들의 개수를 구하는 공식이다.

N: filter의 개수

F: filter의 fxf의 f

Inputdim: 입력되는 이미지의 차원

+1: bias(한 conv layer당 발생하는 bias의 개수는 filter의 개수와 같다.)

 

위는 Convolution layer를 통과할 때 발생하는 연산량을 구하는 공식이다.

Pooling

Pooling이란 현재 우리가 input image로 만난 이미지의 정보를 압축시켜주는 역할을 한다.

함축 데이터를 만드는 데에 있어서 좋다.

또 이 pooling layer는 사실 연산이라고 부르기가 애매한 점이 바로 파라미터를 필요로 하지 않는다는 점이다.

즉, 계산이 필요하지 않고 데이터를 "추출"하는 데에 집중을 한다.

 

종류로는 Max poling, Average pooling 등이 있다.

convolution layer에서 발생하는 filter처럼 어떤 가중치가 발생하지 않고,

입력으로 들어온 이미지를 그대로 사용한다.

그 이미지의 정보만으로만 해결을 본다.

 

여기에서는 Max pooling만 다루려고 한다.

 

이 max pooling의 과정은 아주 간단하다.

이렇게 input image의 픽셀 값 중 가장 큰 값만을 추출하여 출력에 이용할 이미지를 만들어낸다!

 

pooling layer의 output 사이즈를 구하는 공식은 convolutioin layer의 output을 구하는 공식과 같다.

 

+ computation sequence of convolution, transposed convolution

https://blog.naver.com/PostView.naver?blogId=mincheol9166&logNo=221740156045

'자연어 처리 과정' 카테고리의 다른 글

RNN  (0) 2022.12.18
VGG  (0) 2022.12.18
AlexNet  (0) 2022.12.18
Batch normalization  (0) 2022.12.13
Overfitting과 underfitting 그리고 regularization  (0) 2022.12.01