Initial commit: code, paper, small artifacts
BIN
paper/figures/figure1.pdf
Normal file
16
paper/figures/figure1_overview_v2.log
Normal file
@@ -0,0 +1,16 @@
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdfetex 2026.1.31) 2 MAY 2026 16:36
|
||||
entering extended mode
|
||||
restricted \write18 enabled.
|
||||
%&-line parsing enabled.
|
||||
**&pdfetex figure1_overview_v2.tex
|
||||
(./figure1_overview_v2.tex
|
||||
! Undefined control sequence.
|
||||
l.24 \documentclass
|
||||
[border=6pt]{standalone}
|
||||
?
|
||||
! Emergency stop.
|
||||
l.24 \documentclass
|
||||
[border=6pt]{standalone}
|
||||
End of file on the terminal!
|
||||
|
||||
! ==> Fatal error occurred, no output PDF file produced!
|
||||
736
paper/figures/figure1_overview_v2.tex
Normal file
@@ -0,0 +1,736 @@
|
||||
% Figure 1 (v2): Mixed_CFM — system overview.
|
||||
% Compile: pdflatex figure1_overview_v2.tex
|
||||
%
|
||||
% Layout:
|
||||
% row 1: (a) Tokenization ──x_1──→ (b) Mixed-state path ★
|
||||
% │
|
||||
% x_t
|
||||
% ▼
|
||||
% row 2: (c) Causal-Packet Velocity Field + joint loss ★
|
||||
% │
|
||||
% frozen
|
||||
% ▼
|
||||
% row 3: (d) Inference: score → Mahalanobis-OAS router ★
|
||||
%
|
||||
% Coordinate hygiene:
|
||||
% - Each panel is its own sub-tikzpicture with a fixed bounding box
|
||||
% (\useasboundingbox 0..W x 0..H, in mm). Editing one panel cannot
|
||||
% disturb another.
|
||||
% - The OUTER tikzpicture only chains panels with `right=of` / `below=of`
|
||||
% and draws three inter-panel data-flow arrows.
|
||||
% - Numbers in the figure are architecture descriptors only (T, 21-d,
|
||||
% 10-d, lambda). No experimental result values.
|
||||
|
||||
\documentclass[border=6pt]{standalone}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows.meta, positioning, calc}
|
||||
\usepackage{amsmath, amssymb}
|
||||
|
||||
% --- palette -----------------------------------------------------------------
|
||||
\definecolor{cOrange}{RGB}{230, 126, 34} % discrete (DFM)
|
||||
\definecolor{cBlue} {RGB}{ 52, 110, 180} % continuous (CFM)
|
||||
\definecolor{cPurple}{RGB}{142, 68, 173}
|
||||
\definecolor{cGray} {RGB}{170, 170, 170}
|
||||
\definecolor{cBgPanel}{RGB}{252, 252, 250}
|
||||
\definecolor{cBg} {RGB}{248, 248, 248}
|
||||
|
||||
\newcommand{\contrib}{\textcolor{cOrange}{\ensuremath{\bigstar}}}
|
||||
|
||||
\tikzset{
|
||||
panel/.style ={rectangle, draw=black!35, line width=0.5pt, rounded corners=2pt,
|
||||
fill=cBgPanel, inner sep=0pt},
|
||||
novelpanel/.style ={rectangle, draw=cOrange, line width=1.0pt, rounded corners=2pt,
|
||||
fill=cOrange!4, inner sep=0pt},
|
||||
paneltag/.style ={font=\sffamily\bfseries\footnotesize, anchor=north west,
|
||||
text=black!75, inner sep=0pt},
|
||||
paneltagN/.style ={font=\sffamily\bfseries\footnotesize, anchor=north west,
|
||||
text=cOrange!85!black, inner sep=0pt},
|
||||
archbox/.style ={rectangle, draw=black!70, thick, rounded corners=2pt,
|
||||
align=center, font=\scriptsize, fill=white,
|
||||
minimum height=8mm},
|
||||
novelbox/.style ={rectangle, draw=cOrange, line width=1.2pt, rounded corners=2pt,
|
||||
align=center, font=\scriptsize, fill=cOrange!10,
|
||||
minimum height=8mm},
|
||||
arrow/.style ={->, thick, black!65, >={Stealth[length=2.4mm]}},
|
||||
thinarrow/.style ={->, line width=0.5pt, black!55, >={Stealth[length=1.8mm]}},
|
||||
flowarrow/.style ={->, line width=1.2pt, black!70, >={Stealth[length=2.8mm]}},
|
||||
losseq/.style ={fill=cBg, draw=black!30, rounded corners=2pt,
|
||||
inner sep=4pt, font=\scriptsize, align=left},
|
||||
}
|
||||
|
||||
% =============================================================================
|
||||
% Panel (a): Tokenization (W=70mm, H=42mm)
|
||||
% =============================================================================
|
||||
\newcommand{\panelAcontent}{%
|
||||
\begin{tikzpicture}[x=1mm, y=1mm,
|
||||
panelarrow/.style={->, line width=0.5pt, black!55,
|
||||
>={Stealth[length=1.8mm]}}]
|
||||
\useasboundingbox (0,0) rectangle (70, 42);
|
||||
\node[paneltag] at (1, 41) {(a) Tokenization};
|
||||
|
||||
% --- pcap icon ------------------------------------------------------------
|
||||
\begin{scope}[shift={(1, 14)}]
|
||||
\fill[cBlue!12] (0,0) -- (0,18) -- (8,18) -- (10.8,15) -- (10.8,0) -- cycle;
|
||||
\draw[cBlue!80, line width=0.5pt]
|
||||
(0,0) -- (0,18) -- (8,18) -- (10.8,15) -- (10.8,0) -- cycle;
|
||||
\fill[cBlue!30] (8,18) -- (8,15) -- (10.8,15) -- cycle;
|
||||
\node[font=\bfseries\tiny, text=cBlue!90!black] at (5.4, 10) {flow.pcap};
|
||||
\foreach \y/\rl in {7/7, 5.5/5.5, 4/7, 2.5/4.5, 1/6} {
|
||||
\draw[cBlue!45, line width=0.25pt] (1, \y) -- (1+\rl, \y);
|
||||
}
|
||||
\end{scope}
|
||||
|
||||
% --- arrow: parse ---------------------------------------------------------
|
||||
\draw[panelarrow] (12.5, 23) -- (16.5, 23)
|
||||
node[midway, above=0.3mm, font=\tiny\itshape, text=black!65] {parse};
|
||||
|
||||
% --- packet stream (8 packets, each = 9-d feature vector) ----------------
|
||||
% Color encoding consistent with panel (b):
|
||||
% BLUE = 3 continuous channels (log_size, log_dt_ms, log_win)
|
||||
% ORANGE = 6 discrete channels (direction + 5 TCP flag bits S/F/R/P/A)
|
||||
\begin{scope}[shift={(17, 14)}]
|
||||
\foreach \i in {0,...,7} {
|
||||
\pgfmathsetmacro{\xx}{\i*3}
|
||||
\draw[fill=white, draw=black!50, line width=0.3pt, rounded corners=0.4pt]
|
||||
(\xx, 0) rectangle (\xx+2.5, 18);
|
||||
% --- top: 3 BLUE continuous bands (size, IAT, win) ------------------
|
||||
\fill[cBlue!65] (\xx+0.3, 14.3) rectangle (\xx+2.2, 16.6); % log_size
|
||||
\fill[cBlue!65] (\xx+0.3, 11.7) rectangle (\xx+2.2, 14.0); % log_dt_ms (IAT)
|
||||
\fill[cBlue!65] (\xx+0.3, 9.1) rectangle (\xx+2.2, 11.4); % log_win
|
||||
% thin separator between cont and disc sections
|
||||
\draw[black!25, line width=0.2pt] (\xx+0.3, 8.0) -- (\xx+2.2, 8.0);
|
||||
% --- bottom: 6 ORANGE discrete cells (dir + 5 TCP flags) ------------
|
||||
\foreach \k in {0,...,5} {
|
||||
\pgfmathsetmacro{\fx}{\xx + 0.3 + \k*0.32}
|
||||
\pgfmathsetmacro{\on}{int(mod(\i*3+\k,2))}
|
||||
\ifnum\on=1
|
||||
\fill[cOrange!75] (\fx, 1.5) rectangle (\fx+0.30, 7.0);
|
||||
\else
|
||||
\draw[cOrange!55, line width=0.2pt, fill=white]
|
||||
(\fx, 1.5) rectangle (\fx+0.30, 7.0);
|
||||
\fi
|
||||
}
|
||||
}
|
||||
\draw[->, line width=0.3pt, black!55] (-0.3, -2.5) -- (24.3, -2.5)
|
||||
node[anchor=west, font=\tiny, text=black!55, xshift=-0.5mm] {time};
|
||||
\end{scope}
|
||||
% --- inline mini-key showing what blue/orange mean inside one packet ----
|
||||
% Placed in the empty band between the panel tag (y=41) and the packet
|
||||
% stream top (y=32) so it does not crowd either.
|
||||
\node[font=\tiny, text=cBlue!85!black, anchor=west] at (17, 38)
|
||||
{\rule{1.6mm}{1.6mm}\,3 cont: size, IAT, win};
|
||||
\node[font=\tiny, text=cOrange!85!black, anchor=west] at (17, 35)
|
||||
{\rule{1.6mm}{1.6mm}\,6 disc: dir + S F R P A};
|
||||
|
||||
% --- arrow: tokenize ------------------------------------------------------
|
||||
\draw[panelarrow] (43, 23) -- (47, 23)
|
||||
node[midway, above=0.3mm, font=\tiny\itshape, text=black!65] {tokenize};
|
||||
|
||||
% --- token sequence: FLOW + 3 packet tokens + PAD ------------------------
|
||||
\begin{scope}[shift={(48, 11)}]
|
||||
\fill[cBlue!75] (0, 22) rectangle (3, 23.6);
|
||||
\foreach \i in {0,...,19} {
|
||||
\pgfmathsetmacro{\yp}{20.8 - \i*1.0}
|
||||
\fill[cBlue!25] (0, \yp) rectangle (3, \yp+0.9);
|
||||
}
|
||||
\node[font=\tiny, text=cBlue!90!black, anchor=north] at (1.5, 0.3) {FLOW};
|
||||
\foreach \k/\xoff/\lbl in {1/5/{$P_1$}, 2/9/{$P_2$}, 3/15/{$P_T$}} {
|
||||
\fill[cOrange!75] (\xoff, 22) rectangle (\xoff+3, 23.6);
|
||||
\foreach \i in {0,...,2} {
|
||||
\pgfmathsetmacro{\yp}{20.8 - \i*1.0}
|
||||
\fill[cBlue!25] (\xoff, \yp) rectangle (\xoff+3, \yp+0.9);
|
||||
}
|
||||
\foreach \i in {3,...,8} {
|
||||
\pgfmathsetmacro{\yp}{20.8 - \i*1.0}
|
||||
\fill[cOrange!30] (\xoff, \yp) rectangle (\xoff+3, \yp+0.9);
|
||||
}
|
||||
\foreach \i in {9,...,19} {
|
||||
\pgfmathsetmacro{\yp}{20.8 - \i*1.0}
|
||||
\fill[cGray!28] (\xoff, \yp) rectangle (\xoff+3, \yp+0.9);
|
||||
}
|
||||
\node[font=\tiny, anchor=north] at (\xoff+1.5, 0.3) {\lbl};
|
||||
}
|
||||
\node[font=\Large, text=black!55] at (13, 11) {$\cdots$};
|
||||
\draw[fill=cGray!22, draw=cGray, dash pattern=on 0.6pt off 0.6pt, line width=0.3pt]
|
||||
(19, 22) rectangle (22, 23.6);
|
||||
\foreach \i in {0,...,19} {
|
||||
\pgfmathsetmacro{\yp}{20.8 - \i*1.0}
|
||||
\fill[cGray!22] (19, \yp) rectangle (22, \yp+0.9);
|
||||
}
|
||||
\draw[draw=black!50, dashed, line width=0.4pt] (18.85, 0.3) rectangle (22.15, 23.7);
|
||||
\node[font=\tiny, anchor=north, text=black!65] at (20.5, 0.3) {PAD};
|
||||
\end{scope}
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
|
||||
% =============================================================================
|
||||
% Panel (b): Mixed-state path (W=70mm, H=42mm)
|
||||
%
|
||||
% Conceptual layout (top → bottom):
|
||||
% row 1 — 3 column headers naming the 3 t snapshots:
|
||||
% x_0 (noise) | x_t (model input) | x_1 (data)
|
||||
% row 2 — continuous lane (blue): 3 particles linearly interpolating
|
||||
% from random Gaussian starts at t=0 to data values at t=1.
|
||||
% row 3 — discrete lane (orange): 3 snapshots of a 6-bit vector
|
||||
% (random at t=0, half kept at t=0.5, all kept at t=1).
|
||||
% row 4 — shared t-axis with ticks at the 3 column positions.
|
||||
%
|
||||
% Faint vertical dashed guides at x=8 / x=35 / x=62 tie the column headers,
|
||||
% both lanes, and the t-axis together so the eye can read top-to-bottom.
|
||||
% =============================================================================
|
||||
\newcommand{\panelBcontent}{%
|
||||
\begin{tikzpicture}[x=1mm, y=1mm]
|
||||
\useasboundingbox (0,0) rectangle (70, 42);
|
||||
\node[paneltagN] at (1, 41) {(b) Mixed-state path \contrib};
|
||||
|
||||
% --- column headers at the 3 t positions --------------------------------
|
||||
\node[font=\tiny\bfseries, anchor=south, text=black!70] at (8, 36)
|
||||
{$x_0$: noise};
|
||||
\node[font=\tiny\bfseries, anchor=south, text=cOrange!85!black] at (35, 36)
|
||||
{$x_t$ : \textit{model input}};
|
||||
\node[font=\tiny\bfseries, anchor=south, text=black!70] at (62, 36)
|
||||
{$x_1$: data};
|
||||
|
||||
% --- vertical guides tying the 3 columns to the t-axis ------------------
|
||||
\foreach \xc in {8, 35, 62} {
|
||||
\draw[black!22, dashed, line width=0.3pt] (\xc, 5) -- (\xc, 35.5);
|
||||
}
|
||||
|
||||
% ---- top: continuous track (linear interpolation x_0 → x_1) ------------
|
||||
\fill[cBlue!4] (1, 22) rectangle (69, 33);
|
||||
\draw[cBlue!30, line width=0.3pt] (1, 22) rectangle (69, 33);
|
||||
% Three independent particles, one per continuous channel.
|
||||
% Endpoint visual hierarchy: left small + faded (noise sample) →
|
||||
% mid medium →
|
||||
% right large + solid (data target).
|
||||
% Path 1
|
||||
\draw[cBlue, line width=1pt] (8, 30) -- (35, 28.25) -- (62, 26.5);
|
||||
\fill[cBlue, opacity=0.65] (8, 30) circle [radius=0.8];
|
||||
\fill[cBlue, opacity=0.9] (35, 28.25) circle [radius=0.9];
|
||||
\fill[cBlue] (62, 26.5) circle [radius=1.2];
|
||||
% Path 2
|
||||
\draw[cPurple!75!cBlue, line width=1pt] (8, 25) -- (35, 27.5) -- (62, 30);
|
||||
\fill[cPurple!75!cBlue, opacity=0.65] (8, 25) circle [radius=0.8];
|
||||
\fill[cPurple!75!cBlue, opacity=0.9] (35, 27.5) circle [radius=0.9];
|
||||
\fill[cPurple!75!cBlue] (62, 30) circle [radius=1.2];
|
||||
% Path 3
|
||||
\draw[cBlue!55!black, line width=1pt] (8, 28.5) -- (35, 26.7) -- (62, 24.9);
|
||||
\fill[cBlue!55!black, opacity=0.65] (8, 28.5) circle [radius=0.8];
|
||||
\fill[cBlue!55!black, opacity=0.9] (35, 26.7) circle [radius=0.9];
|
||||
\fill[cBlue!55!black] (62, 24.9) circle [radius=1.2];
|
||||
|
||||
\node[font=\tiny, text=cBlue!85!black, anchor=west] at (1, 20.5)
|
||||
{$x_t = (1{-}t)\,x_0 + t\,x_1, \quad x_0 \sim \mathcal{N}(0,I)$};
|
||||
|
||||
% ---- bottom: discrete track (uniform-corruption Bernoulli flip) -------
|
||||
\fill[cOrange!4] (1, 10) rectangle (69, 19);
|
||||
\draw[cOrange!35, line width=0.3pt] (1, 10) rectangle (69, 19);
|
||||
% Three time snapshots of a 6-bit vector, centered on the t-tick columns.
|
||||
% t=0 : 0 1 0 1 1 0 (random)
|
||||
% t=0.5 : 1 1 1 0 0 1 (about half kept)
|
||||
% t=1 : 1 0 1 0 1 1 (= data target)
|
||||
\foreach \pattern/\xc in {{0,1,0,1,1,0}/8,
|
||||
{1,1,1,0,0,1}/35,
|
||||
{1,0,1,0,1,1}/62} {
|
||||
\pgfmathsetmacro{\xs}{\xc - 6.5}
|
||||
\foreach \v [count=\k from 0] in \pattern {
|
||||
\pgfmathsetmacro{\fx}{\xs + \k*2.2}
|
||||
\ifnum\v=1
|
||||
\fill[cOrange!75] (\fx, 11.2) rectangle (\fx+1.8, 17.8);
|
||||
\node[font=\tiny, text=white] at (\fx+0.9, 14.5) {1};
|
||||
\else
|
||||
\draw[cOrange!75, line width=0.4pt, fill=white]
|
||||
(\fx, 11.2) rectangle (\fx+1.8, 17.8);
|
||||
\node[font=\tiny, text=cOrange!90!black] at (\fx+0.9, 14.5) {0};
|
||||
\fi
|
||||
}
|
||||
}
|
||||
\node[font=\tiny, text=cOrange!85!black, anchor=west] at (1, 8)
|
||||
{$x^{\mathrm{disc}}_t = x^{\mathrm{disc}}_1$ w.p.\ $t$, else $\mathrm{Unif}\{0,1\}$};
|
||||
|
||||
% ---- shared t-axis ----------------------------------------------------
|
||||
\draw[->, line width=0.5pt, black!60] (1, 4) -- (69, 4)
|
||||
node[anchor=west, font=\tiny, text=black!65, xshift=-0.5mm] {$t$};
|
||||
\foreach \tval/\xc in {0/8, 0.5/35, 1/62} {
|
||||
\draw[black!55, line width=0.4pt] (\xc, 3.6) -- (\xc, 4.4);
|
||||
\node[font=\tiny, anchor=north, text=black!70] at (\xc, 3.4) {$t{=}\tval$};
|
||||
}
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
|
||||
% =============================================================================
|
||||
% Panel (c): Causal Velocity Field + heads + joint loss (W=152mm, H=82mm)
|
||||
%
|
||||
% Visual layout (route C + A combined per user spec):
|
||||
%
|
||||
% ────────────── t conditioning subsystem (y=66..78) ──────────────
|
||||
% t → sin embed (~) → MLP → cond cells [▓▒░] → cond_proj (Linear)
|
||||
% │
|
||||
% ┌──────────┼──────────┐
|
||||
% ▼γ1 ▼β1 ▼α1
|
||||
% ─────────── BACKBONE (y=2..62) ─────────────────────────────────
|
||||
%
|
||||
% LEFT col (tensor flow A): CENTER col (heatmap C):
|
||||
%
|
||||
% [tensor h_in] ▓▒░▓░▒ ★ MHSA + causal-packet
|
||||
% │ ┌─────────────────────┐
|
||||
% LN box │ █ █ █ █ █ █ █ █ █ █ │ ← FLOW row
|
||||
% │ │ █ █ │
|
||||
% [tensor h_LN] row-uniform │ █ █ █ │
|
||||
% │ │ █ █ █ █ │ large 12×12
|
||||
% ⊗γ_1 ◀──────── γ_1 (purple dashed) │ █ █ █ █ █ │ attention map
|
||||
% │ │ █ █ █ █ █ █ │ (FLOW row+col
|
||||
% [tensor h_γ] cols rescaled │ █ ... │ + lower-tri)
|
||||
% │ └──────────┬──────────┘
|
||||
% ⊕β_1 ◀──────── β_1 (green dashed) │
|
||||
% │ ⊗α_1 ◀── α_1 (orange dashed)
|
||||
% [tensor h_β] cells shifted │
|
||||
% │ ⊕ ◀── residual from h_in
|
||||
% └──────────────────────────────►──────────────┤
|
||||
% ▼
|
||||
% "MLP half (same)" → h'
|
||||
% ▼
|
||||
% [v_θ head]
|
||||
% [logits head ★]
|
||||
% [Joint loss eq]
|
||||
% =============================================================================
|
||||
\newcommand{\panelCcontent}{%
|
||||
\begin{tikzpicture}[x=1mm, y=1mm,
|
||||
opcirc/.style={circle, draw=black!70, fill=white,
|
||||
line width=0.5pt, inner sep=0pt,
|
||||
minimum size=2.6mm,
|
||||
font=\tiny\bfseries, text=black!75},
|
||||
rescirc/.style={circle, draw=black!70, fill=white,
|
||||
line width=0.7pt, inner sep=0pt,
|
||||
minimum size=3mm,
|
||||
font=\tiny\bfseries},
|
||||
pathline/.style={->, line width=0.5pt, black!65,
|
||||
>={Stealth[length=1.4mm]}},
|
||||
resarc/.style={->, line width=0.7pt, black!50,
|
||||
>={Stealth[length=1.6mm]}},
|
||||
gammaline/.style={->, dashed, line width=0.6pt, cPurple!85,
|
||||
>={Stealth[length=1.4mm]}},
|
||||
betaline/.style={->, dashed, line width=0.6pt, cGreen!75!black,
|
||||
>={Stealth[length=1.4mm]}},
|
||||
alphaline/.style={->, dashed, line width=0.6pt, cOrange!90,
|
||||
>={Stealth[length=1.4mm]}}]
|
||||
\useasboundingbox (0,0) rectangle (152, 82);
|
||||
\node[paneltagN] at (1, 81)
|
||||
{(c) Causal-Packet Velocity Field \contrib\ + joint loss};
|
||||
|
||||
% =========================================================================
|
||||
% T CONDITIONING SUBSYSTEM (y=66..78) — sin embed + MLP + cond + cond_proj
|
||||
% =========================================================================
|
||||
|
||||
% (1) t scalar
|
||||
\draw[fill=cBlue!15, draw=cBlue!80, line width=0.5pt]
|
||||
(8, 72) circle [radius=2.0];
|
||||
\node[font=\tiny\bfseries, text=cBlue!90!black] at (8, 72) {$t$};
|
||||
\node[font=\tiny, text=black!55, anchor=north] at (8, 69.5) {scalar};
|
||||
|
||||
\draw[pathline] (10.2, 72) -- (12, 72);
|
||||
|
||||
% (2) sin embed
|
||||
\draw[fill=white, draw=cBlue!80, line width=0.5pt, rounded corners=0.6pt]
|
||||
(12, 68.5) rectangle (28, 75.5);
|
||||
\draw[cBlue!80, line width=0.55pt]
|
||||
(13, 72) sin (14.5, 73.5) cos (16, 72) sin (17.5, 70.5) cos (19, 72)
|
||||
sin (20.5, 73.5) cos (22, 72) sin (23.5, 70.5) cos (25, 72)
|
||||
sin (26.5, 73.5) cos (27, 72.7);
|
||||
\node[font=\tiny, text=cBlue!90!black, anchor=north] at (20, 68.5)
|
||||
{sin embed $\to\mathbb{R}^{64}$};
|
||||
|
||||
\draw[pathline] (28.2, 72) -- (30, 72);
|
||||
|
||||
% (3) cond MLP trapezoid
|
||||
\fill[white] (30, 69) -- (30, 75) -- (37, 75.5) -- (37, 68.5) -- cycle;
|
||||
\draw[black!65, line width=0.5pt]
|
||||
(30, 69) -- (30, 75) -- (37, 75.5) -- (37, 68.5) -- cycle;
|
||||
\node[font=\tiny] at (33.5, 72) {MLP};
|
||||
|
||||
\draw[pathline] (37.2, 72) -- (39, 72);
|
||||
|
||||
% (4) cond vector cells
|
||||
\begin{scope}[shift={(39, 69)}]
|
||||
\foreach \k/\col in {0/cBlue, 1/cBlue!75!cPurple, 2/cPurple!75!cBlue, 3/cBlue!60!black,
|
||||
4/cBlue, 5/cPurple!85, 6/cBlue!75, 7/cBlue!85!black,
|
||||
8/cBlue!60!cPurple, 9/cBlue!70} {
|
||||
\pgfmathsetmacro{\fx}{\k * 1.4}
|
||||
\fill[\col] (\fx, 0) rectangle (\fx+1.2, 6);
|
||||
\draw[black!30, line width=0.15pt] (\fx, 0) rectangle (\fx+1.2, 6);
|
||||
}
|
||||
\end{scope}
|
||||
\node[font=\tiny, text=black!75, anchor=west] at (54, 72)
|
||||
{$\mathrm{cond}\!\in\!\mathbb{R}^{d}$};
|
||||
|
||||
\draw[pathline] (66, 72) -- (68, 72);
|
||||
|
||||
% (5) cond_proj — Linear that produces (γ, β, α) modulation parameters
|
||||
\node[rectangle, draw=black!65, fill=white, line width=0.5pt,
|
||||
rounded corners=0.6pt, minimum width=22mm, minimum height=8mm,
|
||||
inner sep=1pt, font=\tiny, align=center, anchor=west]
|
||||
(cproj) at (68, 72)
|
||||
{cond\_proj \\ $\mathbb{R}^d\!\to\!6d$};
|
||||
|
||||
% cond_proj output split: 3 colored mini-bars labelled γ_1, β_1, α_1
|
||||
% (γ_2, β_2, α_2 are implied — same fanout for the MLP half)
|
||||
\begin{scope}[shift={($(cproj.east)+(2mm, 4mm)$)}]
|
||||
\fill[cPurple!75] (0, 0) rectangle (10, 1.2);
|
||||
\draw[black!30, line width=0.15pt] (0, 0) rectangle (10, 1.2);
|
||||
\node[font=\tiny\bfseries, text=cPurple!75, anchor=west] at (10.5, 0.6) {$\gamma_1$};
|
||||
\end{scope}
|
||||
\begin{scope}[shift={($(cproj.east)+(2mm, 1mm)$)}]
|
||||
\fill[cGreen!75!black] (0, 0) rectangle (10, 1.2);
|
||||
\draw[black!30, line width=0.15pt] (0, 0) rectangle (10, 1.2);
|
||||
\node[font=\tiny\bfseries, text=cGreen!75!black, anchor=west] at (10.5, 0.6) {$\beta_1$};
|
||||
\end{scope}
|
||||
\begin{scope}[shift={($(cproj.east)+(2mm, -2mm)$)}]
|
||||
\fill[cOrange!90] (0, 0) rectangle (10, 1.2);
|
||||
\draw[black!30, line width=0.15pt] (0, 0) rectangle (10, 1.2);
|
||||
\node[font=\tiny\bfseries, text=cOrange!85!black, anchor=west] at (10.5, 0.6) {$\alpha_1$};
|
||||
\end{scope}
|
||||
\node[font=\tiny\itshape, text=black!55, anchor=west] at (cproj.south) [yshift=-0.5mm, xshift=-3mm]
|
||||
{(implied: $\gamma_2,\beta_2,\alpha_2$ for MLP half — same fanout)};
|
||||
|
||||
% =========================================================================
|
||||
% LEFT COLUMN: AdaLN modulation tensor flow visualization
|
||||
% Shows h transformed at each stage: h_in → LN → ⊗γ → ⊕β → h_β
|
||||
% =========================================================================
|
||||
|
||||
\def\gxc{32} % left column tensor center x
|
||||
\def\gw{1.4} % cell width
|
||||
\def\gh{1.0} % cell height
|
||||
|
||||
% token seq input box (far left)
|
||||
\node[archbox, minimum width=14mm, anchor=west] (toki) at (1, 50)
|
||||
{token seq\\$x_t$};
|
||||
\draw[pathline] (toki.east) -- ++(3mm, 0);
|
||||
|
||||
% --- (a) h_in tensor (top) ---
|
||||
\node[font=\tiny\bfseries, text=black!75, anchor=south] at (\gxc, 60)
|
||||
{$h$ (input)};
|
||||
\begin{scope}[shift={(\gxc - 4.2, 55.5)}]
|
||||
\foreach \op [count=\k from 0] in
|
||||
{30, 80, 50, 40, 90, 60,
|
||||
70, 20, 80, 50, 40, 90,
|
||||
60, 50, 90, 30, 80, 40,
|
||||
70, 30, 60, 80, 40, 70} {
|
||||
\pgfmathsetmacro{\i}{int(mod(\k, 6))}
|
||||
\pgfmathsetmacro{\j}{int(\k/6)}
|
||||
\fill[cBlue!\op] (\i*\gw, \j*\gh) rectangle (\i*\gw+\gw-0.05, \j*\gh+\gh-0.05);
|
||||
}
|
||||
\end{scope}
|
||||
\draw[pathline] (\gxc, 55.2) -- (\gxc, 54);
|
||||
|
||||
% LayerNorm box
|
||||
\node[archbox, minimum width=14mm, minimum height=2mm, inner sep=0.5pt,
|
||||
font=\tiny, anchor=north]
|
||||
(ln1) at (\gxc, 53.8) {LayerNorm};
|
||||
\draw[pathline] (\gxc, 51.7) -- (\gxc, 50.7);
|
||||
|
||||
% --- (b) h after LN (more uniform per col) ---
|
||||
\node[font=\tiny, text=cBlue!85!black, anchor=south] at (\gxc, 50.5)
|
||||
{$\mathrm{LN}(h)$};
|
||||
\begin{scope}[shift={(\gxc - 4.2, 45.5)}]
|
||||
\foreach \op [count=\k from 0] in
|
||||
{50, 30, 70, 50, 40, 60,
|
||||
40, 60, 50, 50, 40, 60,
|
||||
50, 50, 60, 40, 60, 40,
|
||||
50, 40, 50, 60, 40, 60} {
|
||||
\pgfmathsetmacro{\i}{int(mod(\k, 6))}
|
||||
\pgfmathsetmacro{\j}{int(\k/6)}
|
||||
\fill[cBlue!\op] (\i*\gw, \j*\gh) rectangle (\i*\gw+\gw-0.05, \j*\gh+\gh-0.05);
|
||||
}
|
||||
\end{scope}
|
||||
|
||||
% ⊗γ_1 operator
|
||||
\draw[pathline] (\gxc, 45.2) -- (\gxc, 44.2);
|
||||
\node[opcirc, draw=cPurple!75, text=cPurple!75] (gamma1) at (\gxc, 43.1) {\(\times\)};
|
||||
\node[font=\tiny, text=cPurple!75, anchor=west] at (gamma1.east) [xshift=0.3mm] {$\gamma_1$};
|
||||
\draw[pathline] (\gxc, 41.8) -- (\gxc, 40.8);
|
||||
|
||||
% --- (c) h after ⊗γ (per-column scaling visible) ---
|
||||
\node[font=\tiny, text=cPurple!75, anchor=south] at (\gxc, 40.5)
|
||||
{$\gamma_1\!\odot\!\mathrm{LN}(h)$};
|
||||
\begin{scope}[shift={(\gxc - 4.2, 35.5)}]
|
||||
\foreach \op [count=\k from 0] in
|
||||
{60, 12, 70, 25, 52, 60,
|
||||
48, 24, 50, 25, 52, 60,
|
||||
60, 20, 60, 20, 78, 40,
|
||||
60, 16, 50, 30, 52, 60} {
|
||||
\pgfmathsetmacro{\i}{int(mod(\k, 6))}
|
||||
\pgfmathsetmacro{\j}{int(\k/6)}
|
||||
\fill[cBlue!\op] (\i*\gw, \j*\gh) rectangle (\i*\gw+\gw-0.05, \j*\gh+\gh-0.05);
|
||||
}
|
||||
\end{scope}
|
||||
|
||||
% ⊕β_1 operator
|
||||
\draw[pathline] (\gxc, 35.2) -- (\gxc, 34.2);
|
||||
\node[opcirc, draw=cGreen!75!black, text=cGreen!75!black] (beta1) at (\gxc, 33.1) {\(+\)};
|
||||
\node[font=\tiny, text=cGreen!75!black, anchor=west] at (beta1.east) [xshift=0.3mm] {$\beta_1$};
|
||||
\draw[pathline] (\gxc, 31.8) -- (\gxc, 30.8);
|
||||
|
||||
% --- (d) h after ⊕β (uniform shift visible) ---
|
||||
\node[font=\tiny, text=cGreen!75!black, anchor=south] at (\gxc, 30.5)
|
||||
{$+\,\beta_1$};
|
||||
\begin{scope}[shift={(\gxc - 4.2, 25.5)}]
|
||||
\foreach \op [count=\k from 0] in
|
||||
{80, 32, 90, 45, 72, 80,
|
||||
68, 44, 70, 45, 72, 80,
|
||||
80, 40, 80, 40, 90, 60,
|
||||
80, 36, 70, 50, 72, 80} {
|
||||
\pgfmathsetmacro{\i}{int(mod(\k, 6))}
|
||||
\pgfmathsetmacro{\j}{int(\k/6)}
|
||||
\fill[cBlue!\op] (\i*\gw, \j*\gh) rectangle (\i*\gw+\gw-0.05, \j*\gh+\gh-0.05);
|
||||
}
|
||||
\end{scope}
|
||||
|
||||
% arrow → MHSA (going right toward heatmap)
|
||||
\draw[pathline] (\gxc + 4.5, 27.5) -- (62, 27.5);
|
||||
|
||||
% =========================================================================
|
||||
% CENTER COLUMN: large causal-packet attention heatmap
|
||||
% =========================================================================
|
||||
|
||||
\def\hxc{84} % heatmap center x
|
||||
\def\hcell{2.5} % heatmap cell size
|
||||
% heatmap occupies x = (\hxc - 15) .. (\hxc + 15) = 69..99, with 12 cells
|
||||
|
||||
% heatmap title
|
||||
\node[font=\tiny\bfseries, text=cOrange!85!black, anchor=south]
|
||||
at (\hxc, 60) {\contrib\ MHSA + causal-packet attention};
|
||||
|
||||
% heatmap top labels (FLOW + P_1 .. P_11) — only show subset for readability
|
||||
\foreach \i/\lbl in {0/F, 1/{$P_1$}, 5/{$P_5$}, 11/{$P_{11}$}} {
|
||||
\node[font=\tiny, text=black!60]
|
||||
at ({\hxc - 15 + \i*\hcell + \hcell/2}, 58.7) {\lbl};
|
||||
}
|
||||
% left labels
|
||||
\foreach \i/\lbl in {0/F, 1/{$P_1$}, 5/{$P_5$}, 11/{$P_{11}$}} {
|
||||
\node[font=\tiny, text=black!60, anchor=east]
|
||||
at ({\hxc - 15 - 0.4}, {57 - \i*\hcell - \hcell/2}) {\lbl};
|
||||
}
|
||||
|
||||
% heatmap cells
|
||||
\foreach \i in {0,...,11} {
|
||||
\foreach \j in {0,...,11} {
|
||||
\pgfmathsetmacro{\xx}{\hxc - 15 + \j * \hcell}
|
||||
\pgfmathsetmacro{\yy}{57 - (\i + 1) * \hcell}
|
||||
\ifnum\i=0
|
||||
\fill[cOrange!85] (\xx, \yy) rectangle (\xx+\hcell-0.1, \yy+\hcell-0.1);
|
||||
\else
|
||||
\ifnum\j=0
|
||||
\fill[cOrange!85] (\xx, \yy) rectangle (\xx+\hcell-0.1, \yy+\hcell-0.1);
|
||||
\else
|
||||
\ifnum\j>\i
|
||||
\draw[fill=white, draw=black!25, line width=0.15pt]
|
||||
(\xx, \yy) rectangle (\xx+\hcell-0.1, \yy+\hcell-0.1);
|
||||
\else
|
||||
\pgfmathsetmacro{\dist}{\i - \j}
|
||||
\pgfmathsetmacro{\opa}{int(75 - \dist*4)}
|
||||
\fill[cOrange!\opa] (\xx, \yy) rectangle (\xx+\hcell-0.1, \yy+\hcell-0.1);
|
||||
\fi
|
||||
\fi
|
||||
\fi
|
||||
}
|
||||
}
|
||||
|
||||
% heatmap legend below
|
||||
\node[font=\tiny\itshape, text=black!60, anchor=north, align=center]
|
||||
at (\hxc, 26)
|
||||
{row 0 / col 0 = FLOW token attends all\\
|
||||
lower-tri = packet $i$ attends pkt $\le i$};
|
||||
|
||||
% α_1 gate + ⊕ residual to the RIGHT of heatmap, vertical column
|
||||
\def\axc{106}
|
||||
\node[opcirc, draw=cOrange!90, text=cOrange!90] (alpha1) at (\axc, 27) {\(\times\)};
|
||||
\node[font=\tiny, text=cOrange!90, anchor=west] at (alpha1.east) [xshift=0.3mm] {$\alpha_1$};
|
||||
|
||||
% attention output → α gate
|
||||
\draw[pathline] (99, 27) -- (alpha1.west);
|
||||
|
||||
\draw[pathline] (\axc, 25.7) -- (\axc, 24.7);
|
||||
\node[rescirc] (res1) at (\axc, 23.5) {\(+\)};
|
||||
|
||||
% residual arc: from far-left (h_in) all the way over to res1 — long arc
|
||||
\draw[resarc] (\gxc, 60) to[out=90, in=180, looseness=0.7]
|
||||
($(res1.north) + (-3mm, 8mm)$) -- (res1.north);
|
||||
\node[font=\tiny\itshape, text=black!55, anchor=south]
|
||||
at ($(res1.north)+(0, 8mm)$) {residual from $h$};
|
||||
|
||||
% continuation → "MLP half" → output
|
||||
\draw[pathline] (\axc, 22) -- (\axc, 19);
|
||||
\node[archbox, dashed, minimum width=20mm, minimum height=4mm, inner sep=1pt,
|
||||
font=\tiny\itshape, anchor=north]
|
||||
(mlphalf) at (\axc, 18.5) {MLP half\\(same pattern)};
|
||||
\draw[pathline] (\axc, 12.7) -- (\axc, 11.5);
|
||||
\node[font=\tiny, text=black!75] at (\axc, 10.5) {$h'$};
|
||||
|
||||
% "× 4 layers" annotation at the bottom of the center area
|
||||
\node[font=\tiny\itshape, text=cOrange!75!black, anchor=center]
|
||||
at (\hxc, 7) {(this whole block stacks $\times\,4$ layers)};
|
||||
|
||||
% =========================================================================
|
||||
% CONDITIONING LINES — γ_1 / β_1 / α_1 from cond_proj output bars to ops
|
||||
% =========================================================================
|
||||
|
||||
% γ_1 (purple) → ⊗γ_1 in left column
|
||||
\draw[gammaline]
|
||||
($(cproj.east)+(12mm, 4.6mm)$) .. controls (90, 60) and (60, 55) .. (gamma1.north);
|
||||
|
||||
% β_1 (green) → ⊕β_1 in left column
|
||||
\draw[betaline]
|
||||
($(cproj.east)+(12mm, 1.6mm)$) .. controls (95, 55) and (55, 45) .. (beta1.north);
|
||||
|
||||
% α_1 (orange) → ⊗α_1 next to heatmap
|
||||
\draw[alphaline]
|
||||
($(cproj.east)+(12mm, -1.4mm)$) .. controls (105, 65) and (108, 35) .. (alpha1.north);
|
||||
|
||||
% =========================================================================
|
||||
% RIGHT: heads + joint loss
|
||||
% =========================================================================
|
||||
\node[archbox, minimum width=22mm, anchor=west]
|
||||
(vh) at (124, 28) {$v_\theta$ head\\(continuous)};
|
||||
\node[novelbox, minimum width=22mm, anchor=west]
|
||||
(dh) at (124, 17) {\contrib\ logits head\\(discrete)};
|
||||
|
||||
% from h' to heads (right-then-up branching)
|
||||
\coordinate (hsplit) at (118, 10.5);
|
||||
\draw[arrow] (\axc, 10.5) -- (hsplit);
|
||||
\draw[arrow] (hsplit) |- (vh.west);
|
||||
\draw[arrow] (hsplit) |- (dh.west);
|
||||
|
||||
\node[losseq, anchor=north west, minimum width=46mm]
|
||||
at (124, 50)
|
||||
{\textbf{Joint loss}\\[1pt]
|
||||
$\mathcal{L} =
|
||||
\underbrace{\lVert v_\theta - (x_1{-}x_0)\rVert^2}_{\text{\textcolor{cBlue!85!black}{cont CFM}}}$\\[2pt]
|
||||
$\quad\;\;\,+\;\lambda
|
||||
\underbrace{\mathrm{CE}(\mathrm{logits},\,x_1^{\text{disc}})}_{\text{\textcolor{cOrange!85!black}{discrete FM}}}$};
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
|
||||
% =============================================================================
|
||||
% Panel (d): Inference + Mahalanobis-OAS router (W=152mm, H=44mm)
|
||||
% - "Why a router?" callout removed.
|
||||
% - Score-space scatter is now wider and centered under svec/router/auroc.
|
||||
% =============================================================================
|
||||
\newcommand{\panelDcontent}{%
|
||||
\begin{tikzpicture}[x=1mm, y=1mm]
|
||||
\useasboundingbox (0,0) rectangle (152, 44);
|
||||
\node[paneltagN] at (1, 43)
|
||||
{(d) Inference \& Mahalanobis-OAS router \contrib};
|
||||
|
||||
% --- linear chain (upper portion) ----------------------------------------
|
||||
\node[archbox, minimum width=16mm, fill=cGray!12, anchor=west]
|
||||
(testflow) at (1, 32) {test\\flow};
|
||||
\node[archbox, dashed, minimum width=22mm, anchor=west]
|
||||
(frozen) at ($(testflow.east)+(3mm,0)$)
|
||||
{\textsc{Frozen} backbone\\($v_\theta$, logits)};
|
||||
\node[archbox, minimum width=30mm, anchor=west]
|
||||
(svec) at ($(frozen.east)+(3mm,0)$)
|
||||
{\textsc{Score} $s\in\mathbb{R}^{10}$\\
|
||||
\scriptsize\texttt{terminal\_norm,}\\
|
||||
\scriptsize\texttt{terminal\_packet,}\\
|
||||
\scriptsize\texttt{disc\_nll\_total,}~$\dots$};
|
||||
\node[novelbox, minimum width=42mm, minimum height=18mm, anchor=west]
|
||||
(router) at ($(svec.east)+(3mm,0)$)
|
||||
{\contrib\ \textbf{Mahalanobis-OAS}\\[1pt]
|
||||
$D^2(s) = (s-\mu)^\top \Sigma_{\mathrm{OAS}}^{-1}(s-\mu)$\\[1pt]
|
||||
\scriptsize\itshape $\mu, \Sigma$ fit on benign val\\[-0.2pt]
|
||||
\scriptsize\itshape (no labels, no selection bias)};
|
||||
\node[archbox, minimum width=14mm, fill=cBlue!10, anchor=west]
|
||||
(auroc) at ($(router.east)+(3mm,0)$) {AUROC\\$s_{\text{anomaly}}$};
|
||||
\draw[arrow] (testflow.east) -- (frozen.west);
|
||||
\draw[arrow] (frozen.east) -- (svec.west);
|
||||
\draw[arrow] (svec.east) -- (router.west);
|
||||
\draw[arrow] (router.east) -- (auroc.west);
|
||||
|
||||
% --- score-space scatter (centered, sized to fill the lower band) -------
|
||||
% Center under svec..auroc span. svec.left=45, auroc.right≈137.
|
||||
% Center x ≈ (45+137)/2 = 91. Width = 90mm → x range 46..136.
|
||||
\node[draw=black!40, line width=0.3pt, fill=white,
|
||||
minimum width=90mm, minimum height=22mm, anchor=south,
|
||||
inner sep=0pt]
|
||||
(scatterbox) at (91, 1) {};
|
||||
\node[font=\tiny\bfseries, text=black!75, anchor=north west]
|
||||
at (scatterbox.north west) [xshift=1.5mm, yshift=-0.8mm]
|
||||
{score space (2 of 10 dims, illustrative)};
|
||||
% axes inside scatterbox
|
||||
\begin{scope}[shift={($(scatterbox.south west)+(7mm,3mm)$)}]
|
||||
\draw[->, line width=0.3pt, black!55] (0, 0) -- (76, 0);
|
||||
\draw[->, line width=0.3pt, black!55] (0, 0) -- (0, 14);
|
||||
\node[font=\tiny, text=black!60, anchor=west] at (60, -1.4)
|
||||
{\texttt{terminal\_norm}};
|
||||
\node[font=\tiny, text=black!60, rotate=90, anchor=south west] at (-1.6, 1)
|
||||
{\texttt{disc\_nll}};
|
||||
% benign cluster ellipse (Sigma_OAS) — wider since plot is wider
|
||||
\draw[cBlue!75, line width=0.6pt, rotate around={20:(33,6)}]
|
||||
(33,6) ellipse [x radius=14, y radius=4];
|
||||
\draw[cBlue!50, line width=0.4pt, dashed, rotate around={20:(33,6)}]
|
||||
(33,6) ellipse [x radius=21, y radius=6];
|
||||
% benign points
|
||||
\foreach \px/\py in {28/5.4, 32/6.6, 36/6.8, 30/4.8, 34/5.8,
|
||||
38/7, 26/6, 34/5.4, 37/6.4, 24/5.4,
|
||||
40/7.2, 22/4.8, 30/6.4, 35/7, 28/4.4} {
|
||||
\fill[cBlue!75] (\px, \py) circle [radius=0.5];
|
||||
}
|
||||
% attack points (outside the ellipse)
|
||||
\foreach \px/\py in {60/10, 56/4, 52/11, 64/8,
|
||||
10/9, 6/6, 68/5, 8/3,
|
||||
70/12, 14/2, 4/10, 66/2.5} {
|
||||
\fill[cOrange] (\px, \py) circle [radius=0.7];
|
||||
}
|
||||
% legend
|
||||
\fill[cBlue!75] (50, 12.5) circle [radius=0.5];
|
||||
\node[font=\tiny, text=cBlue!85!black, anchor=west] at (51.3, 12.5) {benign};
|
||||
\fill[cOrange] (62, 12.5) circle [radius=0.7];
|
||||
\node[font=\tiny, text=cOrange!85!black, anchor=west] at (63.3, 12.5) {attack};
|
||||
\end{scope}
|
||||
\end{tikzpicture}%
|
||||
}
|
||||
|
||||
% =============================================================================
|
||||
% OUTER FIGURE — chains the four panels with positioning, then draws three
|
||||
% inter-panel data-flow arrows that make the training/inference pipeline
|
||||
% explicit:
|
||||
%
|
||||
% (a) ──x_1──→ (b)
|
||||
% │ x_t
|
||||
% ▼
|
||||
% (c) [training]
|
||||
% │ frozen
|
||||
% ▼
|
||||
% (d) [inference]
|
||||
% =============================================================================
|
||||
\begin{document}
|
||||
\begin{tikzpicture}[node distance=8mm]
|
||||
|
||||
% row 1
|
||||
\node[panel] (panA) {\panelAcontent};
|
||||
\node[novelpanel, right=of panA] (panB) {\panelBcontent};
|
||||
|
||||
% row 2 — full width
|
||||
\node[novelpanel, below=of panA.south west, anchor=north west] (panC)
|
||||
{\panelCcontent};
|
||||
|
||||
% row 3 — full width
|
||||
\node[panel, below=of panC.south west, anchor=north west] (panD)
|
||||
{\panelDcontent};
|
||||
|
||||
% --- inter-panel data-flow arrows ---------------------------------------
|
||||
% (a) → (b): clean tokens x_1 produced by tokenization feed the corruption
|
||||
\draw[flowarrow] (panA.east) -- (panB.west)
|
||||
node[midway, above=0.5mm, font=\scriptsize\itshape, text=black!75]
|
||||
{$x_1$};
|
||||
% (b) → (c): mixed-state corrupted x_t at random t ∈ [0,1] feeds the model
|
||||
\draw[flowarrow] (panB.south) -- (panC.north -| panB.south)
|
||||
node[midway, right=0.5mm, font=\scriptsize\itshape, text=black!75]
|
||||
{$x_t$};
|
||||
% (c) → (d): trained backbone weights are frozen at test time
|
||||
\draw[flowarrow] (panC.south) -- (panD.north)
|
||||
node[midway, right=0.5mm, font=\scriptsize\itshape, text=black!75]
|
||||
{\textit{frozen}};
|
||||
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
338
paper/figures/figure1_pipeline.tex
Normal file
@@ -0,0 +1,338 @@
|
||||
% Figure 1: A+C combo pipeline (full).
|
||||
% Compile: pdflatex figure1_pipeline.tex
|
||||
\documentclass[border=8pt]{standalone}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows.meta, positioning, calc, decorations.pathreplacing}
|
||||
\usepackage{amsmath, amssymb}
|
||||
|
||||
\definecolor{myorange}{RGB}{230, 126, 34}
|
||||
\definecolor{myblue}{RGB}{52, 110, 180}
|
||||
\definecolor{mygreen}{RGB}{46, 139, 87}
|
||||
\definecolor{mypurple}{RGB}{142, 68, 173}
|
||||
\definecolor{mygray}{RGB}{170, 170, 170}
|
||||
\definecolor{mybg}{RGB}{248, 248, 248}
|
||||
|
||||
\newcommand{\contrib}{\textcolor{myorange}{\ensuremath{\bigstar}}}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}[
|
||||
font=\small,
|
||||
>={Stealth[length=2.5mm]},
|
||||
databox/.style={rectangle, draw=mygray, rounded corners=2pt,
|
||||
minimum height=12mm, minimum width=14mm, align=center, fill=mygray!20},
|
||||
box/.style={rectangle, draw=black!70, thick, rounded corners=2pt,
|
||||
minimum height=12mm, minimum width=22mm, align=center, fill=white},
|
||||
novelbox/.style={rectangle, draw=myorange, line width=1.4pt, rounded corners=2pt,
|
||||
minimum height=12mm, minimum width=22mm, align=center, fill=myorange!10},
|
||||
arrow/.style={->, thick},
|
||||
losseq/.style={fill=mybg, draw=black!30, rounded corners=2pt, inner sep=5pt}
|
||||
]
|
||||
|
||||
% =========================================================================
|
||||
% TRAINING ROW (no row title)
|
||||
% =========================================================================
|
||||
|
||||
% ----- (1) PCAP file icon -----
|
||||
\begin{scope}[shift={(0.0, -1.2)}]
|
||||
\fill[myblue!12] (0,0) -- (0,2.4) -- (1.05,2.4) -- (1.45,2.0) -- (1.45,0) -- cycle;
|
||||
\draw[myblue!80, line width=0.6pt]
|
||||
(0,0) -- (0,2.4) -- (1.05,2.4) -- (1.45,2.0) -- (1.45,0) -- cycle;
|
||||
\fill[myblue!30] (1.05,2.4) -- (1.05,2.0) -- (1.45,2.0) -- cycle;
|
||||
\draw[myblue!80, line width=0.4pt] (1.05,2.4) -- (1.05,2.0) -- (1.45,2.0);
|
||||
\node[font=\bfseries\scriptsize, text=myblue!90!black] at (0.7, 1.65) {flow.pcap};
|
||||
\foreach \y/\rl in {1.30/0.95, 1.10/0.78, 0.90/1.05, 0.70/0.65, 0.50/0.90, 0.30/0.55} {
|
||||
\draw[myblue!45, line width=0.3pt] (0.15, \y) -- (0.15+\rl, \y);
|
||||
}
|
||||
\end{scope}
|
||||
|
||||
% Arrow: parse (length = 1.4cm so label fits comfortably)
|
||||
\draw[arrow, black!60] (1.6, 0) -- (3.0, 0)
|
||||
node[midway, above=0.5mm, font=\scriptsize\itshape, text=black!70] {parse};
|
||||
|
||||
% ----- (2) Packet stream: pkt0, pkt1, pkt2, ..., pkt_T -----
|
||||
\begin{scope}[shift={(3.1, -1.1)}]
|
||||
% 4 packets at explicit x-offsets; first three are 0,1,2 then a gap with
|
||||
% ellipsis and the final one labeled pkt_T.
|
||||
\foreach \j/\xoff/\lbl in {0/0.00/0, 1/1.18/1, 2/2.36/2, 3/4.04/T} {
|
||||
\pgfmathsetmacro{\xx}{\xoff}
|
||||
\draw[fill=white, draw=black!55, line width=0.45pt, rounded corners=1pt]
|
||||
(\xx, 0.05) rectangle (\xx+1.05, 2.25);
|
||||
\draw[fill=myblue!35, draw=myblue, line width=0.3pt]
|
||||
(\xx+0.07, 2.00) rectangle (\xx+0.32, 2.15);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.34, 2.075) {size};
|
||||
\draw[fill=mygreen!35, draw=mygreen, line width=0.3pt]
|
||||
(\xx+0.07, 1.78) rectangle (\xx+0.32, 1.93);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.34, 1.855) {IAT};
|
||||
\draw[fill=mypurple!35, draw=mypurple, line width=0.3pt]
|
||||
(\xx+0.07, 1.56) rectangle (\xx+0.20, 1.71);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.22, 1.635) {dir};
|
||||
\ifcase\j
|
||||
\def\flagS{1}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{0}\or
|
||||
\def\flagS{1}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{1}\or
|
||||
\def\flagS{0}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{1}\or
|
||||
\def\flagS{0}\def\flagF{0}\def\flagR{0}\def\flagP{1}\def\flagA{1}\fi
|
||||
\foreach \fname/\fval/\k in {S/\flagS/0, F/\flagF/1, R/\flagR/2, P/\flagP/3, A/\flagA/4} {
|
||||
\pgfmathsetmacro{\fx}{\xx + 0.07 + \k*0.18}
|
||||
\ifnum\fval=1
|
||||
\draw[fill=myorange!70, draw=myorange, line width=0.3pt]
|
||||
(\fx, 1.30) rectangle (\fx+0.15, 1.46);
|
||||
\node[font=\tiny, white] at (\fx+0.075, 1.38) {\fname};
|
||||
\else
|
||||
\draw[fill=white, draw=myorange!60, line width=0.3pt]
|
||||
(\fx, 1.30) rectangle (\fx+0.15, 1.46);
|
||||
\node[font=\tiny, text=myorange!80!black] at (\fx+0.075, 1.38) {\fname};
|
||||
\fi
|
||||
}
|
||||
\draw[fill=myblue!20, draw=myblue!60, line width=0.3pt]
|
||||
(\xx+0.07, 1.05) rectangle (\xx+0.32, 1.20);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.34, 1.125) {win};
|
||||
\draw[black!30, line width=0.3pt] (\xx+0.07, 0.80) -- (\xx+0.97, 0.80);
|
||||
\draw[black!30, line width=0.3pt] (\xx+0.07, 0.65) -- (\xx+0.85, 0.65);
|
||||
\draw[black!30, line width=0.3pt] (\xx+0.07, 0.50) -- (\xx+0.95, 0.50);
|
||||
\draw[black!30, line width=0.3pt] (\xx+0.07, 0.35) -- (\xx+0.70, 0.35);
|
||||
\node[font=\scriptsize, text=black!70] at (\xx+0.525, -0.13) {pkt$_{\lbl}$};
|
||||
}
|
||||
% Ellipsis between pkt_2 (ends at x=3.41) and pkt_T (starts at x=4.04)
|
||||
\node[font=\Large, text=black!55] at (3.72, 1.15) {$\cdots$};
|
||||
% Time axis spans full row
|
||||
\draw[->, line width=0.35pt, black!55] (-0.05, -0.4) -- (5.20, -0.4);
|
||||
\node[font=\tiny, anchor=west, text=black!55] at (5.20, -0.4) {time};
|
||||
\end{scope}
|
||||
|
||||
% Arrow: tokenize (length = 1.4cm). Packet stream ends at x=3.1+5.09=8.19,
|
||||
% so arrow must start after that.
|
||||
\draw[arrow, black!60] (8.3, 0) -- (9.7, 0)
|
||||
node[midway, above=0.5mm, font=\scriptsize\itshape, text=black!70] {tokenize};
|
||||
|
||||
% ----- (3) Token sequence: [FLOW | P_1 | P_2 | ... | P_n | PAD] -----
|
||||
% All tokens are 21-d (1 type marker + 20 feature/pad cells). Two paddings:
|
||||
% • channel-padding inside packet tokens (cells 10..20, since pkt has 9 feats)
|
||||
% • sequence-padding tokens (entire token zeroed when actual flow length < T)
|
||||
\begin{scope}[shift={(9.8, -1.45)}]
|
||||
% --- helper macros for cell drawing inside this scope ---
|
||||
% Each token: 1 type cell on top + 20 feature/pad cells below.
|
||||
% Cell height 0.085, cell width 0.42.
|
||||
% Token x-offsets: FLOW=0, P_1=0.62, P_2=1.22, P_n=2.30, PAD=2.92.
|
||||
%
|
||||
% FLOW token: type (dark blue) + 20 cont features (light blue), no padding
|
||||
\draw[fill=myblue!75, draw=myblue, line width=0.25pt]
|
||||
(0.0, 2.55) rectangle (0.42, 2.64);
|
||||
\foreach \i in {0,...,19} {
|
||||
\pgfmathsetmacro{\yp}{2.46 - \i*0.085}
|
||||
\draw[fill=myblue!25, draw=myblue!80, line width=0.25pt]
|
||||
(0.0, \yp) rectangle (0.42, \yp+0.075);
|
||||
}
|
||||
\node[font=\tiny, anchor=north, text=myblue!90!black] at (0.21, 0.72) {\textbf{FLOW}};
|
||||
%
|
||||
% P_1, P_2, P_n: type (orange) + 3 cont + 6 disc + 11 channel-pad
|
||||
\foreach \subi/\xoff in {1/0.62, 2/1.22, n/2.30} {
|
||||
% type marker (orange)
|
||||
\draw[fill=myorange!75, draw=myorange, line width=0.25pt]
|
||||
(\xoff, 2.55) rectangle (\xoff+0.42, 2.64);
|
||||
% 3 cont (blue)
|
||||
\foreach \i in {0,...,2} {
|
||||
\pgfmathsetmacro{\yp}{2.46 - \i*0.085}
|
||||
\draw[fill=myblue!25, draw=myblue!80, line width=0.25pt]
|
||||
(\xoff, \yp) rectangle (\xoff+0.42, \yp+0.075);
|
||||
}
|
||||
% 6 disc (orange)
|
||||
\foreach \i in {3,...,8} {
|
||||
\pgfmathsetmacro{\yp}{2.46 - \i*0.085}
|
||||
\draw[fill=myorange!30, draw=myorange!80, line width=0.25pt]
|
||||
(\xoff, \yp) rectangle (\xoff+0.42, \yp+0.075);
|
||||
}
|
||||
% 11 channel-pad (gray hatched)
|
||||
\foreach \i in {9,...,19} {
|
||||
\pgfmathsetmacro{\yp}{2.46 - \i*0.085}
|
||||
\draw[fill=mygray!30, draw=mygray, line width=0.2pt, dash pattern=on 0.4pt off 0.4pt]
|
||||
(\xoff, \yp) rectangle (\xoff+0.42, \yp+0.075);
|
||||
}
|
||||
\node[font=\tiny, anchor=north] at (\xoff+0.21, 0.72) {$P_{\subi}$};
|
||||
}
|
||||
%
|
||||
% Ellipsis centered in gap between P_2 (ends x=1.64) and P_n (starts x=2.30),
|
||||
% vertically centered on token cell stack (top=2.64, bottom=0.86)
|
||||
\node[font=\Large, text=black!55] at (1.97, 1.75) {$\cdots$};
|
||||
%
|
||||
% PAD token (sequence-padding): entire token grayed + dashed outer border
|
||||
\draw[fill=mygray!20, draw=mygray, dash pattern=on 1pt off 1pt, line width=0.4pt]
|
||||
(2.92, 2.55) rectangle (3.34, 2.64);
|
||||
\foreach \i in {0,...,19} {
|
||||
\pgfmathsetmacro{\yp}{2.46 - \i*0.085}
|
||||
\draw[fill=mygray!25, draw=mygray, line width=0.2pt, dash pattern=on 0.5pt off 0.5pt]
|
||||
(2.92, \yp) rectangle (3.34, \yp+0.075);
|
||||
}
|
||||
% outer dashed wrap to emphasize "this whole token is padding"
|
||||
\draw[draw=black!50, dashed, line width=0.5pt]
|
||||
(2.90, 0.72) rectangle (3.36, 2.66);
|
||||
\node[font=\tiny, anchor=north, text=black!65] at (3.13, 0.72) {\textbf{PAD}};
|
||||
%
|
||||
% Bottom brace + sequence label (below the FLOW/P_i/PAD name labels)
|
||||
\draw[decorate, decoration={brace, amplitude=3pt, mirror}, line width=0.4pt, black!60]
|
||||
(-0.05, 0.30) -- (3.39, 0.30);
|
||||
\node[font=\scriptsize\itshape, text=black!70] at (1.67, -0.05)
|
||||
{token sequence (1 flow + $T$ packets, all 21-d)};
|
||||
\end{scope}
|
||||
|
||||
% Arrow: token → velocity (sequence ends at x=9.8+3.34=13.14)
|
||||
\draw[arrow, black!60] (13.3, 0) -- (14.0, 0);
|
||||
|
||||
% ----- (4) Velocity field (with detailed internals, DiT-style) -----
|
||||
% Outer box at x=14.0..19.0, y=-2.5..2.5 (5cm × 5cm)
|
||||
\begin{scope}[shift={(14.0, -2.5)}]
|
||||
% Outer rounded box
|
||||
\draw[fill=myorange!8, draw=myorange, line width=1.4pt, rounded corners=2pt]
|
||||
(0, 0) rectangle (5.0, 5.0);
|
||||
\node[font=\sffamily\bfseries\small, anchor=north, text=myorange!90!black]
|
||||
at (2.5, 4.85) {Velocity Field};
|
||||
%
|
||||
% Time embedding sub-box (top-left)
|
||||
\draw[fill=white, draw=black!55, line width=0.4pt, rounded corners=1pt]
|
||||
(0.20, 3.60) rectangle (1.30, 4.45);
|
||||
\node[font=\tiny\bfseries, anchor=north] at (0.75, 4.42) {time $t$};
|
||||
\node[font=\tiny, anchor=north] at (0.75, 4.20) {sinusoidal};
|
||||
\node[font=\tiny, anchor=north] at (0.75, 4.00) {emb + MLP};
|
||||
%
|
||||
% AdaLN-Zero block 1
|
||||
\draw[fill=white, draw=black!60, line width=0.4pt, rounded corners=1pt]
|
||||
(1.55, 3.95) rectangle (4.80, 4.45);
|
||||
\node[font=\scriptsize] at (3.18, 4.20)
|
||||
{AdaLN-Zero \,($\gamma_1, \beta_1, \alpha_1$)};
|
||||
% Conditioning arrow from time emb to AdaLN-1
|
||||
\draw[->, dashed, line width=0.4pt, black!50]
|
||||
(1.30, 4.20) -- (1.55, 4.20);
|
||||
%
|
||||
% Arrow down
|
||||
\draw[->, line width=0.4pt, black!60] (3.18, 3.95) -- (3.18, 3.65);
|
||||
%
|
||||
% MHA block with causal mask icon
|
||||
\draw[fill=myorange!15, draw=myorange, line width=0.7pt, rounded corners=1pt]
|
||||
(1.55, 2.05) rectangle (4.80, 3.65);
|
||||
\node[font=\scriptsize\bfseries, anchor=north, text=myorange!85!black]
|
||||
at (3.18, 3.55) {\contrib\ Multi-Head Self-Attn};
|
||||
\node[font=\tiny\itshape, anchor=north, text=myorange!85!black]
|
||||
at (3.18, 3.30) {causal-packet mask};
|
||||
% Mini 5×5 lower-triangular mask grid
|
||||
\begin{scope}[shift={(2.55, 2.30)}]
|
||||
\foreach \i in {0,...,4} {
|
||||
\foreach \j in {0,...,4} {
|
||||
\ifnum\j>\i
|
||||
\draw[fill=white, draw=black!40, line width=0.15pt]
|
||||
(\j*0.22, -\i*0.16) rectangle (\j*0.22+0.20, -\i*0.16-0.14);
|
||||
\else
|
||||
\draw[fill=myorange!55, draw=myorange, line width=0.15pt]
|
||||
(\j*0.22, -\i*0.16) rectangle (\j*0.22+0.20, -\i*0.16-0.14);
|
||||
\fi
|
||||
}
|
||||
}
|
||||
\end{scope}
|
||||
%
|
||||
% Arrow down
|
||||
\draw[->, line width=0.4pt, black!60] (3.18, 2.05) -- (3.18, 1.75);
|
||||
%
|
||||
% AdaLN-Zero block 2
|
||||
\draw[fill=white, draw=black!60, line width=0.4pt, rounded corners=1pt]
|
||||
(1.55, 1.25) rectangle (4.80, 1.75);
|
||||
\node[font=\scriptsize] at (3.18, 1.50)
|
||||
{AdaLN-Zero \,($\gamma_2, \beta_2, \alpha_2$)};
|
||||
% Curved conditioning arrow from time emb to AdaLN-2
|
||||
\draw[->, dashed, line width=0.4pt, black!50]
|
||||
(0.75, 3.60) .. controls (0.40, 2.30) and (0.80, 1.50) .. (1.55, 1.50);
|
||||
%
|
||||
% Arrow down
|
||||
\draw[->, line width=0.4pt, black!60] (3.18, 1.25) -- (3.18, 0.95);
|
||||
%
|
||||
% MLP block
|
||||
\draw[fill=white, draw=black!60, line width=0.4pt, rounded corners=1pt]
|
||||
(1.55, 0.45) rectangle (4.80, 0.95);
|
||||
\node[font=\scriptsize] at (3.18, 0.70)
|
||||
{MLP \,($d \to 4d \to d$)};
|
||||
%
|
||||
% "× 4 layers" stacking annotation at the bottom
|
||||
\node[font=\scriptsize\itshape, anchor=south, text=black!70]
|
||||
at (2.5, 0.05) {(stacked $\times\,4$ layers)};
|
||||
\end{scope}
|
||||
|
||||
% Helper coordinates for input/output of velocity field (so arrows still work)
|
||||
\coordinate (vel_west) at (14.0, 0);
|
||||
\coordinate (vel_east) at (19.0, 0);
|
||||
|
||||
% ----- (5) Two heads -----
|
||||
\node[box, minimum width=22mm] (vh) at (20.5, 0.7) {%
|
||||
$v_\theta$ head\\
|
||||
{\scriptsize (continuous)}%
|
||||
};
|
||||
\node[novelbox, minimum width=22mm] (dh) at (20.5, -0.7) {%
|
||||
\contrib\ logits head\\
|
||||
{\scriptsize (discrete)}%
|
||||
};
|
||||
|
||||
\draw[arrow] (vel_east) -- (vh.west);
|
||||
\draw[arrow] (vel_east) -- (dh.west);
|
||||
|
||||
% ----- Loss equation -----
|
||||
\node[losseq, minimum width=190mm, font=\small, align=center] (loss) at (9.85, -3.7) {%
|
||||
$\mathcal{L} \;=\;
|
||||
\underbrace{\| v_\theta(x_t,t) - (x_1 - x_0) \|^2}_{\text{continuous CFM}}
|
||||
\;+\; \lambda \cdot
|
||||
\underbrace{\mathrm{CE}(\mathrm{logits},\, x_{\mathrm{disc}})}_{\text{Discrete FM}\,\contrib}$%
|
||||
};
|
||||
|
||||
% =========================================================================
|
||||
% INFERENCE ROW (no row title)
|
||||
% =========================================================================
|
||||
|
||||
\node[databox, minimum width=18mm] (testflow) at (1.5, -5.7) {%
|
||||
{\scriptsize test}\\ flow%
|
||||
};
|
||||
|
||||
\node[box, dashed, minimum width=28mm] (frozen) at (4.7, -5.7) {%
|
||||
\textsc{Frozen}\\
|
||||
\textsc{Backbone}\\
|
||||
{\scriptsize $v_\theta$ + logits}%
|
||||
};
|
||||
|
||||
\node[box, minimum width=34mm] (svec) at (8.6, -5.7) {%
|
||||
\textsc{Score Vector} (10-d)\\[0.5mm]
|
||||
{\scriptsize\texttt{terminal\_norm}}\\
|
||||
{\scriptsize\texttt{terminal\_packet}}\\
|
||||
{\scriptsize\texttt{disc\_nll\_total}, \dots}%
|
||||
};
|
||||
|
||||
\node[novelbox, minimum width=46mm, minimum height=22mm] (mahal) at (13.7, -5.7) {%
|
||||
\contrib\ \textsc{Mahalanobis-OAS Router}\\[1mm]
|
||||
$D^2 = (s-\mu)^\top \Sigma^{-1}_{\mathrm{OAS}} (s-\mu)$\\[1mm]
|
||||
{\scriptsize\itshape fit on benign val (no labels)}%
|
||||
};
|
||||
|
||||
\node[databox, minimum width=18mm, fill=myblue!10] (out) at (18.5, -5.7) {%
|
||||
AUROC\\
|
||||
$s_{\text{anomaly}}$%
|
||||
};
|
||||
|
||||
\draw[arrow] (testflow) -- (frozen);
|
||||
\draw[arrow] (frozen) -- (svec);
|
||||
\draw[arrow] (svec) -- (mahal);
|
||||
\draw[arrow] (mahal) -- (out);
|
||||
|
||||
% =========================================================================
|
||||
% LEGEND
|
||||
% =========================================================================
|
||||
\node[draw=black!40, rounded corners=2pt, fill=white, inner sep=5pt, align=left,
|
||||
font=\scriptsize, anchor=north west] at (0, -7.3) {%
|
||||
\contrib\ \textbf{Our contributions} \quad
|
||||
\tikz\fill[myblue!25, draw=myblue, line width=0.4pt] (0,0) rectangle (0.22,0.16);
|
||||
\ continuous \quad
|
||||
\tikz\fill[myorange!30, draw=myorange, line width=0.4pt] (0,0) rectangle (0.22,0.16);
|
||||
\ discrete (DFM bits) \quad
|
||||
\tikz\fill[mygray!30, draw=mygray, line width=0.4pt, dash pattern=on 0.4pt off 0.4pt] (0,0) rectangle (0.22,0.16);
|
||||
\ channel-pad (9-d feat in 21-d slot) \quad
|
||||
\tikz\draw[dashed, draw=black!50, line width=0.4pt] (0,0) rectangle (0.22,0.16);
|
||||
\ sequence-pad (whole token, $n<T$)\\[2pt]
|
||||
\contrib\ Discrete-FM head on TCP flag bits + direction \quad
|
||||
\contrib\ Causal-packet attention (protocol-causal prior) \quad
|
||||
\contrib\ Mahalanobis-OAS auto-router (no selection bias)%
|
||||
};
|
||||
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
145
paper/figures/pcap_extraction.tex
Normal file
@@ -0,0 +1,145 @@
|
||||
% Pcap → packet stream → 9-d feature token extraction visual.
|
||||
% Compile: pdflatex pcap_extraction.tex
|
||||
\documentclass[border=8pt]{standalone}
|
||||
\usepackage{tikz}
|
||||
\usetikzlibrary{arrows.meta, positioning, calc, shapes.misc, decorations.pathreplacing}
|
||||
\usepackage{amsmath, amssymb}
|
||||
|
||||
\definecolor{myorange}{RGB}{230, 126, 34}
|
||||
\definecolor{myblue}{RGB}{52, 110, 180}
|
||||
\definecolor{mygreen}{RGB}{46, 139, 87}
|
||||
\definecolor{mypurple}{RGB}{142, 68, 173}
|
||||
\definecolor{mygray}{RGB}{170, 170, 170}
|
||||
|
||||
\begin{document}
|
||||
\begin{tikzpicture}[font=\small, >={Stealth[length=2.5mm]}]
|
||||
|
||||
% ============ 1. PCAP FILE ICON ============
|
||||
\begin{scope}[shift={(0,0)}]
|
||||
% file body with folded corner (drawn as polygon)
|
||||
\fill[myblue!12] (0,0) -- (0,3.0) -- (1.4,3.0) -- (1.9,2.5) -- (1.9,0) -- cycle;
|
||||
\draw[myblue!80, line width=0.7pt]
|
||||
(0,0) -- (0,3.0) -- (1.4,3.0) -- (1.9,2.5) -- (1.9,0) -- cycle;
|
||||
% the folded triangle on top-right corner
|
||||
\fill[myblue!30] (1.4,3.0) -- (1.4,2.5) -- (1.9,2.5) -- cycle;
|
||||
\draw[myblue!80, line width=0.5pt] (1.4,3.0) -- (1.4,2.5) -- (1.9,2.5);
|
||||
% file title
|
||||
\node[font=\bfseries\footnotesize, text=myblue!90!black] at (0.95, 2.1) {flow.pcap};
|
||||
% decorative "byte" lines (deterministic widths)
|
||||
\foreach \y/\rl in {1.65/1.30, 1.40/1.05, 1.15/1.40, 0.90/0.85, 0.65/1.20, 0.40/0.75} {
|
||||
\draw[myblue!45, line width=0.35pt] (0.18, \y) -- (0.18+\rl, \y);
|
||||
}
|
||||
\node[font=\scriptsize, anchor=north] at (0.95, -0.1) {raw bytes};
|
||||
\end{scope}
|
||||
|
||||
% Arrow 1: parse
|
||||
\draw[->, thick, black!60]
|
||||
(2.05, 1.5) -- (3.20, 1.5)
|
||||
node[midway, above, font=\scriptsize\itshape, text=black!70] {dpkt parse};
|
||||
|
||||
% ============ 2. DECODED PACKET STREAM ============
|
||||
\begin{scope}[shift={(3.4, 0)}]
|
||||
% four packets along time axis
|
||||
\foreach \j in {0,...,3} {
|
||||
\pgfmathsetmacro{\xx}{\j * 1.45}
|
||||
% packet frame
|
||||
\draw[fill=white, draw=black!55, line width=0.5pt, rounded corners=1pt]
|
||||
(\xx, 0.5) rectangle (\xx+1.25, 3.05);
|
||||
% size field (myblue)
|
||||
\draw[fill=myblue!35, draw=myblue, line width=0.4pt]
|
||||
(\xx+0.08, 2.78) rectangle (\xx+0.42, 2.93);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.45, 2.86) {size};
|
||||
% IAT field (mygreen)
|
||||
\draw[fill=mygreen!35, draw=mygreen, line width=0.4pt]
|
||||
(\xx+0.08, 2.55) rectangle (\xx+0.42, 2.70);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.45, 2.63) {IAT};
|
||||
% direction (mypurple)
|
||||
\draw[fill=mypurple!35, draw=mypurple, line width=0.4pt]
|
||||
(\xx+0.08, 2.32) rectangle (\xx+0.22, 2.47);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.25, 2.40) {dir};
|
||||
% flag bits row — show a real TCP 3-way handshake + data:
|
||||
% pkt0: SYN (client SYN)
|
||||
% pkt1: SYN+ACK (server SYN-ACK)
|
||||
% pkt2: ACK (client ACK, handshake done)
|
||||
% pkt3: PSH+ACK (data segment)
|
||||
\ifcase\j
|
||||
\def\flagS{1}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{0}\or
|
||||
\def\flagS{1}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{1}\or
|
||||
\def\flagS{0}\def\flagF{0}\def\flagR{0}\def\flagP{0}\def\flagA{1}\or
|
||||
\def\flagS{0}\def\flagF{0}\def\flagR{0}\def\flagP{1}\def\flagA{1}\fi
|
||||
\foreach \fname/\fval/\k in {S/\flagS/0, F/\flagF/1, R/\flagR/2, P/\flagP/3, A/\flagA/4} {
|
||||
\pgfmathsetmacro{\fx}{\xx + 0.08 + \k*0.22}
|
||||
\ifnum\fval=1
|
||||
\draw[fill=myorange!70, draw=myorange, line width=0.4pt]
|
||||
(\fx, 2.05) rectangle (\fx+0.18, 2.22);
|
||||
\node[font=\tiny, white] at (\fx+0.09, 2.135) {\fname};
|
||||
\else
|
||||
\draw[fill=white, draw=myorange!60, line width=0.4pt]
|
||||
(\fx, 2.05) rectangle (\fx+0.18, 2.22);
|
||||
\node[font=\tiny, text=myorange!80!black] at (\fx+0.09, 2.135) {\fname};
|
||||
\fi
|
||||
}
|
||||
% win
|
||||
\draw[fill=myblue!20, draw=myblue!60, line width=0.4pt]
|
||||
(\xx+0.08, 1.78) rectangle (\xx+0.42, 1.93);
|
||||
\node[font=\tiny, anchor=west] at (\xx+0.45, 1.86) {win};
|
||||
% decorative "payload" content
|
||||
\draw[black!30, line width=0.4pt] (\xx+0.08, 1.45) -- (\xx+1.17, 1.45);
|
||||
\draw[black!30, line width=0.4pt] (\xx+0.08, 1.25) -- (\xx+0.95, 1.25);
|
||||
\draw[black!30, line width=0.4pt] (\xx+0.08, 1.05) -- (\xx+1.10, 1.05);
|
||||
\draw[black!30, line width=0.4pt] (\xx+0.08, 0.85) -- (\xx+0.75, 0.85);
|
||||
% packet label below
|
||||
\node[font=\scriptsize, text=black!70] at (\xx+0.625, 0.32) {pkt$_\j$};
|
||||
}
|
||||
% time axis arrow
|
||||
\draw[->, line width=0.4pt, black!60] (-0.05, 0.05) -- (6.0, 0.05);
|
||||
\node[font=\tiny, anchor=west, text=black!60] at (6.05, 0.05) {time};
|
||||
\end{scope}
|
||||
|
||||
% Arrow 2: extract
|
||||
\draw[->, thick, black!60]
|
||||
(9.5, 1.7) -- (10.7, 1.7)
|
||||
node[midway, above, font=\scriptsize\itshape, text=black!70] {extract};
|
||||
|
||||
% ============ 3. 9-D FEATURE TOKEN ============
|
||||
\begin{scope}[shift={(10.85, -0.5)}]
|
||||
% 9 channels stacked vertically with type-grouped coloring
|
||||
% 0 = continuous (z-scored), 1 = discrete (DFM bit)
|
||||
\foreach \name/\g/\i in {%
|
||||
log\_size/0/0,
|
||||
log\_dt/0/1,
|
||||
direction/1/2,
|
||||
SYN/1/3,
|
||||
FIN/1/4,
|
||||
RST/1/5,
|
||||
PSH/1/6,
|
||||
ACK/1/7,
|
||||
log\_win/0/8} {
|
||||
\pgfmathsetmacro{\yp}{3.5 - \i*0.36}
|
||||
\ifnum\g=0
|
||||
\draw[fill=myblue!25, draw=myblue, line width=0.5pt]
|
||||
(0, \yp) rectangle (1.35, \yp+0.32);
|
||||
\else
|
||||
\draw[fill=myorange!30, draw=myorange, line width=0.5pt]
|
||||
(0, \yp) rectangle (1.35, \yp+0.32);
|
||||
\fi
|
||||
\node[font=\scriptsize] at (0.675, \yp+0.16) {\name};
|
||||
}
|
||||
% brace + label
|
||||
\draw[decorate, decoration={brace, amplitude=4pt}, line width=0.5pt, black!60]
|
||||
(1.45, 3.82) -- (1.45, 0.62)
|
||||
node[midway, right=4pt, font=\scriptsize, align=left, text=black!70]
|
||||
{9-d packet token\\[1pt] {[}cont (3) + disc (6){]}};
|
||||
\end{scope}
|
||||
|
||||
% Bottom legend
|
||||
\node[draw=black!30, rounded corners=2pt, fill=white, inner sep=4pt, font=\scriptsize,
|
||||
align=left, anchor=north]
|
||||
at (7.5, -1.1) {%
|
||||
\tikz\fill[myblue!25, draw=myblue, line width=0.4pt] (0,0) rectangle (0.25,0.18);
|
||||
\ continuous (z-scored) \quad
|
||||
\tikz\fill[myorange!30, draw=myorange, line width=0.4pt] (0,0) rectangle (0.25,0.18);
|
||||
\ discrete (kept as bits, fed to DFM head)};
|
||||
|
||||
\end{tikzpicture}
|
||||
\end{document}
|
||||
27
paper/figures/tensors/01_h_in.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="306" height="206" viewBox="0 0 306 206">
|
||||
<rect width="306" height="206" fill="white"/>
|
||||
<rect x="3" y="3" width="50" height="50" fill="#C2D4E8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="3" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="3" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="3" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="3" width="50" height="50" fill="#487CBC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="3" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="53" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="53" width="50" height="50" fill="#D6E2F0" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="53" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="53" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="53" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="53" width="50" height="50" fill="#487CBC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="103" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="103" width="50" height="50" fill="#487CBC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="103" width="50" height="50" fill="#C2D4E8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="103" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="153" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="153" width="50" height="50" fill="#C2D4E8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="153" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="153" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="153" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="153" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
27
paper/figures/tensors/02_h_after_LN.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="306" height="206" viewBox="0 0 306 206">
|
||||
<rect width="306" height="206" fill="white"/>
|
||||
<rect x="3" y="3" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="3" width="50" height="50" fill="#C2D4E8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="3" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="3" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="3" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="3" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="53" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="53" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="53" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="53" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="53" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="53" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="103" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="103" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="153" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="153" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="153" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="153" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="153" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="153" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
27
paper/figures/tensors/03_h_after_gamma.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="306" height="206" viewBox="0 0 306 206">
|
||||
<rect width="306" height="206" fill="white"/>
|
||||
<rect x="3" y="3" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="3" width="50" height="50" fill="#E7EEF6" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="3" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="3" width="50" height="50" fill="#CCDBEC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="3" width="50" height="50" fill="#95B4D8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="3" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="53" width="50" height="50" fill="#9EB9DB" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="53" width="50" height="50" fill="#CEDCED" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="53" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="53" width="50" height="50" fill="#CCDBEC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="53" width="50" height="50" fill="#95B4D8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="53" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="103" width="50" height="50" fill="#D6E2F0" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="103" width="50" height="50" fill="#D6E2F0" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="103" width="50" height="50" fill="#618EC4" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="153" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="153" width="50" height="50" fill="#DFE8F3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="153" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="153" width="50" height="50" fill="#C2D4E8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="153" width="50" height="50" fill="#95B4D8" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="153" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
27
paper/figures/tensors/04_h_after_beta.svg
Normal file
@@ -0,0 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="306" height="206" viewBox="0 0 306 206">
|
||||
<rect width="306" height="206" fill="white"/>
|
||||
<rect x="3" y="3" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="3" width="50" height="50" fill="#BED1E7" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="3" width="50" height="50" fill="#487CBC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="3" width="50" height="50" fill="#A4BEDD" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="3" width="50" height="50" fill="#6D97C9" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="3" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="53" width="50" height="50" fill="#759CCC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="53" width="50" height="50" fill="#A6BFDE" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="53" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="53" width="50" height="50" fill="#A4BEDD" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="53" width="50" height="50" fill="#6D97C9" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="53" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="103" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="103" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="103" width="50" height="50" fill="#AEC5E1" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="103" width="50" height="50" fill="#487CBC" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="103" width="50" height="50" fill="#85A8D2" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="3" y="153" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="53" y="153" width="50" height="50" fill="#B6CBE4" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="103" y="153" width="50" height="50" fill="#719ACA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="153" y="153" width="50" height="50" fill="#9AB6DA" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="203" y="153" width="50" height="50" fill="#6D97C9" stroke="#999" stroke-width="0.6"/>
|
||||
<rect x="253" y="153" width="50" height="50" fill="#5D8BC3" stroke="#999" stroke-width="0.6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
147
paper/figures/tensors/05_attention_heatmap.svg
Normal file
@@ -0,0 +1,147 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="394" height="394" viewBox="0 0 394 394">
|
||||
<rect width="394" height="394" fill="white"/>
|
||||
<rect x="6" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="70" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="102" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="134" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="166" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="198" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="230" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="262" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="294" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="326" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="358" y="6" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="6" y="38" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="38" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="102" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="134" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="166" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="198" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="230" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="38" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="70" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="70" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="70" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="134" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="166" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="198" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="230" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="70" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="102" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="102" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="102" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="102" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="166" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="198" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="230" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="102" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="134" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="134" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="134" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="134" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="134" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="198" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="230" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="134" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="166" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="166" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="166" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="166" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="166" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="166" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="230" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="166" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="198" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="198" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="198" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="198" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="198" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="198" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="198" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="198" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="262" y="198" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="198" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="198" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="198" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="230" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="230" width="30" height="30" rx="4" ry="4" fill="#F2BD8E" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="230" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="230" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="230" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="230" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="230" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="230" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="262" y="230" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="294" y="230" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="230" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="230" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="262" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="262" width="30" height="30" rx="4" ry="4" fill="#F3C297" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="262" width="30" height="30" rx="4" ry="4" fill="#F2BD8E" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="262" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="262" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="262" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="262" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="262" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="262" y="262" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="294" y="262" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="326" y="262" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="262" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="294" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="294" width="30" height="30" rx="4" ry="4" fill="#F4C8A0" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="294" width="30" height="30" rx="4" ry="4" fill="#F3C297" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="294" width="30" height="30" rx="4" ry="4" fill="#F2BD8E" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="294" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="294" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="294" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="294" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="262" y="294" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="294" y="294" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="326" y="294" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="358" y="294" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="326" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="326" width="30" height="30" rx="4" ry="4" fill="#F5CDA9" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="326" width="30" height="30" rx="4" ry="4" fill="#F4C8A0" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="326" width="30" height="30" rx="4" ry="4" fill="#F3C297" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="326" width="30" height="30" rx="4" ry="4" fill="#F2BD8E" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="326" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="326" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="326" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="262" y="326" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="294" y="326" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="326" y="326" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="358" y="326" width="30" height="30" rx="4" ry="4" fill="#FFFFFF" stroke="#BBBBBB" stroke-width="0.5"/>
|
||||
<rect x="6" y="358" width="30" height="30" rx="4" ry="4" fill="#EA9143" stroke="#B8651F" stroke-width="0.6"/>
|
||||
<rect x="38" y="358" width="30" height="30" rx="4" ry="4" fill="#F6D2B2" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="70" y="358" width="30" height="30" rx="4" ry="4" fill="#F5CDA9" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="102" y="358" width="30" height="30" rx="4" ry="4" fill="#F4C8A0" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="134" y="358" width="30" height="30" rx="4" ry="4" fill="#F3C297" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="166" y="358" width="30" height="30" rx="4" ry="4" fill="#F2BD8E" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="198" y="358" width="30" height="30" rx="4" ry="4" fill="#F1B885" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="230" y="358" width="30" height="30" rx="4" ry="4" fill="#F0B37D" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="262" y="358" width="30" height="30" rx="4" ry="4" fill="#EFAE74" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="294" y="358" width="30" height="30" rx="4" ry="4" fill="#EEA96B" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="326" y="358" width="30" height="30" rx="4" ry="4" fill="#EDA362" stroke="#999999" stroke-width="0.3"/>
|
||||
<rect x="358" y="358" width="30" height="30" rx="4" ry="4" fill="#EC9E59" stroke="#999999" stroke-width="0.3"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
146
paper/figures/tensors/06_attn_raw.svg
Normal file
@@ -0,0 +1,146 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="629" height="384" viewBox="0 0 629 384">
|
||||
<polygon points="314.98,24.00 339.23,38.00 314.98,52.00 290.74,38.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,38.00 363.48,52.00 339.23,66.00 314.98,52.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,52.00 387.73,66.00 363.48,80.00 339.23,66.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,66.00 411.98,80.00 387.73,94.00 363.48,80.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,80.00 436.23,94.00 411.98,108.00 387.73,94.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,94.00 460.48,108.00 436.23,122.00 411.98,108.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,108.00 484.73,122.00 460.48,136.00 436.23,122.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,122.00 508.97,136.00 484.73,150.00 460.48,136.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="508.97,136.00 533.22,150.00 508.97,164.00 484.73,150.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="533.22,150.00 557.47,164.00 533.22,178.00 508.97,164.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="557.47,164.00 581.72,178.00 557.47,192.00 533.22,178.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="581.72,178.00 605.97,192.00 581.72,206.00 557.47,192.00" fill="#F7D7BA" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,38.00 314.98,52.00 290.74,66.00 266.49,52.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,52.00 339.23,66.00 314.98,80.00 290.74,66.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,66.00 363.48,80.00 339.23,94.00 314.98,80.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,80.00 387.73,94.00 363.48,108.00 339.23,94.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,94.00 411.98,108.00 387.73,122.00 363.48,108.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,108.00 436.23,122.00 411.98,136.00 387.73,122.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,122.00 460.48,136.00 436.23,150.00 411.98,136.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,136.00 484.73,150.00 460.48,164.00 436.23,150.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,150.00 508.97,164.00 484.73,178.00 460.48,164.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="508.97,164.00 533.22,178.00 508.97,192.00 484.73,178.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="533.22,178.00 557.47,192.00 533.22,206.00 508.97,192.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="557.47,192.00 581.72,206.00 557.47,220.00 533.22,206.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,52.00 290.74,66.00 266.49,80.00 242.24,66.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,66.00 314.98,80.00 290.74,94.00 266.49,80.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,80.00 339.23,94.00 314.98,108.00 290.74,94.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,94.00 363.48,108.00 339.23,122.00 314.98,108.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,108.00 387.73,122.00 363.48,136.00 339.23,122.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,122.00 411.98,136.00 387.73,150.00 363.48,136.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,136.00 436.23,150.00 411.98,164.00 387.73,150.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,150.00 460.48,164.00 436.23,178.00 411.98,164.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,164.00 484.73,178.00 460.48,192.00 436.23,178.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,178.00 508.97,192.00 484.73,206.00 460.48,192.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="508.97,192.00 533.22,206.00 508.97,220.00 484.73,206.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="533.22,206.00 557.47,220.00 533.22,234.00 508.97,220.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,66.00 266.49,80.00 242.24,94.00 217.99,80.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,80.00 290.74,94.00 266.49,108.00 242.24,94.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,94.00 314.98,108.00 290.74,122.00 266.49,108.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,108.00 339.23,122.00 314.98,136.00 290.74,122.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,122.00 363.48,136.00 339.23,150.00 314.98,136.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,136.00 387.73,150.00 363.48,164.00 339.23,150.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,150.00 411.98,164.00 387.73,178.00 363.48,164.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,164.00 436.23,178.00 411.98,192.00 387.73,178.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,178.00 460.48,192.00 436.23,206.00 411.98,192.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,192.00 484.73,206.00 460.48,220.00 436.23,206.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,206.00 508.97,220.00 484.73,234.00 460.48,220.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="508.97,220.00 533.22,234.00 508.97,248.00 484.73,234.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,80.00 242.24,94.00 217.99,108.00 193.74,94.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,94.00 266.49,108.00 242.24,122.00 217.99,108.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,108.00 290.74,122.00 266.49,136.00 242.24,122.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,122.00 314.98,136.00 290.74,150.00 266.49,136.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,136.00 339.23,150.00 314.98,164.00 290.74,150.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,150.00 363.48,164.00 339.23,178.00 314.98,164.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,164.00 387.73,178.00 363.48,192.00 339.23,178.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,178.00 411.98,192.00 387.73,206.00 363.48,192.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,192.00 436.23,206.00 411.98,220.00 387.73,206.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,206.00 460.48,220.00 436.23,234.00 411.98,220.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,220.00 484.73,234.00 460.48,248.00 436.23,234.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,234.00 508.97,248.00 484.73,262.00 460.48,248.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,94.00 217.99,108.00 193.74,122.00 169.49,108.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,108.00 242.24,122.00 217.99,136.00 193.74,122.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,122.00 266.49,136.00 242.24,150.00 217.99,136.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,136.00 290.74,150.00 266.49,164.00 242.24,150.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,150.00 314.98,164.00 290.74,178.00 266.49,164.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,164.00 339.23,178.00 314.98,192.00 290.74,178.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,178.00 363.48,192.00 339.23,206.00 314.98,192.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,192.00 387.73,206.00 363.48,220.00 339.23,206.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,206.00 411.98,220.00 387.73,234.00 363.48,220.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,220.00 436.23,234.00 411.98,248.00 387.73,234.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,234.00 460.48,248.00 436.23,262.00 411.98,248.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,248.00 484.73,262.00 460.48,276.00 436.23,262.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,108.00 193.74,122.00 169.49,136.00 145.24,122.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,122.00 217.99,136.00 193.74,150.00 169.49,136.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,136.00 242.24,150.00 217.99,164.00 193.74,150.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,150.00 266.49,164.00 242.24,178.00 217.99,164.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,164.00 290.74,178.00 266.49,192.00 242.24,178.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,178.00 314.98,192.00 290.74,206.00 266.49,192.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,192.00 339.23,206.00 314.98,220.00 290.74,206.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,206.00 363.48,220.00 339.23,234.00 314.98,220.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,220.00 387.73,234.00 363.48,248.00 339.23,234.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,234.00 411.98,248.00 387.73,262.00 363.48,248.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,248.00 436.23,262.00 411.98,276.00 387.73,262.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,262.00 460.48,276.00 436.23,290.00 411.98,276.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,122.00 169.49,136.00 145.24,150.00 120.99,136.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,136.00 193.74,150.00 169.49,164.00 145.24,150.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,150.00 217.99,164.00 193.74,178.00 169.49,164.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,164.00 242.24,178.00 217.99,192.00 193.74,178.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,178.00 266.49,192.00 242.24,206.00 217.99,192.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,192.00 290.74,206.00 266.49,220.00 242.24,206.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,206.00 314.98,220.00 290.74,234.00 266.49,220.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,220.00 339.23,234.00 314.98,248.00 290.74,234.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,234.00 363.48,248.00 339.23,262.00 314.98,248.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,248.00 387.73,262.00 363.48,276.00 339.23,262.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,262.00 411.98,276.00 387.73,290.00 363.48,276.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,276.00 436.23,290.00 411.98,304.00 387.73,290.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,136.00 145.24,150.00 120.99,164.00 96.75,150.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,150.00 169.49,164.00 145.24,178.00 120.99,164.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,164.00 193.74,178.00 169.49,192.00 145.24,178.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,178.00 217.99,192.00 193.74,206.00 169.49,192.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,192.00 242.24,206.00 217.99,220.00 193.74,206.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,206.00 266.49,220.00 242.24,234.00 217.99,220.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,220.00 290.74,234.00 266.49,248.00 242.24,234.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,234.00 314.98,248.00 290.74,262.00 266.49,248.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,248.00 339.23,262.00 314.98,276.00 290.74,262.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,262.00 363.48,276.00 339.23,290.00 314.98,276.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,276.00 387.73,290.00 363.48,304.00 339.23,290.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,290.00 411.98,304.00 387.73,318.00 363.48,304.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="96.75,150.00 120.99,164.00 96.75,178.00 72.50,164.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,164.00 145.24,178.00 120.99,192.00 96.75,178.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,178.00 169.49,192.00 145.24,206.00 120.99,192.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,192.00 193.74,206.00 169.49,220.00 145.24,206.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,206.00 217.99,220.00 193.74,234.00 169.49,220.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,220.00 242.24,234.00 217.99,248.00 193.74,234.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,234.00 266.49,248.00 242.24,262.00 217.99,248.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,248.00 290.74,262.00 266.49,276.00 242.24,262.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,262.00 314.98,276.00 290.74,290.00 266.49,276.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,276.00 339.23,290.00 314.98,304.00 290.74,290.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,290.00 363.48,304.00 339.23,318.00 314.98,304.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,304.00 387.73,318.00 363.48,332.00 339.23,318.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="72.50,164.00 96.75,178.00 72.50,192.00 48.25,178.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="96.75,178.00 120.99,192.00 96.75,206.00 72.50,192.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,192.00 145.24,206.00 120.99,220.00 96.75,206.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,206.00 169.49,220.00 145.24,234.00 120.99,220.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,220.00 193.74,234.00 169.49,248.00 145.24,234.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,234.00 217.99,248.00 193.74,262.00 169.49,248.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,248.00 242.24,262.00 217.99,276.00 193.74,262.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,262.00 266.49,276.00 242.24,290.00 217.99,276.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,276.00 290.74,290.00 266.49,304.00 242.24,290.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,290.00 314.98,304.00 290.74,318.00 266.49,304.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,304.00 339.23,318.00 314.98,332.00 290.74,318.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,318.00 363.48,332.00 339.23,346.00 314.98,332.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="48.25,178.00 72.50,192.00 48.25,206.00 24.00,192.00" fill="#F7D7BA" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="72.50,192.00 96.75,206.00 72.50,220.00 48.25,206.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="96.75,206.00 120.99,220.00 96.75,234.00 72.50,220.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,220.00 145.24,234.00 120.99,248.00 96.75,234.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,234.00 169.49,248.00 145.24,262.00 120.99,248.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,248.00 193.74,262.00 169.49,276.00 145.24,262.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,262.00 217.99,276.00 193.74,290.00 169.49,276.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,276.00 242.24,290.00 217.99,304.00 193.74,290.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,290.00 266.49,304.00 242.24,318.00 217.99,304.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,304.00 290.74,318.00 266.49,332.00 242.24,318.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,318.00 314.98,332.00 290.74,346.00 266.49,332.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,332.00 339.23,346.00 314.98,360.00 290.74,346.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
146
paper/figures/tensors/07_attn_mask.svg
Normal file
@@ -0,0 +1,146 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="629" height="384" viewBox="0 0 629 384">
|
||||
<polygon points="314.98,24.00 339.23,38.00 314.98,52.00 290.74,38.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,38.00 363.48,52.00 339.23,66.00 314.98,52.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="363.48,52.00 387.73,66.00 363.48,80.00 339.23,66.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="387.73,66.00 411.98,80.00 387.73,94.00 363.48,80.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="411.98,80.00 436.23,94.00 411.98,108.00 387.73,94.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="436.23,94.00 460.48,108.00 436.23,122.00 411.98,108.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="460.48,108.00 484.73,122.00 460.48,136.00 436.23,122.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="484.73,122.00 508.97,136.00 484.73,150.00 460.48,136.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="508.97,136.00 533.22,150.00 508.97,164.00 484.73,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="533.22,150.00 557.47,164.00 533.22,178.00 508.97,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="557.47,164.00 581.72,178.00 557.47,192.00 533.22,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="581.72,178.00 605.97,192.00 581.72,206.00 557.47,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,38.00 314.98,52.00 290.74,66.00 266.49,52.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,52.00 339.23,66.00 314.98,80.00 290.74,66.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,66.00 363.48,80.00 339.23,94.00 314.98,80.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,80.00 387.73,94.00 363.48,108.00 339.23,94.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,94.00 411.98,108.00 387.73,122.00 363.48,108.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,108.00 436.23,122.00 411.98,136.00 387.73,122.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,122.00 460.48,136.00 436.23,150.00 411.98,136.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="460.48,136.00 484.73,150.00 460.48,164.00 436.23,150.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="484.73,150.00 508.97,164.00 484.73,178.00 460.48,164.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="508.97,164.00 533.22,178.00 508.97,192.00 484.73,178.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="533.22,178.00 557.47,192.00 533.22,206.00 508.97,192.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="557.47,192.00 581.72,206.00 557.47,220.00 533.22,206.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="266.49,52.00 290.74,66.00 266.49,80.00 242.24,66.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,66.00 314.98,80.00 290.74,94.00 266.49,80.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,80.00 339.23,94.00 314.98,108.00 290.74,94.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,94.00 363.48,108.00 339.23,122.00 314.98,108.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,108.00 387.73,122.00 363.48,136.00 339.23,122.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,122.00 411.98,136.00 387.73,150.00 363.48,136.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,136.00 436.23,150.00 411.98,164.00 387.73,150.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,150.00 460.48,164.00 436.23,178.00 411.98,164.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="460.48,164.00 484.73,178.00 460.48,192.00 436.23,178.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="484.73,178.00 508.97,192.00 484.73,206.00 460.48,192.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="508.97,192.00 533.22,206.00 508.97,220.00 484.73,206.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="533.22,206.00 557.47,220.00 533.22,234.00 508.97,220.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="242.24,66.00 266.49,80.00 242.24,94.00 217.99,80.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,80.00 290.74,94.00 266.49,108.00 242.24,94.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,94.00 314.98,108.00 290.74,122.00 266.49,108.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,108.00 339.23,122.00 314.98,136.00 290.74,122.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,122.00 363.48,136.00 339.23,150.00 314.98,136.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,136.00 387.73,150.00 363.48,164.00 339.23,150.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,150.00 411.98,164.00 387.73,178.00 363.48,164.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,164.00 436.23,178.00 411.98,192.00 387.73,178.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,178.00 460.48,192.00 436.23,206.00 411.98,192.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="460.48,192.00 484.73,206.00 460.48,220.00 436.23,206.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="484.73,206.00 508.97,220.00 484.73,234.00 460.48,220.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="508.97,220.00 533.22,234.00 508.97,248.00 484.73,234.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="217.99,80.00 242.24,94.00 217.99,108.00 193.74,94.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,94.00 266.49,108.00 242.24,122.00 217.99,108.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,108.00 290.74,122.00 266.49,136.00 242.24,122.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,122.00 314.98,136.00 290.74,150.00 266.49,136.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,136.00 339.23,150.00 314.98,164.00 290.74,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,150.00 363.48,164.00 339.23,178.00 314.98,164.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,164.00 387.73,178.00 363.48,192.00 339.23,178.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,178.00 411.98,192.00 387.73,206.00 363.48,192.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,192.00 436.23,206.00 411.98,220.00 387.73,206.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,206.00 460.48,220.00 436.23,234.00 411.98,220.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="460.48,220.00 484.73,234.00 460.48,248.00 436.23,234.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="484.73,234.00 508.97,248.00 484.73,262.00 460.48,248.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="193.74,94.00 217.99,108.00 193.74,122.00 169.49,108.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,108.00 242.24,122.00 217.99,136.00 193.74,122.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,122.00 266.49,136.00 242.24,150.00 217.99,136.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,136.00 290.74,150.00 266.49,164.00 242.24,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,150.00 314.98,164.00 290.74,178.00 266.49,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,164.00 339.23,178.00 314.98,192.00 290.74,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,178.00 363.48,192.00 339.23,206.00 314.98,192.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,192.00 387.73,206.00 363.48,220.00 339.23,206.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,206.00 411.98,220.00 387.73,234.00 363.48,220.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,220.00 436.23,234.00 411.98,248.00 387.73,234.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,234.00 460.48,248.00 436.23,262.00 411.98,248.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="460.48,248.00 484.73,262.00 460.48,276.00 436.23,262.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="169.49,108.00 193.74,122.00 169.49,136.00 145.24,122.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,122.00 217.99,136.00 193.74,150.00 169.49,136.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,136.00 242.24,150.00 217.99,164.00 193.74,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,150.00 266.49,164.00 242.24,178.00 217.99,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,164.00 290.74,178.00 266.49,192.00 242.24,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,178.00 314.98,192.00 290.74,206.00 266.49,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,192.00 339.23,206.00 314.98,220.00 290.74,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,206.00 363.48,220.00 339.23,234.00 314.98,220.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,220.00 387.73,234.00 363.48,248.00 339.23,234.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,234.00 411.98,248.00 387.73,262.00 363.48,248.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,248.00 436.23,262.00 411.98,276.00 387.73,262.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="436.23,262.00 460.48,276.00 436.23,290.00 411.98,276.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="145.24,122.00 169.49,136.00 145.24,150.00 120.99,136.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="169.49,136.00 193.74,150.00 169.49,164.00 145.24,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,150.00 217.99,164.00 193.74,178.00 169.49,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,164.00 242.24,178.00 217.99,192.00 193.74,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,178.00 266.49,192.00 242.24,206.00 217.99,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,192.00 290.74,206.00 266.49,220.00 242.24,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,206.00 314.98,220.00 290.74,234.00 266.49,220.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,220.00 339.23,234.00 314.98,248.00 290.74,234.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,234.00 363.48,248.00 339.23,262.00 314.98,248.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,248.00 387.73,262.00 363.48,276.00 339.23,262.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,262.00 411.98,276.00 387.73,290.00 363.48,276.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="411.98,276.00 436.23,290.00 411.98,304.00 387.73,290.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="120.99,136.00 145.24,150.00 120.99,164.00 96.75,150.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="145.24,150.00 169.49,164.00 145.24,178.00 120.99,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="169.49,164.00 193.74,178.00 169.49,192.00 145.24,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,178.00 217.99,192.00 193.74,206.00 169.49,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,192.00 242.24,206.00 217.99,220.00 193.74,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,206.00 266.49,220.00 242.24,234.00 217.99,220.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,220.00 290.74,234.00 266.49,248.00 242.24,234.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,234.00 314.98,248.00 290.74,262.00 266.49,248.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,248.00 339.23,262.00 314.98,276.00 290.74,262.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,262.00 363.48,276.00 339.23,290.00 314.98,276.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,276.00 387.73,290.00 363.48,304.00 339.23,290.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="387.73,290.00 411.98,304.00 387.73,318.00 363.48,304.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="96.75,150.00 120.99,164.00 96.75,178.00 72.50,164.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="120.99,164.00 145.24,178.00 120.99,192.00 96.75,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="145.24,178.00 169.49,192.00 145.24,206.00 120.99,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="169.49,192.00 193.74,206.00 169.49,220.00 145.24,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,206.00 217.99,220.00 193.74,234.00 169.49,220.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,220.00 242.24,234.00 217.99,248.00 193.74,234.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,234.00 266.49,248.00 242.24,262.00 217.99,248.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,248.00 290.74,262.00 266.49,276.00 242.24,262.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,262.00 314.98,276.00 290.74,290.00 266.49,276.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,276.00 339.23,290.00 314.98,304.00 290.74,290.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,290.00 363.48,304.00 339.23,318.00 314.98,304.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="363.48,304.00 387.73,318.00 363.48,332.00 339.23,318.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="72.50,164.00 96.75,178.00 72.50,192.00 48.25,178.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="96.75,178.00 120.99,192.00 96.75,206.00 72.50,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="120.99,192.00 145.24,206.00 120.99,220.00 96.75,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="145.24,206.00 169.49,220.00 145.24,234.00 120.99,220.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="169.49,220.00 193.74,234.00 169.49,248.00 145.24,234.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,234.00 217.99,248.00 193.74,262.00 169.49,248.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,248.00 242.24,262.00 217.99,276.00 193.74,262.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,262.00 266.49,276.00 242.24,290.00 217.99,276.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,276.00 290.74,290.00 266.49,304.00 242.24,290.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,290.00 314.98,304.00 290.74,318.00 266.49,304.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,304.00 339.23,318.00 314.98,332.00 290.74,318.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="339.23,318.00 363.48,332.00 339.23,346.00 314.98,332.00" fill="#3A3A3A" stroke="#1F1F1F" stroke-width="0.5"/>
|
||||
<polygon points="48.25,178.00 72.50,192.00 48.25,206.00 24.00,192.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="72.50,192.00 96.75,206.00 72.50,220.00 48.25,206.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="96.75,206.00 120.99,220.00 96.75,234.00 72.50,220.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="120.99,220.00 145.24,234.00 120.99,248.00 96.75,234.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="145.24,234.00 169.49,248.00 145.24,262.00 120.99,248.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="169.49,248.00 193.74,262.00 169.49,276.00 145.24,262.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="193.74,262.00 217.99,276.00 193.74,290.00 169.49,276.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="217.99,276.00 242.24,290.00 217.99,304.00 193.74,290.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="242.24,290.00 266.49,304.00 242.24,318.00 217.99,304.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="266.49,304.00 290.74,318.00 266.49,332.00 242.24,318.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="290.74,318.00 314.98,332.00 290.74,346.00 266.49,332.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
<polygon points="314.98,332.00 339.23,346.00 314.98,360.00 290.74,346.00" fill="#F0B27A" stroke="#B8651F" stroke-width="0.4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
146
paper/figures/tensors/08_attn_masked.svg
Normal file
@@ -0,0 +1,146 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="629" height="384" viewBox="0 0 629 384">
|
||||
<polygon points="314.98,24.00 339.23,38.00 314.98,52.00 290.74,38.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,38.00 363.48,52.00 339.23,66.00 314.98,52.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="363.48,52.00 387.73,66.00 363.48,80.00 339.23,66.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="387.73,66.00 411.98,80.00 387.73,94.00 363.48,80.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="411.98,80.00 436.23,94.00 411.98,108.00 387.73,94.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="436.23,94.00 460.48,108.00 436.23,122.00 411.98,108.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="460.48,108.00 484.73,122.00 460.48,136.00 436.23,122.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="484.73,122.00 508.97,136.00 484.73,150.00 460.48,136.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="508.97,136.00 533.22,150.00 508.97,164.00 484.73,150.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="533.22,150.00 557.47,164.00 533.22,178.00 508.97,164.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="557.47,164.00 581.72,178.00 557.47,192.00 533.22,178.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="581.72,178.00 605.97,192.00 581.72,206.00 557.47,192.00" fill="#F7D7BA" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,38.00 314.98,52.00 290.74,66.00 266.49,52.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,52.00 339.23,66.00 314.98,80.00 290.74,66.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,66.00 363.48,80.00 339.23,94.00 314.98,80.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,80.00 387.73,94.00 363.48,108.00 339.23,94.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,94.00 411.98,108.00 387.73,122.00 363.48,108.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,108.00 436.23,122.00 411.98,136.00 387.73,122.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,122.00 460.48,136.00 436.23,150.00 411.98,136.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="460.48,136.00 484.73,150.00 460.48,164.00 436.23,150.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="484.73,150.00 508.97,164.00 484.73,178.00 460.48,164.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="508.97,164.00 533.22,178.00 508.97,192.00 484.73,178.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="533.22,178.00 557.47,192.00 533.22,206.00 508.97,192.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="557.47,192.00 581.72,206.00 557.47,220.00 533.22,206.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="266.49,52.00 290.74,66.00 266.49,80.00 242.24,66.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,66.00 314.98,80.00 290.74,94.00 266.49,80.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,80.00 339.23,94.00 314.98,108.00 290.74,94.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,94.00 363.48,108.00 339.23,122.00 314.98,108.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,108.00 387.73,122.00 363.48,136.00 339.23,122.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,122.00 411.98,136.00 387.73,150.00 363.48,136.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,136.00 436.23,150.00 411.98,164.00 387.73,150.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,150.00 460.48,164.00 436.23,178.00 411.98,164.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="460.48,164.00 484.73,178.00 460.48,192.00 436.23,178.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="484.73,178.00 508.97,192.00 484.73,206.00 460.48,192.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="508.97,192.00 533.22,206.00 508.97,220.00 484.73,206.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="533.22,206.00 557.47,220.00 533.22,234.00 508.97,220.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="242.24,66.00 266.49,80.00 242.24,94.00 217.99,80.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,80.00 290.74,94.00 266.49,108.00 242.24,94.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,94.00 314.98,108.00 290.74,122.00 266.49,108.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,108.00 339.23,122.00 314.98,136.00 290.74,122.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,122.00 363.48,136.00 339.23,150.00 314.98,136.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,136.00 387.73,150.00 363.48,164.00 339.23,150.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,150.00 411.98,164.00 387.73,178.00 363.48,164.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,164.00 436.23,178.00 411.98,192.00 387.73,178.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,178.00 460.48,192.00 436.23,206.00 411.98,192.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="460.48,192.00 484.73,206.00 460.48,220.00 436.23,206.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="484.73,206.00 508.97,220.00 484.73,234.00 460.48,220.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="508.97,220.00 533.22,234.00 508.97,248.00 484.73,234.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="217.99,80.00 242.24,94.00 217.99,108.00 193.74,94.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,94.00 266.49,108.00 242.24,122.00 217.99,108.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,108.00 290.74,122.00 266.49,136.00 242.24,122.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,122.00 314.98,136.00 290.74,150.00 266.49,136.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,136.00 339.23,150.00 314.98,164.00 290.74,150.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,150.00 363.48,164.00 339.23,178.00 314.98,164.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,164.00 387.73,178.00 363.48,192.00 339.23,178.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,178.00 411.98,192.00 387.73,206.00 363.48,192.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,192.00 436.23,206.00 411.98,220.00 387.73,206.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,206.00 460.48,220.00 436.23,234.00 411.98,220.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="460.48,220.00 484.73,234.00 460.48,248.00 436.23,234.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="484.73,234.00 508.97,248.00 484.73,262.00 460.48,248.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="193.74,94.00 217.99,108.00 193.74,122.00 169.49,108.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,108.00 242.24,122.00 217.99,136.00 193.74,122.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,122.00 266.49,136.00 242.24,150.00 217.99,136.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,136.00 290.74,150.00 266.49,164.00 242.24,150.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,150.00 314.98,164.00 290.74,178.00 266.49,164.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,164.00 339.23,178.00 314.98,192.00 290.74,178.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,178.00 363.48,192.00 339.23,206.00 314.98,192.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,192.00 387.73,206.00 363.48,220.00 339.23,206.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,206.00 411.98,220.00 387.73,234.00 363.48,220.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,220.00 436.23,234.00 411.98,248.00 387.73,234.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,234.00 460.48,248.00 436.23,262.00 411.98,248.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="460.48,248.00 484.73,262.00 460.48,276.00 436.23,262.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="169.49,108.00 193.74,122.00 169.49,136.00 145.24,122.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,122.00 217.99,136.00 193.74,150.00 169.49,136.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,136.00 242.24,150.00 217.99,164.00 193.74,150.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,150.00 266.49,164.00 242.24,178.00 217.99,164.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,164.00 290.74,178.00 266.49,192.00 242.24,178.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,178.00 314.98,192.00 290.74,206.00 266.49,192.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,192.00 339.23,206.00 314.98,220.00 290.74,206.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,206.00 363.48,220.00 339.23,234.00 314.98,220.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,220.00 387.73,234.00 363.48,248.00 339.23,234.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,234.00 411.98,248.00 387.73,262.00 363.48,248.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,248.00 436.23,262.00 411.98,276.00 387.73,262.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="436.23,262.00 460.48,276.00 436.23,290.00 411.98,276.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="145.24,122.00 169.49,136.00 145.24,150.00 120.99,136.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,136.00 193.74,150.00 169.49,164.00 145.24,150.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,150.00 217.99,164.00 193.74,178.00 169.49,164.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,164.00 242.24,178.00 217.99,192.00 193.74,178.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,178.00 266.49,192.00 242.24,206.00 217.99,192.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,192.00 290.74,206.00 266.49,220.00 242.24,206.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,206.00 314.98,220.00 290.74,234.00 266.49,220.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,220.00 339.23,234.00 314.98,248.00 290.74,234.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,234.00 363.48,248.00 339.23,262.00 314.98,248.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,248.00 387.73,262.00 363.48,276.00 339.23,262.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,262.00 411.98,276.00 387.73,290.00 363.48,276.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="411.98,276.00 436.23,290.00 411.98,304.00 387.73,290.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="120.99,136.00 145.24,150.00 120.99,164.00 96.75,150.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,150.00 169.49,164.00 145.24,178.00 120.99,164.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,164.00 193.74,178.00 169.49,192.00 145.24,178.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,178.00 217.99,192.00 193.74,206.00 169.49,192.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,192.00 242.24,206.00 217.99,220.00 193.74,206.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,206.00 266.49,220.00 242.24,234.00 217.99,220.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,220.00 290.74,234.00 266.49,248.00 242.24,234.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,234.00 314.98,248.00 290.74,262.00 266.49,248.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,248.00 339.23,262.00 314.98,276.00 290.74,262.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,262.00 363.48,276.00 339.23,290.00 314.98,276.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,276.00 387.73,290.00 363.48,304.00 339.23,290.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="387.73,290.00 411.98,304.00 387.73,318.00 363.48,304.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="96.75,150.00 120.99,164.00 96.75,178.00 72.50,164.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,164.00 145.24,178.00 120.99,192.00 96.75,178.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,178.00 169.49,192.00 145.24,206.00 120.99,192.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,192.00 193.74,206.00 169.49,220.00 145.24,206.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,206.00 217.99,220.00 193.74,234.00 169.49,220.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,220.00 242.24,234.00 217.99,248.00 193.74,234.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,234.00 266.49,248.00 242.24,262.00 217.99,248.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,248.00 290.74,262.00 266.49,276.00 242.24,262.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,262.00 314.98,276.00 290.74,290.00 266.49,276.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,276.00 339.23,290.00 314.98,304.00 290.74,290.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,290.00 363.48,304.00 339.23,318.00 314.98,304.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="363.48,304.00 387.73,318.00 363.48,332.00 339.23,318.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="72.50,164.00 96.75,178.00 72.50,192.00 48.25,178.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="96.75,178.00 120.99,192.00 96.75,206.00 72.50,192.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,192.00 145.24,206.00 120.99,220.00 96.75,206.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,206.00 169.49,220.00 145.24,234.00 120.99,220.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,220.00 193.74,234.00 169.49,248.00 145.24,234.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,234.00 217.99,248.00 193.74,262.00 169.49,248.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,248.00 242.24,262.00 217.99,276.00 193.74,262.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,262.00 266.49,276.00 242.24,290.00 217.99,276.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,276.00 290.74,290.00 266.49,304.00 242.24,290.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,290.00 314.98,304.00 290.74,318.00 266.49,304.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,304.00 339.23,318.00 314.98,332.00 290.74,318.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="339.23,318.00 363.48,332.00 339.23,346.00 314.98,332.00" fill="#FFFFFF" stroke="#CCCCCC" stroke-width="0.4"/>
|
||||
<polygon points="48.25,178.00 72.50,192.00 48.25,206.00 24.00,192.00" fill="#F7D7BA" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="72.50,192.00 96.75,206.00 72.50,220.00 48.25,206.00" fill="#F6D2B2" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="96.75,206.00 120.99,220.00 96.75,234.00 72.50,220.00" fill="#F5CDA9" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="120.99,220.00 145.24,234.00 120.99,248.00 96.75,234.00" fill="#F4C8A0" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="145.24,234.00 169.49,248.00 145.24,262.00 120.99,248.00" fill="#F3C297" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="169.49,248.00 193.74,262.00 169.49,276.00 145.24,262.00" fill="#F2BD8E" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="193.74,262.00 217.99,276.00 193.74,290.00 169.49,276.00" fill="#F1B885" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="217.99,276.00 242.24,290.00 217.99,304.00 193.74,290.00" fill="#F0B37D" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="242.24,290.00 266.49,304.00 242.24,318.00 217.99,304.00" fill="#EFAE74" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="266.49,304.00 290.74,318.00 266.49,332.00 242.24,318.00" fill="#EEA96B" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="290.74,318.00 314.98,332.00 290.74,346.00 266.49,332.00" fill="#EDA362" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
<polygon points="314.98,332.00 339.23,346.00 314.98,360.00 290.74,346.00" fill="#EC9E59" stroke="#9C9C9C" stroke-width="0.4"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
68
paper/figures/tensors/gen_attn_heatmap.py
Normal file
@@ -0,0 +1,68 @@
|
||||
"""Generate the causal-packet MHSA attention heatmap SVG.
|
||||
|
||||
12 x 12 attention matrix, rounded-rectangle cells, no text labels:
|
||||
- row 0 and col 0 (FLOW token): cOrange!85 (full attention)
|
||||
- lower triangular within [1:, 1:]: cOrange decaying with distance
|
||||
(cOrange!{75 - 4*dist})
|
||||
- upper triangular (blocked): white + light grey border
|
||||
|
||||
Run:
|
||||
python gen_attn_heatmap.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
CORANGE = (230, 126, 34) # RGB of cOrange palette
|
||||
WHITE = (255, 255, 255)
|
||||
|
||||
CELL = 30 # px per cell (square)
|
||||
GAP = 2 # px between cells
|
||||
PAD = 6 # px outer padding
|
||||
RADIUS = 4 # px corner radius for cells
|
||||
N = 12 # 12 x 12 grid
|
||||
|
||||
STRIDE = CELL + GAP
|
||||
SIZE = N * CELL + (N - 1) * GAP + 2 * PAD
|
||||
|
||||
|
||||
def mix_orange(p: int) -> str:
|
||||
"""cOrange mixed with white at p% (matches TikZ cOrange!p)."""
|
||||
f = p / 100
|
||||
r = round(CORANGE[0] * f + WHITE[0] * (1 - f))
|
||||
g = round(CORANGE[1] * f + WHITE[1] * (1 - f))
|
||||
b = round(CORANGE[2] * f + WHITE[2] * (1 - f))
|
||||
return f"#{r:02X}{g:02X}{b:02X}"
|
||||
|
||||
|
||||
def cell_style(i: int, j: int) -> tuple[str, str, float]:
|
||||
"""(fill, stroke, stroke_width) for cell (row=i, col=j)."""
|
||||
if i == 0 or j == 0: # FLOW row / col
|
||||
return mix_orange(85), "#B8651F", 0.6
|
||||
if j > i: # blocked (upper-tri)
|
||||
return "#FFFFFF", "#BBBBBB", 0.5
|
||||
opa = max(15, 75 - (i - j) * 4) # lower-tri decay
|
||||
return mix_orange(opa), "#999999", 0.3
|
||||
|
||||
|
||||
def make_svg() -> str:
|
||||
parts = [
|
||||
f'<svg xmlns="http://www.w3.org/2000/svg" '
|
||||
f'width="{SIZE}" height="{SIZE}" viewBox="0 0 {SIZE} {SIZE}">',
|
||||
f' <rect width="{SIZE}" height="{SIZE}" fill="white"/>',
|
||||
]
|
||||
for i in range(N):
|
||||
for j in range(N):
|
||||
x = PAD + j * STRIDE
|
||||
y = PAD + i * STRIDE
|
||||
fill, stroke, sw = cell_style(i, j)
|
||||
parts.append(
|
||||
f' <rect x="{x}" y="{y}" width="{CELL}" height="{CELL}" '
|
||||
f'rx="{RADIUS}" ry="{RADIUS}" '
|
||||
f'fill="{fill}" stroke="{stroke}" stroke-width="{sw}"/>'
|
||||
)
|
||||
parts.append('</svg>')
|
||||
return '\n'.join(parts) + '\n'
|
||||
|
||||
|
||||
OUT = Path(__file__).parent
|
||||
(OUT / "05_attention_heatmap.svg").write_text(make_svg())
|
||||
print(f"wrote 05_attention_heatmap.svg ({SIZE}x{SIZE})")
|
||||
136
paper/figures/tensors/gen_attn_perspective.py
Normal file
@@ -0,0 +1,136 @@
|
||||
"""Generate 3 perspective (isometric) SVGs for the MHSA attention story:
|
||||
|
||||
06_attn_raw.svg — raw attention pattern, no mask
|
||||
07_attn_mask.svg — the causal-packet mask itself (binary shape)
|
||||
08_attn_masked.svg — raw attention with the mask applied
|
||||
|
||||
Each cell is rendered as a parallelogram via a 30°/30° isometric projection.
|
||||
All three SVGs share the same dimensions and the same projection so they can
|
||||
be composed / cross-faded in drawio.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import math
|
||||
|
||||
# --- palette ----------------------------------------------------------------
|
||||
CORANGE = (230, 126, 34)
|
||||
WHITE = (255, 255, 255)
|
||||
|
||||
# --- geometry ---------------------------------------------------------------
|
||||
CELL = 28 # local cell size (before projection)
|
||||
N = 12 # 12 x 12 grid
|
||||
PAD = 24
|
||||
|
||||
COS30 = math.sqrt(3) / 2 # ≈ 0.866
|
||||
SIN30 = 0.5
|
||||
|
||||
|
||||
def project(x: float, y: float) -> tuple[float, float]:
|
||||
"""Map local (x, y) to screen (sx, sy) via 30°/30° isometric projection.
|
||||
|
||||
Local x-axis (cols) goes down-right, local y-axis (rows) goes down-left.
|
||||
Origin (0, 0) ends up at the TOP of the projected diamond.
|
||||
"""
|
||||
sx = x * COS30 - y * COS30
|
||||
sy = x * SIN30 + y * SIN30
|
||||
return sx, sy
|
||||
|
||||
|
||||
def _bbox() -> tuple[float, float, float, float]:
|
||||
corners = [
|
||||
project(0, 0),
|
||||
project(N * CELL, 0),
|
||||
project(0, N * CELL),
|
||||
project(N * CELL, N * CELL),
|
||||
]
|
||||
xs, ys = [c[0] for c in corners], [c[1] for c in corners]
|
||||
return min(xs), max(xs), min(ys), max(ys)
|
||||
|
||||
|
||||
_xmin, _xmax, _ymin, _ymax = _bbox()
|
||||
W = int(_xmax - _xmin + 2 * PAD)
|
||||
H = int(_ymax - _ymin + 2 * PAD)
|
||||
OX = -_xmin + PAD
|
||||
OY = -_ymin + PAD
|
||||
|
||||
|
||||
def mix_orange(p: int) -> str:
|
||||
f = p / 100
|
||||
r = round(CORANGE[0] * f + WHITE[0] * (1 - f))
|
||||
g = round(CORANGE[1] * f + WHITE[1] * (1 - f))
|
||||
b = round(CORANGE[2] * f + WHITE[2] * (1 - f))
|
||||
return f"#{r:02X}{g:02X}{b:02X}"
|
||||
|
||||
|
||||
def cell_poly(i: int, j: int) -> str:
|
||||
"""Return SVG points string for the parallelogram at row i, col j."""
|
||||
pts = []
|
||||
for di, dj in [(0, 0), (0, 1), (1, 1), (1, 0)]:
|
||||
x = (j + dj) * CELL
|
||||
y = (i + di) * CELL
|
||||
sx, sy = project(x, y)
|
||||
pts.append(f"{sx + OX:.2f},{sy + OY:.2f}")
|
||||
return " ".join(pts)
|
||||
|
||||
|
||||
def make_svg(style_fn) -> str:
|
||||
# No background rect — SVGs are transparent so they can be cleanly
|
||||
# overlaid / placed on any drawio canvas color.
|
||||
parts = [
|
||||
f'<svg xmlns="http://www.w3.org/2000/svg" '
|
||||
f'width="{W}" height="{H}" viewBox="0 0 {W} {H}">',
|
||||
]
|
||||
# draw row-by-row, far rows first so near rows overlay (depth order).
|
||||
for i in range(N):
|
||||
for j in range(N):
|
||||
fill, stroke, sw = style_fn(i, j)
|
||||
parts.append(
|
||||
f' <polygon points="{cell_poly(i, j)}" '
|
||||
f'fill="{fill}" stroke="{stroke}" stroke-width="{sw}"/>'
|
||||
)
|
||||
parts.append('</svg>')
|
||||
return '\n'.join(parts) + '\n'
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Style functions for each of the 3 SVGs
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
def style_raw(i: int, j: int) -> tuple[str, str, float]:
|
||||
"""Raw attention before any mask: band-matrix-like soft pattern.
|
||||
|
||||
Brightness peaks on the diagonal and decays with |i - j|, giving a
|
||||
realistic-looking dense attention map.
|
||||
"""
|
||||
dist = abs(i - j)
|
||||
opa = max(20, 75 - dist * 4)
|
||||
return mix_orange(opa), "#9C9C9C", 0.4
|
||||
|
||||
|
||||
def style_mask(i: int, j: int) -> tuple[str, str, float]:
|
||||
"""The causal-packet mask itself, as a binary visual:
|
||||
|
||||
- allowed cells (FLOW row/col + lower-tri): orange-light
|
||||
- blocked cells (upper-tri except FLOW): dark gray
|
||||
"""
|
||||
blocked = (i != 0) and (j != 0) and (j > i)
|
||||
if blocked:
|
||||
return "#3A3A3A", "#1F1F1F", 0.5
|
||||
return mix_orange(60), "#B8651F", 0.4
|
||||
|
||||
|
||||
def style_masked(i: int, j: int) -> tuple[str, str, float]:
|
||||
"""Raw attention AFTER applying the causal-packet mask: blocked cells
|
||||
are whited out, allowed cells keep EXACTLY their raw attention intensity
|
||||
(i.e. masked == raw × mask, nothing else changes).
|
||||
"""
|
||||
blocked = (i != 0) and (j != 0) and (j > i)
|
||||
if blocked:
|
||||
return "#FFFFFF", "#CCCCCC", 0.4
|
||||
return style_raw(i, j)
|
||||
|
||||
|
||||
OUT = Path(__file__).parent
|
||||
(OUT / "06_attn_raw.svg").write_text(make_svg(style_raw))
|
||||
(OUT / "07_attn_mask.svg").write_text(make_svg(style_mask))
|
||||
(OUT / "08_attn_masked.svg").write_text(make_svg(style_masked))
|
||||
print(f"wrote 06_attn_raw.svg / 07_attn_mask.svg / 08_attn_masked.svg ({W}x{H})")
|
||||
71
paper/figures/tensors/gen_tensors.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""Generate 4 SVG tensor visualisations for the AdaLN modulation flow.
|
||||
|
||||
Each SVG is a 6 col x 4 row grid where cell color = cBlue mixed with white at
|
||||
the per-cell opacity (0..100). Same color values used in the TikZ panel (c).
|
||||
|
||||
Run:
|
||||
python gen_tensors.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
CBLUE = (52, 110, 180) # RGB of cBlue palette in the TikZ figure
|
||||
WHITE = (255, 255, 255)
|
||||
CELL = 50 # px per cell
|
||||
BORDER = 3 # outer padding (px)
|
||||
COLS, ROWS = 6, 4
|
||||
W = COLS * CELL + 2 * BORDER
|
||||
H = ROWS * CELL + 2 * BORDER
|
||||
|
||||
|
||||
def mix(p: int) -> str:
|
||||
"""Mix cBlue with white at p% (matches TikZ cBlue!p)."""
|
||||
f = p / 100
|
||||
r = round(CBLUE[0] * f + WHITE[0] * (1 - f))
|
||||
g = round(CBLUE[1] * f + WHITE[1] * (1 - f))
|
||||
b = round(CBLUE[2] * f + WHITE[2] * (1 - f))
|
||||
return f"#{r:02X}{g:02X}{b:02X}"
|
||||
|
||||
|
||||
def make_svg(opacities: list[int]) -> str:
|
||||
parts = [
|
||||
f'<svg xmlns="http://www.w3.org/2000/svg" '
|
||||
f'width="{W}" height="{H}" viewBox="0 0 {W} {H}">',
|
||||
f' <rect width="{W}" height="{H}" fill="white"/>',
|
||||
]
|
||||
for k, op in enumerate(opacities):
|
||||
i, j = k % COLS, k // COLS
|
||||
x = BORDER + i * CELL
|
||||
y = BORDER + j * CELL
|
||||
parts.append(
|
||||
f' <rect x="{x}" y="{y}" width="{CELL}" height="{CELL}" '
|
||||
f'fill="{mix(op)}" stroke="#999" stroke-width="0.6"/>'
|
||||
)
|
||||
parts.append('</svg>')
|
||||
return '\n'.join(parts) + '\n'
|
||||
|
||||
|
||||
# Same opacity arrays used in the TikZ panel (c). Row-major: 6 cols * 4 rows.
|
||||
TENSORS = {
|
||||
"01_h_in": [30, 80, 50, 40, 90, 60,
|
||||
70, 20, 80, 50, 40, 90,
|
||||
60, 50, 90, 30, 80, 40,
|
||||
70, 30, 60, 80, 40, 70],
|
||||
"02_h_after_LN": [50, 30, 70, 50, 40, 60,
|
||||
40, 60, 50, 50, 40, 60,
|
||||
50, 50, 60, 40, 60, 40,
|
||||
50, 40, 50, 60, 40, 60],
|
||||
"03_h_after_gamma":[60, 12, 70, 25, 52, 60,
|
||||
48, 24, 50, 25, 52, 60,
|
||||
60, 20, 60, 20, 78, 40,
|
||||
60, 16, 50, 30, 52, 60],
|
||||
"04_h_after_beta": [80, 32, 90, 45, 72, 80,
|
||||
68, 44, 70, 45, 72, 80,
|
||||
80, 40, 80, 40, 90, 60,
|
||||
80, 36, 70, 50, 72, 80],
|
||||
}
|
||||
|
||||
OUT = Path(__file__).parent
|
||||
for name, vals in TENSORS.items():
|
||||
assert len(vals) == COLS * ROWS, f"{name}: need {COLS*ROWS} values"
|
||||
(OUT / f"{name}.svg").write_text(make_svg(vals))
|
||||
print(f"wrote {name}.svg ({W}x{H})")
|
||||