[1-7] t-SNE

t-SNE : t-Stochastic Neighbor Embedding

이번 글에서는 데이터 차원축소(dimesionality reduction)시각화(visualization) 방법론으로 널리 쓰이는 t-SNE(Stochastic Neighbor Embedding)에 대해 살펴보도록 하겠습니다. 단어 벡터와 같이 고차원 데이터를 시각화하는 데 가장 인기있는 알고리즘이기도 합니다.

Stochastic Neighbor Embedding

Stochastic Neighbor Embedding(SNE)란 고차원의 원공간에 존재하는 데이터 x의 이웃 간의 거리를 최대한 보존하는 저차원의 y를 학습하는 방법론입니다. stochastic이란 이름이 붙은 이유는 거리 정보를 확률적으로 나타내기 때문인데요. 이 설명만 봐서는 제대로 알 수 없으니 일단 수식 먼저 보겠습니다.

고차원에서 두 점이 i 가 j 를 이웃으로 뽑을 확률 p 는 저차원에서 i 가 j 를 이웃으로 뽑을 확률과 같아야 합니다.

첫번째 식의 pp는 고차원 원공간에 존재하는 i번째 개체 xi가 주어졌을 때 j번째 이웃인 xj가 선택될 확률을 의미합니다. 두번째 식의 q는 저차원에 임베딩된 i번째 개체 yi가 주어졌을 때 j번째 이웃인 yj가 선택될 확률을 뜻합니다.

SNE의 목적은 p와 q의 분포 차이가 최대한 작게끔 하고자 합니다. 차원축소가 제대로 잘 이뤄졌다면 고차원 공간에서 이웃으로 뽑힐 확률과 저차원 공간에서 선택될 확률이 비슷할테니까요.

두 확률분포가 얼마나 비슷한지(이 분포의 차이) 측정하는 지표로 Kullback-Leibler divergence라는 것이 있습니다. 두 분포가 완전히 다르면 1, 동일하면 0의 값을 갖게 되는데요, SNE는 아래 비용함수를 최소화하는 방향으로 학습을 진행하게 됩니다.

우리가 최종적으로 구하고자 하는 미지수는 저차원에 임베딩된 좌표값 yi입니다. SNE는 그래디언트 디센트(gradient descent) 방식으로 yi들을 업데이트합니다. 즉, 처음에 yi를 랜덤으로 초기화해놓고 위에서 구한 그래디언트의 반대방향으로 조금씩 yi들을 갱신해 나가는 것입니다. yi의 그래디언트를 보면 우리가 이미 모두 알고 있는 값들이므로 업데이트를 여러번 반복 수행하기만 하면 됩니다.

t-SNE 시각화

t-SNE는 보통 word2vec으로 임베딩한 단어벡터를 시각화하는 데 많이 씁니다. 문서 군집화를 수행한 뒤 이를 시각적으로 나타낼 때도 자주 사용됩니다. t-SNE저자가 직접 만든 예시 그림은 아래와 같습니다.

Last updated