CNN은 MLP의 한 범주로 볼 수 있으며, 일반적으로 시각적 개체(이미지, 비디오, 3D 개체 등) 또는 2D 텐서에 활용 됩니다.
CNN은 특징추출을 거쳐 분류를 하는 프로세스를 거치게 되는데, 특징 추출 영역은 Filter를 사용하여 공유 파라미터 수를 최소화하면서 이미지의 특징을 찾는 Convolution Layer와 특징을 강화하고 모으는 Pooling 레이어로 구성되어 있습니다.
이후 분류기를 통해 Classification을 수행하게 됩니다.
각 단계별로 살펴보면 다음과 같은 순서로 진행을 하게 되는데요.
1. Feature Map 생성
우선 Input Image를 Convolution 하여 Feature Map을 생성합니다.
이때 Kenel이라고 부르는 필터를 거치면서 이미지의 특징을 추출하게 됩니다.
위와같이 Input Image를 Kernel를 통과 시키면서 Feature Map을 Output으로 생성하게 됩니다.
Filter가 한칸씩 움직이는 것을 Stride라고 하며 한칸씩 움직일때 Stride의 값은 1이 되고, 만약 2칸, 3칸씩 이동을 하게 된다면 Stride의 값은 2,3이 되게 됩니다.
Feature Map Size의 크기는 위와 같이 Filter Size와 Input Size, Stride 값을 활용하여 산출식으로 계산이 가능합니다.
2. Zero Padding
이렇게 Feature Map을 산출함에 있어 몇가지 문제가 발생하게 되는데요.
바로 가장자리에 있는 값들의 소실문제와 Feature Map Size가 작아지는 문제점이 생기게 됩니다.
가장자리값 소실은 Input Image의 가운데 있는 값들 대비, 가장자리에 있는 값들은 상대적으로 사용이 될 되게 됨에 따라 특성 반영의 불균형이 발생하게 됩니다.
만약 가장자리에 Input Image의 중요한 특성을 가진 데이터가 있다면 중요한 정보를 놓치게 될 수 있다는 뜻이죠.
두번째로는 Feature Map Size가 작아지는 문제입니다.
Input Image 대비 Feature Map Size는 계속적으로 작아지게 되는데, 많은 컨볼루션 레이어를 거치다 보면 Output 이 너무 작아져서 특성을 알아볼 수 없을 정도가 되어 버리게 되는 경우가 발생할 수 있게 되는 것이죠.
이러한 문제를 개선하기 위해 사용하는 것이 바로 Zero Padding 입니다.
Pooling
컨볼루션을 거친 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하기 위해 Pooling을 사용하게 됩니다.
Pooling은 Subsampling이라도고 하며, Feature Map Size를 줄이면서 위치나 크니 변화에 강한 특징들만 남게되어 Input의 강인한 특성들만 남기게 되는 방법입니다.
Pooling은 특정영역에서 어떠한 값을 대표값으로 가져오거나(만들어내거나) 하는데, Max Pooling과 Average Pooling 2가지 방식이 주로 사용되며, Max Pooling은 특정영역에서 가장 큰 (최대값) 값을 Avg. Pooling은 평균값을 취하게 됩니다.
Max Pooling의 예시를 살펴보면, 2*2 필터에서 Stride를 2로 가정했을 떄 위와 같이 Pooling 결과를 얻을 수 있습니다.
보통 Pooling 크기와 Stride는 같은 크기로 설정하여 모든 원소가 한번씩 처리 되도록 설정하는 것이 일반적입니다.
Pooling Size는 위와 같은 계산식으로 산출이 가능합니다.
3. Fully Connected(FC) Layer
FC Layer는 마지막 컨볼루션 레이어나 Pooling 레이어 이후에 시작이 되게 됩니다.
마지막 컨볼루션 레이어 이후 FC Layer로 연결되는 과정에서 Flatten Layer를 거치게 됩니다. Flatten Layer는 CNN의 데이터 타입을 Fully Connected Neural Network의 형태로 변경하는 레이어입니다.
Flatten 레이어를 통해 값이 변한다거나 하지는 않고 배열만 바뀌게 됩니다.
이후 Softmax 등의 활성화 함수를 거쳐 최종 분류를 해주게 되는 구성이 CNN의 기본적인 구성으로 볼 수 있습니다.
'Data Analysis > Machine Learning' 카테고리의 다른 글
경사하강법 Batch/Stochastic/Mini-Batch Gradient Descent (BGD, SGD,MBGD) (0) | 2022.04.25 |
---|---|
인공신경망 초기 모델, ADALINE(아달라인) 이해, 손실함수(Loss Function) MSE (Mean Squared Error) (0) | 2022.04.23 |
딥러닝 Neural Network AND 함수, XOR 문제 해결 방법 (0) | 2022.04.21 |
머신러닝(Machine Learning) 정의 및 지도학습,비지도학습,강화학습 (0) | 2020.08.24 |