Link

특징(feature)이란?

이번 챕터에서는 딥러닝이 데이터를 어떻게 학습하는지 이해하기 위해, 먼저 특징feature이란 무엇인지 이야기하고자 합니다. 앞서 이 책에서 딥러닝을 활용하여 데이터를 학습하고 평가하는 가장 기초적인 방법을 배웠다면, 앞으로는 이러한 내용을 바탕으로 왜 학습이 잘 되는지를 이해할 수 있도록 하고자 합니다.

몽타주

흔히 영화나 드라마를 보면 범죄자들을 잡기 위해, 몽타주montage라는 것이 등장합니다. 몽타주를 통해 범인을 잡기 위해서, 몽타주는 범인의 얼굴을 특정하기 위해 목격자들에게 물어서 나온 특징들을 합쳐 만든 것이라고 할 수 있습니다. 이때 범인을 특정하기 위한 좋은 단서들과 나쁜 단서들을 한번 생각해볼 수 있습니다.

먼저 나쁜 단서들을 생각해봅시다. 만약 몽타주에 다음의 내용들이 적혀 있다면 어떻게 생각할까요?

  • 눈이 두 개
  • 귀가 두 개
  • 검은색 머리카락

아마 길 가는 대분의 사람들이 위와 같은 특징을 지닐 것입니다. 따라서 우리는 이들로부터 용의자를 구별해낼 수 없습니다. 하지만 예를 들어 다음과 같은 단서들은 좋은 특징이 될 수 있습니다.

  • 뺨에 큰 붉은 반점
  • 쳐진 눈
  • 긴 갈색 생머리

위의 특징들을 동시에 지닌 사람은 흔하게 만나볼 수 없을 것이고, 이것은 범인을 잡는데 좋은 단서가 될 수 있습니다. 이처럼 어떤 사람을 설명하고자 할 때, 다른 사람과 구분할 수 있는 특징들을 나열하는 것이 좋은 방법이 될 것입니다.

특징

이것을 데이터를 학습하는 관점에 적용시켜보면 어떨까요? 모델은 원하는 출력 결과를 뱉어내기 위해, 해당 출력을 지니는 입력 샘플들을 다른 샘플들로부터 구분해낼 수 있는 능력이 필요합니다. 따라서 구분을 원활하게 하기 위해, 데이터의 샘플을 잘 설명하는 특징feature을 추출하고 학습할 수 있어야 합니다.

앞서 몽타주의 예제를 떠올리며, 사람을 특정하고 구분 및 설명하기 위한 좋은 특징들이 무엇이 있는지 생각해볼까요?

  • 연속continuous값: 나이, 키, 몸무게, 소득
  • 카테고리categorical값: 성별, 직업, 거주지, 출신 학교/학과

만약 앞의 정보들이 있다면 우리는 어떤 사람에 대해 매우 잘 설명할 수 있을 것입니다. 특히 두 명이상의 사람들의 데이터가 존재할 때, 우리는 비슷한 특징을 가진 사람들끼리 묶어볼 수도 있을 것입니다.

하지만 반대로 모든 사람은 호모사피엔스라는 종에 속하므로, 호모사피엔스라는 특징으로는 사람을 전혀 구분할 수 없습니다. 그럼 만약 (모든 사람이 아이디를 가지고 있다는 가정하에) 특정 웹사이트의 아이디는 어떨까요? 물론 아이디를 구성하고 있는 영어 단어 또는 숫자들의 의미까지 분석하여 파악한다면 어떤 사람인지 설명할 수 있는 단서를 얻을 수도 있겠지만, 기본적으로 아이디는 중복 사용될 수 없기 때문에 전 국민의 숫자만큼의 아이디 갯수가 필요합니다. 따라서 아이디만 가지고 어떤 사람을 특정할 수는 있을 지언정, 어떤 사람인지 설명하거나 비슷한 사람을 찾는 등의 작업은 수행할 수 없을 것입니다.

그럼 다시 돌아와서 머신러닝에서는 어떤 특징들이 존재했을까요? MNIST 데이터셋의 예제를 떠올려볼까요? 모델은 데이터 샘플의 숫자를 분류하기 위해서 아마도 다음의 정보들이 필요할 것입니다.

  • 곧은 선과 휘어진 선이 얼마나 있는가?
  • 곧은 선과 휘어진 선들이 서로 어떻게 이어져 있는가?

한 발 더 나아가 같은 숫자 샘플들 사이에서, 특정 샘플들을 구분하기 위해서는 다음의 정보들도 유용할 것입니다.

  • 특정 위치의 선이 얼마나 굵은가?
  • 특정 위치의 선이 얼마나 기울어져 있는가?

만약 앞의 같은 특징들이 유용하다는 가정을 세우고, 각 샘플별로 위의 특징들을 수치화해서 모델에게 제공한다면 숫자를 분류하거나 샘플을 구분하는데 유용하게 활용될 것입니다. 만약 앞의 특징들에 대한 가설이 틀렸거나, 빠뜨린 특징이 존재한다면 모델의 성능이 떨어질 수 밖에 없습니다. 이때 기존의 머신러닝과 딥러닝의 차이가 큰 이점으로 작용합니다.

특징 추출 방법: 머신러닝 vs 딥러닝

전통적인 방식의 머신러닝에서는 주로 사람이 직접 가정을 세우고 특징을 추출하는 방법을 설정합니다. 이를 위해서 데이터를 면밀하게 분석하는 과정을 거쳐야 하고, 가정에 따라 전처리를 수행하여 특징을 추출할 수 있습니다. 그렇게 추출된 특징을 모델에 넣어 학습을 수행할 수 있는데요. 이런 방식을 활용할 경우 모델의 동작 및 결과 해석을 하기 쉽다는 장점이 있습니다. 하지만 만약 가설의 설정이 잘못되거나, 미처 생각하지 못한 특징이 존재할 수 있다는 단점이 존재합니다.

딥러닝을 활용하여 학습을 수행할 경우에는, 전통적인 방식의 머신러닝과 진행 방법이 사뭇 다릅니다. 기존의 전통적인 방식과 달리, 딥러닝에서는 보통 데이터를 날raw 것의 상태로 넣어주게 됩니다.[1] 그리고 신경망 모델이 직접 특징들을 파악하고 추출하는 과정을 거쳐, 분류 또는 회귀를 작업을 수행합니다. 따라서 이로인해 구현이 용이하며, 미처 사람이 발견할 수 없는 특징들도 활용될 수 있다는 장점이 있습니다. 아마도 이러한 속성은 딥러닝의 뛰어난 성능의 원인 중 하나일 것입니다. 하지만 단점도 존재합니다. 딥러닝 모델은 내부적으로 스스로 추출하고 가공한 특징들을 활용하기 때문에, 이를 해석하기 어렵다는 것입니다. 따라서 만약 모델의 성능이 만족스럽지 않을 때, 원인은 분석하는데 어려움을 겪을 가능성이 높습니다.

특징 벡터

특징 벡터feature vector는 앞서 살펴보았던 특징들을 모아서 벡터로 표현한 것을 이릅니다. 엑셀 파일과 같은 테이블로 구성된 데이터셋tabular dataset의 각 행row도 이에 해당될 수 있습니다.

  몸무게 나이 월소득 집 평수 차 배기량 월 지출
A 175 70 35 430 24 1600 340
B 180 90 32 260 16 0 180

각 열column은 벡터가 되면 차원을 이루고, 벡터의 각 차원은 어떤 속성에 대한 수치를 나타낼 수 있습니다. 이때 벡터의 각 속성에 대한 수치의 정도가 비슷할수록 비슷한 샘플이라고 생각할 수 있을 것입니다. 즉, 우리는 특징 벡터를 구성하면, 이를 통해 샘플 사이의 거리(유사도)를 계산할 수 있습니다.[2]

[1]: 숫자들로 이루어진numeric 테이블 데이터tabular data의 경우에는 각 특징(열column)들 사이의 스케일을 맞춰주기도 합니다.

[2]: 벡터 사이의 유사도 또는 거리를 구하는 방법은 주로 코사인 유사도cosine similarity와 유클리디언 거리Euclidean distance를 사용합니다. 두 벡터가 비슷할수록 유사도의 수치는 높아지며, 거리의 수치는 낮아집니다.