본문 바로가기
인공지능/딥러닝

[DL] 딥러닝 CNN (합성곱 신경망)알고리즘 의 동작원리

by 도토리묵 :D 2022. 10. 1.

이번 시간에는 CNN에 대해 알아보겠습니다.

 

지난 DNN에서 발생한 overfitting(과적합) 문제에 해결책 중 하나로 나온 것이 CNN이며 computer vision 분야에서 매우 핫하게 사용되는 딥러닝 알고리즘입니다.

 

Overfitting (과적합) 이란

overfitting은 학습 데이터를 과하게 잘 학습하여 새로운 데이터가 들어왔을 때 오히려 낮은 성능을 보이는 것을 말한다.

 

 

 

 

 

CNN 등장 배경

Convolutional Neural Networks라는 이름은 실제로 Yann LeCun과 팀의 LeNet 설계에서 유래했습니다

(논문: http://vision.stanford.edu/cs598_spring07/papers/Lecun98.pdf)

 

 

 

 

CNN (Convolutional Neural Network) 

CNN은 인간의 시신경을 모방하여 만들어졌습니다.

CNN에서는 필터를 이용한 컨볼루션과 풀링 연산을 반복적으로 진행하면서 이미지의 특징을 검출합니다.

그럼 컨볼루션이 무엇인가부터 알아보겠습니다.

 

 

 

 

 

Convolution (합성곱)

그림1) Convolution

 

그림2) Stride

컨볼루션 이란 우리말로 합성곱을 의미합니다.

이미지에서의 합성곱은 특정 크기를 가진 필터를 일정 간격으로 이동하면서 입력 데이터에 각각의 행과 열에 필터 값들을 곱해주고 그 결과들을 모두 더하여 새로운 행열에 넣는 연산 작업을 의미합니다.

 

여기서 필터를 일정간격으로 이동하는 것을 stride라고 하며 그림 2)와 같이 stride가 1이면 필터가 한 칸씩 이동하며 연산을 하게 됩니다.

 

하지만, 그림 1)에서 보시는 바와 같이 5X5 크기의 이미지에 3X3 필터를 적용시켜 주었더니 출력 이미지 축소되었습니다.

 

Cnn은 여러 필터를 가지고 여러 번 계산을 해야 하는데,  초반부터 이미지가 너무 작아져 버리면 더 깊게 학습시킬 데이터가 부족해져 버립니다.

 

이를 방지하기 위해서 zeroPadding이라는 것을 사용합니다.

 

 

 

 

Zero padding

출처: https://medium.com/@draj0718/zero-padding-in-convolutional-neural-networks-bf1410438e99

Zero padding이란 이미지 주위를 0으로 둘러주는 과정을 말합니다.

그림과 같이 zero padding을 적용 함으로 입출력 이미지 모두 4X4 로서 크기가 줄어들지 않았습니다.

 

 

Feature map

필터를 통과한 이미지는 각각의 특성을 가지고 있어 feature map이라고 합니다.

컨볼루션 과정을 거친 이미지들은 색상, 선, 형태, 경계 등의 각각의 특징이 뚜렷해집니다.

 

 

 

 

 

컨볼루션을 통해 이제 피쳐 맵들을 얻었습니다.

다음은 이 피쳐맵들을 가지고 풀링이라는 것을 하게 됩니다.

그럼 풀링에 대해 알아보겠습니다.

 

 

 

 

Pooling

출처:https://nico-curti.github.io/NumPyNet/NumPyNet/layers/maxpool_layer.html

풀링이란 컨볼루션 필터에 의해 추출된 피쳐 맵의 크기를 축소하는 데 사용됩니다.

축소를 하는 이유는 필요한 주요 특징들만 학습을 하여 오버 피팅이 발생하는 것을 방지하기 위함입니다.

(글 상단에서 설명)

 

풀링의 종류 중 이미지 인식 분야에서는 주로 Max풀링을 사용합니다.

Max풀링은 그림과 같이 2X2 영역마다 최댓값을 하나씩 추출해서 피쳐 맵의 크기를 축소해줍니다.

 

 

 

 

 

Convolution + pooling의 반복

이런 식으로 컨볼루션과 풀링 과정을 여러 번 반복하다 보면 최초 이미지에서 주요 특이점들만 남게 됩니다.

이제 이 이미지의 특이점은 flatten이라는 과정을 거치게 됩니다.

 

 

 

 

Flatten

Flatten은 최종적으로 줄어든 피쳐 맵들을 각각 1차원 데이터 형태로 펴는 작업입니다.

영어 뜻 그대로 납작하게 만드는 작업을 하는 것입니다.

 

일차원 백터 형태로 펴는 이유는 Fully Connected Layers에 넣기 위해서입니다.

 

 

 

Fully Connected Layers

Flatten 과정을 거친 1차원 백터 형태의 테이터들은 모두 하나로 이어지게 되며 fully connected  계층을 거치게 됩니다.

fully connected  계층은 앞 포스팅에서 설명한 DNN의 뉴럴 네트워크 구조와 동일한 작업을 진행하게 됩니다.

그 후 제일 마지막에  softmax 함수로 분류를 해줍니다.

 

 

 

 

SoftMax

Softmax 함수란  활성화 함수 중 하나로, 결과 수에 제한 없이 전체에 대한 각각의 확률을 구할 때 사용하는 함수입니다.

입력값에 대한 각각의 편차를 확대시켜 큰 값은 상대적으로 더 크게, 작은 값은 더 작게 만듭니다.

이 방식으로 최종적으로 입력 이미지가 어떤 이미지 인지 확률을 통하여 분류가 됩니다.

 

 

 

 

 

여기까지 CNN의 동작 과정에 대해 알아보았습니다.

RELU 및 SoftMax와 같은 활성화 함수의 종류 및 왜 필요한지에 대해서는 따로 포스팅을 할 예정입니다.

 

다음 시간에는 Object Detection에 대해 알아보겠습니다!!

 

 

댓글