IE가 어른이 되기까지

[Deep Learning] Convolutional Neural Network (CNN) 본문

DL/Algorithms

[Deep Learning] Convolutional Neural Network (CNN)

기모랑의 초코 2023. 2. 28. 14:58

 

 

 

 

 

이미지, 비디오, 텍스트, 사운드 등은

어떻게 분석을 하는 것일까요 ?

 

이러한 비정형 데이터도 분류하고 예측할 수 있을까요 ?

이에 대한 방법론인 Convolutional Nerual Network에 대해 알아보겠습니다.

 

 

 

 

 

 

Convolutional Neural Network의 등장배경

 

 

 

 

 

 

만약 이러한 이미지가 있다면 어떻게 분석할 수 있을까요 ?

우리가 알고있는 딥러닝 지식에 의하면 모든 픽셀들을 독립적으로 Flatten 시켜

input layer에 넣게 될 것입니다.

 

 

 

 

 

그렇게 되면 Input layer와 Hidden layer 사이에

너무 많은 가중치가 생성될 것입니다.

 

또한, 이미지 데이터의 경우 위치 정보가 중요한데,

이러한 점이 포함되지 않아 이미지의 형태를 무시하게 됩니다.

 

이러한 문제점을 해결하기 위해 등장한 것이 바로 CNN입니다.

 

 

 

 

 

 

 

Convolution Neural Network (CNN)

 

 

 

 

 

 

 

Convolutional Neural Network (CNN) 은 합성곱 신경망이라는

의미를 가지고 있습니다.

 

즉, Convolutional Layer (합성곱 층) 을 통해 sliding window 방식으로 가중치와

입력값을 곱한 값에 활성함수를 취하여 은닉층으로 넘겨줍니다.

 

이를 통해 이미지, 비디오, 텍스트 또는 사운드로부터 분류하는데

필요한 특징들을 자동적으로 추출해줍니다.

 

 

 

 

 

 

Convolutional Filter (Kernel, Window)

 

 

 

CNN에서의 가장 핵심적인 요소인

Convolutional Filter (Kernel, Window) 에 대해 알아보도록 하겠습니다.

 

이는 원하는 이미지의 속성을 추출하는 방법입니다.

 

 

 

 

 

 

위 그림을 보면 왼쪽의 Convolutional Filter 값에 따라

다른 이미지를 추출해냅니다.

 

Filter 안의 값을 우리는 가중치라고 부르며,

원하는 이미지를 추출하기 위해 적절한 가중치를 찾아야합니다.

 

또한, 주변 픽셀 과의 관계를 함께 고려하여 이미지 위치 정보를 유지합니다.

 

 

 

 

 

 

기존의 방식에 따르면 4X4 이미지 이므로 16개의 가중치를 찾아야하지만,

Filter (Kernel) 을 통해 추정해야할 가중치가 총 9개로 감소된 것을

볼 수 있습니다.

 

 

 

 


 

 

 

그렇다면 어떻게 이미지의 특성을 추출해내는 것일까요 ?

 

 

먼저 Input이 흑백일 때 입니다.

 

 

 

 

 

위의 이미지의 픽셀 값 (Input) 과

Filter의 가중치를 곱하여 Image map (Feature map) 을 생성합니다.

 

 

 

 

 

위는 이미지가 컬러인 경우입니다.

이미지가 컬러일 때는 RGB 3채널의 이미지 결합입니다.

 

이때, RGB에 대한 각각의 Input값이 존재하며 채널마다 다른 Filter를 씌워

위와 같이 계산해야합니다.

 

이러한 Filter은 직접 픽셀 값을 지정해줄 수 있습니다.

 

 

 

 

 

 

 

Stride

 

 

 

 

 

만약 이미지가 4X4에서 5X5로 늘어난다면,

처음 예시 이미지처럼 28X28이라면 어떤 문제점이 발생할까요 ?

 

기본 원리처럼 한 칸 씩 움직이면 너무 오랜 시간이 걸리게 됩니다.

이때 움직이는 칸 수인 Stride를 지정해주어 Filter가 한 번에 여러 칸 씩 

움직일 수 있게 해줍니다.

 

 

 

 

 

 

 

 

이 경우 Stride를 2로 지정해주어

옆, 아래로 2칸씩 Filter가 이동하면서 Feature map을 생성하게 됩니다.

 

 

 

 

 

 

 

Padding

 

 

 

 

Filter을 움직이다보면 가장자리에 있는 픽셀들은

중앙에 있는 픽셀 보다 Convolution이 적게 이루어지는 것을

알 수 있습니다.

 

 

 

 

 

 

 

 

이러한 문제를 해결하기 위해

이미지의 가장자리에 0 값을 가지는 층을 쌓는

Padding을 실행합니다.

 

 

 

 

 

 

 

지금까지는 Convolution Layer을 통해 이미지로부터 고유한 특성을 추출하였고,

Activation Layer (대표적으로 ReLU, Sigmoid) 를 Feature map의 값들을

비선형 변환 시켜주었습니다.

 

지금부터는 신경망으로 만들어주기 위한 과정들에 대해

알아보도록 하겠습니다.

 

 

 

 

 

 

Pooling

 

 

 

 

Pooling이란  Feature map의 정보를 축약하는 역할입니다.

 

사실 우리는 이미지를 분류하기 위해 많은 정보가 필요하진 않습니다.

그렇다고 앞서 배운 Stride를 통해 크게 이동시키면 이미지의 위치 정보를 

잃어버릴 수 있기 때문에 Pooling을 사용합니다.

 

이를 통해 쓸데없는 데이터를 삭제하기도 하고, Training Data에 과적합 되는 것을 방지합니다.

 

Pooling은 연산 방식에 따라 여러가지 방법들이 존재하는데,

그 중 Max와 Average Pooling에 대해서 알아보겠습니다.

 

 

 

 


 

 

 

 

1. Max Pooling

 

 

 

 

 

 

2X2 라고 가정하였을 때,

해당 window에서 가장 큰 값을 추출합니다.

 

 

 

 


 

 

 

 

2. Average Pooling

 

 

 

 

 

 

 

 

2X2 라고 가정하였을 때,

해당 window의 평균 값을 추출합니다.

 

 

 

 

 

 

 

 

Flatten

 

 

 

 

 

 

Flatten이란 Fully connected Layer 형태로 만들어주기 위해

1차원의 벡터로 표현하는 과정입니다.

 

이전 단계까진 이미지의 특성을 학습하였다면

이후 단계부턴 이미지를 분류하기 위한 학습들을 진행합니다.

 

 

 

 

 

* Fully connected Layer : 한 층의 모든 뉴런이 그 다음 층의 모든 뉴런과

연결된 상태

 

 

 

 

 

 

 

 

 

 

'DL > Algorithms' 카테고리의 다른 글

[Deep Learning] Generative Adversarial Network (GAN)  (0) 2023.02.17
[Deep Learning] AutoEncoder (AE)  (0) 2023.02.17
[Deep Learning] 딥러닝이란 ?  (0) 2023.02.15
Comments