Community影像github.com

szcharlesji/tikz-dl-visualizer

以直覺優先的靜態 TikZ/pgfplots 圖形來解釋深度學習概念,編譯為 PDF 及 PNG,並附上簡短解讀指南,專為中階深度學習學生設計。

tikz-dl-visualizer 是什麼?

這個技能專為生成深度學習概念的靜態 TikZ 圖形而設計,目標是製作直覺化、視覺上優美的插圖,並編譯為 PDF 與 PNG。它搭載一套完整的工具鏈,包括 `dlviz.sty`(提供一致的視覺語言與色彩配色)、`scripts/render.py`(編譯腳本)以及多份參考文件(`references/visual-language.md`、`archetypes.md`、`tikz-gotchas.md`),確保每張圖形都能達到適合投影片、論文與講義的高品質。工作流程從鎖定單一核心概念開始,挑選最適合的視覺原型(如流程圖、矩陣熱圖、小多重圖等),並使用具體數值與 numpy 腳本來產生精確資料。這個技能支援 Claude Code,並且是 tikz-live(互動式圖形)與 tikz-explorer-book(完整網路書籍)等兄弟技能的一部分。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/szcharlesji/tikz-skills/tree/HEAD/skills/tikz-dl-visualizer

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

TikZ 深度學習視覺化工具

你是為一位已經具備基礎知識(MLP、反向傳播、CNN、Transformer 是什麼)的學生繪圖,他們想知道的是為什麼。這裡的好圖形不是一個裝飾過的方塊圖;它讓一個想法一看就懂,而且值得再看第二眼。風格遵循 Alfredo Canziani 的 NYU 深度學習書籍:深灰色頁面、ColorBrewer Set3 柔和色系,並且顏色總是代表相同意義。

你所需的一切都已打包:

  • assets/dlviz.sty:調色盤(深色與淺色)、符號巨集、節點樣式、pgfplots 外觀、輔助工具。始終在此基礎上建構,而不是從頭重新設計樣式;這是讓每個圖形維持同一種視覺語言的關鍵。
  • assets/examples/*.tex(附有 .png 預覽圖):六個已編譯、審查過的圖形,每種原型一個。查看 PNG 以了解目標品質。從最接近的那個開始。
  • scripts/render.py:編譯為 PDF 和 PNG,並且只印出第一個錯誤。
  • references/visual-language.md:色彩角色、元素詞彙、符號、排版與佈局規則。在一個任務中開始繪製第一個圖形之前,請先閱讀此文件。
  • references/archetypes.md:哪種圖片適合哪個概念,並附有深度學習常見錯誤事實表。閱讀與你概念相符的那一行。
  • references/tikz-gotchas.md:我們遇到過的編譯錯誤與佈局陷阱,以及修復方法。當某個東西無法編譯或看起來不對時,請閱讀此文件。

工作流程

1. 找出核心想法

在碰觸 TikZ 之前,先用一句話寫下這個圖形必須傳達的洞察,表達方式是學生會看到的,例如:

  • "注意力機制的每個輸出列是值列的加權平均,而權重是 softmax 分數矩陣的一列。"
  • "動量項會抵消震盪的梯度分量,並累積一致的分量。"
  • "殘差區塊只需要學習修正項 F(x),因為 x 是未經修改直接傳遞過去的。"

如果你寫不出那句話,就表示你還不知道要畫什麼。問問自己學生最可能抱持的錯誤觀念是什麼,然後讓圖形瞄準那個觀念。如果概念很廣泛(例如 "Transformer"),就選取最能啟發人心的單一切面並說明清楚;剩下的部分提議用後續圖形來補充,而不是把所有東西塞進一張圖。

2. 選擇原型

打開 references/archetypes.md,選擇能讓那句話變為可見的視覺形式。主要的幾種:

原型展示內容範例檔案
管線 / 計算圖資料如何流動,什麼餵給什麼autoencoder.tex
矩陣 / 熱圖佈局張量形狀與乘積、權重attention.tex
網格 + 感受野局部、滑動、共享的操作convolution.tex
參數空間幾何最佳化路徑、損失等高線momentum.tex
小多重圖比較函數或設定activations.tex
前/後空間變形層對輸入空間的作用linear-map.tex

合併兩種原型是可以的(含有小熱圖插圖的管線圖),但應以一種為主。

3. 讓它具體化

抽象是直覺的天敵。使用小的具體大小(4 個 token、d_k = 3、5x5 輸入、2-D 參數),並說明它們代表什麼。真實數字勝過佔位符:總和為 1 的權重、你能驗證輸出的卷積、實際符合最佳化器行為的軌跡。

用 Python 計算數字,絕不要手算或心算。 執行一個簡短腳本(透過 uv run --with numpy python - 或純 Python 的 numpy),然後將座標或數值貼入 .tex。留下一則註解說明它們是如何產生的。手工製作的「示意性」數字是錯誤圖形的來源:總和為 1.1 的 softmax 列、與輸入不符的卷積輸出。

4. 撰寫圖形

在輸出資料夾(如果使用者指定了資料夾則為該資料夾,否則為當前工作目錄)中建立 <concept>.tex,從以下開始:

% Caption: <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 種色調;所有結構性元素都是白色/灰色。
  • 對比需要兩種色調。 當圖形比較兩種條件(普通 vs 殘差、SGD vs 動量、BatchNorm vs LayerNorm)時,每種條件賦予自己的色調,並在該條件的曲線、標籤和重點標記中一致地使用這些色調。不要因為兩者都是梯度就都用紅色繪製;紅色這時用來標記共享的東西(損失、反向方向),而比較部分仍能一目了然。
  • 讓幅度可視化。 如果某個量增大或縮小(梯度範數、注意力權重、變異數),在繪圖本身中對其進行編碼,而不僅僅是在印出的數字中:逐步變細的線寬、填充色調、箭頭長度、點的大小。對應關係也值得用線條表示:從每個樣本到其落點的精細線條,比兩個分開的點雲更能展示變換。
  • 展示數學,並用顏色編碼。 將定義方程式放在圖形中,通常位於下方,每個項的顏色與其視覺對應物相同。
  • 為所有東西標註形狀。 以柔和的 dim 樣式為張量標註其形狀(\(\R^{n\times d_k}\))。形狀管理是理解深度學習操作的一半。
  • 追蹤一個範例。 在所有出現的地方,用 hl 樣式(紅色輪廓)標記一個列、一個區塊或一個步驟,讓學生能從頭到尾追蹤單一計算。
  • 簡潔且就地註解。 兩到三個簡短的斜體註解(annot)帶有纖細的引導線,放在它們要解釋的內容旁邊。使用直接標籤而不是圖例框。沒有總標題(由標題來做),但多面板圖形會獲得簡短的面板標籤,例如 "(a) 普通: (\vx_l = F_l(\vx_{l-1}))",使用 annot 樣式,每個面板上方有清晰的空間。
  • 最少墨水。 沒有陰影、漸層、為效果而存在的 3D 或裝飾性圖示。填充是筆觸顏色的淺色調(cell=colorX 做到這一點)。
  • 標準符號。 粗體小寫為向量、粗體大寫為矩陣、普通為純量;使用巨集(\vx、\mW、\vytld、\softmax)。行 vs 列的慣例必須與你印出的方程式一致(注意力使用按 token 排列的 Q、K、V 行,如 Vaswani 等人所做)。

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 中的每個圖形在檢視後都至少需要一輪修正。檢查:

  1. 是否有任何東西重疊或接觸:文字與線條重疊、箭頭穿過標籤、文字碰到節點邊框、標籤被軸或面板邊緣裁剪、一個面板的註解擠到相鄰面板的標籤?放大查看密集區域(使用 magick in.png -crop WxH+X+Y out.png 裁剪 PNG),而不是完全相信縮圖。
  2. 你能否在三秒鐘內看到核心想法?眼睛首先停留在哪裡?那是對的地方嗎?
  3. 每種顏色是否發揮作用,且每個角色在各處的顏色是否一致?
  4. 每個數字、形狀和公式是否正確(參見 references/archetypes.md 中的事實表)?
  5. 間距是否均勻,對齊是否經過刻意安排?

修正並重新編譯,直到所有答案都是「是」。兩三次疊代是正常的。

6. 交付

給使用者:

  1. PNG(如果你能顯示或發送檔案,則內嵌顯示),以及 .tex、.pdf 和 dlviz.sty 的路徑。
  2. 一份閱讀指南:4-8 句話,按照應該閱讀的順序引導眼睛瀏覽圖形("從 Q 的標記行開始..."),將每個視覺元素與數學連結起來,並以結論作為結束。為中階學生撰寫:不要重新解釋什麼是神經元,但要解釋為什麼該機制有效。
  3. 一行關於如何調整的說明:切換到 [light]、改變大小,或一個自然的後續圖形(例如 "下一步做多頭版本?")。

保持 .tex 頂部的 % Caption: 註解與圖形同步;它是使用者將貼在其文件中的圖形標題。

兄弟技能

此技能生成靜態圖形:每個概念一個 PDF/PNG,用於投影片、論文和印刷品。兩個兄弟技能共用相同的 dlviz.sty 和視覺語言:

  • tikz-live:同一種圖形的互動版本(拖曳、滑動、懸浮、播放),作為自包含的網頁。當讀者應該改變某個東西並觀察機制如何反應時,或者當使用者要求互動式、可探索或可在瀏覽器中動畫化的圖形時,使用它。
  • tikz-explorer-book:一個課程或領域的完整網路書籍,包含概念圖和各章節的圖形;它使用此技能生成靜態圖形,並使用 tikz-live 生成即時圖形。

當要求不常見時

  • 使用者自己的 LaTeX 文件或前文。 如果他們有自己的符號和顏色,請與其匹配;你仍然可以 \input dlviz.sty 中的樣式,或只複製他們需要的部分。不要覆蓋他們的頁面顏色。
  • 投影片 (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),並詢問等高線圖是否能更好地解釋它。通常是的。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

szcharlesji/tikz-explorer-book

Build a figure-first "explorer" web book for a course, syllabus, reading list or research field. The home page is an interactive Obsidian-style concept map with a guided tour; it leads into chapters, each built around 2–3 computed TikZ figures with reading-guide captions, where the key mechanism of a chapter can be a live figure the reader drags, slides or hovers (tikz-live) while static figures come from tikz-dl-visualizer. The result is published as one web page. Use this skill whenever someone wants a visual companion, illustrated notes, a study guide, a "book", a concept map or mind map of a field, or a big-picture overview that connects the ideas and papers everyone should know before going deep. Typical asks are "make a book for this course", "help me see the big picture of X", "illustrated guide to the papers on this syllabus", "something like Obsidian for generative models", "chapters with diagrams for each week". Use it even if they never say TikZ, and especially when they say diagrams and intuition

szcharlesji/tikz-live

Build an interactive, explorable figure in the TikZ/dlviz style (Canziani NYU-DL look) where the reader drags points, moves sliders, hovers rows or plays steps, while every static part stays real LaTeX typography. The static scaffold is compiled from TikZ, a small JS spec draws the live part in the same coordinates, and the build outputs one self-contained HTML page plus PNG snapshots to check. Use this whenever someone wants an interactive, live, explorable, draggable, animated, "play with it", slider or hover version of a technical or ML/DL diagram (optimizers, attention, convolution, linear maps, loss landscapes, sampling, normalization...), wants to make an existing TikZ figure interactive, or wants interactive figures for a web book, course notes, a blog or an artifact. For a static figure (slides, papers, print), use tikz-dl-visualizer; for a whole illustrated web book with many figures, use tikz-explorer-book, which builds its live figures with this skill.

相關技能