1. Convolution Neural Network(CNN) 이란?
CNN은 인간의 시신경 구조를 모방하여 만든 딥러닝 구조이다. 인공지능 분야에 획기적인 성능향상을 이루어 냈으며, 특히 이미지 처리에 많이 사용된다.
그렇다면 CNN 기존에 많이 사용하였던 Fully Connected Layer에 의미론적으로 무엇이 다를까?
이미지 비정형 데이터는 위의 그림과 같이 $1 \times 3072$ 형태가 아닌, 위의 그림과 같이 공간적 특성을 지닌다. 하지만 이를 Fully Connected Layer을 이용하여 연산을 할 경우 기존에 가지고 있던 공간적 특징이 사라지게 된다. 이를 효과적으로 대응하기 위해 CNN을 사용한다.
2. Convolution Layer
Convolution Layer은 어떻게 spatial structure 특성을 연산에 포함시킬까?
$32 \times 32 \times 3$의 Color Image Data를 Convolution 연산하는 과정을 살펴보자.
Convolution Layer에서는 $5 \times 5 \times 3$의 filter을 이용하여 해당 $pixel$의 연산을 진행한다.
즉 Filter가 포함하고 있는 부분의 특징을 추출한다고 생각하면 된다.
다음의 예시를 본다면 Convolution 연산의 내용을 쉽게 이해할 수 있다. 1칸씩 Stride하면서, 겹쳐지는 모든 칸에 대해서 반복적으로 연산을 수행한다.
연산을 수행할 때 가장 중요한 점은 Image의 depth와 filter의 depth가 동일해야 한다는 점이다.
위와 같은 연산을 총 6개의 filter을 이용하여 진행할 경우 activation map의 형태는 $28 \times 28 \times 6$이 된다.
여러개의 filter을 사용하는 이유는 다양한 feature에 집중하기 위해서이다.
Filter은 학습이 가능한 Prarmeter $w$로 구성되어있으며, $5\times 5 \times 3$의 filter을 이용할 경우 bias까지 더하여 총 filter당 76개의 parameter이 존재한다.
최종적으로 얻어진 activation map을 바탕으로 기존에 사용하였던 Fully Conneted Layer을 이용하여 목적으로 하는 downstream task에 적용한다.
Convolution 연산의 경우 모서리, 꼭짓점과 같은 $Low Level Features$ 에서 $High Level Feature$ 순으로 집중하고, 마지막에 Classification을 진행한다.
좌측 상단부터 Convolution 연산을 진행한다. 이후 다음 연산을 위해 움직이는 단위를 Stride(S)라 한다.
외부 태두리에 0을 태두리를 추가하는 것을 Padding(P)이라 한다.
Image의 size를 $N\times N$, Filter의 size를 $F\times F$, Filter의 갯수를 $n$이라 하면 output size는 다음과 같이 정의할 수 있다.
$$(\frac{(N+2\times P-F)}{S}+1) \times n$$
3. Pooling Layer
Pooling Layer은 데이터의 특성을 유지하면서, 크기를 줄여주는 down sampling 역할을 진행한다. 해당 층은 Convolution Layer 사이사이에 넣어준다. 데이터의 공간적 특성을 유지하면서 크기를 줄여, 특정위치에서 특징을 추출하거나, 전체를 대변하는 특징을 추출할 수 있다는 장점이 있다. 또한 크기가 줄어들어 학습할때의 가중치를 크게 줄여 over fitting을 해결할 수 있다. Pooling Layer에는 대표적으로 Max Pooling과 Average Pooling이 있다.
Pooling Layer에서는 보통 overlap하지 않도록 한다. 해당 공간의 특성을 Pooling Layer을 이용하여 충분히 추출했다고 판단하여 Down Sampling을 진행하기 때문이다.
Zero Padding을 하는 이유는 무엇일까?
일반적으로 Filter을 이용하여 convolution 연산을 반복할 수록 activation map의 size가 작아진다. 이는 activation map이 포함하고 있는 정보의 양이 급속도로 줄어들 고 있음을 의미한다. 따라서 Zero Padding을 적용하여 activation map의 size가 연산 이전의 값과 동일 하게 적용할 수 있도록 한다.
또다른 이유로는 모서리의 정보를 잘 담기 위해서이다. convolution 연산을 진행할때 모서리 부분의 pixel은 다른 부분보다 덜 계산되기에 zero padding을 적용한다.
Stride는 왜 1로 고정하지 않을까?
Stride를 1로 하지 않을 경우 크기가 급속도로 작아진다. 이는 Down Sampling을 의미한다. 이를 바탕으로 Polling Layer와 같이 parameter을 줄여 over fitting을 방지할 수 있다.
Max Pooling이 더 많이 사용되는 이유?
확실하지 않지만 뉴런의 구조와 유사하게 작동하기에 많이 사용되는 것 같다. 전치가 넘을 경우 전이가 진행되는데, 이는 neuron이 fire하는 과정과 유사하게 볼 수 있다. 이처럼 해당 공간에서 최댓값의 전치가 평균값보다 큰 성능을 이루어내는 것 같다.
'공부 > 머신러닝' 카테고리의 다른 글
Optimizer (0) | 2024.04.06 |
---|---|
Weight Initialization (0) | 2024.03.25 |
Activation Function (1) | 2024.03.17 |
Backpropagation (0) | 2024.03.17 |
Loss Function and Optimization (0) | 2024.03.05 |