본 포스팅은 충남대 정상근 교수님의 강의를 참고하였습니다. 개인 공부를 기록하는 목적의 포스팅이며, 문제가 될 시 삭제하겠습니다.
Data transformation은 말 그대로 데이터 변형하는 것이다. 그 중 데이터 사이즈의 변화를 'dimension reduction'이라 부른다. 여기서 포인트는 입력 데이터의 특징을 유지하면서 줄이는 것이다. 이러한 데이터 변형은 대부분 이미지 처리에서 사용하는데, 유명하면서도 대부분 사용하는 CNN 알고리즘에 대해서 알아보자.
이미지를 통해 무엇인가 인식하기 위해서는, 기존의 이미지(input image)에 필터(Convolution Kernel)를 적용하여 결과 이미지(Feature map)를 얻는 과정이 필요하다. 이 때 기존의 이미지에 적용하는 필터를 커널(Kernel)이라고도 하는데, 과거에는 이러한 필터를 사람이 직접 만들었다. 같은 이미지라도 살짝 회전되어 있거나, 크기가 다르거나, 변형이 조금만 생겨도 분류하는데 어려움을 겪었다. 그런 경우에 대한 훈련데이터가 모두 필요했고, 그만큼 훈련시간도 상당히 길어진다는 단점이 있었다. 그래서 이미지 픽셀을 그대로 입력받기보다는 이미지를 대표하는 특성을 찾아내서 분류하는 것이 효과적이었는데 기존에는 사용자의 판단에 따라 특성이 결정되었는데, 이러한 특성을 찾아내는 과정을 CNN이 자동화시켰다.
CNN을 이용하면 실생활에서 옷, 사람, 얼굴, 표정, 동물, 숫자 등 많은 것들을 높은 확률로 인식할 수 있다. 일례로 딥러닝 애플리케이션은 CNN을 통해 수천 개의 병리학 보고서를 분석하여 암세포를 시각적으로 검출하며, 자율 주행 자동차가 객체를 감지하고 도로 표지판과 보행자의 차이를 구분할 수 있는 것도 CNN을 적용한 결과이다.
CNN은 은닉층이 여러개인 DNN을 응용한 알고리즘이다.
CNN에서는 이미지를 Convolution으로 변환한(특성 추출) 다음 은닉층에 넣고(Pooling Layer/분류), 여기서 계산된 결과를 다시 은닉층에 넣는 과정을 반복한다. 이 과정을 통해 이미지를 대표하는 특징을 학습하여 이미지를 분류하여 인식한다.
필터를 적용하는 방법을 도식화한다면 다음과 같다.
이렇게 이미지에 필터를 적용하여 Feature Map을 뽑아낸다.
이미지의 특징은 대부분 하나로 설명되지 않는데, RGB 이미지의 경우 Red, Green, Blue로 나누어 특징을 나타낼 수 있다. 이러한 특징을 나타낸 것들을 채널(Channel)이라 하는데, 모든 필터를 각 채널에 적용하여 Pooling Layer에 넣는다. 이 과정을 도식화하면 다음과 같다.
이러한 과정을 여러번 반복하면 연산량이 기하급수적으로 늘 것이므로 이를 방지하기 위해 Polling Layer에서는 적당히 크기도 줄이고, 특정 feature를 강조하는 일을 한다. 처리 방법으로는 Max Pooling, Min Pooling, Average Pooling이 있는데, CNN에서는 주로 Max Pooling을 사용한다.