메인 콘텐츠로 건너뛰기

Documentation Index

Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt

Use this file to discover all available pages before exploring further.

Embedding projector
임베딩은 사람, 이미지, 게시물, 단어와 같은 객체를 숫자 목록으로 표현한 것으로, 벡터 라고도 합니다. 머신 러닝과 데이터 과학에서는 다양한 애플리케이션에서 여러 방식으로 임베딩을 생성할 수 있습니다. 이 페이지는 사용자가 임베딩에 이미 익숙하며, W&B 내에서 이를 시각적으로 분석하려는 경우를 전제로 합니다. 이 가이드에서는 임베딩을 W&B에 로깅하고, PCA, UMAP, t-SNE와 같은 차원 축소 알고리즘을 사용해 Embedding Projector에서 2D 평면에 시각화하는 방법을 설명합니다. 이렇게 임베딩을 시각화하면 클러스터를 탐색하고, 데이터 포인트 간의 관계를 살펴보며, 임베딩이 기대한 구조를 잘 캡처하는지 검증하는 데 도움이 됩니다.

임베딩 예제

다음 리소스에서는 직접 사용해 보기 전에 Embedding Projector가 실제로 어떻게 작동하는지 확인할 수 있습니다:

Hello world

이 최소 예시는 임베딩을 로깅하고 projector에서 확인하는 데 필요한 가장 적은 코드만 보여줍니다. W&B에서는 wandb.Table 클래스를 사용해 임베딩을 로깅할 수 있습니다. 각각 5개 차원으로 이루어진 3개의 임베딩 예시를 살펴보세요:
import wandb

with wandb.init(project="embedding_tutorial") as run:
  embeddings = [
      # D1   D2   D3   D4   D5
      [0.2, 0.4, 0.1, 0.7, 0.5],  # 임베딩 1
      [0.3, 0.1, 0.9, 0.2, 0.7],  # 임베딩 2
      [0.4, 0.5, 0.2, 0.2, 0.1],  # 임베딩 3
  ]
  run.log(
      {"embeddings": wandb.Table(columns=["D1", "D2", "D3", "D4", "D5"], data=embeddings)}
  )
  run.finish()
앞의 코드를 실행하면 W&B 대시보드에 데이터가 포함된 새 Table이 생성됩니다. 오른쪽 상단의 패널 선택기에서 2D Projection을 선택하면 임베딩을 2차원으로 시각화할 수 있습니다. W&B는 자동으로 적절한 기본값을 선택하며, 톱니바퀴 아이콘을 클릭해 설정 메뉴에서 이를 재정의할 수 있습니다. 이 예제에서는 W&B가 사용 가능한 5개의 숫자 차원을 모두 사용합니다.
2D projection 예시

Digits MNIST

다음 예시는 더 높은 차원의 데이터와 더 다양한 오버레이를 사용하는, 보다 현실적인 워크플로를 보여줍니다. 앞선 예시에서는 임베딩 로깅의 기본 메커니즘을 보여주었지만, 일반적으로는 훨씬 더 많은 차원과 샘플을 다루게 됩니다. SciKit-Learn에서 제공하는 MNIST Digits 데이터셋(UCI ML hand-written digits dataset)을 살펴보세요. 이 데이터셋에는 1,797개의 레코드가 있으며, 각 레코드는 64차원입니다. 이 문제는 10개 클래스 분류 문제입니다. 또한 시각화를 위해 입력 데이터를 이미지로 변환할 수도 있습니다.
import wandb
from sklearn.datasets import load_digits

with wandb.init(project="embedding_tutorial") as run:

  # 데이터셋 로드
  ds = load_digits(as_frame=True)
  df = ds.data

  # "target" 열 생성
  df["target"] = ds.target.astype(str)
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  # "image" 열 생성
  df["image"] = df.apply(
      lambda row: wandb.Image(row[1:].values.reshape(8, 8) / 16.0), axis=1
  )
  cols = df.columns.tolist()
  df = df[cols[-1:] + cols[:-1]]

  run.log({"digits": df})
앞의 코드를 실행하면 UI에 다시 Table이 표시됩니다. 임베딩 정의, 색상, 알고리즘(PCA, UMAP, t-SNE), 알고리즘 파라미터, 오버레이를 구성하려면 2D Projection을 선택하세요. 이 경우 점 위에 마우스를 올리면 W&B가 이미지를 표시합니다. 이 설정들은 모두 적절한 기본값이므로 2D Projection을 한 번만 클릭해도 비슷한 결과를 볼 수 있습니다. 이 임베딩 튜토리얼 예시를 직접 살펴보세요.
MNIST 숫자 프로젝션

로깅 옵션

다음 섹션에서는 데이터를 W&B에 로깅할 때 임베딩 데이터를 구조화할 수 있는 지원되는 방법을 설명합니다. 임베딩은 여러 형식으로 로깅할 수 있습니다.
  • 단일 임베딩 열: 데이터가 이미 행렬과 비슷한 형식인 경우가 많습니다. 이 경우 단일 임베딩 열을 만들 수 있으며, 셀 값의 데이터 유형은 list[int], list[float] 또는 np.ndarray일 수 있습니다.
  • 여러 숫자 열: 앞선 두 예시는 이 방식을 사용하며, 각 차원마다 열을 하나씩 만듭니다. W&B는 셀 값으로 Python int 또는 float를 허용합니다.
단일 임베딩 열
여러 숫자 열
모든 Table과 마찬가지로 Table을 구성하는 방법에도 여러 옵션이 있습니다.
  • 데이터프레임에서 직접 생성: wandb.Table(dataframe=df)를 사용합니다.
  • 데이터 목록에서 직접 생성: wandb.Table(data=[...], columns=[...])를 사용합니다.
  • Table을 행별로 점진적으로 구축(코드에 루프가 있는 경우에 적합): table.add_data(...)를 사용해 Table에 행을 추가하세요.
  • Table에 임베딩 열 추가(예측 목록이 임베딩 형식인 경우에 적합): table.add_col("col_name", ...).
  • 계산 열 추가(Table 전체에 적용하려는 함수나 모델이 있는 경우에 적합): table.add_computed_columns(lambda row, ndx: {"embedding": model.predict(row)}).

플로팅 옵션

임베딩을 로깅한 후에는 임베딩이 투영되고 렌더링되는 방식을 조정할 수 있습니다. 2D Projection을 선택한 후 톱니바퀴 아이콘을 클릭하면 렌더링 설정을 편집할 수 있습니다. 원하는 열을 선택하는 것(이전 섹션 참조) 외에도 관심 있는 알고리즘과 원하는 매개변수를 선택할 수 있습니다. 아래 이미지는 UMAP과 t-SNE의 매개변수를 보여줍니다.
UMAP 매개변수
t-SNE 매개변수
W&B는 세 알고리즘 모두에 대해 1,000개 행과 50개 차원의 무작위 부분집합으로 다운샘플링합니다.