t-SNE란? AI에서 고차원 데이터의 이웃 관계를 그림으로 보는 방법
TL;DR
t-SNE는 고차원 데이터에서 가까운 사례들의 관계를 낮은 차원의 점 배치로 나타내는 비선형 차원 축소 방법입니다. 이미지 특징이나 문서 임베딩을 주로 평면에 그려 이웃과 섞임을 살펴봅니다. 원본과 그림의 유사도 확률이 가까워지도록 좌표를 조정하며, perplexity와 초기화에 따라 모양이 달라집니다. 그림의 섬 개수·넓이·간격을 실제 집단 수나 거리로 단정하지 않는 것이 중요합니다.
핵심 3줄 요약
- 핵심 1
가까운 이웃 관계를 시각화합니다. 분산이 큰 직선 축을 찾기보다 사례 사이의 유사도를 확률로 표현하고 점의 위치를 바꿉니다. - 핵심 2
설정에 따라 그림이 달라집니다. perplexity·초기화·학습률·반복 횟수를 기록하고 여러 실행에서 유지되는 관계를 봅니다. - 핵심 3
그림은 탐색의 출발점입니다. 군집의 크기나 집단 간 간격을 그대로 믿지 말고 원본 이웃·라벨·실제 사례를 확인합니다.
이 글에서 다룰 내용
- t-SNE의 한 문장 정의
- 문서 임베딩을 평면에 그리는 쉬운 예시
- 유사도 확률과 t분포의 작동 원리
- perplexity·초기화·학습률의 뜻
- PCA·클러스터링·임베딩과의 차이
- 실전 사용처와 결과 점검 순서
- 그림의 거리·크기·새 데이터 해석 주의점
t-SNE를 한 문장으로 정의하면 무엇인가요?
t-SNE(t-distributed Stochastic Neighbor Embedding)는 원본 데이터와 저차원 좌표의 이웃 유사도 확률을 맞춰 고차원 구조를 시각화하는 방법입니다.
한국어로는 t분포 확률적 이웃 임베딩이라고 풀어 부릅니다. 한 행이 이미지 한 장이나 문서 한 건이고 각 열이 수치 특징이라면, 여러 특징을 가진 각 행에 그림 속 좌표를 하나씩 붙입니다. 정답 클래스를 예측하는 모델은 아니며 보통 라벨 없이 좌표를 학습합니다.
van der Maaten과 Hinton의 원 논문은 고차원 사례마다 2차원 또는 3차원 지도 위 위치를 주는 기법으로 설명합니다. scikit-learn 문서도 주요 용도를 고차원 데이터의 시각화로 명시합니다. 특징 몇 개를 삭제하는 방식과 달리 모든 입력 특징에서 계산한 유사도가 배치에 영향을 줍니다.
한 줄 정리: t-SNE는 원본의 가까운 이웃이 그림에서도 가깝게 놓이도록 점의 좌표를 조정하는 시각화 방법입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 여러 고객 문의를 문서 임베딩으로 바꿨다고 가정해 보겠습니다. 각 문의에는 많은 숫자가 붙어 있어 목록만 보고 서로 비슷한 문장을 찾기 어렵습니다. t-SNE로 평면 좌표를 만들면 문의 한 건을 점 하나로 그려 주변 사례를 살펴볼 수 있습니다.
배송 지연 문의들이 서로 가까이 놓이고 환불 문의가 다른 곳에 모이는 그림이 나올 수 있습니다. 두 주제를 함께 담은 문의는 어느 한쪽의 이웃에 섞일 수도 있습니다. 이것은 원리를 설명하는 가상 예시이며, t-SNE가 배송이나 환불이라는 이름을 알아서 붙인다는 뜻은 아닙니다.
그림에 떨어진 작은 섬이 생겼다면 실제 문장을 열어 보세요. 새로운 주제일 수도 있지만 짧은 문장, 중복 문서, 다른 언어, 임베딩의 오류가 만든 묶음일 수도 있습니다. 그림에서 멀리 보인다는 이유만으로 의미도 완전히 다르다고 판단하면 안 됩니다.
쉬운 예시: 문서 목록을 이웃을 찾아볼 수 있는 점 지도로 바꾼다고 생각하면 됩니다. 지도 좌표 자체가 문서의 정답이나 품질 점수는 아닙니다.
왜 AI에서 t-SNE가 중요한가요?
많은 특징을 눈으로 살펴봅니다
이미지 모델의 중간 특징이나 문서 벡터는 열이 많아 직접 그리기 어렵습니다. t-SNE는 사람이 볼 수 있는 낮은 차원에 사례를 배치합니다. 원 저자 페이지에는 손글씨 숫자·얼굴·단어·뉴스 문서 등의 시각화 예시가 있으며, 복잡한 표현을 탐색하는 용도로 소개합니다.
국소적인 섞임을 확인합니다
전체 분산을 잘 담는 그림에서도 가까운 사례의 세부 관계는 겹쳐 보일 수 있습니다. t-SNE는 국소 구조에 민감해 비슷한 사례가 모이는 위치를 살피기 좋습니다. 다만 분리가 잘 보이지 않는다고 지도학습 모델도 분류하지 못한다고 단정할 수는 없습니다.
확인할 원자료를 고르는 단서를 줍니다
라벨 색상이 섞인 구역, 혼자 떨어진 점, 지나치게 반복되는 묶음을 찾아 원본을 검토할 수 있습니다. 검토 대상을 정하는 보조 그림이지 오류 탐지의 확정 판정은 아닙니다. 라벨이 맞는지, 특징이 적절한지 확인하는 과정이 뒤따라야 합니다.
t-SNE는 어떻게 작동하나요?
원본 공간의 이웃을 확률로 나타냅니다
원본 특징 사이의 거리를 계산하고 가까운 사례에 높은 유사도 확률을 줍니다. 가우시안 분포를 이용해 각 점 주변의 유사도를 만든 뒤 대칭적인 결합 확률로 정리합니다. 주변을 어느 정도 넓게 볼지는 perplexity와 연결되며, 모든 점에 똑같은 거리 반경을 적용하는 것과는 다릅니다.
저차원에서는 t분포로 유사도를 만듭니다
그림 위에 점을 배치한 뒤 그 좌표들 사이의 유사도를 계산합니다. 표준적인 2차원 t-SNE는 꼬리가 두꺼운 스튜던트 t분포를 사용합니다. 원본에서 멀리 있는 점들을 저차원에서도 떨어뜨릴 여지를 주어 많은 점이 중앙에 몰리는 혼잡 문제를 줄입니다.
두 확률 분포의 차이를 줄입니다
원본의 유사도와 그림의 유사도가 얼마나 다른지 KL 발산으로 측정하고 경사 하강으로 좌표를 옮깁니다. 가까웠던 이웃 관계를 잃었을 때의 비용을 줄이는 방향으로 최적화합니다. 모든 쌍의 실제 거리를 같은 비율로 축소하는 과정은 아닙니다.
반복을 마친 좌표와 오차를 확인합니다
최적화 목적함수는 볼록하지 않아 초기 위치에 따라 서로 다른 결과가 나올 수 있습니다. scikit-learn에서는
fit_transform
으로 학습 사례의 좌표를 얻고
kl_divergence_
로 최적화 뒤의 KL 발산을 확인합니다. 오차 하나만으로 그림의 해석이 옳다고 보증할 수는 없습니다.
perplexity와 주요 설정은 무엇을 뜻하나요?
perplexity는 이웃 범위를 조절합니다
perplexity는 유효한 이웃 수와 관련된 설정입니다. 정수만큼의 이웃을 딱 잘라 고르는 값이나 결과 군집 수는 아닙니다. 작은 값은 더 좁은 주변 구조에 민감하고 큰 값은 더 넓은 이웃을 고려합니다. scikit-learn은 5~50을 검토 범위로 안내하지만 최적값은 데이터에 따라 다르며 표본 수보다 작아야 합니다.
초기화와 초기 과장은 출발 배치를 바꿉니다
init
은 점의 초기 위치를 정합니다. PCA 초기화는 무작위 초기화보다 전역 배치가 안정적인 경우가 있지만 전역 거리를 보존한다는 보장은 아닙니다.
early_exaggeration
은 초기 단계에서 원본 유사도 확률을 키워 가까운 집단이 자리 잡도록 돕습니다. 값을 키워 섬 사이가 벌어져도 실제 집단 차이가 커진 것은 아닙니다.
학습률과 반복 횟수는 수렴에 영향을 줍니다
learning_rate
는 좌표를 한 번에 얼마나 크게 바꿀지 조절하고
max_iter
는 최대 반복 횟수입니다. 학습률이 너무 크면 점이 공처럼 퍼지고 너무 작으면 조밀하게 뭉칠 수 있습니다. 라이브러리마다 학습률 정의가 다르므로 다른 구현의 숫자를 그대로 옮기지 말고 해당 문서를 확인합니다.
실전 팁: 설정을 바꿀 때는 같은 입력 사례를 사용하고 한 번에 바꾼 항목을 기록하세요. 보기 좋은 그림 한 장만 선택하면 불안정한 구조를 놓치기 쉽습니다.
t-SNE와 헷갈리는 용어는 무엇이 다른가요?
PCA와 t-SNE의 차이
PCA는 분산이 큰 직교 방향을 찾아 하나의 선형 변환으로 데이터를 투영합니다. t-SNE는 유사도 확률을 맞추는 비선형 배치이며 좌표축에 설명 분산 비율을 붙이지 않습니다. 주성분 분석(PCA) 설명과 함께 보면 분산 보존과 이웃 시각화의 목표 차이를 이해하기 쉽습니다.
클러스터링과 t-SNE의 차이
클러스터링은 사례를 그룹으로 묶어 라벨이나 소속 정보를 만듭니다. t-SNE의 직접 출력은 낮은 차원의 좌표입니다. 그림에 섬이 보인다고 그 개수를 정답 군집 수로 사용할 수는 없습니다. 원본 공간의 거리와 별도의 군집 평가를 함께 살펴야 합니다.
임베딩과 t-SNE의 차이
임베딩은 대상을 벡터로 표현하는 넓은 개념입니다. 문서 임베딩 모델이 만든 고차원 벡터를 t-SNE의 입력으로 쓰면 시각화용 저차원 임베딩을 다시 얻습니다. 그림 좌표가 원래 문서 모델을 대신하거나 의미 검색 품질을 그대로 보존한다고 보지는 않습니다.
SNE와 t-SNE의 차이
t-SNE는 확률적 이웃 임베딩인 SNE 계열의 변형입니다. 원 논문은 최적화와 저차원 혼잡 문제를 개선하려고 t-SNE를 제안했습니다. 이름의 t는 시간이나 토큰의 약자가 아니라 저차원 유사도에 쓰는 t분포를 가리킵니다.
실전에서는 어디에 쓰이나요?
이미지 특징과 클래스의 겹침을 봅니다
손글씨나 이미지의 특징을 점으로 나타내고 알려진 클래스에 따라 색을 칠해 겹침을 확인합니다. 색상 라벨은 해석에 덧붙이는 정보이며, 표준 t-SNE가 그 라벨을 학습에 이용했다는 뜻은 아닙니다. 경계에 있는 점의 원본 이미지를 함께 확인하면 그림을 과장해서 읽는 일을 줄입니다.
문서와 단어 표현을 탐색합니다
문서 임베딩이나 단어 특징을 그려 서로 가까운 주제와 표현을 살펴봅니다. 검색 결과의 어색한 이웃을 조사할 때도 참고할 수 있습니다. 원본 특징이 언어·문장 길이·중복 여부에 민감하면 그 영향도 그림에 나타나므로 점의 위치만 보고 주제를 확정하지 않습니다.
모델 표현의 변화를 비교합니다
같은 사례 집합으로 모델 버전별 특징을 시각화해 클래스의 섞임과 국소 이웃을 점검할 수 있습니다. 버전마다 별도로 계산한 그림의 가로·세로 좌표는 공통 좌표계가 아닙니다. 점이 오른쪽으로 움직였다는 설명보다 원본에서 어떤 이웃이 바뀌었는지를 확인하는 편이 안전합니다.
t-SNE를 적용할 때 어떤 순서로 확인하나요?
1. 사례와 거리의 의미를 정합니다
한 행이 무엇인지, 어떤 특징을 비교하는지 적습니다. 서로 다른 단위의 수치 열은 척도를 점검하고 임베딩은 원 모델의 거리·정규화 권장 사항을 확인합니다. 숫자가 크다는 이유만으로 특정 열이 이웃 계산을 지배하지 않는지 살펴봅니다.
2. 입력 차원과 표본 구성을 점검합니다
특징이 매우 많으면 밀집 데이터에는 PCA, 희소 데이터에는 TruncatedSVD 같은 사전 축소를 검토합니다. scikit-learn은 잡음과 거리 계산 비용을 줄이는 방안으로 이를 권장합니다. 너무 많이 축소하면 필요한 관계도 사라지므로 전처리 조건과 포함한 사례 목록을 저장합니다.
3. 여러 설정에서 유지되는 이웃을 봅니다
perplexity와 초기화 조건을 바꾸어 원본의 가까운 사례가 그림에서도 함께 놓이는지 봅니다. 같은 데이터와 같은 perplexity에서는 KL 발산을 반복 실행 비교에 참고할 수 있습니다. perplexity까지 바꾸면 맞추려는 확률 분포가 달라지므로 오차의 절대값만으로 순위를 정하지 않습니다.
4. 그림과 실행 조건을 함께 남깁니다
입력 버전, 전처리, 거리 기준, 난수 시드, 라이브러리 버전과 주요 설정을 보관합니다. 그림에는 색상의 뜻과 해석 제한을 적습니다. 표본을 새로 뽑거나 데이터를 추가한 뒤 같은 시드를 썼다는 이유만으로 이전 지도와 좌표가 같다고 기대하지 않습니다.
사용할 때 무엇을 주의해야 하나요?
섬 사이의 간격과 넓이를 과해석하지 않습니다. 공식 perplexity 예시는 초기화와 설정에 따라 군집의 크기·거리·모양이 달라지며 항상 의미를 담지는 않는다고 설명합니다. 넓은 섬이 원본에서도 분산이 크다거나 두 섬의 간격이 의미 차이에 비례한다고 단정하지 마세요.
새 데이터를 같은 지도에 넣는 기능을 확인합니다. 기본 t-SNE는 입력에서 좌표로 가는 명시적인 변환 함수를 학습하지 않습니다. scikit-learn TSNE에도 PCA처럼 새 사례를 처리하는
transform
메서드가 없습니다. 확장 구현의 지원 여부를 확인하거나 전체 데이터를 다시 계산하되 좌표가 달라질 수 있음을 기록합니다.
그림의 분리를 모델 성능으로 대체하지 않습니다. 잘 갈라진 색상이 보인다고 실제 분류 정확도가 보장되지는 않습니다. 반대로 평면에서 겹쳐도 원본 특징으로 학습한 모델은 구분할 수 있습니다. 예측 품질은 분리해 둔 데이터와 해당 업무의 평가 지표로 확인합니다.
계산 비용과 수렴을 함께 봅니다. 대량 데이터의 모든 관계를 다루는 계산은 부담이 큽니다. Barnes-Hut 같은 근사 방식은 비용을 줄이지만 근사 설정과 출력 차원의 제약을 확인해야 합니다. 너무 일찍 멈춘 그림을 완성된 구조처럼 해석하지 않습니다.
주의: t-SNE 그림은 선택한 특징·표본·설정의 결과입니다. 실제 원인 관계, 집단의 본질적인 경계, 이상 여부를 자동으로 증명하지 않습니다.
자주 묻는 질문
Q1. t-SNE는 지도학습인가요?
표준 t-SNE는 보통 정답 라벨 없이 이웃 유사도를 계산하는 비지도 방법입니다. 결과 점에 클래스 색상을 붙일 수 있지만 색칠한 라벨과 좌표를 만드는 입력을 구분해야 합니다.
Q2. perplexity는 클러스터 수인가요?
아닙니다. 원본 공간에서 고려하는 유효한 이웃 수와 관련된 값입니다. 군집 수를 지정하거나 정확히 그 수만큼 이웃을 고르는 설정으로 읽지 않습니다. 표본 수보다 작아야 한다는 입력 조건도 확인하세요.
Q3. 가로축과 세로축은 무엇을 의미하나요?
최적화가 만든 저차원 좌표입니다. PCA의 주성분처럼 분산 순서가 정해진 축이나 원본 특징의 단위가 아닙니다. 좌표의 부호·방향보다 가까운 점의 원자료와 이웃 관계를 읽는 데 사용합니다.
Q4. 실행할 때마다 모양이 다르면 실패인가요?
반드시 실패는 아닙니다. 초기화와 비볼록 최적화 때문에 결과가 달라질 수 있습니다. 같은 입력·설정·시드를 기록해 재현성을 확인하고, 여러 실행에서 핵심 이웃 관계가 유지되는지 별도로 봅니다.
Q5. 새 문서가 오면 기존 좌표에 바로 추가할 수 있나요?
기본 알고리즘과 scikit-learn TSNE에서는 저장한 선형 변환처럼 새 문서를 바로 투영하지 못합니다. 새 데이터 배치를 지원하는 확장 구현인지 확인해야 합니다. 전체를 재계산하면 기존 점들도 이동할 수 있습니다.
출처
마무리
t-SNE는 많은 특징으로 표현된 사례의 이웃 관계를 낮은 차원의 점 배치로 살펴보는 방법입니다. 유사도를 확률로 바꿔 맞추므로 분산이 큰 선형 축을 찾는 PCA나 군집 번호를 만드는 클러스터링과 목적이 다릅니다.
초보자라면 가까운 점의 원본을 확인하고, 여러 perplexity와 초기화에서 관계가 유지되는지 보고, 그림의 크기와 간격을 실제 거리처럼 읽지 않는 습관부터 들이세요. 입력 특징과 실행 조건을 함께 남겨야 탐색 그림이 다음 검토에 쓸 수 있는 근거가 됩니다.
