본문 바로가기
AI-driven Methodology/ANN

[ANN] CNN (Convolutional Neural Network)

by goatlab 2021. 12. 10.
728x90
반응형
SMALL

CNN (Convolutional Neural Network)

 

CNN은 convolution poolingdense (또는 fully connected)라는 세 가지의 layer을 통해 만들어진다.

 

Convolution layer

 

0이 검은색, 1이 흰색으로 구성된 0과 1 흑백 5X5 pixel 사진이 있다. 다음으로 임의의 0과 1로 채워진 3X3 행렬이 있다. 이 행렬은 이미지의 하위 집합과 행렬곱을 할 수 있다. 이 곱은 3X3 행렬이 모든 pixel을 반복해서 이동함에 따라 새로운 행렬에 기록된다.

 

DNN에 비해 파라미터 개수가 현저히 적다. DNN보다 overfitting 문제를 덜 발생시킨다.

filter 함수를 사용해 이미지에서 부분적인 feature를 추출한다. 이때 filter 함수는 여러개를 사용할 수 있다. 여러 개의 filter를 사용한다는 것은 이미지의 여러 feature을 추출한다는 것이다.

Weight Sharing : filter의 weight 값을 고정시킨 filter 함수를 이동 (shift)시켜서 이미지의 지역적인 feature를 추출한다. filter를 shift하면서 겹쳐지는 부분이 발생하는데 이때 filter 값들을 공유한다고 하여 weight sharing 특성이 존재한다.

Pooling (SubSampling) : 일종의 Downsampling이다. filter 함수로 추출한 feature value들 중 일정한 기준 (max, average 등)으로 대표값을 추출한다. 또한 downsampling이기 때문에 parameter의 감소 (차원의 감소) 역할을 하기도 한다.

 

 

위에서 임의로 채워진 3X3 행렬은 이미지에서 개체를 추출하는 필터 (filter)라고 하며, 최적화 알고리즘 (optimization algorithm)을 사용하여 결과를 나타낼 3X3 행렬의 각 내부 요소의 값을 결정한다. 신경망의 convolution layer에서는 다양한 종류의 filter로 여러가지 개체를 추출할 수 있으며, filter가 요소를 추출하는 각각의 단계를 stride라고 한다. sliding window라고도 한다.

 

stride를 설정하는 목적은 filter를 이동시키면서 weight sharing을 하게 되면 중복된 값이 나오는 것을 방지하기 위한 것이다.

 

두 개의 3채널 filter를 사용하여 두 개의 convolution 출력 layer을 생성하는 3-채널(RGB)

 

W0과 W1은 convolution filter이고, 출력은 결과로 추출된 개체이며, 이들 모든 filter로 구성된 layer은 convolutional layer

 

채널 (Channel)

 

convolution layer에 유입되는 입력 데이터에는 한 개 이상의 filter가 적용된다. 1개 filter는 feature map의 channel이 된다. convolution layer에 n개의 filter가 적용된다면 출력 데이터는 n개의 channel을 갖게 된다.

 

필터 (Filter) & Stride

 

filter는 이미지의 특징을 찾아내기 위한 공용 파라미터이다. CNN에서 filter를 kernel이라고 하기도 한다. filter는 일반적으로 (3, 3)이나 (5, 5)과 같은 정사각 행렬로 정의된다. CNN에서 학습의 대상은 filter 파라미터이다. 입력 데이터를 지정된 간격으로 순회하며 channel 별로 합성곱을 하고 모든 channel (컬러의 경우 3개)의 합성곱의 합을 feature map로 만듭니다. filter는 지정된 간격으로 이동하면서 전체 입력데이터와 합성곱하여 feature map을 만든다.

 

 

filter는 입력 데이터를 지정한 간격으로 순회하면서 합성곱을 계산합니다. 여기서 지정된 간격으로 filter를 순회하는 간격을 stride라고 한다. 입력 데이터가 여러 channel을 가질 경우 filter는 각 channel을 순회하며 합성곱을 계산한 후, channel 별 feature map을 만든다. 그리고 각 channel의 feature map을 합산하여 최종 feature map으로 반환한다. 입력 데이터는 channel 수와 상관없이 filter 별로 1개의 feature map이 만들어진다.  

 

하나의 convolution layer에 크기가 같은 여러 개의 filter를 적용할 수 있다. 이 경우에 feature map에는 filter 갯수 만큼의 channel이 만들어진다. 입력 데이터에 적용한 filter의 개수는 출력 데이터인 feature map의 채널이 됩니다.

 

convolution layer의 입력 데이터를 필터가 순회하며 합성곱을 통해서 만든 출력을 Feature Map 또는 Activation Map이라고 합니다. feature map은 합성곱 계산으로 만들어진 행렬이다. activation map은 feature map 행렬에 활성 함수를 적용한 결과이다. 즉 convolution 레이어의 최종 출력 결과가 activation map이다.

 

floor( (n + 2p - m)/ s + 1) x floor ( (n + 2p - m)/ s + 1)
n x n : 이미지 사이즈, m x m : filter 사이즈, 패딩 두께 : p, s : stride (step) 수, floor : 내림을 통해 분수 값이 나오는 경우 정수 반환
(n + 2p -m) x (n + 2p -m) : stride 없을 때

 

패딩 (Padding)

 

convolution layer에서 filter와 stride에 작용으로 feature map 크기는 입력데이터보다 작아진다. convolution layer의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩이다. padding은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것을 의미한다. 보통 패딩 값으로 0으로 채워 넣는다.

(n - m + 1) x (n - m + 1)
n x n : 이미지 사이즈, m x m : padding filter 사이즈

 

* convolution 연산의 문제점 보완

- 코너 / 경계에 있는 pixel은 덜 사용되어 정보를 잃는 것을 방지

- convolution 연산의 결과 output이 작아지는 것을 방지

 

Pooling layer

 

이 layer은 다른 함수을 사용하여 입력 layer의 차원 (dimension)을 줄이는 데 사용된다. 대부분의 경우 convolustion layer 뒤에 max pooling layer이 사용된다. pooling은 2X2 행렬을 사용하고 convolution layer와 같은 방식으로 이미지에서 동작하지만 이미지 자체를 축소시킨니다.

 

average pooling과 max pooling을 사용하여 이미지를 pooling

 

Dense layer

 

이 layer은 활성화 함수와 이전 계층이 완전히 연결된 layer이다. 이는 가장 간단한 신경망의 구조와 유사하다.

 

https://towardsdatascience.com/a-deeper-understanding-of-nnets-part-1-cnns-263a6e3ac61

 

A deeper understanding of NNets (Part 1) — CNNs

Introduction

towardsdatascience.com

 

728x90
반응형
LIST

'AI-driven Methodology > ANN' 카테고리의 다른 글

[ANN] 순환 신경망 (Recurrent Neural Network, RNN) (1)  (0) 2021.12.14
[ANN] Neural Networks  (0) 2021.12.10
[ANN] 퍼셉트론 (Perceptron)  (0) 2021.12.10
[ANN] SNN (Spiking Neural Networks)  (0) 2021.12.10
ANN이란?  (0) 2021.12.10