TikZ 딥러닝 시각화 도구
당신은 기초(MLP, 역전파, CNN, 트랜스포머 개념)를 이미 알고 있으며 이유를 알고 싶어하는 학생을 위해 그림을 그립니다. 좋은 그림은 장식된 상자 다이어그램이 아니라, 한 가지 아이디어를 한눈에 명확하게 보여주고 두 번째 봤을 때 더 깊은 이해를 줍니다. 스타일은 Alfredo Canziani의 NYU 딥러닝 책을 따릅니다: 어두운 회색 페이지, ColorBrewer Set3 파스텔 색상, 그리고 항상 같은 의미를 가지는 색상.
필요한 모든 것이 번들로 제공됩니다:
assets/dlviz.sty: 팔레트(어두움과 밝음), 표기법 매크로, 노드 스타일, pgfplots 모양, 도우미. 처음부터 다시 스타일링하기보다는 항상 이것을 기반으로 구축하십시오. 이것이 모든 그림을 하나의 시각 언어로 유지하는 방법입니다.assets/examples/*.tex(각각.png미리보기 포함): 6개의 컴파일되고 검토된 그림, 각 원형별 하나씩. PNG를 보고 목표 품질을 확인하십시오. 가장 가까운 것부터 시작하십시오.scripts/render.py: PDF와 PNG로 컴파일하고 첫 번째 오류만 출력합니다.references/visual-language.md: 색상 역할, 요소 어휘, 표기법, 타이포그래피 및 레이아웃 규칙. 세션에서 첫 번째 그림을 그리기 전에 읽으십시오.references/archetypes.md: 어떤 그림이 어떤 개념에 맞는지, 그리고 그림에서 흔히 틀리는 DL 사실 표를 포함합니다. 개념에 해당하는 행을 읽으십시오.references/tikz-gotchas.md: 우리가 겪은 컴파일 오류와 레이아웃 함정 및 수정 방법. 컴파일이 안 되거나 보기가 이상할 때 읽으십시오.
워크플로우
1. 하나의 아이디어 찾기
TikZ를 만지기 전에, 그림이 전달해야 할 통찰을 한 문장으로 쓰십시오. 학생이 보게 될 것으로 표현하십시오. 예를 들어:
- "어텐션의 각 출력 행은 값 행의 가중 평균이며, 가중치는 소프트맥스 처리된 점수 행렬의 한 행입니다."
- "모멘텀은 진동하는 기울기 성분을 상쇄하고 일관된 성분을 누적합니다."
- "잔차 블록은 수정값 F(x)만 학습하면 됩니다. x는 변경되지 않고 전달되기 때문입니다."
그 문장을 쓸 수 없다면, 아직 무엇을 그릴지 모르는 것입니다. 학생이 가질 가능성이 가장 높은 오해가 무엇인지 스스로에게 질문하고 그 오해를 겨냥한 그림을 만드십시오. 개념이 넓다면(예: "트랜스포머"), 가장 통찰력 있는 단일 조각을 선택하여 말하고, 나머지는 후속 그림으로 제안하십시오. 모든 것을 하나의 그림에 집어넣지 마십시오.
2. 원형 선택
references/archetypes.md를 열고 그 문장을 시각화할 수 있는 형식을 선택하십시오. 주요 원형은 다음과 같습니다:
| 원형 | 보여주는 것 | 예제 파일 |
|---|---|---|
| 파이프라인 / 계산 그래프 | 데이터 흐름, 무엇이 무엇을 먹이는지 | autoencoder.tex |
| 행렬 / 히트맵 레이아웃 | 텐서 형태와 곱, 가중치 | attention.tex |
| 격자 + 수용 필드 | 지역적, 슬라이딩, 공유 연산 | convolution.tex |
| 매개변수 공간 기하학 | 최적화 경로, 손실 등고선 | momentum.tex |
| 작은 다중 그래프 | 함수 또는 설정 비교 | activations.tex |
| 전/후 공간 왜곡 | 레이어가 입력 공간에 하는 일 | linear-map.tex |
두 원형을 결합하는 것은 괜찮습니다(작은 히트맵 삽입이 있는 파이프라인). 하지만 하나가 주를 이루어야 합니다.
3. 구체적으로 만들기
추상화는 직관의 적입니다. 작고 구체적인 크기(4개의 토큰, d_k = 3, 5x5 입력, 2-D 매개변수)를 사용하고 그것들이 무엇을 나타내는지 말하십시오. 실제 숫자가 자리 표시자보다 낫습니다: 합이 1이 되는 가중치, 출력을 직접 확인할 수 있는 컨볼루션, 옵티마이저가 실제로 하는 궤적.
숫자는 Python으로 계산하십시오. 절대 손이나 머리로 하지 마십시오. 짧은 스크립트(uv run --with numpy python -를 통한 numpy 또는 일반 Python)를 실행한 다음 좌표나 값을 .tex에 붙여넣으십시오. 어떻게 생성되었는지 주석을 남기십시오. 손으로 만든 "예시" 숫자는 잘못된 그림의 원인입니다: 합이 1.1인 소프트맥스 행, 입력과 일치하지 않는 컨볼루션 출력.
4. 그림 작성
출력 폴더(사용자가 지정한 경우 해당 폴더, 그렇지 않으면 현재 작업 디렉토리)에 <concept>.tex를 다음을 시작점으로 만드십시오:
% 캡션: <2-3 문장: 무엇을 보고 무엇을 보여주는지>
\documentclass[tikz,border=8pt]{standalone}
\usepackage[dark]{dlviz} % [light]는 백서/슬라이드용
\begin{document}
\begin{tikzpicture}
...
\end{tikzpicture}
\end{document}
그림이 위치할 곳에 따라 테마를 선택하십시오: 슬라이드, 화면 및 책과 일치해야 한다고 사용자가 말한 모든 것에는 어두움(책 스타일); 논문, 학위 논문, 강의 노트 PDF, 숙제, 인쇄와 같은 종이 형태의 대상에는 밝음; 또는 요청이 있을 때. 어느 쪽도 힌트가 없으면 어두움을 사용하고 [light]를 언급하십시오. 색상 역할은 두 테마에서 유지되므로 전환은 한 단어입니다.
가장 중요한 원칙(세부 사항은 references/visual-language.md에 있음):
- 색상 = 역할, 일관되게. 입력 x는 분홍색, 은닉 h는 녹색, 예측 ỹ는 보라색, 목표 y는 파란색, 잠재 z는 주황색, 비용/손실/에너지는 빨간색, 인코더는 라벤더, 디코더는 아쿠아, 예측기는 노란색, 매개변수는 금색. 그림, 레이블 및 방정식(
\pink{\vx})에서 기호에 동일한 색상을 사용하십시오. 이렇게 하면 읽지 않고도 눈이 그림과 수학을 연결할 수 있습니다. 그림당 최대 약 5가지 색상; 구조적인 모든 것은 흰색/회색입니다. - 대비에는 두 가지 색조가 필요합니다. 그림이 두 조건(일반 대 잔차, SGD 대 모멘텀, BatchNorm 대 LayerNorm)을 비교할 때 각 조건에 고유한 색조를 부여하고 해당 조건의 곡선, 레이블 및 하이라이트에 해당 색조를 일관되게 사용하십시오. 둘 다 그래디언트라는 이유만으로 둘 다 빨간색으로 그리지 마십시오. 빨간색은 공유된 것(손실, 역방향 방향)을 표시하고 비교는 한눈에 읽을 수 있어야 합니다.
- 크기를 시각화하십시오. 양이 증가하거나 감소하면(그래디언트 노름, 어텐션 가중치, 분산) 인쇄된 숫자뿐만 아니라 그림 자체에 인코딩하십시오: 단계별로 얇아지는 선 두께, 채우기 농담, 화살표 길이, 점 크기. 대응 관계에도 잉크를 할애하십시오: 각 샘플에서 도착 지점까지 가는 얇은 선은 두 개의 분리된 구름보다 변환을 더 잘 보여줍니다.
- 색상 코드로 수학을 보여주십시오. 정의 방정식을 그림 안에, 보통 아래쪽에, 각 항을 시각적 대응물과 같은 색상으로 넣으십시오.
- 모든 것에 형태를 표시하십시오. 텐서의 형태를 흐릿한
dim스타일(\(\R^{n\times d_k}\))로 레이블하십시오. 형태 관리(Shape bookkeeping)는 DL 연산을 이해하는 데 절반입니다. - 하나의 예제를 끝까지 따라가십시오. 나타나는 모든 곳에서 하나의 행, 하나의 패치 또는 하나의 단계를 강조(
hl스타일, 빨간색 윤곽선)하여 학생이 단일 계산을 처음부터 끝까지 추적할 수 있게 하십시오. - 드물고 제자리에 주석을 다십시오. 얇은 지시선과 함께 설명하는 내용 옆에 두세 개의 짧은 기울임꼴 주석(
annot). 범례 상자 대신 직접 레이블. 전체 제목 없음(캡션이 그 역할을 함). 다중 패널 그림은 각 패널 위에 충분한 공간을 두고annot스타일로 "(a) 일반: (\vx_l = F_l(\vx_{l-1}))"와 같은 짧은 패널 레이블을 사용하십시오. - 최소 잉크. 그림자, 그라데이션, 그 자체를 위한 3D 또는 장식 아이콘은 없습니다. 채우기는 선 색상의 연한 농담입니다(
cell=colorX가 이 작업을 수행합니다). - 표준 표기법. 굵은 소문자 벡터, 굵은 대문자 행렬, 보통 스칼라; 매크로 사용(
\vx,\mW,\vytld,\softmax). 행 대 열 규칙은 인쇄하는 방정식과 일치해야 합니다(어텐션은 Vaswani et al.에서처럼 토큰당 행 Q, K, V를 사용합니다).
5. 컴파일하고 살펴보기
python <skill-dir>/scripts/render.py path/to/concept.tex
dlviz.sty를 그림 옆에 복사하여 폴더를 어디서든 다시 컴파일할 수 있게 하고, concept.pdf와 concept.png를 씁니다. 컴파일에 실패하면 첫 번째 오류를 출력합니다. references/tikz-gotchas.md를 확인하십시오. 패키지가 누락되면 tlmgr 명령을 출력합니다. 사용자에게 알리고 허락 없이 머신에 설치를 실행하지 마십시오.
그런 다음 PNG를 열고 리뷰어처럼 비평하십시오. 컴파일이 끝이 아닙니다. assets/examples의 모든 그림은 확인 후 최소 한 번의 수정이 필요했습니다. 확인하십시오:
- 겹치거나 닿는 것이 있습니까: 선 위의 텍스트, 레이블을 통한 화살표, 노드 경계에 닿는 텍스트, 축 또는 패널 가장자리에서 잘린 레이블, 한 패널의 주석이 다음 패널의 레이블을 침범합니까? 썸네일을 신뢰하지 말고 밀집된 영역을 확대하십시오(
magick in.png -crop WxH+X+Y out.png로 PNG를 자르십시오). - 3초 안에 하나의 아이디어를 볼 수 있습니까? 눈이 가장 먼저 닿는 곳은 어디입니까? 그것이 올바른 것입니까?
- 모든 색상이 제 역할을 하고 있으며, 각 역할이 모든 곳에서 동일하게 색칠되었습니까?
- 모든 숫자, 모양 및 공식이 정확합니까(
references/archetypes.md의 사실 표 참조)? - 간격이 균일하고 정렬이 의도적입니까?
모든 답변이 '예'가 될 때까지 수정하고 다시 컴파일하십시오. 2~3회 반복은 정상입니다.
6. 제공
사용자에게 다음을 제공하십시오:
- PNG(파일을 표시하거나 보낼 수 있는 경우 인라인 표시)와
.tex,.pdf및dlviz.sty의 경로. - 읽기 가이드: 읽어야 할 순서대로 그림을 안내하는 4-8문장 ("Q의 강조 표시된 행에서 시작..."), 각 시각적 요소를 수학과 연결하고, 마지막에 핵심 내용으로 끝맺음. 중급 학생을 위해 작성: 뉴런이 무엇인지 다시 설명하지 말고, 메커니즘이 작동하는 이유를 설명하십시오.
- 적응 방법에 대한 한 줄:
[light]로 전환, 크기 변경, 또는 자연스러운 후속 그림(예: "다음은 멀티헤드 버전?").
.tex 상단의 % 캡션: 주석을 그림과 동기화된 상태로 유지하십시오. 이것은 사용자가 문서에서 그림 아래에 붙여넣을 캡션입니다.
관련 스킬
이 스킬은 정적 그림을 만듭니다: 아이디어당 하나의 PDF/PNG, 슬라이드, 논문 및 인쇄용. 두 개의 관련 스킬이 동일한 dlviz.sty와 시각 언어를 공유합니다:
- tikz-live: 동일한 종류의 그림을 대화형(드래그, 슬라이드, 호버, 재생) 독립형 웹 페이지로 만듭니다. 독자가 무언가를 변경하고 메커니즘이 반응하는 것을 보아야 할 때, 또는 사용자가 대화형, 탐색 가능 또는 브라우저에서 애니메이션 그림을 요청할 때 사용하십시오.
- tikz-explorer-book: 개념 지도와 그림 장으로 구성된 강의나 분야의 전체 웹 북; 정적 그림에는 이 스킬을, 라이브 그림에는 tikz-live를 사용합니다.
요청이 특이한 경우
- 사용자 자신의 LaTeX 문서 또는 프리앰블. 사용자의 표기법과 색상이 있으면 일치시키십시오. 여전히
dlviz.sty의 스타일을\input하거나 필요한 부분만 복사할 수 있습니다. 페이지 색상을 재정의하지 마십시오. - 슬라이드(Beamer). 독립형 그림을 만들고
\includegraphics사용법을 보여주십시오. 단계별 빌드를 위해 레이어에\only<n>/\visible<n>을 넣거나 여러 개의 독립형 파일(step-1, step-2...)을 만드십시오. - 시간에 따른 애니메이션 또는 프로세스. 인쇄 및 슬라이드의 경우, 하나의 그림에서 작은 다중(t = 0, 1, 2, ..., T)을 선호하십시오. 패널 시퀀스는 애니메이션이 숨기는 추세를 보여줍니다. 화면에서 읽고 독자가 단계별로 또는 스크럽하여 보아야 한다면 대신 tikz-live를 사용하십시오.
- PowerPoint / Keynote. PNG(200 dpi로 렌더링, 전체 슬라이드 너비에서 선명함) 또는 PDF를 삽입하십시오. 흰색 슬라이드 템플릿에는
[light]를 사용하십시오. - 논문 그림.
[light]를 사용하고 논문에서 해당 방정식을 명시하면 그림 내 방정식을 생략하고, 폰트를 논문의 폰트와 일치시키십시오(dlviz는 어떤 폰트 패키지도 로드하지 않으므로 문서 폰트가 사용됩니다). - 3D 표면. pgfplots
\addplot3[surf]를view={...}및 흐릿한 컬러맵(colormap name=dlheat)과 함께 사용하고, 등고선 플롯이 더 잘 설명할지 물어보십시오. 일반적으로 그렇습니다.