본문 바로가기

기타/Big Data

CNN(Convolutional Neural Network, 컨볼루션 신경망)알고리즘 이란

728x90

오늘은 cnn의 필요한 요소들과 작동 구조에 대해 알아보겠습니다.

cnn은 필터링 기업으로 인공 신경망에 적용하여 이미지를 효과적으로 처리하는 기법입니다.

1989년에 나왔지만 기울기 소실과 하드웨어의 한계로 발전이 멈추었다가

이런 문제들이 해결되면서 현재의 발전된 모델까지 나왔습니다.

Cnn은 다른 뉴럴 네트워크와 달리 모든 노드가 연결되어 있지 않다.

Sequential data를 학습할 때 사용됩니다.

Sequential data란 순서를 중요시하는 데이터로 Image, speech, text 데이터가 있습니다.

순서쌍 1,2와 2,1은 구성요소만을 본다면 같은 데이터입니다.

하지만 순서로 본다면 엄연히 다른 데이터이지요.

사람 얼굴을 본다고 했을 때 같은 모양의 코라 하더라도 일반적인 위치에 있는 것과 눈 위에 있는 것은 완전 다른 이미지입니다.

이렇듯 이미지는 순서를 중요시하는 데이터입니다.

 

Cnn은 픽셀 단위로도 할 수 있지만 이는 힘든 작업입니다.

때문에 픽셀을 묶은 local feature로 학습할 수 있습니다.

Localfeature는 그림의 특징을 찾아낸 일부들의 조합입니다.

 

Convolution neural networks

convolution이란?

두 개의 이미지가 있다고 했을 때

1,2,3

4,5,6

7,8,9

A, B, C

D, E, F

G, H, I

1*A+2*B+3*C…

같은 위치에 있는 것 끼리 더한 것입니다.

이는 뉴럴 네트워크에서 가중치와 데이터 값을 곱한 것을 다 더한 NET값 연산과 유사합니다.

이미지와 MASK(=FILTER, KERNEL)을 컨벌루션 연산합니다.

MASK, FILTER, KERNEL은 위에서 본

A, B, C

D, E, F

G, H, I

행렬을 말합니다.

MASK를 좌우 위아래로 한 칸씩 움직이면서 연산합니다.

그렇게 되면 이미지가 작아집니다.

8*8 이미지에 3*3 MASK를 한 칸씩 이동하면서 컨벌루션 하면 6*6이 되고

MASK가 5*5라면 4*4로 줄어듭니다.

 

해상도가 작아지는 것이 싫다면 ZERO-PADDING을 통해 해상도를 유지할 수 있습니다.

ZERO-PADDING은 원래 이미지 밖을 0으로 채워 컨벌루션 연산합니다.

컨벌루션 연산의 결과가 의미하는 것은 무엇일까요?

LOCAL FEATURE과 이미지의 유사성을 구하는데 의미가 있습니다.

만약 LOCAL FEATURE가

0 0 0

1 1 1

0 0 0

이라면

이것과 가장 유사한 픽셀을 가진 것은

0 0 0

1 1 1

0 0 0

일 것이다. 이것을 컨벌루션 연산하면 3이라는 값이 나옵니다.

즉 값이 높을수록 해당 부분이 LOCAL FEATURE과 유사성이 높습니다.

정리하면 비슷한 그림들을 찾기 위해 LOCAL FEATURE를 사용했고

컨벌루션 연산으로 LOCAL FEATURE와의 연결 강도를 계산할 수 있습니다.

항상 기억하자 CNN을 하는 이유는 비슷한 이미지를 찾기 위함입니다.

 

마스크는 어떻게 구하는 것일까요?

뉴럴 네트워크를 통해 설명하면

이미지 픽셀이 입력 값 마스크는 가중치 값이라고 보시면 됩니다.

가중치는 gdm을 통해 업데이트됩니다.

 

컨벌루션 연산을 하고 나면 이제 0보다 작은 픽셀들이 생기는데

이를 제거해주는 것은 THRESHOLD입니다.

주요한 특징을 가진 픽셀만 남겨두는 것이지요.

이렇게 생산된 픽셀 값들을 FEATUREMAP이라 부릅니다.

THRESHOLD는 NET값을 RELU함수로 처리하는 것과 같습니다.

CNN과 뉴럴 네트워크는 동작이 거의 유사합니다.

Pooling, 이미지의 해상도를 줄여주는 작업, 계산 양과, 메모리를 줄입니다.

Shift invariant 효과 도 있습니다. 마스크로 컨벌루션 연산하면 한 칸씩 밀릴 수 있습니다.

이런 문제를 해결해줍니다.

2*2 or 3*3 마스크를 사용해 해당 부분의 가장 큰 값만 표시합니다.(maxpooling)

평균을 구해서 표시해주는 평균 pooling도 있지만 maxpooling을 주로 사용합니다.

그 이유는 feature map은 강도를 나타내는 것인데 평균을 구하면 값이 낮아져 특징 값을 제대로 살릴 수 없기 때문입니다.

cnn과정을 정리하면

컨벌루션 연산-> threshold-> pooling->featuremap ->컨벌루션 연산……

이 과정을 반복하면 높은 레벨의 featuremap이 생깁니다.

이를 feature extraction이라 부릅니다.

최종 featuremap을 1차원으로 쭉 나열하고

그 값을 fully connected 뉴럴 네트워크에 입력하고 이미지 분류 모델을 만듭니다.

즉 이미지의 특징을 추출해 뉴럴 네트워크에 넣어 분류 모델을 구하는 것입니다.

728x90

'기타 > Big Data' 카테고리의 다른 글

dropout, Batch normalization이란  (0) 2020.11.22