CNN[합성곱 신경망] 개념, 모델구조

2021. 3. 24. 21:58DeepLearning_study

 

CNN (Convolutional Neural Networks)

CNN은 딥러닝에서 주로 이미지영상 데이터를 처리할 때 쓰이며 이름에서 알 수 있다시피 Convolution이라는 전처리 작업이 들어가는 Neural Network 모델을 말한다. 

 

CNN의 탄생 배경을 살펴보면 DNN(Deep Neural Network)이 있다. 이 DNN은 기본적으로 1차원 형태의 데이터를 사용하는데 여기서 이미지 데이터를 한 줄의 데이터로 만드는 과정에서 이미지의 공간적/지역적 정보(spatial/topological information)가 손실이 되는 문제가 발생하고 이로 인해 결과적으로 학습시간과 능률의 효율성이 저하된다. 이러한 문제를 해결하여 나온 모델이 CNN이라고 할 수 있다.

 

CNN은 이미지(raw input) 그대로 받아 공간적/지역적 정보를 손실하지 않고 특성(feature)들의 계층을 빌드업하여 이루어진다.

 

이러한 CNN의 특징을 살펴보면, 크게 두 가지가 있다.

 

- Locality : 이미지 전체보다는 부분을 보는 것을 뜻하고, CNN은 이미지의 인접 픽셀들의 correlation을 비선형필터를 적용하여 추출한다.

 

- Shared Parameters : 필터의 반복적용으로 변수 감소를 획기적으로 이루어내고 토폴로지 변화에 무관한 향상성을 띈다.

 


Convolution 작동원리

 

Convolution

기본 convolution은 filter(kernel)input image matrixsliding window를 통해 훑으면서 진행된다.

결론적으로 convolution의 목적은 입력 값 이미지의 모든 영역에 같은 필터를 반복 적용해 패턴을 찾아 처리하는 것이다. 추가적으로 convolution에서 사용되는 연산처리로는 Inner Product가 있는데, 이는 행렬 값들 간의 곱을 합하는 연산을 말한다.

inner product

 


Convolution 처리 과정

 

위에서 말했듯이 convolution의 기본적인 과정은 filter가 input image를 훑으면서 진행된다.

이해를 돕기 위해 input image의 크기를 5X5, filter(kernel)의 크기를 3X3으로 가정한다.

위 그림처럼 먼저 filter와 input image이 겹쳐지는 matrix 간의 inner product를 수행한 값 1+0+1+0+1+0+0+0+1=4 해당 과정의 결과값이 된다. 

이번에는 filter를 한 칸 옆으로 옮겨서 똑같은 과정을 수행하면 결과값이 3이 나온다. 이렇게 input image를 filter가 모두 훑게 되면 3X3의 result matrix가 나온다.

 

정리해보면 여기서 이 result matrix의 크기(차원)의 값은 아래와 같이 나타낼 수 있다.

입력값: d1 x d2
필터: k1 x k2
결과값: (d1 - k1 + 1) x (d2 - k2 + 1)

 


 Zero Padding

Convolution을 위에서 처럼 수행하게 되면 5X5에서 3X3으로 차원이 축소되면서 데이터 손실이 발생한 것을 알 수 있다.

filter가 input image의 끝에 도달해버려서 결과적으로 input image와 filter 간의 크기 차이만큼의 차원이 손실되는 것이다.

 

이를 해결하기 위한 방법으로 0으로 테두리를 감싸 input image matrix의 크기(차원)를 늘리는 일명 zero padding이 있다.

위 예시로 확인해보면 5X5에서 7X7로 크기가 늘어나고 결과값은 (7 - 3 + 1) x (7 – 3 +1)로 손실 없이 5X5가 유지됨을 볼 수 있다.

입력값: (5+2) x (5+2)
필터: 3 x 3
결과값: (7 - 3 + 1) x (7 – 3 +1)


Stride

 

stride필터를 얼마만큼 움직여 주는가에 대한 것을 말한다. 위 예시들에서는 stride=1이었던 것이다. 여기서 이 stride값이 커질수록 input image를 훑는 횟수가 적어지므로 결과값 matrix의 크기(차원)는 작아짐을 알 수 있다. 결과값 matrix의 크기(차원)를 정리해보면 아래와 같다.

입력값: d1 x d2
필터: k1 x k2
stride: s
결과값: (((d1 - k1) / s) + 1) x (((d2 - k2) / s) + 1)

 


CNN 네트워크 구조

CNN networks

CNN의 네트워크 구조는 Convolutional layer와와 pooling layer들을 활성화 함수 앞뒤에 배치한 형태이다.

 

Convolutional layer

Convolutional layer는 간단하게 convolution과정과 활성 함수(activation function)를 거치는 과정이다.

여기서 여러 개의 filter(kernel)을 이용하여 다수의 convolution 결과값 도출이 가능하다. (feature mapping)

 

Convolutional layer

 


Pooling layer

Convolutional layer를 거치고 나면 다수의 결과값이 생성되어 너무 많은 데이터를 다루게 되는 문제점이 생긴다. 이를 해결하기 위한 방법으로 pooling layer를 거치게 된다.

 

pooling layer는 각 결과값(feature map)의 차원을 축소해 주는 것이 목적이고 feature 간의 correlation이 낮은 부분을 삭제하여 각 결과값의 크기(dimension)를 줄이는 과정이다.

 

pooling layer에는 크게 두 가지 방법으로 Max pooling Average pooling방법이 이다.

Max pooling방법은 feature map을 특정 크기로 잘라낸 후, 그 안에서 가장 큰 값을 뽑아내는 방법을 말하고,

Average pooling방법은 feature map을 특정크기로 잘라낸 후, 평균을 취해 뽑아내는 방법을 말한다.

 


Dropout layer

droptout은 부가적으로 사용되는 layer로 학습의 overfitting을 막기 위해 네트워크의 유닛의 일부만 동작하고 일부는 동작하지 않도록 하는 방법을 말한다. 

 

 


Flatten (Vectorization)

flatten 과정은 마지막 output layer1차원의 벡터 데이터로 변형하는 과정이다. 여기서 이미지 데이터를 1차원 배열로 만드는 것이 문제가 되지 않을까 생각할 수 있다. 하지만 앞의 여러 layer를 통해 입력 이미지에서 얻어온 특이점 데이터가 된 것이므로 1차원 데이터로 변형해도 무관하다.


마무리

CNN 네트워크의 마무리로 하나 이상의 Fully-Connected Layers(Dense Layers)와 softmax 활성 함수를 적용시켜주면 끝이다.

 


Hyper-parameters

 

추가적으로 CNN과정을 통해 사용되는 hyper parameters는 다음과 같다.

 

  • Convolutional layers: 필터의 갯수, 필터의 크기, stride, zero-padding의 유무
  • Pooling layers: Pooling방식 선택(MaxPool or AvgPool), Pool의 크기, Pool stride (overlapping)
  • Fully-connected layers: 넓이(width)
  • 활성 함수(ActivationReLU(가장 주로 사용되는 함수), SoftMax(multi class classification), Sigmoid(binary classification)
  • Loss function: Cross-entropy for classification, L1 or L2 for regression
  • 최적화(Optimization) 알고리즘과 이것에 대한 hyperparameter(보통 learning rate): SGD(Stochastic gradient descent), SGD with momentum, AdaGrad, RMSprop
  • Random initialization: Gaussian or uniform, Scaling

지금까지 CNN네트워크의 기초개념에 대해 정리해 보았습니다 :-D 다음 포스팅에서는 CNN을 이용한 간단한 이미지 분류 예제를 살펴보겠습니다-!

 

참고 :

https://halfundecided.medium.com/%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-cnn-convolutional-neural-networks-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-836869f88375

 

https://m.blog.naver.com/seongcheol02/221746849767

반응형

'DeepLearning_study' 카테고리의 다른 글

[ keras ]CNN MNIST 예제_python  (0) 2021.03.24