2탄: 차원의 저주란? 고차원 데이터에서 발생하는 문제
자, 이제 진짜 차원의 저주에 대해서 설명하고자 한다.
차원의 저주
저차원과는 달리 고차원의 경우 우리가 직관적으로 이해하는 저차원 공간과 매우 다른 성질*을 나타내는데 이걸 차원의 저주라고 한다.
차원의 저주는 데이터의 차원이 증가하면서 성능이 안 좋아 지는 현상을 말하는 것이다.
매우 다른 성질*
거리 균등화, 데이터 희소성, 차원 간 상호작용의 복합성, 모델의 과적합 위험, 시각화의 어려움
그럼, 차원이 많아지면 왜 어려워질까?
우리가 문제를 생각할 때 보통 2D(종이) 위에서 점을 찍거나 선을 그리면서 생각을 한다.
근데 만약 이걸 3D(입체 공간) 으로 확장하면? 머릿속에서 상상하기가 조금 어려워진다. 물론! 쉬운 사람도 있지만 대체적으로는 어렵다. 일단 난 어렵다...ㅎ
그런데 이게 만약 4D, 5D … 이렇게 차원이 계속 늘어나면? 완전 복잡해져서 사람이 직관적으로 이해하기 어려워진다.
자, 예를들어보자. 친구를 찾는다고 가정해 보면
- 2D(두 가지 정보)만 고려 ➡️ 같은 학교 + 같은 취미
- 3D(세 가지 정보)로 확장 ➡️ 같은 학교 + 같은 취미 + 같은 사는 동네
- 4D(네 가지 정보) ➡️ 같은 학교 + 같은 취미 + 같은 사는 동네 + 같은 좋아하는 음식
이렇게 정보(차원)가 많아질수록 완벽하게 맞는 친구를 찾기 어려워진다.
왜냐하면 모든 정보를 만족하는 친구를 찾으려면 데이터가 엄청 많아야 하기 때문이다.
이렇게 차원이 증가하면 데이터 포인트가 고르게 분포하지 않고 멀리 떨어지게 된다. 차원이 높아질수록 데이터가 희소해지고, 이는 머신러닝 모델이 의미 있는 패턴을 찾기 어려워진다는 것이다.
너무 많은 정보(차원) ▶️ 학습이 어려움 ➡️ 데이터를 비교하는 게 점점 복잡해진다.
너무 많은 차원 ▶️ 데이터가 퍼짐 ➡️ 데이터를 찾기 어려워지고, 모델이 제대로 못 배울 수도 있다.
차원별 단위가 다르면 문제 발생 ➡️ "키(170cm)"랑 "연봉(5000만원)"이 같은 기준으로 비교되면 이상하지 않겠는가?
쉽게 말하면, 데이터가 가진 변수(정보)가 많고 변수가 많다는 말은 차원(공간)이 넓어진다는 의미인데 이렇게 되면 공간 안의 데이터의 포인트가 고르게 분포하지 않고 멀리 떨어져 있게 된다는 것이다.
알고리즘(머신러닝 모델)은 비교해야 할 정보가 많아질수록 어떤 데이터가 중요한지를 찾기 위해 계산이 점점 어려워지게 된다. 계산이 어려워지게 되면 연산이 많아지게 되고 자연스럽게 속도가 느려진다는 문제가 발생한다.
결국 차원의 저주는 고차원에서 직관적으로 이해하기 어려운 성질들이 나타나게 된다는 점에서 발생하는 현상이며, 이는 데이터를 분석하거나 모델링할 때 어려움을 가중시킨다.
차원의 저주가 생기지 않는 경우
차원의 저주는 고차원에서 많이 발생은 하지만 단순히 차원이 증가한다고 무조건 차원의 저주가 발생하는 것은 아니다. 차원의 저주가 생기지 않는 경우도 있다. 차원이 많아도 데이터가 충분히 많거나, 정보가 조밀하게 모여 있거나, 중복된 차원이 많거나, 거리 기반이 아닌 방법을 쓰면 차원의 저주가 크게 문제가 되지 않는다.
데이터가 차원 증가를 감당할 만큼 충분히 많은 경우
차원이 많아지면 데이터가 공간에 퍼지면서 희소해지는데 만약 엄청 많은 데이터가 있다면 이 문제는 어느 정도 해소가 가능하다.
예를 들어, 100차원의 데이터가 있지만 데이터는 수십억 개라면 데이터가 충분하니 학습이 잘 될 가능성이 높다.
차원이 증가해도 정보가 조밀하게 모여 있는 경우
모든 차원이 정말 중요한 경우 즉, 데이터가 특정한 구조를 가진 경우이다. 이런 경우는 고차원이지만 실제로 데이터가 특정 패턴(예를 들면 선형관계라던지?)을 따른다면 차원이 많아도 데이터가 엉뚱한 곳으로 퍼지지 않게 된다.
차원 간 불필요한 정보가 적은 경우
만약 추가되는 차원들이 중복된 정보라면 실제로는 차원이 증가해도 문제가 되지 않는다.
키(cm), 키(m) 같은 데이터를 넣어도 의미는 같다. 이런 경우는 차원이 늘어나도 크게 문제가 되지 않는다.
거리기반이 아닌 알고리즘을 사용하는 경우
차원의 저주는 주로 거리기반 알고리즘(k-NN, k-Means 등)에서 심각해진다. 하지만 트리 기반 모델(랜덤 포레스트, 결정 트리)은 거리 개념이 덜해서 영향을 덜 받는다.
차원의 저주(Curse of Dimensionality)가 생기는 원인
차원의 저주가 발생하는 원인은 주로 고차원 공간에서 데이터의 분포가 희박해지고 데이터 간의 거리가 균등해지는 특성에서 발생한다.
쉽게 말해서 고차원에서 데이터의 특성이 점점 복잡하고 비직관적으로 변하는 것에 의해 차원의 저주가 발생하는 것이다.
원인은 아래와 같다.
데이터 밀도의 감소(데이터 희소성/Sparsity)
차원이 증가하면 데이터가 고차원 공간에 고르게 퍼지게 되면서, 각 데이터 포인트 간의 거리가 멀어지게 된다. 좀 어려운가?
좀 더 쉽게 말하면, 데이터가 많아 보여도 실제로 쓸만한 데이터가 부족한, 마치 과대 포장한 카라멜 팝콘 과자 같다고 생각하면 편할 것 같다.
예를 들면 질소 과자 봉지 안에 카라멜 팝콘 + 소금팝콘이 섞여있다. 그중 나는 카라멜 팝콘(내가 원하는 데이터)만 먹고 싶고 봉지 크기에 비해 실제 팝콘의 개수는 적고 그중에 카라멜 팝콘은 더 적다. 질소과자(데이터 공간)라는 데이터 공간에서 카라멜 팝콘(원하는 데이터)만 찾는 것이 바로 데이터의 희소성 문제이다.
이렇게 되면 데이터들이 매우 희박해지며 유의미한 패턴을 찾는 것이 어려워진다.
이로 인해 모델이 더 많은 데이터들을 필요로 하게 되는데 이렇게 되면 훈련에 시간이 많이 소요되거나 과적합(overfitting)이 될 가능성이 늘어난다.
📌 데이터 밀도 감소 → 데이터가 퍼짐 → 희소성이 증가 → 모델 학습이 어려워짐
거리 기준의 왜곡
보통 저차원 공간에서는 데이터 포인트들 간의 거리를 쉽게 구별 가능하고 가까운 점들일수록 비슷한 특성을 가진다.
좀 어려운가? 음, 만약에 어떤 두 사람이 비슷한 키와 몸무게를 가지고 있다고 하자. 이들의 키와 몸무게를 2D 평면에 점으로 표현하면, 두 점은 서로 가까이 위치할 것이다. 왜? 두 사람이 비슷한 특성을 가지고 있기 때문이다. 즉, 저차원에서는 거리나 위치가 데이터의 유사성을 직관적으로 반영하며, 이를 통해 데이터 간의 관계를 쉽게 파악할 수 있다. 직관적으로 말이다.
하지만 차원이 증가하면 우리가 직관적으로 이해하는 개념들이 점점 무너지기 시작한다. 특히, 유클리드 거리와 같은 전통적인 거리 척도는 고차원에서는 의미를 잃어버린다. 고차원에서는 대부분의 데이터 포인트들이 서로 비슷한 거리 값을 가지게 되며, 이로 인해 가까운 이웃을 찾는 알고리즘(KNN, 클러스터링 등)이 비효율적으로 동작하게 된다.
예를 들어, 특성이 100개 또는 1000개인 데이터가 있다고 가정해 보자. 이러한 데이터들은 1000차원 공간에 존재하게 되는데, 차원이 증가할수록 데이터들이 넓은 공간에 퍼지면서 모든 점들 간의 거리가 거의 비슷해지는 현상이 발생한다.
그 결과, "가장 가까운 점"을 찾는 것이 어려워지고, 데이터 간의 유사성을 정확히 판단하기 힘들어진다.
이러한 문제로 인해 데이터 간의 관계를 파악하는 것이 점점 더 어려워지고, 결국 알고리즘(모델)의 성능이 저하될 수 있다. 특히 KNN이나 클러스터링 같은 거리 기반 알고리즘은 데이터 간의 차이를 효과적으로 구별하지 못하게 되어 제대로 작동하지 않을 가능성이 크다.
컴퓨터 자원의 소모
차원이 증가한다는 것은 고려해야 할 특성(feature)이 많아져서 파라미터의 수나 계산량이 늘어나게 된다.
그러면 과연 자원은 어떻게 될까? 필요한 계산량이 급격하게 많아진다.
이렇게 계산량이 많아지면 연산 능력도 더욱 중요해지고, 이를 처리하기 위한 하드웨어 자원(예: CPU, GPU 등)이 부족해지면 학습 속도가 느려지거나 자원을 넘어설 수도 있다. 이렇게 되면 효율적인 처리와 학습에 어려움을 겪게 된다. 이러한 문제를 해결하기 위해서는 효율적인 알고리즘이나 병렬처리, 하드웨어 최적화가 중요한 포인트 중에 하나이다.
따라서 차원의 증가가 반드시 계산 리소스의 급격한 증가로 이어지기 때문에, 자원 소모를 최적화하면서도 효과적인 학습을 진행하는 것이 중요하다.
모델의 과적합
차원이라는 것이 높아질수록 모델은 더 많은 파라미터를 학습하려고 한다. 그러면 자연히 과적합의 위험이 커진다. 훈련 데이터에 너무 특화되어 학습이 되면 새로운 데이터에 대한 일반화 능력이 떨어지게 된다.
차원 간 상호작용의 증가
차원이 증가함에 따라 각 차원 간의 상호작용이 복잡해진다.
쉽게 말하면, "차원이 증가함에 따라 각 차원 간의 상호작용이 복잡해진다"는 말은, 우리가 다루는 것(예를 들어 데이터나 문제)이 많아질수록 그들 간의 관계나 연결을 이해하고 다루는 게 점점 더 어려워진다는 뜻이다.
예를 들어, 2개의 특성(키와 몸무게)만 있으면 간단하게 두 개의 숫자만 비교하면 되지만, 3개의 특성(키, 몸무게, 나이)이 있으면 세 가지를 모두 비교해야 해서 복잡해진다. 차원이 더 많아지면, 그만큼 서로 다른 특성들이 어떻게 연결되는지 이해하기 어려워지기 때문에 "복잡해진다"라고 말하는 것이다.
이렇게 되면 알고리즘을 학습시킬 때 필요한 정보가 많아지게 되며 특히 차원이 서로 다른 의미나 단위를 가지게 되면 모델이 잘못된 결정을 내릴 수도 있다.
이렇게 데이터 밀도 감소, 거리 기준 왜곡, 컴퓨터 자원 소모, 모델의 과적합, 차원 간 상호작용의 증가 같은 원인들로 인해
고차원 데이터를 처리할 때는 차원 축소 기법이나 특성 선택 기법을 사용하여 차원의 저주를 피하고, 모델 성능을 향상할 수 있다.
차원의 저주 3탄에서는 차원의 저주 해결 방법에 대해서 알아보자.
>> 3탄
https://jerrykim91.tistory.com/66
3탄: 차원의 저주 해결법! 고차원 문제를 극복하는 방법
자, 이제 차원의 저주에 대해서도 알아보았으니 차원의 저주 해결 방법에 대해서도 알아보도록 하자. 혹시나 차원의 저주에 대해서 보지 않은 분은 아래 링크로 GoGo~~https://jerrykim91.tistory.com/65
jerrykim91.tistory.com
'AI' 카테고리의 다른 글
3탄: 차원의 저주 해결법! 고차원 문제를 극복하는 방법 (0) | 2025.02.28 |
---|---|
1탄 : 차원이란 무엇인가? 차원의 저주를 보기전 차원의 개념부터 이해하기 (0) | 2025.02.27 |
[AI] Generalization / Overfitting / Underfitting (7) | 2025.01.09 |
[AI] machine learning_회귀 분석 모델 (0) | 2025.01.09 |
[AI] machine learning_오차 측정 지표 (0) | 2025.01.08 |