[차원 축소] t-분포 확률적 임베딩(t-SNE)을 알아보자
차원 축소의 한 기법으로 쓰이는 t-SNE에 대해서 알아보자.
아래의 내용은 내 졸업 논문의 내용을 일부 차용했으며, 세간에 알려진 t-SNE에 대한 일부 잘못된 정보를 바로 잡는 것도 목표로 삼는다.
선형적 차원 축소의 한계와 t-SNE의 목표
일단 아주 단순하게 차원 축소를 진행한다고 생각한다면, 사영(projection)이 떠오를 것이다. 다음으로는 주성분 분석(PCA)도 있을 것이다. 주성분 분석에 대해서는 아래의 글에 잘 설명해뒀으니 시간이 있다면 참고 바란다.
위의 두 방법 모두 선형적인 차원 축소 기법이다. 장점으로는 빠르고 축소된 차원의 설명이 어느 정도 가능함이 있다.
하지만 위의 두 선형 차원 축소 기법의 단점이 있는데, 바로 축소를 위해 일부 정보가 손실되어야 한다는 점이다.
사영의 경우 축 하나의 정보가 통째로 날아가버리며, 주성분 분석도 전체 eigenvalue의 특정 비율만큼의 해당되는 eigenvector의 정보가 사라진다.
아무리 적은 손실이라도 손실은 손실이다. 차원 축소로 인한 정보 손실로 인해 데이터의 일부를 설명할 수 없는 것은 큰 문제임을 알아야 한다.
이를 해결하기 위해서 "데이터 그룹끼리 모이면서 정보는 최대한 손실 없게 하자!"라는 목표를 가진 것이 바로 비선형적 차원 축소의 한 방법인 t-분포 확률적 임베딩(t-SNE, Student's t-distribution Stochastic Neighbor Embedding)이다.

t-SNE의 목표는 기존 방법이었던 SNE의 문제점이었던 군집 문제와 데이터 간 차이를 크게 내지 못했던 것을 t-분포를 이용하여 보완하는 것이다.
즉, 다시 말하면 t-SNE는 t-분포를 이용해 확률적인 방법으로 접근하여 고차원에서 가까운 거리인 데이터는 저차원에서도 가깝게, 고차원에서 먼 거리인 데이터는 저차원에서도 멀게 임베딩 하는 것이다.
t-SNE의 작동 메커니즘
위의 일을 하기 위해선 4단계를 거쳐야 한다. 이를 위해 고차원 데이터 포인트 집단
1. 고차원에서의 모든 데이터 포인트에 대한 거리를 구한다. 예를 들어
여기서
2. 또한 축소된 차원에서의 모든 데이터 포인트에 대한 거리를 구한다. 예를 들어
이 수식은 1. 에서의 식 (1) 아래의 설명에서 고차원을 저차원으로 바꾸면 된다.
3. 앞서 구한 고차원에서의 데이터 포인트 거리
여기서
4. 위의 cost function
왜 t-분포를 사용했는가?
앞서 이야기한 부분 중에, t-SNE는 기존 SNE에서 t-분포를 써서 개선을 한 것이라고 말한 부분이 있다.
SNE에서는 정규분포인
정규분포는 격차가 커질수록 그에 따른 확률 격차가 크게 벌어지지 않지만, t-분포에서는 그 격차를 정규분포보다 더 크게 할 수 있다.

의문점 1. 꼭 t-분포를 써야만 했는가?
그렇다면 이런 의문이 든다. 정규분포
이는 cost function의 차이 때문에 그렇다.
먼저, 선행 연구 모델이었던 SNE에서의 저차원 데이터 포인트의 수식(t-SNE 과정 2.)을 살펴보면 식 (4)와 같다. 고차원 데이터 포인트의 수식은 같다.
이를 Kullback-Leibler distribution을 이용한 cost function
반면 자유도가 1인 t-분포가 적용된 t-SNE의 cost function
t-SNE cost function
즉, 단순히 두꺼운 꼬리 분포를 쓴 것 이외에도 cost function의 차이로 인해서 사용하는 부분이 있어서 t-분포를 사용한 것이다.
의문점 2. t-SNE는 3차원까지만 축소 가능한가?
결론부터 말하면 절대 아니다.
이런 오해는 주로 scikit-learn에 내장된 tsne 함수에서 왔다고 본다. 이 함수는 축소 가능한 차원을 1, 2, 3으로만 제한을 걸어뒀고, 이는 t-SNE가 1~3차원으로만 차원 축소가 가능하다고 오해하게 된 계기가 되지 않았나 싶다.
이는 t-SNE의 한계에 의한 단점으로 인해 scikit-learn 패키지에서 제한한 것을 잘못 이해한 것이다.
이론적으로 t-SNE는 모든 차원으로 차원 축소가 가능하다. 그냥
t-SNE의 장점과 단점
장점은 아래와 같다.
- 고차원의 데이터를 확률 거리라는 개념을 이용해 정보 손실 없이 차원을 축소시킨다.
- 가까운 포인트끼리는 가깝게 하고 먼 포인트끼리는 밀어내는 cost function
로 인해 데이터 그룹화가 더 쉽게 된다.
단점은 아래와 같다.
- 비선형 차원 축소이기 때문에 축소된 차원에서의 축의 의미가 사실상 없다.
- iterable한 cost function 수렴 조건과 매개변수(parameter) 설정으로 데이터 그룹화의 정도를 본인이 직접 돌려보고 정해야 한다.
- 모든 데이터 포인트 간의 거리를 구해야 하기 때문에 데이터의 수가 클수록 계산 시간이 커진다.
특히 단점 2번 때문에 실시간으로 들어오는 데이터에 대해 적용하기 어려워진다. 그래서 t-SNE는 주로 시각화같이 데이터가 확정된 경우에 대해서 사용한다. 그리고 시각화는 우리의 시각으로 보여야 효과가 극대화되기 때문에 scikit-learn에 있는 tsne 함수에서 적용 가능한 축소 차원이 1, 2, 3밖에 없다고 추측된다.
물론 매개변수와 iterable 정도 등을 전부 고정하고 사용하면 실시간 데이터 처리를 하며 사용은 가능하나, 문제가 있다면 이 모델은 데이터 수에 비례해서 걸리는 시간도 길고, 무엇보다 축의 의미가 사실상 없기 때문에 설명력이 매우 떨어진다. 그래서 굳이 t-SNE를 파이프라인의 한 단계로 쓰는 것은 절대 좋은 방법이 아니다.
응용 사례 : 20채널 EEG 신호의 2차원 시각화
이 응용 사례는 실제 내 연구를 바탕으로 한다.
20채널 EEG는 말 그대로 데이터의 차원이 20차원이라서 우리가 볼 수 있는 방법이 없다. 이를 t-SNE로 시각화한 것이다.
이 EEG 데이터에는 일반 노인과 뇌졸중 환자의 것이 같이 있었는데, 앞서 서술한 t-SNE의 특성을 이용하여 차원 축소를 시행하였다.

놀랍게도 일반 노인의 EEG 데이터와 뇌졸중 환자의 EEG 데이터가 끼리끼리 잘 모였으며, 커널 트릭 등으로 분류 가능성이 있다는 것을 검증해냈다.
궁금한 점이나 잘못된 부분이 있다면 언제든지 댓글 달아주시길 바란다.