-
차원 축소, 차원의 저주에 관하여Programming & Machine Learning/풀어쓰는 머신러닝 2017. 8. 10. 03:10
최근에 차원 축소에 대한 스터디를 진행하다가 문득 든 질문,
도대체 차원 축소를 왜 해야하는거지?
라는 간단한 질문에 대답하기 어려웠다.
당연히 피처 수가 적으면 모델이 더 잘 돌아가겠지.. 하는 생각 외에는 신박한 답변이 생각나지 않았다.
잠시 페이드 아웃의 시간을 거치고, 문득 떠오른 단어가 "차원의 저주"였다.
유레카, "차원의 저주"를 해결하기 위해서 우리는 차원 축소를 하는거지! 라고 당당히 대답해 버렸다.
그럼 차원의 저주는 뭐지..?
두서없이 드는 생각들을 옮겨적어 봐야겠다.
차원축소
차원 축소를 해야 하는 이유에 대해, 실생활적인 예를 들어 생각해보자.
어떤 사람이 커피를 마시는 상황에 대해 머신 러닝 기법을 적용하여 예측하고자 한다.
커피를 마시는 이유. 피처를 한번 선정해보자.
졸려서, 맛있어서, 기분을 내기 위해서 등의 몇 가지 큰 이유가 존재할 것이다.
일단은 3개의 피처로 모델을 만들고 예측해보았다. 제법 괜찮았다.
헌데, 3개의 피처로는 모자라 보인다. 추가적인 피처를 선정하고 데이터를 더 수집해보고 싶다.
그래서 피처를 이것저것 추가한다.
카페인을 섭취하기 위해서, 작업의 능률을 향상시키기 위해서, 중요한 시험을 앞두고 있어서...
피처를 이것저것 추가했으니 모델의 정확도가 올라갈 것 같은 뿌듯한 마음이 생긴다.
아마 이 모델은 성능이 좋아지지 않을 것이고 몇몇 피처는 필요하지 않다는 것을 우리는 예상할 수 있다.
왜 그럴까?
졸리다, 카페인을 섭취하다, 작업의 능률을 향상시키다 라는 3개의 피처는 어딘가 모르게 비슷해 보인다.
3개의 피처는 "피곤하다"라는 근본적으로 비슷한 속성을 표현하는 피처들이기 때문이다.
만약 이 데이터를 축소한다면, 3개의 피처는 하나로 축소될 것이고, 원래의 데이터가 가지고 있는 "피곤하다"라는 내재적 속성을 하나로 사용할 수 있을 것이다.
이처럼 차원축소는 단순히 데이터의 계산을 간소화 시키는 것을 넘어서서, 데이터를 대표하는 내재적 속성을 밝혀내는 작업으로 이해하는 것이 더 멋지다.
대부분의 상황에서 데이터는 특징(피처)이 너무 많기 때문에, 내재적 속성을 대표하는 좋은 피처만을 사용하겠다는 것이다.
차원의 저주
데이터의 차원이 증가하게 되면, 그것을 표현하는 데이터의 양은 아마 exponential하게 증가할 것이다.
이 말이 무슨 말이냐면, 데이터의 차원은 1,2,3... 으로 linear 하게 증가하는 반면, 데이터 포인트간의 거리는 (유클리드 거리를 사용한다는 예를 들면) exponential하게 증가하기 때문이다.
데이터의 부피가 증가한다는 표현을 흔히 사용하는데,
이러한 상황에서 가장 쉽게 생각할 수 있는 단점은 역시 계산비용의 기하급수적인 증가이다.
하지만, 일반인도 GPU만 있다면 슈퍼컴퓨터로만 가능하리라 여겨지던 딥러닝을 찍어내는 세상에 계산비용만이 그 이유의 전부는 아닐 것이다.
데이터의 부피가 늘어난다는 것은, 정보의 밀도가 감소한다는 것을 의미한다. 즉, 정보의 "질"을 담당하는 차원은 한정되어 있는데 반해,
데이터의 개수와 차원이 무수히 증가하게 된다면, 그 데이터를 이용한 학습모델의 성능은 당연히 떨어질 수 밖에 없을 것이다.
이쯤에서 적절한(?) 비유를 들어보자.
나는 어떤 이성과 교제중이다. 상대방이 물었다. 왜 나를 만나느냐고.
나는 당신과 만나는 이유에 대해 오만가지 이유를 덧붙여 설명하지만, 사실 그 사람과 만나는 이유는 "사랑"이라는 매우 심플하면서도 밀도있는 피처 때문일 것이다.
그 편이 훨씬 설득력있고 정확한 만남의 이유일 것이다.
하지만 다른 이유가 구차하게 덧붙여지고 곁가지가 들어가는 순간, 상대방은 나를 의심할 것이다.
아마 속으로 생각할 것이다. 돈 때문인가? 뭐 때문이지? 날 사랑하긴 하는 건가?
그리고 나서, 나는 이 이성과 헤어지고 다른 이성과 교제를 시작하였다.
이번에 교제하는 이성을 만나는 이유는 무엇일까?
성격이 매우 좋거나, 키가 크거나, 아름다운 외모를 가졌다거나 하는 등의 이유를 붙여가며 만났다고 해보자.
이전에 교제했던 이성과는 이유가 다르다. "교제"라는 모델이 오버피팅 되어있던 것이다.
그렇다면 처음부터 교제의 이유가 사랑이라는 심플하고 밀도있는 피처라면 어떨까?
이번에 교제하는 이성도 그러한 피처를 가지고 있을 것이다. 아마 교제라는 모델은 오버피팅 없이 어디에나 적용될 것이고,
당신은 교제에 필요한 피처는 사랑이라는 중요한 대전제를 알았기 때문에, 사랑이 있다면 교제가 성공할 수 있다는 유용한 모델(?)을 얻을 수 있다.
매우 부적절한 비유를 들었지만, 차원의 저주는 결국 피처의 밀도, 희소성과 관련된 오버피팅의 문제라는 것이다.
정해진 크기의 데이터의 차원이 증가하는 경우, 피처공간의 희소성이 증가하게 되고 데이터의 밀도가 낮아지게 된다.
예를 들어 KNN의 경우 같은 점들 사이의 값이라도 차원이 커지면 최소길이가 점차 길어져 평균 길이와 비슷해지고 최소 길이라는 의미가 희소해진다는 것이다.
여기서 더해, 피처가 많아지면 데이터가 오버피팅 될 확률이 높다는 것은 매우 직관적이다.
일반적인 경우에 차원의 저주를 해결하는 방법으로는 모델을 regularization 해주는 방법, 차원을 축소하는 방법, 피처를 selection하는 방법들이 있을 것이다.
'Programming & Machine Learning > 풀어쓰는 머신러닝' 카테고리의 다른 글
커널 주성분 분석(KPCA)로 차원 축소하기 (0) 2017.08.10 선형판별분석(LDA)로 차원 축소하기 (0) 2017.08.10 뉴럴넷에서의 오버피팅과 해결책 (0) 2017.08.03 배치 방식과 온라인 방식의 모델 학습 (0) 2017.08.03 주성분분석(PCA)로 차원 축소하기 (0) 2017.08.02 댓글