본문 바로가기

Programmer Jinyo/Visualization

t-SNE(t-distributed stochastic neighbor embedding) 설명


투명한 기부를 하고싶다면 이 링크로 와보세요! 🥰 (클릭!)

바이낸스(₿) 수수료 평생 20% 할인받는 링크로 가입하기! 🔥 (클릭!)

t SNE는 High Dimension Data (고 차원의 데이터) 를 Low Dimension Data (저 차원의 데이터) 로 거리 관계를 유지하며 임베딩 시키는 알고리즘이다.




임베딩(Embedding)



고차원을 저차원으로 임베딩한다는 것에 관련하여 쉽게 설명을 하자면, 3차원상에 있는 점들을 2차원에 그릴 때, 먼 곳은 멀게, 가까운 곳은 가깝게 표현하는 행위를 의미한다. 그리고 차원을 줄이면서 거리관계를 완벽히 유지하는것은 불가능 하기 때문에 여러 임베딩을 하기 위한 알고리즘들이 만들어졌다.


지구의 모양이 3d인데 지도를 2d 상에 그리려다 보니 북극과 남극이 실 척도보다 크게 그려졌다는 것을 예로 들면 더 쉬울 것이다.



우리의 목표는 50차원, 혹은 그 이상의 데이터들에서도 데이터들간의 상관관계를 유지하며 2d 혹은 3d에서도 비슷한 데이터끼리 근처에 위치할 수 있게 묶어주는 것이다.


이해가 직관적으로 안간다면, 비슷한 뉴스 기사끼리 근처에 위치시킨 지도를 만들어 준다거나 하는것을 한다고 생각 해 보자.



이를 수행하기 위해서 우리는 과거부터 많은 임베딩 알고리즘들을 써 왔고, 그 중 제일 성능이 좋은 State of the art 알고리즘은 t-SNE 알고리즘이다.



tSNE (t-distributed stochastic neighbor embedding)


 로 표현되는 데이터 X 가 있다고 생각 해 보자.


그리고 의 유사도를 



라고 정의하자.

그 후, High dimension에서 i 와 j 가 이웃일 확률은 서로 동일하기 때문에 ( 라고 설명을 한다 ) i와 j의 최종적인 서로에 대한 유사도 값 p는 아래와 같이 정의한다.



( i = j 일때는 0으로 정의 )


그리고 low dimension의 유사도는 다음과 같이 정의한다.


이런 수식을 통해 high dimension p의 분포와 low dimension q의 분포가 얼마나 유사한지를 KL divergence를 이용하여 측정한다.





이 KL divergence를 loss function으로 이용하여 서서히 0으로 수렴시키기 위해 learning을 진행한 결과를 마지막으로 표시하는 것이 t-SNE 알고리즘이다.



사실 소스를 뜯어보면 수식 외의 다양한 마약(?)들이 존재한다.


iteration 을 돌면서 iter 100이하에선 어떻고 400이하에선 momentum이 어떻고 등등의 추가적인 조건을 준다 ㅋㅋ..





MNIST DATA를 2d에 임베딩 한 결과이다.