티스토리 뷰

Study/AI

[DL] Convolutional Neural Network이란?

생각많은 소심남 2018. 5. 14. 00:22


아마 위 그림들을 본 사람이 많을 것이다. 사람이 보기에 따라서 위의 오른쪽 그림은 할머니로도 보일 수 있고, 어떤 사람은 베일을 쓴 여성이 보일 것이다. 또 왼쪽 그림은 사람보기에 따라서 오리로 볼수도 있고, 토끼라고 볼 수 있다. 사실 사람들이 보는 그림의 의미가 다른 이유는 그림이 머리속에 들어왔을 때 뇌가 그렇게 반응하고, 분류를 했기 때문이다. 이 때 뇌는 해당 그림의 feature(특징)을 뽑아보고 기존에 알고 있던 이미지들의 특징과 비교해보면서 그와 유사한 그림을 선택하게 되는 것이다. 위의 그림들에서도 사람들이 보는 결과가 다 다른 이유는 결국 그렇게 뽑아낸 특징이 모호하기 때문인 것이다. 

 Convolutional Neural Network(CNN)은 기존의 Neural Network에서 이런 이미지들의 특성을 뽑을 수 있게끔 Layer가 구성되어 있어 새로운 이미지에 대해서도 분류를 할 수 있게끔 설계된 형태를 말한다. 간단하게 다음의 구조로 설명되기도 한다.

이전에 나왔던 Artificial Neural Network(ANN)은 결과값이 어떤 우리가 알고싶어하는 특정 필드의 값이 나왔지만, CNN같은 경우에는 입력 이미지에 대한 분류를 어떻게 할지에 대한 Label 형태로 출력이 나온다. 보통 많이 나오는 예제가 고양이인지 개인지 구분하는 예제를 들어보면,

개 이미지나 고양이 이미지를 CNN의 입력으로 넣게 되었을 때, 정확하게 해당 이미지를 Label별로 구분할 수 있느냐가 CNN의 궁극적인 목표가 된다. 

 사실 이미지를 어떻게 구별해내냐의 방법은 직관적이다. 보통 사물을 바라볼때 비슷하다고 여기는 것들은 색의 분포가 비슷비슷하다. 여기서도 각 입력으로 넣는 이미지를 픽셀단위로 쪼개서 바라보는 것이다. 가령 예를 들어 흑백의 정보만 담고 있는 grayscale 이미지에선 각 픽셀이 0~255 사이의 값을 가질 것이고, color 이미지도 RGB channel로 나눠보면 각 channel 별로 0~255 사이의 값을 가지게 된다. 

결국 픽셀단위로 쪼갰을 때 나오는 수치의 분포를 바탕으로 입력의 특징을 뽑아내고, 이를 바탕으로 구분하는 게 전체적인 동작원리가 된다. 그런데 아마 알겠지만, 고해상도의 이미지를 픽셀단위로 일일이 쪼개서 그 값들을 학습하기란 쉽지가 않다. 이때문에 kernel이라는 개념을 두고 kernel내의 픽셀들에 대해서 convolution 연산을 취하게 된다. 이외에도 Pooling이랑 Flattening 같은 각 기능을 수행하는 Layer들이 존재하는데 이에 대해서는 다음 포스트에서 다뤄보려고 한다.

- 참고 : Deep Learning A-Z : What are Convolutional Neural Networks?

댓글