본문 바로가기

딥러닝 & 머신러닝/머신러닝 지식

차원의 저주와 차원 축소 개념

# 차원의 저주에 관해 설명해주세요.

 

차원의 저주는 저차원에서의 직관이 고차원에서는 성립하지 않는다는 것에서 시작됩니다. 2차원의 단위면적을 가진 정사각형 안에 있는 점을 무작위로 선택할 때 가장자리에 있는 점을 선택할 가능성은 매우 낮다고 합니다. 하지만 10,000차원의 단위면적을 가진 초입방체(hyper cube)에서는 이 가능성이 99.99 이상이라고 합니다. 이처럼 저차원에서의 직관이 고차원에서는 성립하지 않습니다.

 

또한, 고차원일수록 데이터가 차지하는 공간이 적어집니다. 즉, 특정 범위 안에 들어가는 데이터의 개수가 적어집니다. 그에 따라 필요한 데이터의 개수도 기하급수적으로 증가하고, 그러므로 계산량도 많아져 계산 시간도 오래 걸립니다. 이런 문제들이 바로 차원의 저주라 할 수 있겠습니다. 아래 그림을 보시면 같은 양의 데이터들이 1차원에서는 저렇게 오밀조밀하게 모여있는 데이터들이 2차원, 3차원으로 갈수록 점점 더 퍼지게 됩니다. 4차원일 때는 시간축도 고려하게 되어 t=0,1,2,...일 때의 데이터 분포 중 t=0일 때의 데이터 분포가 나타나 있는 것을 확인할 수 있습니다.

 

특히 분류 문제에선 차원이 커지면 어디를 기준으로 분류 선을 그어야 할지 애매해집니다. 예를 들어 2차원 평면상에서는 직선 하나로 데이터의 분포를 분류할 수 있다고 합시다. 그런데 이 데이터들을 4차원 공간상으로 투영시킨 뒤 이 데이터들을 단 두 종류로 분류할 수 있는 선을 그어보라고 하면 머리가 아프죠? 그래서 일정 차원을 넘으면 분류기의 성능은 점점 떨어져 0에 수렴하게 됩니다.

 

요약하자면, feature space의 차원이 증가함에 따라 데이터의 밀도가 급격히 감소하고, 이로 인해 데이터 분석이나 머신러닝 모델의 성능에 부정적인 영향을 미치는 현상입니다.

 

이러한 차원의 저주 문제를 해결하기 위해 ‘차원 축소’라는 것을 하게 됩니다. 아래와 같이 고양이 사진이 있습니다. 이 사진의 크기가 가로, 세로 16이고, RGB로 표현된다고 하면 이 이미지 한 장은 16*16*3=768차원의 데이터가 됩니다. 이 데이터를 그대로 사용할 경우 앞서 말한 문제들이 발생하게 됩니다. 그래서 굳이 모든 픽셀을 다 살펴볼 필요 없이 '비슷한 픽셀 덩어리가 있으면 고양이의 특성을 띨 것이다'라고 생각해보는 겁니다. 이때 고양이의 feature를 덩어리째로 뽑을 수 있도록 하는 것이 차원 축소입니다. 그리고 그 덩어리의 패턴을 보고 분류를 하는 것입니다.

 

다시 말하면 768차원(고차원) 데이터를 통째로 쓸 필요 없이, 즉 데이터 하나하나의 특징을 볼 필요 없이, 데이터를 압축, 요약해서 거기 안에 큰 특징들이 녹아있게 하는 것이 차원 축소입니다. 좀 더 어렵게 설명하자면, 차원 축소는 데이터들을 가상의 더 작은 차원의 공간인 잠재 공간(latent space)에 원본 데이터의 특징을 유지하면서 매핑(mapping)시키는 것입니다. 그리고 그 압축된 데이터들을 분류기에 넣어도 어느 정도 성능이 나온다고 알려져 있습니다. 차원 축소는 원본 데이터의 차원이 너무 커서 분류기 학습이 안 될 때 사용할 뿐만 아니라, 고차원 데이터의 시각화를 위해 사용되기도 합니다.

 

차원 축소의 기법 중에 PCA, CUR-decomposition, t-SNE라는 것들이 있는데 이것들은 이 게시물에 이어서 쓰거나 따로 글을 작성하겠습니다.