Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

Study Log/Small Talk

차원의 저주 : Curse of Dimensionality

본 포스트는 주관적인 예제와 [Hands-On Machine Learning with Scikit-Learn & TensorFlow] (저자 : Aurelien Geron / 부제: 핸즈온 머신러닝) 8장 및 [다크프로그래머 블로그 : 차원의 문제](https://darkpgmr.tistory.com/145)를 참고하여 작성되었다.


목차

  1. 차원 : Dimensionality
  2. 차원의 저주 : Curse of Dimensionality

차원 : Dimensionality

이 곳에서는 차원 축소를 설명하기에 앞서, 기계학습적 관점에서 차원의 의미를 짚고 넘어간다. 일반적으로 한 데이터를 나타내면 데이터가 가진 특성을 나열하여 표현한다. 예를 들어 친구의 얼굴을 설명할때 우리는 그 친구의 눈 크기, 눈썹 모양, 코 모양, 얼굴 형태, 피부색 등의 여러 특징을 통해 설명한다. 마찬가지로 기계학습에서도 데이터를 다룰 때 우리는 데이터가 가진 특성을 나열하여 한 데이터를 설명한다. 이는 수학적 개념을 도입하여 수치화하면 아래와 같이 간단한 벡터로도 표현이 가능하다.

Nana=[52,165,2,33,98]

이 벡터는 나나의 몸무게는 52, 키는 165, 성별코드 2, 학번 33, 수학 점수 98을 나타내는 데이터이다. 이와 같이 나나는 5가지의 특성으로 현재 데이터 공간에서 표현할 수 있다. 이때, 각 특성을 서로 독립된 차원이라고 여긴다면 5차원 공간의 한 점으로 나나를 표현할 수 있다. 즉, 어떤 시스템의 독립변수의 개수로 차원을 정의할 수 있다. [^1]


차원의 저주 : Curse of Dimensionality

     위에서 설명했듯이 한 데이터를 여러 독립 차원을 이용하여 표현할 수 있다. 그렇다면, 데이터에 대한 정보가 많으면 많을 수록 더욱 정밀하게 표현 가능하니 차원을 높이게 될 것이다. 쉽게 말해, 나나에 대한 정보가 저 5가지 뿐만 아니라 10가지, 100가지, 1000가지 등으로 늘어나게 되면 나나와 다른 사람을 정확하게 구별할 수 있다. 마치 적은 픽셀로 표현되어 흐릿한 저해상도 사진과 다량의 픽셀로 표현되어 선명한 고해상도 사진과 같은 격이다.

   

    이 결과 한 데이터를 표현하기 위해 수 많은 차원이 필요해진 바람에 그 모든 차원에서 균일하게 데이터가 분포해 있으려면 늘어난 차원 수 보다 더 많은 양의 데이터가 필요하다. 예를 들어, 사진에서 짧은 머리카락 한 가닥만 표현하려고 한다면 선 하나로 나타낼 수 있으니 수 백개 픽셀로 금방 한 가닥을 그릴 수 있다. 반면, 사이즈가 320x240인 사진 전체를 표현하려면 무려 76,800개의 픽셀이 필요하다. 나아가 사진 속 인물을 3d 프린팅을 하여 모형을 만든다면? 사진에서 표현하지 못했던 입체적 깊이까지 고려하여 수 백만개의 픽셀로 나타내야 할 것이다. 다시 말해, 고차원 공간을 정확하게 표현하기 위해 필요한 데이터 개수는 기하급수적으로 늘어나게 된다.

 

    이는 데이터 기반 학습에서 치명적인 단점을 초래할 수 있다. 일반적으로 기계학습은 주어진 데이터를 통해 학습을 하고 학습된 모델로 예측을 한다. 이때, 데어터가 너무 고차원이라 훈련 데이터셋이 충분히 전체 공간을 나타내지 못하고 학습 모델이 특정 부분만 학습하게 된다면 과적합(overfitting) 이 된다. 쉬운 예로, 사진에서 픽셀 하나하나가 입력 데이터로 주어지는데 사진이 워낙 커서 모든 픽셀을 수집할 수 없어 오른쪽 발 근처 픽셀들만 수집되어버려 오른쪽 발만 잘 배운 모델이 되어버린 다는 것이다. 이리 되면 당연히 모델은 머리나 팔 등 다른 부위는 아예 알 수 없다.

   

     따라서, 주어진 데이터 개수가 충분하지 않을때 고차원으로 표현된 데이터는 과적합을 초래한다. 이는 주어진 데이터셋이 고차원 공간을 충분히 대표하지 못할 때 발생하는 현상으로 저차원일 때보다 훨씬 불안정한 예측 성능을 보인다. 이러한 맥락에 따라, 대표적으로 해결책은 두 가지가 있다.

   

    첫 번째는 고차원 공간을 대표할 수 있을 만큼 데이터 수를 충분히 늘리는 것이다. 이는 실질적으로 매우 고된 일이 될 것이다. 핸즈 온 머신러닝에서 재밌는 예제로, 특성 수가 단 100개인 데이터 공간을 표현하기 위해 필요한 데이터 개수를 계산한다. 모든 차원에 걸쳐 균일하게 퍼져 있다고 가정하고 훈련 데이터를 길이가 1인 1차원 수직선에 서로 평균 0.1 이내에 위치시키려면 10개, 크기가 1인 2차원 일때는 10x10=100개, 3차원 일때는 10x10x10=1000개 ... 100차원 이면 10x10x...10=10100개의 데이터가 필요하다. (우주에 존재하는 원자 수는 관측 가능한 우주의 질량을 수소 원자 질량으로 나눠 계산할 수 있는데, 대략 1080개로 알려져 있다고 한다.)[^2]

 

    현실적인 두 번째 해결책은 차원 축소(Dimensionality reduction) 이다. 이는 고차원 공간 상의 데이터를 저차원 공간으로 매핑시키는 방법이다. 다음 섹션 부터는 이에 대해 소개한다.


참조

[^1]:다크프로그래머 tistory 블로그 : 차원의 문제
[^2]:Hands on Machine Learning : 271p

(적절한 이미지 추가할 것!)


더보기

후기

정리하고 보니 여타 다른 글과 별 다름 없는 맥락으로 이어나가고 있다. 기초를 다루는 글이기도 하고, 현재 내 문장력이 그리 좋지 않다는 것이 실감되는 부분이다. 다음 포스팅에서는 한 번 더 생각하고 한 발 더 나아갈 수 있도록 해보자.