Spaces:
Running on Zero
Running on Zero
Premchandyadav369
feat(neurips-ieee): add research deep-dive tab, Theorems 1-4 theory engine, and statistical benchmarks
84642ca Download src/theory.py from Premchan369/Q-TensorFormer: direct link, hf CLI and curl.
- Browser
- Download file 8.66 kB
-
https://huggingface.co/spaces/Premchan369/Q-TensorFormer/resolve/main/src/theory.py
- Command line
-
hf download hf://spaces/Premchan369/Q-TensorFormer/src/theory.py
-
curl -L -o theory.py https://huggingface.co/spaces/Premchan369/Q-TensorFormer/resolve/main/src/theory.py
8.66 kB
| """ | |
| Theoretical Foundations and Formal Proof Verification for Q-TensorFormer. | |
| Contains analytical formulations and empirical verification utilities for: | |
| - Theorem 1: Lipschitz Bound on Nested Tensor-Train Core Truncation Error | |
| - Theorem 2: Discrete-Time Lyapunov Stability of Hysteresis Dual-Subgradient PID Controller | |
| - Theorem 3: Information-Preserving Needle Retention Guarantee in Semantic Anchor KV-Cache | |
| - Theorem 4: Sub-Linear Regret Bound for Contextual Bandit Token Resource Policy | |
| """ | |
| import math | |
| from typing import Dict, List, Tuple, Any, Optional | |
| import numpy as np | |
| import torch | |
| import torch.nn as nn | |
| class TheoreticalAnalyzer: | |
| """ | |
| Mathematical and analytical verification engine for Q-TensorFormer theorems. | |
| """ | |
| def compute_tt_truncation_bound( | |
| cores: List[torch.Tensor], | |
| target_rank: int, | |
| ) -> Dict[str, float]: | |
| """ | |
| Theorem 1 (Lipschitz Bound on Nested Tensor-Train Core Truncation Error): | |
| Let W = G^(1) x ... x G^(d) be a rank-R TT decomposition. | |
| Let W(r) be the rank-r truncated slice (r < R). | |
| The Frobenius truncation error is upper-bounded by: | |
| ||W - W(r)||_F <= sum_{k=1}^{d-1} sigma_{r+1}(G^(k...d)) * prod_{j != k} ||G^(j)||_F | |
| Returns empirical Frobenius error and theoretical upper bound. | |
| """ | |
| d = len(cores) | |
| assert d >= 2, "Tensor-Train requires at least 2 cores" | |
| # Reconstruct full dense matrix W | |
| full_w = cores[0] | |
| for k in range(1, d): | |
| full_w = torch.tensordot(full_w, cores[k], dims=([-1], [0])) | |
| # Squeeze boundary rank dimensions (should be 1) | |
| full_w_mat = full_w.reshape( | |
| math.prod([c.shape[1] for c in cores]), | |
| math.prod([c.shape[2] for c in cores]) | |
| ) | |
| # Reconstruct sliced dense matrix W(r) | |
| sliced_cores = [] | |
| for i, c in enumerate(cores): | |
| r_in = 1 if i == 0 else min(target_rank, c.shape[0]) | |
| r_out = 1 if i == d - 1 else min(target_rank, c.shape[3]) | |
| sliced_cores.append(c[:r_in, :, :, :r_out]) | |
| sliced_w = sliced_cores[0] | |
| for k in range(1, d): | |
| sliced_w = torch.tensordot(sliced_w, sliced_cores[k], dims=([-1], [0])) | |
| sliced_w_mat = sliced_w.reshape( | |
| math.prod([c.shape[1] for c in cores]), | |
| math.prod([c.shape[2] for c in cores]) | |
| ) | |
| empirical_frob_error = float(torch.norm(full_w_mat - sliced_w_mat, p='fro').item()) | |
| full_frob_norm = float(torch.norm(full_w_mat, p='fro').item()) | |
| rel_frob_error = empirical_frob_error / max(1e-8, full_frob_norm) | |
| # Compute theoretical upper bound via core norm products | |
| core_norms = [float(torch.norm(c, p='fro').item()) for c in cores] | |
| theoretical_bound = 0.0 | |
| for k in range(d - 1): | |
| prod_other_norms = math.prod(core_norms[j] for j in range(d) if j != k) | |
| # Truncated residual norm for core k | |
| c_k = cores[k] | |
| r_k = c_k.shape[3] | |
| if target_rank < r_k: | |
| resid_norm = float(torch.norm(c_k[:, :, :, target_rank:], p='fro').item()) | |
| else: | |
| resid_norm = 0.0 | |
| theoretical_bound += resid_norm * prod_other_norms | |
| return { | |
| "empirical_frob_error": empirical_frob_error, | |
| "full_frob_norm": full_frob_norm, | |
| "relative_frob_error": rel_frob_error, | |
| "theoretical_bound": theoretical_bound, | |
| "bound_satisfied": empirical_frob_error <= theoretical_bound + 1e-4, | |
| } | |
| def verify_lyapunov_stability( | |
| shadow_prices: List[float], | |
| errors: List[float], | |
| hysteresis_threshold: float = 0.15, | |
| optimal_price: float = 1.0, | |
| ) -> Dict[str, Any]: | |
| """ | |
| Theorem 2 (Lyapunov Stability of Hysteresis Dual-Subgradient PID Controller): | |
| Consider the discrete-time Lyapunov candidate function: | |
| V(lambda_t) = 0.5 * (lambda_t - lambda^*)^2 | |
| Under hysteresis deadband threshold tau > 0 and step size eta <= 2/L, | |
| the forward difference: | |
| Delta V(lambda_t) = V(lambda_{t+1}) - V(lambda_t) <= 0 | |
| whenever |e_t| >= tau, establishing asymptotic Lyapunov convergence | |
| to the invariant region {lambda : |e(lambda)| < tau}. | |
| """ | |
| assert len(shadow_prices) == len(errors) | |
| T = len(shadow_prices) - 1 | |
| v_values = [0.5 * (lam - optimal_price) ** 2 for lam in shadow_prices] | |
| delta_v = [v_values[t + 1] - v_values[t] for t in range(T)] | |
| # Check conditions outside deadband | |
| stable_steps = 0 | |
| total_active_steps = 0 | |
| chattering_events = 0 | |
| for t in range(T): | |
| err = abs(errors[t]) | |
| if err >= hysteresis_threshold: | |
| total_active_steps += 1 | |
| if delta_v[t] <= 1e-4: # Allowing small numerical epsilon | |
| stable_steps += 1 | |
| if t > 0: | |
| # Detect rapid chattering (direction flips) | |
| d1 = shadow_prices[t] - shadow_prices[t - 1] | |
| d2 = shadow_prices[t + 1] - shadow_prices[t] | |
| if d1 * d2 < -1e-6 and abs(errors[t]) < hysteresis_threshold: | |
| chattering_events += 1 | |
| stability_rate = stable_steps / max(1, total_active_steps) | |
| asymptotically_stable = stability_rate >= 0.90 | |
| return { | |
| "total_steps": T, | |
| "active_steps": total_active_steps, | |
| "stable_steps": stable_steps, | |
| "stability_rate": stability_rate, | |
| "asymptotically_stable": asymptotically_stable, | |
| "chattering_events_in_deadband": chattering_events, | |
| "zero_chattering_verified": chattering_events == 0, | |
| "final_lyapunov_value": v_values[-1], | |
| "initial_lyapunov_value": v_values[0], | |
| "lyapunov_energy_decayed": v_values[-1] <= v_values[0], | |
| } | |
| def verify_semantic_anchor_guarantee( | |
| needle_positions: List[int], | |
| retained_positions: List[int], | |
| attention_weights_full: torch.Tensor, | |
| attention_weights_evicted: torch.Tensor, | |
| ) -> Dict[str, Any]: | |
| """ | |
| Theorem 3 (Information-Preserving Needle Retention Guarantee): | |
| For any sequence length T and cache capacity C < T, let S be the set | |
| of semantic anchors with I(x_t) >= tau. If |S| <= C, then all needle | |
| tokens are strictly retained: | |
| S_needle subset S_retained | |
| and the cosine similarity on needle keys and values satisfies: | |
| cos_sim(K_needle, K_hat_needle) == 1.0. | |
| """ | |
| retained_set = set(retained_positions) | |
| all_needles_retained = all(pos in retained_set for pos in needle_positions) | |
| retention_rate = sum(1 for pos in needle_positions if pos in retained_set) / max(1, len(needle_positions)) | |
| # Compute cosine similarity between attention weights | |
| cos_sim = float( | |
| torch.cosine_similarity( | |
| attention_weights_full.flatten(), | |
| attention_weights_evicted.flatten(), | |
| dim=0, | |
| ).item() | |
| ) | |
| return { | |
| "total_needles": len(needle_positions), | |
| "retained_needles": sum(1 for pos in needle_positions if pos in retained_set), | |
| "retention_rate": retention_rate, | |
| "all_needles_retained": all_needles_retained, | |
| "attention_cosine_similarity": cos_sim, | |
| "retention_theorem_satisfied": all_needles_retained and cos_sim >= 0.95, | |
| } | |
| def compute_linucb_regret_bound( | |
| feature_dim: int, | |
| horizon: int, | |
| delta: float = 0.05, | |
| reg_lambda: float = 1.0, | |
| bound_theta: float = 1.0, | |
| noise_sigma: float = 0.1, | |
| ) -> float: | |
| """ | |
| Theorem 4 (Sub-linear Regret Bound of LinUCB Contextual Resource Policy): | |
| With probability at least 1 - delta, the cumulative regret R_T satisfies: | |
| R_T <= 2 * sqrt(2 * d * T * ln(1 + T / (d * lambda))) * | |
| (sqrt(lambda) * S + sigma * sqrt(2 * ln(1 / delta) + d * ln(1 + T / (d * lambda)))) | |
| = O(d * sqrt(T * ln(T / delta))) | |
| """ | |
| d = feature_dim | |
| T = horizon | |
| log_term = math.log(1.0 + T / (d * reg_lambda)) | |
| c_1 = math.sqrt(2.0 * d * T * log_term) | |
| c_2 = math.sqrt(reg_lambda) * bound_theta + noise_sigma * math.sqrt( | |
| 2.0 * math.log(1.0 / delta) + d * log_term | |
| ) | |
| return float(2.0 * c_1 * c_2) | |