import React, { useState } from "react"; import { Sliders } from "lucide-react"; export const MatrixViz: React.FC = () => { const [rank, setRank] = useState(4); // Constants for visualization scaling const d = 16; // Hidden dimension simulation const k = 16; // Output dimension simulation // Calculate imaginary parameters based on user slider // Assuming a real model like Llama-7B, d_model might be 4096. // We scale the display numbers to look realistic. const realD = 4096; const realK = 4096; const paramsFull = realD * realK; const paramsLoRA = realD * rank + rank * realK; const reduction = ((1 - paramsLoRA / paramsFull) * 100).toFixed(2); // Helper to generate random opacity blue blocks const renderGrid = ( rows: number, cols: number, colorBase: string, label: string, ) => { return (
{Array.from({ length: rows * cols }).map((_, i) => (
))} {/* Matrix Label Overlay */}
{label}
); }; return (

Interactive Decomposition

Adjust the Rank (r) to see how LoRA decomposes the weight update matrix into two smaller dense matrices.

setRank(parseInt(e.target.value))} className="w-32 h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer accent-accent" />
{/* Matrix B (d x r) */}
B
{renderGrid(16, rank, "#93c5fd", `${realD} × ${rank}`)}
×
{/* Matrix A (r x k) */}
A
{renderGrid(rank, 16, "#2563eb", `${rank} × ${realK}`)}
{/* Arrow */}
{/* Matrix Delta W */}
ΔW
{renderGrid(16, 16, "#4ade80", `${realD} × ${realK}`)}
{/* Math Dashboard */}
Trainable Params (LoRA)
{paramsLoRA.toLocaleString()}
({realD}×{rank}) + ({rank}×{realK})
Trainable Params (Full)
{paramsFull.toLocaleString()}
{realD} × {realK}
Memory Reduction
{reduction}%
More VRAM for batch size
); };