Skip to main content

시간 경과에 따른 예측 시각화

학습 에포크 전반에 걸쳐 모델 예측을 기록하고 탐색하며 동적으로 조회하기 이 문서는 AI 번역본입니다. 오역이 있을 경우 댓글로 알려주세요.
Created on September 15|Last edited on September 15

개요

학습 과정 전반에 걸쳐 모델 예측을 추적하고 시각화하며 비교하세요. W&B의 최신 기능을 통해 가능합니다. 데이터셋 및 예측 시각화 (현재 베타 버전)
  • 모델 학습 또는 평가 중에 wandb.Table()에 메트릭, 이미지, 텍스트 등을 기록하세요
  • 이 테이블들을 보기, 정렬하기, 필터링하기, 그룹화하기, 조인하기, 대화형으로 조회하기 등 다양한 방식으로 탐색하기
  • 시간 경과에 따른 모델 예측 또는 결과 비교: 서로 다른 에포크나 검증 단계 간에 동적으로 비교하기
  • 수준에서의 변경 사항 추적 예측 대상 훈련 중 특정 단계에서 데이터셋의 특정 예시들, 그리고 이를 동적으로 집계합니다
  • 대화형으로 예측을 분석하여 오류 패턴과 개선 기회를 파악하세요. 동일한 모델의 시간 경과에 따른 변화나 서로 다른 모델 간의 차이를 비교할 수 있습니다.
이 가이드에서는 PyTorch로 MNIST에 기본 합성곱 신경망을 학습하고, 예측에 필요한 필드를 wandb.Table()에 기록하는 방법, 시간 단계별로 테이블을 구성하는 방법, 그리고 생성된 테이블과 상호작용하여 시간 경과에 따른 모델 성능을 분석하는 방법을 설명합니다.
새 모델을 기준선과 비교하고, 정답 예측을 제외한 뒤, 추정값 기준으로 그룹화하여 각 레이블별 시각적 예시와 함께 오분류 패턴을 확인하세요.

목차

  1. wandb.Table 기록 방법
    1. 테이블 만들기
    2. 열 정의하기
    3. 각 예측 추가
    4. 아티팩트 동기화하기
  2. 테이블 시각화하기
    1. 기록된 아티팩트 탐색하기
    2. 테이블 열기
    3. 테이블 작업
    4. 테이블의 히스토그램
  3. 모델 예측 비교
    1. 스텝 간 비교
    2. 다른 모델 비교

1. wandb.Table 기록 방법

1.1 테이블 만들기: 의미 있는 스텝마다

훈련 과정 전반에 걸쳐 모델 예측을 비교하려면, 프로젝트 맥락에서 어떤 단계를 의미 있는 스텝으로 정의할지 먼저 결정하세요. In the 예시 Colab, 한 에포크는 하나의 학�� 스텝(MNIST 학습 데이터를 한 번 모두 통과)과 하나의 검증 또는 테스트 스텝(모델 성능을 확인하기 위해 MNIST 테스트 데이터를 한 번 모두 통과)으로 구성됩니다. 매번 검증 스텝이 끝날 때 예측을 wandb.Table()로 기록합니다. 학습이 더 길어지는 경우(예: 200 에포크)에는 검증을 10 또는 20 에포크마다 한 번씩만 수행하고 예측을 기록하는 방식이 더 적합할 수 있습니다. 더 자세한 관찰이 필요하다면, 검증과 함께 학습 예측도 포함하여 더 자주 기록할 수도 있습니다.

1.2 열 정의: 각 예측 행에 무엇을 기록할지 결정하기

wandb.Table을 만들 때는 각 행(또는 예측)에서 보고 싶은 열을 미리 지정하세요. 열의 타입은 숫자, 텍스트, 불리언, 이미지, 비디오, 오디오 등 다양할 수 있습니다. 고려해 볼 만한 유용한 예시는 다음과 같습니다:
  • 이미지 픽셀: 모델이 예측을 내릴 때 무엇을 보고 있나요?
  • 모델의 예측 레이블 그리고 the 정답 레이블: 모델이 맞았나요?
  • 이미지 id 데이터셋에서 단일 예시를 추적하고 여러 모델 버전 간 성능을 비교하세요. 대부분의 경우 서로 다른 Table 간 조인을 위해 고유한 식별자를 조인 키로 사용해야 합니다.데이터셋에 의미 있는 id가 없다면, 고정된 데이터셋 순서에서 해당 이미지의 인덱스를 id로 사용해도 됩니다.
  • 모든 클래스에 대한 신뢰도 점수: 예측 분포를 시각화하고, 혼동 행렬을 생성하며, 오류 패턴을 찾아볼 수 있습니다.
  • 예측이나 이미지에 대한 기타 메트릭으로서 기존 열에서 도출할 수 없습니다나중에 필요하지 않게 되면 열을 쉽게 제거할 수 있어요 :)
할 수 있습니다 파생 값으로 새로운 열을 동적으로 추가하기 Table을 로깅한 뒤에도 만들 수 있습니다. 예를 들어 MNIST에서 손글씨의 “닫힌 고리(closed loops)” 성능을 평가하기 위해 숫자 0, 6, 8, 9의 신뢰도 점수를 합산하고, 이 값을 “score_loops” 열로 사용하여 코드를 다시 실행하지 않고도 예측을 정렬, 필터링, 비교할 수 있습니다.

wandb.Table을 생성하는 예시 코드

# create a wandb Artifact for each meaningful step
# I use the unique wandb run id to organize my artifacts
test_data_at = wandb.Artifact("test_samples_" + str(wandb.run.id), type="predictions")

# create a wandb.Table() with columns for the id, image pixels,
# guess (model's prediction), the ground truth, confidence scores for all labels
columns=["id", "image", "guess", "truth"]
for digit in range(10):
columns.append("score_" + str(digit))
test_table = wandb.Table(columns=columns)

1.3 각 예측을 행으로 추가하기

각 예측을 테이블의 행으로 추가하세요(보통 검증 루프 안에서). In the 예시 Colab단순화를 위해 로깅하는 이미지/행 수는 최소로 유지합니다. 테이블당 최대 50,000개의 행을 로깅할 수 있으며, 이후의 분석 작업—예를 들어 동일한 id로 서로 다른 모델(그리고 서로 다른 테이블)의 예측을 조인하는 경우—은 새로운 복사본을 만들지 않고 데이터를 효율적으로 참조합니다.
test_table.add_data(img_id, wandb.Image(img), guess, truth, *scores)

1.4 아티팩트 동기화하기

해당 단계의 테이블이 완성되면, 아티팩트에 추가한 뒤 wandb에 로깅하세요:
# log predictions table to wandb, giving it a name
test_data_at.add(test_table, "predictions")
wandb.run.log_artifact(test_data_at)

2. 테이블 시각화하기

테이블을 로깅했다면, 이제 인터랙티브하게 탐색할 수 있습니다.
라이브 예시: 작은 테이블 (이미지 10개) 및 큰 테이블 (약 1만 개 이미지)
이미지, 예측 레이블(추정값), 정답 레이블, 그리고 모든 신뢰도 점수를 확인하세요
상세 버전

2.1 로깅된 아티팩트 둘러보기

특정 실험 실행에 로깅된 wandb.Table을 보려면:
  • 실행 워크스페이스를 엽니다(예: https://wandb.ai/stacey/mnist-viz/runs/1aufmxzf) 를 클릭한 다음, 왼쪽 사이드바에서 “Artifacts” 아이콘(팬케이크가 쌓인 모양)을 선택합니다.
  • 해당 실행의 입력 아티팩트와 출력 아티팩트 목록이 표시됩니다. 이 예시에서는 5번의 검증 단계마다 아티팩트 버전(v0~v4)을 하나씩 기록하며, 각각 동일한 수의 학습 에포크 이후의 모델 성능을 평가합니다(v0는 1 에포크 후, v1은 2 에포크 후 등).


2.2 테이블 열기

이 버전들 중 하나를 선택하면 해당 아티팩트 버전에 대한 자세한 정보를 볼 수 있습니다. 각 버전에는 별칭(짧은 태그)이나 더 긴 노트를 추가로 달 수 있습니다. 시각적 테이블을 보려면 테이블(아래 초록색으로 강조된 “predictions”)을 선택하세요.



2.3 테이블 작업

각 예측은 지정한 열(다음 섹션 참조)에 맞춰 한 행으로 로깅됩니다. 테이��은 인터랙티브하게 탐색할 수 있으며, 아래의 일부 작업을 시도해 보세요: 이 인터랙티브 예제입니다.
  • 필터: 모델이 어디에서 틀렸을까요? Filter 버튼을 눌러 다음과 같은 표현식을 입력하세요 x["guess"] != x["truth"] 틀린 예측만 보려면
  • 정렬 열에서: 특정 클래스에 대한 최고 신뢰도의 오류는 무엇인가요? 열 헤더의 점 세 개 아이콘을 클릭해 해당 열 기준으로 정렬하세요. 예를 들어 9처럼 보이는 4에 집중하려면 다음과 같은 표현식을 사용하세요 x["guess"] = 9 and x["truth"] = 4, 그런 다음 "score_9"로 정렬해 가장 혼란스러운 4를 확인하세요(아래 첫 번째 이미지)
  • 그룹 열에서: 모델이 틀리는 패턴이나 가장 자주 발생하는 오류 유형이 있나요? 정답 추측을 모두 필터링한 뒤 (x["guess"] != x["truth"] ), "guess" 기준으로 그룹화해 예측된 클래스별로 정리된 예시를 스크롤해 보세요.
  • 열 추가 파생 정보를 보려면: "guess" 기준으로 그룹화한 뒤, 헤더의 점 세 개 메뉴에서 열을 추가하고 편집하여 다음을 표시하세요 x["image"].count. 이제 이 파생 열로 정렬해 가장 많이 혼동되는 클래스를 확인할 수 있습니다(아래 두 번째 이미지). 또한 열 순서를 바꾸기 위한 임시 방편으로 중복 열을 추가해, 가장 관련 있는 정보를 나란히 확인할 수도 있습니다.
  • 열 제거 필요하지 않다면
9처럼 보이는 4만 필터링하고, 이미지 가까이에 "score_9" 열을 추가한 뒤, "score_9" 기준으로 정렬하세요.
이 모델에서 가장 자주 틀린 예측은 9입니다. 실제 라벨의 히스토그램을 보면, 9로 혼동된 실제 클래스 중 가장 빈도가 높은 것은 4이고, 8로 혼동된 실제 클래스는 5가 가장 많습니다. 7로는 3이, 2로는 7이 가장 많이 혼동되며, 이와 같은 패턴이 이어집니다.

2.4 테이블의 히스토그램

그룹화 작업이 Table에서 수치 값을 집계하면, 기본적으로 해당 분포의 히스토그램이 표시됩니다. 이는 더 높은 수준에서 패턴을 시각화하고 데이터의 상관관계를 파악하는 데 유용합니다. 예를 들어, 정답 예측을 필터링해 제외한 뒤 보면, 이 모델은 여전히 대각선에서 가장 높은 신뢰도를 보입니다(분포가 넓고, 점수가 높음). 반면, 비대각선 셀에서는 전반적으로 신뢰도가 낮습니다(0에서 피크). 이는 모델의 추정값이 최대 신뢰도 점수이기 때문에 자연스러운 현상입니다. 하지만 이와 다른 양상—다른 레이블에 대한 작은 신뢰도 상승 신호—은 모델이 혼동하는 영역이나 레이블 쌍을 나타냅니다.
이 모델은 4를 한 번만 틀리게 예측했습니다(마지막 행).
확대했을 때, 픽셀 없이 보면 두 번째 열의 실제 분포가 가장 유용합니다. 비대각선 셀들은 모델이 숫자를 혼동하는 지점을 보여줍니다. 예를 들어, 추정값 1에 대한 신뢰도 막대가 작지만 높게 나타나는 경우(점수 0, 두 번째 행, 세 번째 열)가 그렇습니다.

3. 모델 예측 비교

특정 시점의 모델 스냅샷을 깊이 탐색하려면 모델 예측 Table을 사용할 수 있습니다. 그렇다면 시간 경과에 따른 모델 성능을 어떻게 평가하고, 개선 방향을 어떻게 파악할 수 있을까요? 이러한 모든 시각화와 테이블 작업은 비교 맥락에서도 동일하게 활용할 수 있습니다.

3.1 단계별 비교

같은 모델의 서로 다른 두 시점에서 생성된 두 개의 Table을 선택하세요. 첫 번째 시점은 해당 Run의 “Artifacts” 섹션으로 이동한 뒤, 원하는 아티팩트 버전으로 들어가 선택합니다. 여기서는 제 “baseline” 모델에서 기록된 첫 번째 validation 단계의 로그를 보고 있습니다. 이전 예측 아티팩트 이름에 Run ID가 포함되어 있는 것(예: “test_samples_3h9o3dsk”)을 발견할 수 있는데, 이는 어떤 Run이 어떤 아티팩트 버전을 생성했는지 추적할 수 있게 해 주는 좋은 기본 패턴입니다. 어떤 것이 중요한지, 계속 보관할 것인지 판단이 서면, UI에서 더 명확한 이름으로 바꾸고 제가 적용한 변경 사항에 대한 메모를 남길 수 있습니다.

로그된 Table(여기서는 “predictions”)을 클릭해 이 단계의 모델 예측을 확인하세요. 다음으로 비교할 다른 단계를 선택합니다. 예를 들어, 이 모델의 마지막 validation epoch인 “v4 latest”를 고른 뒤 “Compare”를 클릭하세요.

처음 화면은 다음과 같이 보입니다:

고급 쿼리에는 유용하지만, 저는 나란히 비교하는 렌더링이 더 좋습니다. 상단 드롭다운에서 "WbTableFile"을 "SplitPanel → WbTableFile"로 변경하세요.

나란히 보기: 왼쪽은 파란색, 오른쪽은 노란색


이제 시간 경과에 따른 모델 예측을 비교할 수 있습니다.
  • 추가 학습 에포크를 거치며 동일한 예시에 대해 예측 레이블과 신뢰도 점수의 변화를 관찰하기
  • 두 테이블을 동시에 필터링하고 그룹화하여 클래스별 오류 수 변화, 혼동 행렬, 가장 자주 혼동되는 레이블 쌍, 가장 어려운 오답, 레이블별 신뢰도 점수 분포 등 다양한 지표를 확인하세요.
  • 재학습 없이도 정밀도와 재현율 같은 파생 정보를 담은 열을 추가할 수 있습니다.

3.2 서로 다른 모델 비교

서로 다른 모델 간 결과를 비교할 때도 같은 절차를 따르면 됩니다. 여기서는 기준 모델과 새로운 변형 모델의 예측을 비교합니다. 2x_layers_2x_lr첫 번째 합성곱 층의 채널 수를 32에서 64로, 두 번째 층을 128에서 256으로, 학습률을 0.001에서 0.002로 두 배로 늘린 모델에서. From 이 실시간 예시여기서는 “split panel” 뷰를 사용해 한 에포크만 학습한 뒤의 오답만 필터링해 확인합니다. 왼쪽의 기준 모델은 152개 예시를 틀린 반면, 두 배로 확장한 변형 모델은 238개를 틀립니다.

그다음 “guess”로 그룹화하고, 각 그룹의 항목 수를 세는 열을 추가한 뒤 그 열 기준으로 정렬해 보면, 기준 모델은 8을 3으로 가장 자주 잘못 예측하고, 두 배로 확장한 변형 모델은 4를 9로 가장 자주 잘못 예측한다는 것을 확인할 수 있습니다.

두 모델의 예측을 비교하는 이 분석을 다시 수행하면 에포크 5회 학습의실시간 예시 → ), 두 배로 확장한 변형 모델이 기준 모델과 비슷하거나 약간 앞서며(오답 90개 vs 95개), 두 모델 모두에서 5와 7이 가장 자주 틀린 예측이 됩니다.

이 예시는 단순한 모델 비교 사례이지만, 코드를 다시 실행하거나 즉석 스크립트를 새로 작성하거나 새로운 차트를 생성하지 않고도 Tables로 수행할 수 있는 탐색적 분석의 용이함, 유연성, 깊이를 잘 보여 줍니다.

테이블 비교 작업과 보기

단일 테이블 보기에서 가능한 모든 작업은 비교 보기에도 동일하게 적용됩니다. 위에서 설명한 대로 필터링, 정렬, 그룹화, 열 추가/제거가 가능합니다. 나란히 배치된 “SplitPanel” 보기에서는 수행한 작업이 양쪽에 모두 적용됩니다. 기본의 평탄화된 “WbTableFile” 보기에서는 별칭 0(파란색 하이라이트) 또는 1(노란색 하이라이트)을 사용해 개별 테이블을 참조할 수 있습니다. 평탄화된 보기에서는 겹쳐진 히스토그램으로 점수와 기타 지표를 비교할 수 있습니다. 이 보기에서는 조인할 기준 열을 지정해야 하며, 일반적으로 예시 ID 열을 사용합니다.



질의응답

The Tables 기능 은 이제 막 공개된 기능입니다. 직접 사용해 보시면서 아래 댓글에 질문과 의견을 남겨 주세요! 확인해 보세요 추가 문서 그리고 예시 Colab 모음은 계속 추가되고 있습니다 여기.

이 문서는 AI 번역본입니다. 오역이 의심되면 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기