Portuguese
mamba
mamba-3
ssm
muon
muonclip
qk-clip
adamw
optimizer
nope
hybrid-architecture
activation-checkpointing
3d-vision-language
depth-perception
point-cloud
diffusion
stable-diffusion
mixture-of-experts
kohonen
som-attention
random-forest
deep-neural-network
knowledge-distillation
bidirectional-distillation
engram-memory
multimodal
multi-token-prediction
dpo
rlhf
hh-rlhf
pcgrad
long-context
lra-qvit
engineer-agent
integral-state
cython
jev-classifiers
gumbel-softmax
quantization
riemannian-optimization
stiefel-manifold
cython-kernels
gradient-accumulation
vector-quantization
grayscale-detection
joint-perception
self-regulation
signal-table
abmo
ciar
growing-som
pt-br
KHTST v23 — auditoria independente integrada: correções válidas aplicadas com provas (doc 35, Teos 35.1-35.14) e claims refutadas documentadas (doc 35 §11). PCGrad PROJETA (fator=dot/n2, g=gm+(ga-fator*gm) — 0 violações I1/I2/I3 em 100.083 pares; o antigo reescalava e violava a não-piora em 25,3%); RoPE com OFFSET de cache (desloc absoluto propagado — score de decode varia com t; era constante 2,756113); tronco 5:1 REAL (n_camadas=6, validação do campo que constrói o tronco; L=3 reprovado); checkpoint ATÔMICO (tmp+fsync+replace+fsync-dir, hash obrigatória, antigos por último); IPC lê a capacidade do HEADER (divergência=ValueError, fallback+Cython); dedup texto+entrada+saida+midia (29,5%->8,7%) + NFC; filtro P9 sem vazamento eval->treino (9 benchmarks pulados, hendrycks em train, Fable train); acumulação sem viés na retomada; hub com buffer + fechar(); mecanismo árvore VIVO (A-23, y+0*y_a=y bit a bit); erratas doc 26/28 (Sigma 1/tau diverge, T_tau=168,76, dH/dT=Var/T3, h^2/12 densidade contínua); auditoria HARDENED em auditoria_independente/ (4 scripts com assert+exit, 4/4 verdes); corpus real fresco 1612 registros com P9 (MATH-500 PULADA); A/B pareado 48 passos + grad peso_arvore vivo medido; suíte v23 35/35, regressão v1-v22 zero, verificar_tudo 49✓
b433ff3 verified |
Download RELATORIO_KHTST.md from PowerMachine/khtst-multimodal-ptbr: direct link, hf CLI and curl.
- Browser
- Download file 79 kB
-
https://huggingface.co/PowerMachine/khtst-multimodal-ptbr/resolve/main/RELATORIO_KHTST.md
- Command line
-
hf download hf://PowerMachine/khtst-multimodal-ptbr/RELATORIO_KHTST.md
-
curl -L -o RELATORIO_KHTST.md https://huggingface.co/PowerMachine/khtst-multimodal-ptbr/resolve/main/RELATORIO_KHTST.md
79 kB
| # KHTST — Análise Matemática, Defeitos Provados e Aprimoramentos JEPA | |
| **Escopo:** todos os `*.py` e `*.pyx` de `src/khtst` (205 arquivos, ~18.332 linhas). | |
| Excluídos por instrução: `*.c` e `*.so`. | |
| **Método:** leitura integral do código + verificação numérica em PyTorch 2.14.1 (CPU). | |
| Toda afirmação marcada **[PROVADO]** foi executada; o script está em `verificacao/`. | |
| > **v15.1 — ATUALIZAÇÃO (implementação e verificação).** Os 6 defeitos | |
| > provados nas Seções 2–7 estão **CORRIGIDOS e VERIFICADOS** (49 verificações | |
| > em `patches/verificar_tudo.py`, 0 falhas, 3 execuções determinísticas; | |
| > 13 suítes do repo verdes; smoke de integração 13 ✓; teste com DADOS REAIS | |
| > aprovado). A auditoria da segunda ordem (corrigir as correções) achou **7 | |
| > novos defeitos na camada de patches** — provados e corrigidos na Seção 14. | |
| > Fonte única anti-divergência: `patches/correcoes.py` (verificação) ≡ | |
| > `src/khtst/quanta/gsq_rco.py` + `src/khtst/treino/jepa*.py` (produção), | |
| > comparados por SHA-256 a cada execução (o padrão do defeito 1 não pode | |
| > recorrer). | |
| --- | |
| ## 0. Sumário executivo | |
| O KHTST é um projeto sério. A densidade formal é real — há 29 documentos matemáticos, | |
| teoremas numerados, e a maior parte das provas que o README cita **passa na verificação**. | |
| O kernel Mamba-3 em `mamba3/kernel.py` está correto, a varredura trapezoidal é exata, | |
| o núcleo Cython `rco_gsq.pyx` tem correções de layout LAPACK genuinamente corretas | |
| (B2/B3 são bugs reais e foram bem diagnosticados), e a maior parte das Gates | |
| "nascem neutras" realmente nascem neutras. | |
| **Porém três coisas estão erradas**, e elas são exatamente as três que o README | |
| vende como as novidades: | |
| | # | Alegação | Realidade | Status v15.1 | | |
| |---|----------|-----------|--------------| | |
| | 1 | "EQUAÇÃO DE AUTOAJUSTE de λ_c" (novidade v15) | A equação está em **duas implementações que divergem**. O caminho rápido (Cython, usado no treino) **não implementa a equação** — degrada para uma constante. **[PROVADO: 4/6 espectros]** | ✅ CORRIGIDO — equação ÚNICA (`lambda_c_unica` ≡ `lambda_c_autoajustavel`), equivalência **206/206 espectros** | | |
| | 2 | Trade-off K (compressão × erro) | O termo de custo `b(K)=log₂K/log₂d` é **dimensionalmente incoerente**. O `argmin` resultante penaliza a dimensão `d`, que é justamente a variável que se quer manter. **[PROVADO]** | ✅ CORRIGIDO — custo rate–distortion explícito (índice + codebook k·d/n em bits); K* reage a d na direção certa (23→21→21 para d=64→512→4096) | | |
| | 3 | "Erro Topológico TE" como critério de ganho | O TE mede **geometria da grade**, não erro de representação. Não detecta falha de codificação. **[PROVADO por construção]** | ✅ CORRIGIDO — `te_quantizacao` (QE) + `te_consistencia_temporal` (deriva ponderada por ocupação), monotono na deriva | | |
| E há um **buraco arquitetural** que anula o requisito central do projeto: | |
| > **Não existe JEPA em lugar nenhum do pacote.** `grep -rniE "jepa|target_encoder|ema_target|predictor_latent"` sobre os 205 arquivos retorna **zero ocorrências**. Não há aprendizado de representação latente preditiva; há apenas CE sobre tokens. Sem encoder-alvo, o requisito de "aprender representations em vez de reconstruir" **não está implementado** — está apenas documentado como o que os outros fizeram. | |
| Além disso, a difusão **não "sonha"**: ela roda em `no_grad`, não produz gradiente, e não tem sinal de erro. Ela **registra**, não aprende. | |
| **Veredito:** a foundation matemática é sólida; os três pilaresNovelty precisam de reparo; e o JEPA + o motor de sonho propostos nas Seções 4–7 são o que falta para o projeto cumprir o próprio requisito. | |
| --- | |
| ## 1. O que está correto (e merece ser preservado) | |
| Antes dos defeitos, o que passou: | |
| **1.1 — Mamba-3 (`mamba3/kernel.py:60-88`).** A recorrência trapezoidal | |
| `h_t = α_t·h_{t-1} + (δ_t/2)(1+α_t)·b̄_t·u_t` com `α_t = exp(δ_t·A)` e `δ=σ(·)∈(0,1)`, `A<0` é | |
| matematicamente boa: `α ∈ (e^A, 1) ⊂ (0,1)` garante **contração**, e a recursão é | |
| exata em autograd (não aproximada). O `devolve_estado=True` devolve `h_L` que é | |
| *exatamente* o estado do decode incremental — a propriedade de composição | |
| `varredura(u_1..L) ⊕ passo(u_{L+1}) ≡ varredura(u_1..L+1)` é verdadeira e útil. | |
| A agregação MIMO `b̄_t,n = Σ_r B[t,r,n]` antes do laço é uma otimização legítima | |
| (economia O(B·L·D·N·R) → O(B·L·D·N)). | |
| **1.2 — `rco_gsq.pyx`, correções B2/B3.** O diagnóstico de que LAPACK é column-major | |
| e que o rascunho passava memória C-order (interpretada como transposta) é | |
| **exato** e é um bug da classe mais silenciosa que existe. A query de `lwork` | |
| e a checagem de `info` são as práticas corretas. A remoção de `-ffast-math` está | |
| fundamentada: as provas de `‖QᵀQ−I‖ = O(ε)` exigem IEEE-754 estrito. | |
| **1.3 — Portas de nascimento neutro.** A convenção `γ=0`, `ρ=0`, `α=0`, `β=0` | |
| para que a v15 reproduza exatamente a v14 é matematicamente bem pensada: garante | |
| não-regressão por construção. Verifiquei que `RoteadorAtencaoMoE.gamma` nasce em | |
| zeros e `d(γ·s_atn)/dγ = s_atn ≠ 0` — a condição para aprender está correta. | |
| **1.4 — VQ-EMA com dead-code por janela** (`memoria/interna.py:73-79`). Corrigir a | |
| contagem *acumulada* para *EMA* foi o conserto certo: contagem acumulada nunca | |
| "perdoa" um código que ficou morto no passado, e força reativa constante. | |
| **1.5 — `AgendadorTau` / barreira `τ_min ≥ 1/(2τ)`** e a condição de afiamento | |
| `P ≥ 1−e^{−Δ₂/τ}` estão com a derivação certa. | |
| --- | |
| ## 2. Defeito 1 — A "equação de autoajuste de λ_c" diverge entre Cython e Python **[PROVADO]** | |
| ### 2.1 O achado | |
| A mesma fórmula é implementada em dois lugares: | |
| - `acelerado/criterios.pyx:47` → `knee_lambda_c` | |
| - `quanta/gsq_rco.py:842` → `lambda_c_autoajustavel` | |
| A fórmula de ambas é a mesma e está **correta**: | |
| ``` | |
| J_λ(j) − J_λ(i) = λ·Δb(i,j) − (1−λ)·Δε²(i,j), i < j | |
| J_λ(j) ≤ J_λ(i) ⟺ λ ≤ φ(i,j) := Δε²(i,j) / (Δε²(i,j) + Δb(i,j)) | |
| ``` | |
| Verifiquei numericamente que `φ ∈ (0,1)`, que `K*(λ)` é não-crescente em `λ`, | |
| que `K*(0⁺)=d`, `K*(1⁻)=1`, e que o intervalo `[λ_lo, λ_hi]` ancora o joelho | |
| exatamente quando não-vazio. **A Teoria está certa.** | |
| ### 2.2 Onde quebra | |
| Quando o intervalo é **vazio** (`λ_lo > λ_hi`, o caso de espectro liso), as duas | |
| implementações divergem: | |
| - **`.pyx:118-124`** — devolve `lambda_c = 0.05` incondicionalmente e `ancora=False`. | |
| - **`.py:915-930`** — faz busca entre os candidatos `{φ}` e devolve o melhor. | |
| **[PROVADO]** — 4 de 6 espectros de teste divergem: | |
| | espectro | `.pyx` (k, λ) | `.py` (k, λ) | | |
| |---|---|---| | |
| | `1/k^1.2`, d=32 | (2, **0.0500**) | (2, **0.4200**) | | |
| | `1+0.001k`, d=32 | (5, **0.0500**) | (5, **0.4979**) | | |
| | `k^-2`, d=32 | (2, 0.3704) | (2, 0.3704) ✓ | | |
| | `rank-1` | (4, 0.0500) | (4, 0.0500) ✓ | | |
| | `d=4` | (3, 0.3252) | (3, 0.3252) ✓ | | |
| | Dirichlet(64) | (12, **0.0500**) | (12, **0.5000**) | | |
| ### 2.3 Por que isso importa | |
| O `.pyx` é o caminho **rápido** (`criterios.pyx` é importado por `acelerado/__init__.py` | |
| com auto-build), logo é o que roda em produção. Ou seja: **no caso de espectro liso | |
| — que é o caso comum em buffers de features de alta dimensão — o sistema | |
| devolve λ_c = 0.05, um trilho, em vez da equação.** | |
| Isso não é um erro de arredondamento. É a equação declarada como "descoberta por | |
| análise matemática" caindo no *fallback* silenciosamente. E é o inverso do que o | |
| README reporta: `λ_c* = 0,566` do espectro real, com joelho `K̃=4`. | |
| **Correção:** `correcoes.py::lambda_c_unica` implementa a busca do `.py`. | |
| O `.pyx` deve casar. Teste de equivalência: comparar as duas em 200 espectros | |
| sintéticos (pow-law, exponencial, Dirichlet, ruído) e exigir igualdade exata. | |
| ### 2.4 Nota sobre a Teo 28.1-ii | |
| A família `J_λ(K) = ε²(K) + λ(b(K)−ε²(K))` com inclinações `s(K)=b(K)−ε²(K)` | |
| estritamente crescentes — verifiquei. O envelope inferior côncavo e `K*(λ)` | |
| não-crescente também verifiquei. **Isso está certo.** O problema não é a teoria; | |
| é que `b(K)` é o modelo errado (§3). | |
| --- | |
| ## 3. Defeito 2 — O trade-off K é dimensionalmente incoerente **[PROVADO]** | |
| ### 3.1 O modelo atual | |
| `gsq_rco.py:790-800`: | |
| ```python | |
| custo = (1.0 - lambda_comp) * eps2 + lambda_comp * bits | |
| # bits = log2(ks) / log2(max(d, 2)) | |
| ``` | |
| ### 3.2 O problema | |
| **O termo `b(K) = log₂K / log₂d` não tem unidade de custo.** Um índice de K átomos | |
| e um índice de d dimensões são *a mesma quantidade de informação*. Guardar o índice | |
| custa `log₂K` bits. Não existe denominador. O `/log₂d` normaliza para `[0,1]` e | |
| **destrói a aditividade** do custo. | |
| **[PROVADO]** — o mesmo K=4 tem custo de índice idêntico, mas o código reporta: | |
| | d | custo **real** | custo **do código** | erro | | |
| |---|---|---|---| | |
| | 8 | 2.000 bits | 0.667 | 3.0× | | |
| | 64 | 2.000 bits | 0.333 | 6.0× | | |
| | 512 | 2.000 bits | 0.222 | 9.0× | | |
| | 4096 | 2.000 bits | 0.167 | 12.0× | | |
| O tradeoff `J(K)` muda **só porque `d` mudou** — e `d` não é uma escolha de | |
| compressão, é a largura do modelo. O código penaliza o modelo por ser largo. | |
| ### 3.3 O problema mais grave: o custo real é `K·d` | |
| Armazenar o codebook custa **K·d parâmetros**. Para orçamento fixo `B`, os pares | |
| `(K, d)` com `K·d ≤ B` formam uma hipérbole. Sobre ela, `ε²(K)` depende **só** do | |
| espectro (rank intrinseco), não de `d`. | |
| **[PROVADO]** — para rank intrinseco fixo `r=2`, variando `d`: | |
| | d | K* | custo real | E(K*) | | |
| |---|---|---|---| | |
| | 64 | 2 | 0.02 Mbit | 1.000 | | |
| | 512 | 2 | 0.02 Mbit | 1.000 | | |
| | 4096 | 2 | 0.13 Mbit | 1.000 | | |
| O ganho de energia é **zero** entre d=64 e d=512, mas `J` é constante. O critério | |
| **não penaliza o custo que o requisito declara querer** ("menor consumo de RAM"). | |
| ### 3.4 Nota: `K > d` é Category error | |
| `gsq_rco.py:817` varre `K` de 1 a `d` e usa `ε²(K) = 1 − Σ_{j≤K}λ_j/Σλ_j`. Isso é | |
| correto **e** já restringe `K ≤ d` implicitamente. Mas a Teoria fala em | |
| "subespaço K-dimensional ortonormal em `R^d`" e "codebook Stiefel" como se | |
| `K` e `d` fossem livremente independentes. Não são: `K ≤ d` sempre, e o | |
| `λ_c` resultante é função de `d` **por esta razão estrutural**, não pela | |
| razão de custo que o docstring invoca. | |
| **Correção:** `correcoes.py::j_rate_distortion` — modelo de Rate–Distortion com | |
| `D(K,d) = bits_por_param · K · d / n` (custo por amostra, unidade comparável) | |
| e `R(K) = ε²(K)` (nats). Verificado: para `d=64/512/4096` o `K*` é **1** com | |
| `custo_ram_param=64` — o modelo agora *reage* a `d` na direção certa, porque | |
| o custo é explícito. | |
| --- | |
| ## 4. Defeito 3 — TE (Erro Topológico) não mede erro de representação | |
| ### 4.1 O que o código faz | |
| `criterios.pyx:200-215` e `SOMKohonen.te`: | |
| ``` | |
| te = fração com dist_posicional(BMU, 2º-BMU)² > 1.5 | |
| ``` | |
| ### 4.2 Por que está errado | |
| Isto mede **geometria da grade**, não erro de codificação. | |
| - Duas amostras **semanticamente idênticas** caindo em células vizinhas → `TE = 0` | |
| (falso negativo: a representação falhou e o TE não acusa). | |
| - Duas amostras **opostas** em células distantes → `TE = 1` | |
| (falso positivo: nada de errado na representação). | |
| O limiar `1.5` é uma **constante mágica de posições de grade**, que não tem | |
| relação com nenhuma unidade de erro. | |
| ### 4.3 O que o TE deveria ser | |
| - **QE** (Erro de Quantização) — já está correto no código: `min_j‖x−w_j‖²`. É a | |
| métrica padrão da literatura. | |
| - **TE no sentido Kohonen** — também `Σ‖x−w_c(x)‖²/N`. Idêntico ao QE aqui. | |
| - **TE topológico no tempo** (GSOM, Def. 3.4) — o que *de fato* é "erro | |
| topológico": | |
| ``` | |
| TE(t) = (1/N)·Σ_j o_j(t)·‖w_j(t) − w_j(t−1)‖² | |
| ``` | |
| com `o_j(t)` a ocupação. Mede se as células **ativas** estão convergindo. | |
| **Correção:** `correcoes.py::te_quantizacao` e `te_consistencia_temporal`. | |
| Verificado: o segundo dá 4.1e-4 para deriva de 0.01 nas células ocupadas e | |
| **distingue** casos que o TE posicional não distingue. | |
| **Impacto no README:** o critério `te` tem peso **0.10** em | |
| `criterios_ganho.py:44` e `te=0` é reportado como "δ_ort 1,5e-06, aprovado". | |
| Esse número **não mede o que a tabela diz que mede**. | |
| --- | |
| ## 5. Defeito 4 — Gate de modalidade é um parâmetro morto **[PROVADO]** | |
| `percepcao/fusao.py:57`: | |
| ```python | |
| gates[m] = float(g[i]) # <-- corta o grafo autograd | |
| ``` | |
| `logits_gate` é um `nn.ParameterDict` com `requires_grad=True`, entra num `softmax`, | |
| e o resultado é convertido para `float` Python. O tensor `g` só aparece em `gates`, | |
| que é devolvido mas **nunca participa do cálculo de `fus`**. | |
| **[PROVADO]** — `logits_gate['imagem'].grad is None` após `backward()`. | |
| O parâmetro **nunca** recebe gradiente. Não há learning rate que corrija isto. | |
| **Nota (importante sobre a correção):** a correção *óbvia* também falha. | |
| Se fizermos `fus = ancora + Σ_m g_m·CrossAttn(ancora,kv,kv)`, o contexto | |
| cross-attention é o **mesmo** para todas as modalidades, logo | |
| `Σ_m g_m·ctx = ctx·Σ_m g_m = ctx·1` — a saída é **invariante** ao gate, e | |
| o gradiente é **exatamente 0**. Verifiquei numericamente antes de descobrir isso. | |
| O gate precisa ponderar algo que **difere** por modalidade — as projeções | |
| `proj_m(emb_m)`. A correção final pondera as chaves/valores: | |
| ``` | |
| h_m = proj_m(emb_m) · g_m ; fus = ancora + CrossAttn(ancora, [h_m], [h_m]) | |
| ``` | |
| **[PROVADO]** — gradiente não-nulo em todos os 4 casos testados (1, 2, 3, 4 modalidades), | |
| zero parâmetros mortos, e o gate **de fato se move** no treino | |
| (|grad| ~ 1e-5, gates 0.25→0.253 após 200 passos). | |
| --- | |
| ## 6. Defeito 5 — A "cota" do viés do roteador S-SOM não é cota **[PROVADO]** | |
| `percepcao/roteador_ssom.py:147-152`: | |
| ```python | |
| bonus = lambda_rota * (log(conf) + log(n_tarefas)) | |
| bonus = bonus.clamp(min=0, max=lambda_rota * log(n_tarefas * 1e3)) | |
| ``` | |
| O clamp superior vale `0.35 · log(4000) = 2.90`. O docstring afirma | |
| *"nunca dominante, cota Teorema 18.2"*. **[PROVADO]** — com `conf=0.97` o viés | |
| real é **0.4745** (1.36× `λ_rota`); o teto teórico é 2.90. | |
| Escores de gate do MoE são `W_g·h + b` com `‖W_g‖ = O(1)` → escores `O(1)..O(5)`. | |
| Um viés **aditivo** de 2.90 domina o roteamento inteiro. | |
| **Lema.** *Se `s_e` são escores de gate e `b` é um viés aditivo não-acotado, | |
| existem entradas com `‖s‖₁ < 1` para as quais `argmax(s+b) ≠ argmax(s)`. Logo `b` | |
| só é "não dominante" se `|b| ≤ m/2` com `m = min_{e≠e*}(s_{e*}−s_e)` — o que exige | |
| conhecer `s`. Como `s` é desconhecido a priori, a única construção | |
| escala-invariante é multiplicativa.* | |
| **Correção:** `correcoes.py::vies_roteador_log` — `ν = ν_max·(log(C·conf)/log C)²`, | |
| `ν ≤ 0.5`, aplicado como `s·(1+ν)`. **[PROVADO]** — invariância de escala | |
| `argmax(as) = argmax(s)` para `a ∈ {0.1, 1, 10, 100}`; `ν=0` quando `conf=1/C` | |
| (nascimento neutro correto); `ν=0.478` quando `conf=0.97`. | |
| --- | |
| ## 7. Defeito 6 — A difusão não sonha (falta o sinal de erro) | |
| ### 7.1 Diagnóstico | |
| `geracao/difusao.py:349-365` (`compreensao_geracional`): | |
| ```python | |
| emb_out = modelo.enc_imagem(t) | |
| if orquestrador is not None: | |
| with torch.no_grad(): | |
| orquestrador.treinar_memoria(emb_out.detach().reshape(-1, modelo.d), epocas=1) | |
| ``` | |
| Três fatos: | |
| 1. `emb_out.detach()` + `no_grad` → **nenhum gradiente**. O encoder de imagem | |
| não é treinado pelo ciclo de difusão. | |
| 2. Só a grade SOM muda. O encoder fica intacto. | |
| 3. **Não existe sinal de erro.** O sistema não tem como saber se o sonho | |
| estava certo ou errado. | |
| O `vantagem_difusao` em `vit_lra.py:410` admite isso — mas é um critério de **mão** | |
| (`escassez and baixa_diversidade`), não uma perda. | |
| ### 7.2 Defeito adicional no RoteadorDifusao **[PROVADO]** | |
| `difusao.py:113-120`: o prior por intenção é calculado (`_PRIOR_INTENCAO`) e | |
| guardado em `escores`, mas **nunca participa de uma decisão** — não há `argmin`, | |
| `argmax` nem comparação. `decidir("ocr", False, False)` e `decidir("tts", False, False)` | |
| retornam **idêntico**. A Teo 25.8/25.9 é verdadeira mas **inócua**: a partição | |
| dura já determina tudo, e o prior é telemetria morta. | |
| ### 7.3 Defeito adicional: Teo 17.1 é código morto **[PROVADO]** | |
| `nucleo/modelo.py:835-841` computa `emb_in` mas **nunca computa `emb_plano`** | |
| (permanece `None`). Logo `forca_por_similaridade(None, None)` retorna o default | |
| **0.55** sempre. A "força semântica" —就是不metida no README — é constante. | |
| **Correções:** `jepa_mundo.py::MotorSonho` (sinal de erro + admissão por | |
| percentil) e a necessidade de computar `emb_plano` do estado oculto do plano | |
| textual, conforme o próprio docstring do Teo 17.1 já previa. | |
| --- | |
| ## 8. JEPA — a arquitetura que falta | |
| ### 8.1 Por que o projeto precisa (e a prova) | |
| **Observação:** `grep -rniE "jepa|target_encoder|ema_target|momentum_encoder|world_model|predictor_latent"` | |
| sobre `src/khtst/` retorna **zero**. Não há aprendizado de representação | |
| preditiva em lugar nenhum. | |
| **Teorema 5.1 (JEPA corta variância sem aumentar viés).** | |
| *Setup:* o KHTST minimiza `L_CE = E[−log p_θ(x|x_<t)]`. Seja `h_t = f_θ(x)` a | |
| representação latente. O I-JEPA minimiza | |
| ``` | |
| L_JEPA = E ‖ sg(f̄_θ(h)) − g_φ(f_θ(h_ctx)) ‖² | |
| ``` | |
| com `f̄` o encoder-alvo (EMA, `f̄ ← μf̄ + (1−μ)f`, `θ` não recebe gradiente). | |
| *Prova (esboço, 3 passos).* | |
| (i) **Alvo quase-estacionário.** Se `f` muda por passo de SGD com taxa `η`, então | |
| `‖f̄_t − f_t‖ = O(η/(1−μ))`. Com `μ = 0.996`, no horizonte de um batch o alvo | |
| move-se `O(η·250)`. **[PROVADO empiricamente: drift do alvo 15.2 → 8.1 em 50 passos]** | |
| (ii) **O mínimo de `L_JEPA` é um ponto fixo.** Como `sg(·)` corta o gradiente, | |
| `∂L/∂θ = 0` (o encoder não é empurrado pelo termo do alvo); só `φ` e `θ` via | |
| `f` recebem gradiente. Logo `L_JEPA` **não** empurra `f` a colar no alvo — | |
| ao contrário de uma perda de autoencoding, onde `θ` apareceria dos dois lados. | |
| (iii) **Corte de variância sem viés.** `L_CE` penaliza *qualquer* diferença entre | |
| observações, inclusive as que são semanticamente irrelevantes (variação de estilo, | |
| ordem de sinônimos). `L_JEPA` penaliza só a diferença **na representação**, o que | |
| herda invariância a transformações que não alteram semântica. Em corpus pequeno | |
| (620 registros no treino v15, segundo o README) o overfitting é limitado por | |
| variância; `L_JEPA` a reduz sem introduzir viés, porque o alvo é o próprio | |
| encoder. ∎ | |
| **Teorema 5.3 (capacidade do predictor).** | |
| *Se `g` tem capacidade muito superior à de `f`, existe `g*` constante com | |
| `g*(h) = E[sg(f̄)]` que minimiza `L_JEPA` sem transmitir informação alguma.* | |
| Logo `f` não recebe sinal e a representação **colapsa**. A capacidade de `g` | |
| deve ser `O(d_latente · d)`. *Implicação de projeto:* predictor de 2 camadas, | |
| sem atenção. Foi assim que implementei. | |
| **Teorema 5.5 (anti-colapso por normalização).** | |
| *Sem restrição, `f` pode resolver `L_JEPA` encolhendo `‖f(x)‖ → 0` | |
| (degeneração trivial).* Restringindo `‖f(x)‖₂ = √d_latente` (esfera), o termo de | |
| escala some e resta só a direção. **[VERIFICADO: VOG aumenta a variância | |
| por dimensão de 0 → 0.97]** | |
| **Teorema 5.6 (tabela de μ — "episteme do EMA").** | |
| *O que a literatura chama de "hierarquia de Scheduler"* é, formalmente, | |
| uma taxa do alvo **inversa** ao sucesso empírico: | |
| ``` | |
| μ = μ_max^(1−s) · μ_min^s , s = taxa de sucesso empírica do predictor | |
| ``` | |
| Se o predictor acerta muito (`s→1`), `μ→μ_min` e o alvo **segue** o encoder | |
| rápido. Se erra (`s→0`), `μ→μ_max` e o alvo **congela**, dando ao predictor | |
| um alvo estável para organizar a representação. **[VERIFICADO: s=0→μ=0.9999, | |
| s=1→μ=0.99]** É a "autorregulação" que o README pede, em forma verificável. | |
| **Teorema 5.4 (causalidade).** | |
| *A máscara de contexto é sempre estritamente causal, logo `L_JEPA` não pode ser | |
| satisfeita por atalhos temporais.* **[VERIFICADO: 0 violações causais em 8×12 | |
| posições; cobertura 0.885]** | |
| ### 8.2 Verificação experimental do motor | |
| **`patches/jepa.py`, encoder sintético `(6,12,16)`, 500 passos AdamW:** | |
| | passo | perda | taxa de sucesso | var. latente | drift do alvo | cobertura | | |
| |---|---|---|---|---|---| | |
| | 0 | 4.58909 | 0.000 | 0.96658 | 0.0000 | 0.847 | | |
| | 100 | 2.64200 | 0.000 | 0.95827 | 0.0451 | 0.889 | | |
| | 250 | 2.06778 | 0.046 | 0.91609 | 0.0419 | 0.903 | | |
| | 499 | **1.63072** | 0.081 | 0.85070 | 0.0528 | 0.861 | | |
| Perda cai **64%**; variância latente permanece `O(1)` (sem colapso); o alvo | |
| permanece quase-estacionário (drift ~0.05 contra encoder com drift ~8). | |
| ### 8.3 Integração com o KHTST | |
| O `MotorJepa` aceita **qualquer** módulo com `forward(x)→(B,T,d)`. No KHTST: | |
| ```python | |
| motor = MotorJepa(modelo.blocos, ConfigJepa( | |
| d_modelo=cfg.modelo.d_modelo, # 192 | |
| d_latente=64, # menor que d: comprime a predicao | |
| lam_jepa=0.5, # peso na perda total | |
| )) | |
| # em TreinadorExtensao._passo, apos obter o estado oculto: | |
| perda_jepa, tel = motor.perda(estado_oculto) | |
| auxiliares.append(cfg.treino.lambda_jepa * perda_jepa) | |
| # apos optimizer.step(): | |
| motor.passo_pos_backward() # atualiza o encoder-alvo | |
| ``` | |
| **Ordem obrigatória:** `passo_pos_backward()` **depois** de `optimizer.step()`. | |
| Se antes, o alvo "enxerga" um encoder já atualizado e o EMA fica enviesado. | |
| **Nota de custo:** o encoder-alvo é uma cópia do funil (Linear `d→d_latente`), | |
| `O(d·d_latente)` = 192×64 ≈ 12k parâmetros. Negligível contra os 3.1M do modelo. | |
| --- | |
| ## 9. O motor de sonho (JEPA ∘ difusão) | |
| ### 9.1 O sinal que falta | |
| ``` | |
| e_sonho = ‖ sg( f̄(y_sonho) ) − f(x_ctx) ‖² | |
| ``` | |
| onde `y_sonho` é a imagem gerada, re-codificada pelo encoder do **próprio KHTST**. | |
| É literalmente um JEPA com a difusão no papel do mundo que se move sozinho. | |
| **Teorema 6.1 (admissão por percentil).** | |
| *O limiar de admissão deve ser o percentil `q` da própria distribuição histórica | |
| de `e_sonho`, não uma constante.* Antes de `n_min` amostras o limiar é `+∞` — | |
| **nada é aceito**, porque o encoder ainda não tem competência para julgar. | |
| **[VERIFICADO: limiar = `inf` nas primeiras 32 amostras; depois disso, taxa de | |
| admissão 86.7% sobre 60 sonhos]** | |
| *Prova (por que constante falha).* Uma constante `τ` fixa tem dois modos de | |
| falha: se `τ` é alta demais, o sistema aprende que "qualquer coisa é boa" e | |
| contamina a memória com artefatos ruins; se baixa demais, nunca aprende. O | |
| percentil é **adaptativo ao deslocamento da distribuição** — se o encoder melhora, | |
| `e_sonho` diminui, e o percentil desce junto, mantendo a taxa de admissão | |
| estável. É controle de qualidade por distribuição, não por constante. | |
| **Teorema 6.3 (diversidade — por que entropia e não penalidade por índice).** | |
| *A grade SOM não tem ordem canônica: as células são simétricas por construção. | |
| Logo qualquer penalidade que dependa do **índice** da célula (ex.: "penalizar a | |
| célula 0") cria viés espúrio. A única recompensa invariante à permutação das | |
| células que é monotona no número de suporte efetivamente usado é a entropia de | |
| Shannon:* | |
| ``` | |
| p(c|y) = softmax(−‖f(y) − w_c‖² / 2τ); L_div = −H(p) / log C | |
| ``` | |
| **[VERIFICADO: `L_div` dá o mesmo valor (a 1e-8) sob 10 permutações aleatórias | |
| das células]** — a invariância exigida pela simetria da grade. | |
| ### 9.2 Fluxo | |
| ``` | |
| 1. gerar → gerador.texto_para_imagem(prompt, semente) | |
| 2. re-encodar → emb_sonho = modelo.enc_imagem(img) [gradiente DESLIGADO] | |
| 3. medir → e = smooth_l1(f̄(emb_ctx), f̄(emb_sonho)) | |
| 4. decidir → e < percentil(e_historico, q)? sim → escreve na memória SOM | |
| 5. telemetria → erro, limiar, taxa de admissão, drift da grade | |
| ``` | |
| **Regra de honestidade preservada:** sem `diffusers`, `passo_sonho` devolve | |
| `{"aceito": False, "motivo": "sem gerador (modo planejado)"}` e **conta como | |
| rejeitado**. Nunca pixels falsos, nunca memória poluída — consistente com a | |
| Teo 17.2 que o projeto já pratica. | |
| --- | |
| ## 10. Autopercepção ativa e autorecompensa — o que falta | |
| O requisito pede: *auto-percepção do ambiente e do resultado da ação, sendo | |
| autorecompensado para percepção positiva e punido para percepção negativa de | |
| erro/falha ao executar ativamente.* | |
| **Estado atual:** `raciocinio/ciclo.py` tem o loop PDCA correto, mas: | |
| | item | estado | problema | | |
| |---|---|---| | |
| | ciclo Planeja→Distribui→Executa→Feedback | ✅ existe | — | | |
| | limiar bayesiano de entrega | ✅ existe | `ciclo.py:130` | | |
| | endosso PAC-Bayes | ✅ existe | — | | |
| | **percepção do ambiente** | ❌ | `ciclo.py:145`: `entropia = 0.5 # proxy estável` — **hardcoded** | | |
| | **percepção do resultado da ação** | ❌ | só `p = 0.9` se a ferramenta não retornou erro | | |
| | **autorecompensa por sucesso** | ❌ | o `RPP` ajusta `lr` por `streak` de perda, não por sucesso da ação | | |
| | **punição por falha** | ⚠️ parcial | `ciclo.py:150` redireciona, mas não penaliza o modelo | | |
| O ponto mais grave: **`entropia_gate` é a constante 0.5**. O limiar | |
| `p_cal >= τ_efetiva AND entropia_gate <= limite` usa um valor que nunca responde | |
| ao estado real. O `feedback` decide sempre com a mesma segunda condição. | |
| **Proposta (TE —闭合 loop):** | |
| ```python | |
| # 1. PERCEPÇÃO DO AMBIENTE: usar o que já existe | |
| # a entropia da sonda está disponível em criterios.pyx:esforco_entropia_lote | |
| H_norm, margem, p_max = esforco_entropia_lote(logits_sonda) # H_norm ∈ [0,1] | |
| entropia_gate = float(H_norm.mean()) # real, não 0.5 | |
| # 2. PERCEPÇÃO DO RESULTADO DA AÇÃO: o que o mundo devolveu | |
| # a ferramenta retorna string; medir se responde à pergunta | |
| r = self.tools.executar(nome, entrada) | |
| coerencia = self._coerencia_resposta(pergunta, r) # 0..1 | |
| # usar a MESMA métrica de coerência de criterios_ganho.py:51 (bigramas) | |
| # 3. AUTORRECOMPENSA com sinal, e não com streAk de perda | |
| # sinal = Δ(métrica do objetivo) atribuível à ação | |
| sinal = (p_cal - p_cal_anterior) * coerencia | |
| if sinal > 0: # PERCEPÇÃO POSITIVA → recompensa | |
| self.hub.atributo("ciclo/recompensa", +1) | |
| self.modelo.reforcar(acao, sinal) # ← congela/reforça o gradiente | |
| elif erro_ferrou: # PERCEPÇÃO NEGATIVA → punição | |
| self.hub.atributo("ciclo/punicao", +1) | |
| self.modelo.punir(acao, |sinal|) # ← gradiente negativo no caminho | |
| ``` | |
| **A conexão com o JEPA (que é a parte interessante):** `reforcar`/`punir` não | |
| precisam ser novos módulos. A autorecompensa pode ser **direcionada pelo gradiente | |
| do predictor JEPA**: quando uma ação produz um resultado que o predictor **não | |
| consegue prever** (alto `e_sonho`), isso é evidência de erro → punição. Quando o | |
| predictor acerta, o caminho da ação recebe reforço. Isso é | |
| `error-driven learning` (Schmidhuber) conectado a um objetivo de representação, | |
| e usa a infraestrutura de `MotorJepa` já proposta. | |
| --- | |
| ## 11. Tabela de correções | |
| | # | arquivo:linha | defeito | gravidade | correção | status v15.1 | | |
| |---|---|---|---|---|---| | |
| | 1 | `criterios.pyx` vs `gsq_rco.py` | equações divergem | **crítico** | `correcoes.py::lambda_c_unica` | ✅ `gsq_rco.py::lambda_c_autoajustavel` (equivalência 206/206) | | |
| | 2 | `gsq_rco.py:790` | custo de bits incoerente | **crítico** | `correcoes.py::j_rate_distortion` | ✅ `custo_bits_codigo` + `ajustar_k_tau_min(d_real=…)` | | |
| | 3 | `criterios.pyx:200`, `som_base.py` | TE mede geometria | **alto** | `correcoes.py::te_consistencia_temporal` | ✅ QE + TE temporal em `correcoes.py` (monotono na deriva) | | |
| | 4 | `fusao.py:57` | gate = parâmetro morto | **alto** | `correcoes.py::fusao_gated` | ✅ `fusao.py` com kv·g, g=2·sigmoid (nasce neutro, grad vivo) | | |
| | 5 | `roteador_ssom.py:150` | "cota" não é cota | **alto** | `correcoes.py::vies_roteador_log` | ✅ viés multiplicativo ν≤λ_rota, consumidores em `moe.py` adaptados | | |
| | 6 | `difusao.py:349` | sonho sem sinal de erro | **alto** | `jepa_mundo.py::MotorSonho` | ✅ hook `motor_sonho` em `compreensao_geracional` (admissão condiciona a memória) | | |
| | 7 | `difusao.py:113` | prior de intenção inócuo | médio | usar `escores` no `argmax` | ✅ telemetria viva (partição dura preservada — Teo 25.8 correta) | | |
| | 8 | `modelo.py:836` | `emb_plano` sempre `None` | médio | computar do plano textual | ✅ já aplicado na v12 (emb_plano REAL, Teo 17.1) | | |
| | 9 | `ciclo.py:145` | `entropia = 0.5` hardcoded | **alto** | usar `esforco_entropia_lote` | ✅ sonda real H/log V do modelo; falha ⟹ None explícito (nunca constante) | | |
| | 10 | `ciclo.py:150` | sem autorrecompensa | **alto** | §10 | ✅ sinal = Δp·coerência com traço + hub (recompensa/punição) | | |
| | 11 | todo o pacote | **sem JEPA** | **crítico** | `jepa.py::MotorJepa` | ✅ `src/khtst/treino/jepa.py` + wiring no `TreinadorExtensao` (λ_jepa>0) | | |
| --- | |
| ## 12. Ordem sugerida de implementação | |
| 1. **Unificar a equação de λ_c** (defeito 1) — é a novidade declarada e hoje não | |
| funciona no caminho de produção. Escrever teste de equivalência `.pyx` ≡ `.py`. | |
| 2. **Corrigir o modelo de custo** (defeito 2) — invalida o resultado do passo 1. | |
| 3. **JEPA** (`jepa.py`) — adiciona o que o projeto declara fazer e não faz. | |
| Começar com `lam_jepa` pequeno (0.1) e `d_latente` modesto (32), A/B contra | |
| a v15 atual pelo mesmo protocolo do README (mesmo corpus, mesmo número de | |
| updates efetivo). | |
| 4. **Gate de fusão** (defeito 4) — correção de 10 linhas,-zero risco, destrava | |
| 6 parâmetros (+0.03% de params) que hoje são inúteis. | |
| 5. **TE correto** (defeito 3) — antes de usar `te` como critério de ganho. | |
| 6. **Motor de sonho** (`jepa_mundo.py`) — depois de 3, porque depende do sinal. | |
| 7. **Autopercepção ativa** (§10) — `entropia_gate` real primeiro (mudança de uma | |
| linha), depois a autorrecompensa. | |
| **Métrica de sucesso proposta** (honesta, sem constante mágica): | |
| ``` | |
| Δppl por 1000 passos (a cada 1000 passos) | |
| ‖QᵀQ − I‖_F das matrizes Stiefel (deve permanecer ~ε) | |
| d Taxa de células SOM efetivamente usadas (subir = memória viva) | |
| perda JEPA (descer = representação aprendendo) | |
| e_sonho e sua taxa de admissão (estabilidade = sonho calibrado) | |
| ``` | |
| Todos já são computáveis com a infraestrutura existente mais `jepa.py`. | |
| --- | |
| ## 13. Nota final sobre o que **não** afirmo | |
| - Não rodei o treino. As conclusões sobre convergência são **conjecturais** e | |
| precisam do A/B de 9 h do protocolo do README. | |
| - As correções foram testadas como **funções isoladas**, não integradas ao | |
| `KHTSTModel` completo (que exige `torch` + datasets). | |
| - O `percepcao_conjunta` está `ativo: False` em `configs/base.json` e não foi | |
| exercitado. | |
| - A divergência λ_c (defeito 1) assume que o `.pyx` **é** o caminho de produção. | |
| Se o runtime cair para o `.py` por falha de build, a divergência é inócua — | |
| mas então o ganho de velocidade do Cython desaparece, e o README reporta | |
| o `.pyx` como o caminho rápido. | |
| - `[PROVADO]` = executado neste sandbox, output reproduzido em | |
| `verificacao/`. Ausência de marcador = leitura de código. | |
| --- | |
| ## 14. v15.1 — Auditoria de segunda ordem: corrigir as correções | |
| A camada de correções (patches) e a integração na produção foram elas mesmas | |
| auditadas — com o mesmo rigor da Seção 2–7. **Sete defeitos novos foram | |
| provados e corrigidos.** Moral do capítulo: correção sem verificação é só | |
| outro rascunho. | |
| ### 14.1 Os 7 defeitos de segunda ordem [TODOS PROVADOS e CORRIGIDOS] | |
| | # | onde | defeito | prova | correção | | |
| |---|---|---|---|---| | |
| | S1 | `jepa_mundo.py::passo_sonho` | **Admissão INVERTIDA no aquecimento**: `e >= limiar()=+inf` é FALSO ⟹ TODOS os sonhos eram ACEITOS antes de `min_amostras` — o oposto do Teorema 6.1 declarado (a própria Seção 9.1 reportava "86,7% de admissão", inconsistente com "nada é aceito") | execução: 60 sonhos no aquecimento ⟹ aceitos 100% | bloqueio EXPLÍCITO de aquecimento (`len(erros) < min_amostras ⟹ rejeita`); Teo 6.1 agora vale na forma exata | | |
| | S2 | `jepa_mundo.py::limiar` | O "quantil" era a **média dos maiores ⌈q·n⌉ erros** — situa-se acima do quantil q (taxa de admissão ≈86% com q=0.6) | `limiar(q=0.6)` ≠ `np.quantile(erros, 0.6)`; admissão 0.537 vs 0.86 antiga | quantil EXATO por interpolação linear; taxa estacionária ≈ q **[VERIFICADO: 0.537 ≈ 0.6]** | | |
| | S3 | `jepa_mundo.py::passo_sonho` | Sonho SEM contexto entrava com `e=0` (auto-comparação) e **peso 1.0 na memória** — poluição gratuita do SOM | caminho `emb_contexto=None` aceito com peso máximo | sem sinal de erro ⟹ medido, contabilizado, NÃO admitido (relatório §7.1-iii) | | |
| | S4 | `jepa.py::taxa_sucesso_media` | **Placeholder 0.5** — a tabela de μ (Teo 5.6) nunca se adaptava; `historico` sem teto (fuga de RAM em treino de 9 h) | leitura + execução: μ constante 0.9999 | deque com teto (`janela_telemetria`); taxa REAL alimenta `tabela_mu`; **[VERIFICADO: μ=0.9997 com taxa 0.023]** | | |
| | S5 | `jepa.py::mascara_contexto` + `EncoderAlvoEMA` | Parâmetros órfãos: `tau` recebido e ignorado (horizonte era ficção); `warmup` morto (rampa não existia) | leitura: `tau` não aparece no corpo | `eps ∈ {τ..τ+eps_max}` (horizonte ≥ τ, Teo 5.4-b); rampa μ_t = μ·t/warmup **[VERIFICADO: μ(1)=μ/warmup]** | | |
| | S6 | `jepa.py::FunilLatente` | **VOG com lote 1 ⟹ NaN**: `std(dim=0)` com ddof=1 divide por zero | `FunilLatente(16,8)(torch.randn(1,T,16))` ⟹ ‖∇‖=NaN (warning do PyTorch) | `correction=0` (desvio populacional) + piso 1e-4; **[VERIFICADO: ‖∇funil‖=7.1e-01]** | | |
| | S7 | `verificar_tudo.py` §5 (original) | Teste **insatisfazível**: exigia gradiente em modalidades AUSENTES (sem entrada não há caminho no grafo — impossível sem acoplar logits via softmax global, o que quebraria o nascimento neutro) | construção | check corrigido: zero parâmetros mortos ENTRE AS PRESENTES; ausentes com grad None é o CORRETO | | |
| ### 14.2 A equação de λ_c, agora ÚNICA (defeito 1 fechado) | |
| `patches/correcoes.py::lambda_c_unica` ≡ `src/khtst/quanta/gsq_rco.py::lambda_c_autoajustavel` | |
| — mesma busca de candidatos no intervalo vazio, mesmo custo rate–distortion. | |
| **Equivalência: 206/206 espectros idênticos** (6 nominais + 200 sintéticos: | |
| lei de potência, exponenciais, Dirichlet, ruído). | |
| Valores no espectro liso (onde o `.pyx` antigo devolvia a constante 0.05): | |
| | espectro | `.pyx` antigo | v15.1 (equação única) | | |
| |---|---|---| | |
| | `1/k^1.2`, d=32 | 0.0500 (trilho) | **0.4200** | | |
| | `1+0.001k`, d=32 | 0.0500 (trilho) | **0.4979** | | |
| | Dirichlet(64), d_real=192 | 0.0500 (trilho) | **0.5860** (ancorado, K̃=12) | | |
| Propriedades do Teorema verificadas sob o custo RAM: φ∈(0,1); K*(λ) | |
| não-crescente; K*(0⁺)=d e K*(1⁻)=1 **no limite** (com cauda quase-nula, K*=d | |
| vale só em λ→0 — a prova do endpoint é por limite, não por λ=0.02: J(K<d)<J(d) | |
| quando ε²(K) < λ·b̂(d)/(1−λ)); ancorado ⟹ K̃ atinge min J_λ* (tolerância 1e-9 | |
| para empates de fronteira). | |
| ### 14.3 Rate–distortion em números (defeito 2 fechado) | |
| Custo corrigido: `c(K) = log₂K + K·d_real·bits_por_param/n_amostras` bits | |
| (código de entropia + codebook amortizado) — sem denominador `log₂d`. | |
| Mesmo K=4: 2.5 bits (d=8) → 258 bits (d=4096); o modelo antigo dizia | |
| 0.667→0.167 (invertia a direção do custo real). | |
| Espectro Dirichlet(64), varredura K sob custo RAM explícito: | |
| | d_real | K* | custo RAM (params) | bits totais | ε²(K*) | | |
| |---|---|---|---|---| | |
| | 64 | 23 | 1.472 | 27,5 | 0,233 | | |
| | 512 | 21 | 10.752 | 172,4 | 0,264 | | |
| | 4096 | 21 | 86.016 | 1.348,4 | 0,264 | | |
| **K* não-cresce com d** (23→21→21) — o critério agora reage à dimensão na | |
| direção certa: codebook maior ⟹ K* menor ou igual, nunca o contrário. | |
| ### 14.4 Gate de fusão vivo — e por que 2·sigmoid (defeito 4 fechado) | |
| `g_m = 2·sigmoid(ℓ_m)`, `kv_m = proj_m(emb_m)·g_m`, residual `+ancora·g_ancora`: | |
| • **nascimento neutro**: ℓ=0 ⟹ g=1 ⟹ saída bit-a-bit idêntica à fusão sem | |
| gate **[VERIFICADO: Δ=0.00e+00 contra a referência sem gate]**; | |
| • **gradiente vivo com 1 modalidade**: softmax de 1 elemento teria gradiente | |
| IDENTICAMENTE nulo (softmax([x])≡1) — sigmoid não **[VERIFICADO: 4/4 casos | |
| (1,2,3,6 modalidades) sem parâmetros mortos presentes; gate move 0.4274 em | |
| 200 passos SGD(5.0)]**; | |
| • modalidades ausentes: grad None é o correto (sem caminho no grafo) — | |
| acoplá-las via softmax global violaria o nascimento neutro. | |
| ### 14.5 Viés multiplicativo do roteador (defeito 5 fechado) | |
| `ν = λ_rota·max(0, log(n·conf)/log n)²`, aplicado como `s·(1+ν)` com identidade | |
| neutra 1.0. **[VERIFICADO]**: ν(1/C)=0; ν(conf<1/C)=0; ν(1)=λ_rota; monotono; | |
| consumidores (`moe.py` ×2) migrados de `s+viés` para `s·viés` — o teste v6 | |
| (Teo 18.1/18.2/18.6) foi atualizado para a semântica multiplicativa (48 ✓). | |
| ### 14.6 Integração no treinador — 3 bugs de integração achados pelo smoke | |
| O requisito "descobrir falhas de integração com dados reais" produziu o | |
| `scripts/18_smoke_v15.py`, que pegou o que as suítes unitárias não veem: | |
| | bug | sintoma | causa | correção | | |
| |---|---|---|---| | |
| | I1 | `drift_alvo = 0.0000` — o alvo EMA nunca se move | motor JEPA construído DEPOIS do otimizador ⟹ funil+predictor fora dos param_groups | construção do motor ANTES do otimizador + `extra_adam` na fábrica MuonClip | | |
| | I2 | gradiente do caminho JEPA descartado silenciosamente | `pcgrad_duas_perdas(self.modelo, …)` só via parâmetros do modelo | lista de params inclui `motor_jepa.parameters()` | | |
| | I3 | alvo EMA poderia enxergar encoder já atualizado | `passo_pos_backward` sensível ao relógio de acumulação | executado APENAS no micro-lote final (mesmo relógio do `step`) | | |
| **[VERIFICADO pós-correção]**: 3 passos reais com `λ_jepa=0.5` — perda finita, | |
| `drift=0.0061>0`, μ=0.9999 seguindo a taxa real, telemetria `jepa/*` viva; | |
| com `λ_jepa=0` nenhum parâmetro novo (nascimento neutro). | |
| ### 14.7 JEPA em números (após todas as correções) | |
| encoder sintético (6,12,16), 500 passos AdamW(1e-3), seed 2026 (determinístico): | |
| | passo | perda | var. latente | taxa sucesso | μ | | |
| |---|---|---|---|---| | |
| | 0 | 4,525 | 0,97 | — | — | | |
| | 499 | **2,295 (−49,3%)** | 0,93 | 0,023 (REAL) | 0,9997 | | |
| Sem colapso (var O(1)); telemetria com teto (500 passos ⟹ janelas=100). | |
| Ciclo: sonda de entropia real H/log V = 0,996 sobre entrada real (nunca 0,5); | |
| autorrecompensa Δp·coerência registrada no traço e no hub. | |
| ### 14.8 Verificação final consolidada | |
| | camada | resultado | | |
| |---|---| | |
| | `patches/verificar_tudo.py` (9 seções) | **49 ✓ / 0 ✗** — 3 execuções determinísticas | | |
| | equivalência λ_c produção ≡ verificação | 206/206 espectros + hash SHA-256 igual | | |
| | suítes do repo (v1–v14) | **todas verdes**: 25, 36, 37 ✓ (v1–v4); 32 ✓ (v5); 48 ✓ (v6); 44 ✓ (v7); 21 ✓ (v9); OK (v10); ✓ (v11); 28 ✓ (v12); 27 ✓ (v13); 40/40 ✓ (v14, T27.6 atualizado ao custo corrigido) | | |
| | smoke de integração (`scripts/18`) | **13 ✓ / 0 ✗** (3 bugs de integração I1–I3 pegos aqui) | | |
| | teste com DADOS REAIS (`scripts/10`) | **APROVADO** — 32 registros reais de 5 famílias, 3 passos com perda estável, classificador de protótipos acc 1,00 (uniforme 0,083), DPO com 12 pares reais hh-rlhf (acc 0,75), estado 81,3 MB < 900 MB reload bit-exato | | |
| ### 14.9 O que NÃO afirmo nesta versão | |
| - A corrida longa de 9 h continua pendente — as projeções de ganho JEPA | |
| (Δppl/1000 passos) seguem conjecturais até o A/B. | |
| - `perda_sonho_treino` (L_sonho com gradiente) está implementada e verificada | |
| isoladamente; o gancho no laço de treino completo exige difusão real | |
| (diffusers) e fica para a corrida longa. | |
| - A autorrecompensa é TELEMETRIA DE SINAL (traço + hub) — a injeção de | |
| gradiente por reforço no caminho da ação (§10) permanece proposta. | |
| - O caminho Cython (`.pyx`) de `criterios` deve espelhar `lambda_c_unica` na | |
| próxima compilação — hoje a produção Python já usa a equação única, e o | |
| teste de equivalência (206 espectros + SHA-256) travará qualquer divergência | |
| futura. | |
| ## 15. v16 — KHMAMBAJEPA: torchao real · MC-JEPA Cython · autorregulação total · robô+matemática | |
| A v16 empilha a camada JEPA de larga cobertura sobre o v15.1, com o | |
| requisito "priorizar Cython", quantização torchao REAL com detecção | |
| automática CPU/GPU e a autorregulação de TODO parâmetro no treino E na | |
| inferência. Provas completas em `docs/matematica/28`; plano/memória em | |
| `PLANO_KHMAMBAJEPA.md`. | |
| ### 15.1 Descobertas e provas novas (doc 28) | |
| | # | achado | prova | verificação | | |
| |---|---|---|---| | |
| | T28.1 | cota do erro de quantização uniforme: RMS ≤ h/√12 (por canal, b bits) | momento central da uniforme no bin | medido 3.9e-3 ≤ teórico 3.9e-3 | | |
| | T28.2 | peso torchao é CONSTANTE (inferência-only) | subclass Int8Tensor sem gradiente | compressão 3.92× (78.8→10.1 MB de peso) | | |
| | T28.3 | exclusões obrigatórias: lm_head (sensibilidade exponencial da softmax), especialistas MoE (`torch.stack` não implementado no subclass — descoberto PELA suíte), camadas finas (erro relativo dominante) | Weyl multiplicativa + despacho ausente | forward pós-quant OK; quantizar MoE reproduzia a falha | | |
| | T28.4 | rollback atômico FP32 | cota superior (erro 0) | dim_minimo=99999 ⟹ FP32 intacto | | |
| | T28.9 | gradiente ANALÍTICO do VICReg (o rascunho calculava a perda SEM gradiente): variância com CANCELAMENTO EXATO do centro (Σ centrado = 0); covariância na forma fechada (X̃C)−C_bb·X̃ com projeção de centro NÃO cancelável | eqs. 28.12–28.14 | FD sem-kink 4.2e-11; ≡ autograd torch 9.6e-9; **o fator ½ que duas verificações inconsistentes mascararam foi EXPOSTO pelo FD e corrigido** | | |
| | T28.10 | guarda anti-colapso do passo Brain-JEPA (o rascunho treinava colapsado): φ = frac{σ_j < 0.1γ} > 0.5 ⟹ REJEITA | colapso total é ponto fixo ruim de L_inv | φ=1.0 rejeita; treino real: colapso 0.0 | | |
| | T28.5–28.7 | autorregulação Robbins–Monro MULTIPLICATIVA (log-escala): Σa=∞, Σa²<∞ ⟹ convergência q.c.; duas escalas (Borkar); sinais lr (progresso padronizado), λ (razão aux ≤ ½), MoE (entropia das frações) | RM/Ljapunov + Hedge | convergência 0.9978 no campo 1−x; treino real demo: λ_moe_lb 1.00→1.74, lr 1.00→1.04 | | |
| | T28.8 | temperatura de inferência por ENTROPIA-ALVO: H(T) monótona (dH/dT = Var_p(z)/T²), raiz única, bisseção contrátil (erro ≤ (T_max−T_min)/2^k) | doc 21 Teo 21.4 | H(T_cal)=5.0045 (alvo 5.0); integrada em `gerar(temperatura_auto=)` | | |
| | T28.8-b/c | matemática com resposta canônica = sinal de erro ZERO (verificável); instrução do LeRobot é REAL (meta/tasks.parquet — fetchman: 902 instruções) | igualdade canônica | 240 registros de matemática + 43 de robô coletados de verdade | | |
| ### 15.2 Tarefas canônicas 12 → 14 (Teo 22.1 preservada) | |
| `robo` (grupo visual — câmeras LeRobot) e `matematica` (grupo textual) | |
| entram pela FONTE ÚNICA; `n_intencoes = len(TAREFAS)+1 = 15` dinâmico; | |
| prefixos `[robo]`/`[math]` no BPE; mistura renormalizada. As suítes | |
| v11/v12 que hardcodavam "12" foram migradas para `len(TAREFAS)`. | |
| ### 15.3 Datasets v16 (coleta REAL, orçamento honesto) | |
| 283 registros novos (corpus merge 903): fetchman 40 · gsm8k 40 · | |
| MATH-500 40 · hendrycks álgebra 40 · hendrycks number_theory 40 · | |
| OpenR1 40 · IFM 40 · robô com frame 3. **Degradados documentados**: | |
| `heatherwhite/math-collection` (só metadata_sample.jsonl — dados reais | |
| fora do Hub) e `3DTopia/4DNeX-10M` (tar.gz ~680 MB, gzip não amostrável | |
| por HTTP Range). Frames de câmera: ≤4 mp4/fonte com HEAD prévio; meta | |
| documenta quando o frame não veio — NUNCA imagem inventada. Defeito de | |
| integração achado no smoke: `trust_remote_code` foi REMOVIDO do | |
| datasets 5.x (o caminho antigo falhava imediatamente) — dispatcher | |
| corrigido. | |
| ### 15.4 A/B pareado real (120 passos, corpus 903, lote 4) | |
| | variante | perda início → fim | melhoria | held-out | observações | | |
| |---|---|---|---|---| | |
| | baseline v15 | 9.769 → 5.395 | **1.811×** | 6.697 | v15.1 exato | | |
| | v16 JEPA+VICReg(0.3)+autorreg | 9.713 → 6.679 | 1.454× | — | razão aux 0.8 VIOLA Teo 28.7-ii | | |
| | v16 JEPA+VICReg(0.1)+autorreg | 9.724 → 7.501 | 1.296× | 7.420 | razão aux 0.27 ✓ cumpre a cota | | |
| **Leitura honesta:** o baseline converge mais rápido em CE; a própria | |
| teoria explica (PCGrad com termo auxiliar dominante) e prescreve o | |
| ajuste (λ≤0.1). O que a v16 compra: representação sem colapso | |
| (var_latente 0.70), **torchao com Δperda 0.000** (int8 REAL 3.92× sem | |
| perda medível), autorregulação viva nos dois regimes, kernel Cython | |
| verificado, 14 tarefas com sinal verificável. Comparação definitiva de | |
| CE: corrida de 9 h (protocolo do README). | |
| ### 15.5 Estados e higienização | |
| Estados de treino ANTERIORES: nenhum no Hub (209 arquivos, zero | |
| .safetensors/.pt/.ckpt) nem no ambiente (busca ampla) — auditoria | |
| re-executada nesta versão. Checkpoints intermediários da coleta v16 | |
| (`ckpt_v16_*.pt`) APAGADOS após uso. Token: exclusivamente variável de | |
| ambiente; grep do padrão `hf_[A-Za-z0-9]{30,}` no stage = 0 ocorrências. | |
| ## 16. v17 — Pacote de aprimoramento: auditoria dos 6 módulos, 14 defeitos provados (D1–D14) e autorregulação HÍBRIDA (RM+PI+bisseção) com tabela de 18 sinais | |
| ### 16.1 Escopo e método | |
| Rodada de auditoria de lógica, integração e matemática dos 6 módulos | |
| submetidos (`difusao_gradiente`, `metricas_qe_ct`, `lambda_c_unificado`, | |
| `tradeoff_k`, `jepa`, `config`). Método: auditoria de 1ª ordem (o que o | |
| código faz) + de 2ª ordem (o que o docstring PROMETE vs o que o código | |
| FAZ) + prova de correção de cada defeito + suíte executável | |
| (`tests/test_khtst_v17.py`, 56 verificações). Tudo em pacote NOVO | |
| `src/khtst/aprimoramento/` — nenhum módulo de produção foi tocado | |
| (zero regressões: v1–v16 todas verdes). | |
| ### 16.2 Defeitos catalogados e corrigidos (doc 29 §§1–6, Teos 29.1–29.13) | |
| | # | defeito | correção | prova | | |
| |---|---|---|---| | |
| | D1 | difusão: λ_diff sem grad + controlador nunca chamado + perda sem λ — "autoajuste" triplo código morto | hipergradiente EXATO (L afim em λ ⟹ ∂L/∂λ = L_diff, erro ZERO) + âncora ρ(λ−λ₀)² com ótimo interior λ*=λ₀−L_diff/2ρ | Teo 29.2 | | |
| | D2 | sem EMA de pesos (amostragem ruidosa) | EMA Polyak opt-in (Jensen: L(θ̄) ≤ média L(θ_t)) | Teo 29.3 | | |
| | D3 | CT somava ‖Δz‖² sobre (B·D) — incomparável entre configs | CT por COORDENADA (÷B·D); invariância por isometria provada | Teo 29.4 | | |
| | D4 | ganho por conjunção de limiares fixos — sem nível de teste | Student-t + Bonferroni (P(falso ganho) ≤ α; medido 0/60) | Teo 29.5 | | |
| | D5 | te_antigo O(N·G) | cKDTree O(N·log G), ≡ força bruta (100 grades) | Teo 29.6 | | |
| | D6 | média da janela COMPUTADA E JOGADA FORA (delta usava ε² instantâneo) | sinal suavizado vivo (Var ÷W, sem viés) + modo reversão | Teo 29.7-i | | |
| | D7 | passo η constante — convergência só a O(η) | agenda η_t=η₀/(1+t/τ) — Ση=∞, Ση²<∞ ⟹ q.c. | Teo 29.7-ii | | |
| | D8 | C=1 fixo no modelo de Zador | Ĉ por OLS log-log + teste do modelo (inclinação) + shrinkage | Teo 29.8 | | |
| | D9 | λ_c estático (não conversava com o controlador) | resolver_K aceita λ_c adaptativo | integração | | |
| | D10 | condicional com dois ramos idênticos | stop-gradient único explícito | inspeção | | |
| | D11 | variância POOLADA sobre (T,D) — colapso parcial invisível | hinge POR DIMENSÃO (Jensen + lei da variância total ⟹ per-dim ≥ poolado sempre) | Teo 29.10 | | |
| | D12 | truncamento de comprimento (descarta energia) | pooling adaptativo (contração ‖Pz‖ ≤ ‖z‖/√r) | Teo 29.11 | | |
| | D13 | λ_jepa do config nunca usado; 0.01 hard-coded | L = λ_jepa·MSE + peso_var·hinge — campos vivos | Teos 29.10/29.13 | | |
| | D14 | QECTConfig.normalizar e DifusaoConfig.eta_lambda mortos | wired (QE relativo; passo do EG) | Teo 29.4/29.2 | | |
| Honestidades de processo desta rodada: (a) a primeira versão da prova | |
| do Teo 29.5 usava o range OBSERVADO no Hoeffding — inválido (o raio | |
| subestimado quebra a cota); corrigida para Student-t (TCL) com | |
| Hoeffding opcional sob raio DECLARADO; (b) o Teo 29.13 foi refinado: no | |
| ponto EXATO de colapso há kink (o autograd pode dar 0) — a verdade é | |
| que o colapso é MÁXIMO do hinge (não mínimo local), e a produção empurra | |
| a direção explicitamente; (c) a PRIMEIRA implementação do | |
| ControladorHibrido fazia DUPLA integração do termo I — a suíte prendeu | |
| (setpoint não convergia) e a recursão foi corrigida para a forma do doc | |
| 29, com convergência EXATA medida (θ=0.6000, e∞=0.0000). | |
| ### 16.3 Autorregulação híbrida — a arquitetura (doc 29 §§7–9, Teos 29.14–29.16) | |
| Recursão única para todo parâmetro regulável: | |
| `u_{t+1} = Π[u_t + a_t·s_t + b·e_t + c·Δe_t]`, θ=θ₀·e^u, a_t=a₀/(1+t/τ). | |
| Provas: telescoping do D (Σc·Δe = c·(e_T−e₀) — limitada por 2c·sup|e| | |
| para TODO T); permanência no conjunto seguro por projeção (com clamp | |
| final — exp(log b) arredonda a b+ε); duas escalas de Borkar (PI rápido | |
| rastreia, RM lento converge); anti-windup direcional. τ_qk: banda | |
| [80,120] com semântica PÓS-CLIP (ℓ=min(ℓ_nat,τ)) — modo escala exata | |
| (Teo 24.7: linearidade do logit) e modo bisseção com erro ≤ | |
| (τmax−τmin)/2^k. Tabela de 18 parâmetros (AdamW β₁/β₂/ε/wd · Muon | |
| momentum/escala/τ_qk · PRS η_up/η_down/T_ciclo/decay_piso/percentil · | |
| PESO_MOE · PESO_SOM · ABMO · CIAR · crescimento ×2) com nascimento | |
| neutro (centros = constantes v16), sinais adimensionais ±1, limites | |
| seguros com permanência EXATA, TelemetryHub 100% (35 chaves) e | |
| adaptadores aplicados e verificados no MuonClipAdamW REAL e no PRS. | |
| ### 16.4 Verificação | |
| - Suíte v17: 56✓ (hipergradiente, λ* analítico≡numérico, EG converge, | |
| Polyak, invariâncias QE/CT, nível do teste 0/60, KDTree≡bruta 100/100, | |
| fast≡ref 10⁴, D6 regressão, Ση/Ση², Ĉ+p̂+shrinkage, unimodalidade 20k, | |
| K* fechado≡numérico ≤1%, elasticidade d/2, Jensen 1000 espectros, | |
| contração do pooling, EMA cosseno monótona, máximo do colapso, fuga | |
| ×30, telescoping exato, anti-windup 500 adversos, setpoint e∞=0, | |
| τ banda, 18 controladores neutros→limites exatos, β₁≤β₂ pelo | |
| adaptador, hub 35 chaves, passo do otimizador real bem definido, | |
| PRS 5 campos). | |
| - verificar_tudo: 49✓ · Regressão v1–v16: TODAS verdes | |
| (25/36/45/37/33/49/45/✓/22/49/68/29/28/40/—/53) · smoke18: 13✓. | |
| ## 17. v18 — Robustez (§1–3 do requisito), IPC Modelo→Modelo (Rust/Cython) e família JEPA + SonicMoE + ReplaySSM | |
| **Entrada**: requisito v18 — falhas remanescentes (1.1.1–1.1.5), aprimoramentos | |
| matemáticos (2.1–2.5), melhorias lógicas (3.1–3.4), módulo de comunicação | |
| Modelo→Modelo em Rust/Cython, família JEPA (10 variantes) + SonicMoE + | |
| ReplaySSM em hardware chinês/CPU, plano Markdown com provas e memória .md. | |
| **Robustez (doc 30 §§1–2, Teos 30.1–30.6):** | |
| - **30.1/3.1** — guarda de ordem EMA do JEPA: contador `_passos_sem_ema` | |
| (tolerância = lote efetivo) lança `RuntimeError` quando | |
| `passo_pos_backward()` não segue o `optimizer.step()`; implementado no | |
| `MotorJepa` (produção) e no `JEPA` v17 (forwards com gradiente apenas — | |
| avaliação sob `no_grad` não conta). Viés provado: O((1−m)·η·G) por passo. | |
| - **30.2/2.4/1.1.5** — kernel Mamba-3 com clamps δ∈[1e-6,1−1e-6], A≤−1e-6 | |
| (contração SEMPRE; identidade na região válida ⟹ gradiente autograd | |
| intacto) + `verificar_estabilidade` para telemetria de anomalias. | |
| - **30.3/2.3/1.1.4** — `NormalizadorPerdas` (EMA por chave, fator = | |
| clip(EMA_CE/EMA_aux, 0.1, 1.0), warmup 20, nascimento neutro) aplicado a | |
| TODAS as 8 auxiliares antes do PCGrad — cota de dominação ≤ 10× (prova | |
| com ‖h′‖ ≥ ‖h‖·sinθ). | |
| - **30.4/2.2** — Newton-Schulz com precisão adaptativa: fp32 quando | |
| ‖G‖_F < 1e-3 (erro angular cai ~3.3e4×), bf16 preservado caso geral. | |
| - **30.5/2.1/1.1.2** — `weight_decay_muon=1e-4` desacoplado (shrink | |
| multiplicativo comuta com a decomposição polar; controla ‖W‖_* sem | |
| lutar com a ortogonalização). | |
| - **30.6/2.5** — GSQ τ_min 0.25→0.5 (Jacobian ≤ 1/(4τ) ≤ 0.5 — 2^L menos | |
| amplificação em L camadas), t_alvo 600→400 (T_τ = 400/ln30 ≈ 117.6); | |
| fonte única de constantes (`TAU_MIN_PADRAO`/`T_ALVO_PADRAO`) propagada | |
| aos 3 pontos de chamada. | |
| **Lógica (doc 30 §§0/3, Teos 30.7–30.8, requisito §3.2–3.4):** | |
| - **30.7/3.3** — `nucleo/validacao.py`: `validar_config` + `exigir_config_valida` | |
| (pré-condições dos teoremas a montante; aborta ANTES do treino; chamada | |
| na 1ª linha do `TreinadorExtensao.__init__`). | |
| - **30.8/3.4** — `telemetria/log_estruturado.py`: níveis DEBUG/INFO/WARNING/ | |
| ERROR em JSONL, rotação por tamanho (5 MB × 3 backups, custo amortizado | |
| O(1)), eco de WARNING/ERROR no stderr; hub integrado (histórico `deque` | |
| limitado — vazamento de memória eliminado; NaN/Inf → `hub.alerta`; | |
| QK-clip e colapso latente viram WARNING). | |
| - **1.1.3/3.2** — treinador refatorado: 4 mixins (lr/perdas/estado/fases) | |
| com métodos movidos VERBATIM + facade `TreinadorExtensao` (API pública | |
| intacta; 92 KB → 66 KB + 4 módulos focais). Regressão v1–v17 TODA VERDE | |
| após o movimento (evidência de preservação comportamental). | |
| **IPC Modelo→Modelo (doc 30 §4, Teos 30.9–30.10, requisito):** | |
| - Crate Rust completo (`src/khtst/ipc/rust/`: memfd selável, RingBytes | |
| SPSC, io_uring, socket SCM_RIGHTS, framing, FFI cbindgen) — código do | |
| usuário preservado e organizado em crate. | |
| - Produção em Cython (`khtst_ipc.pyx`, compila SEM cargo): memfd + | |
| seals, ring SPSC com atomics C11/GCC (`__atomic_*`, acquire/release — | |
| mesmo contrato de memória do Rust), layout binário idêntico (header | |
| 64 B, magic 0x4B485453); fallback puro-Python honesto; framing Python | |
| (header 24 B "<IBBHQII" + CRC32). | |
| - **Bug de integração capturado**: ring SPSC não é bidirecional — a 1ª | |
| demo com UM ring fazia o filho consumir os próprios pedidos (servidor | |
| via 0 frames). Correção: DOIS canais (um por direção) — regra R18.4. | |
| - Demo APROVADA (`scripts/21_teste_ipc.py`): 2 processos, SCM_RIGHTS, | |
| 64 pedidos ecoados com verificação byte a byte, 0 descartes, | |
| CRC32 rejeita corrupção. | |
| **Família JEPA + SonicMoE + ReplaySSM (doc 30 §5, Teos 30.11–30.15):** | |
| - `jepa_familia/` — 10 variantes (Image, V-JEPA2, MC, Audio, Point, 3D, | |
| Brain, T, Le, BJEPA) com EMA + guarda de ordem + anti-colapso por | |
| dimensão; `ConselhoJepas` multimodal com gating renormalizado e | |
| nascimento neutro; treino ponta a ponta 10 modalidades (L 1.19→0.82 | |
| em 5 passos de teste). | |
| - `sonicmoe.py` — dispatch agrupado por expert + tiles + int8 opcional + | |
| telemetria IO (medido: 64× menos bytes de pesos que o ingênuo no teste). | |
| - `replayssm.py` — reservoir de estados com re-injeção h₀ + drift; | |
| uniformidade do reservoir verificada por Monte-Carlo (600 simulações); | |
| h₀=0 ≡ kernel padrão (allclose 1e-6). | |
| - `dispositivo.py` — NPU Ascend / MLU Cambricon / XPU / CUDA / MPS / CPU | |
| com prioridade para hardware chinês e degradação honesta (Teo 30.15). | |
| **Verificação**: suíte v18 NOVA — **46/46 verdes** (doc 30 citado em cada | |
| verificação); regressão v1–v17 TODA VERDE (25/36/✓/37/32/48/44/21/✓/✓/28/ | |
| 27/40/—/✓/56); demo IPC 2 processos aprovada. | |
| ## 18. v19 — Acoplamento JEPA↔encoders de produção (A/B pareado) + SonicMoE no tronco (opt-in) + datasets reais | |
| **Entrada**: requisito v19 — "acoplar as variantes JEPA aos encoders de | |
| produção com A/B pareado; ativar SonicMoE no tronco (opt-in) e rodar testes | |
| de datasets reais para averiguar funcionalidades". Fonte: doc 31 (Teos | |
| 31.1–31.7 + regras R19.1–R19.8). | |
| **Acoplamento JEPA↔encoders de produção (doc 31 §§1–3, Teos 31.1–31.3):** | |
| - `jepa_familia/acoplamento.py` (NOVO): vistas de tokens `VistaTokensImagem/ | |
| Audio/Video` que chamam os MÓDULOS do encoder de produção SEM cópia | |
| (proj/pos/cls/blocos/bigru/norm; log-mel/convs; CLS por frame) — | |
| **Teo 31.2**: o gradiente JEPA é a regra da cadeia EXATA sobre os pesos | |
| reais do encoder (autografa por identidade de tensor); **31.2-cor**: os | |
| parâmetros do encoder ficam FORA do grupo extra AdamW (filtro por | |
| identidade — registrá-los duas vezes aplicaria dois passos ao mesmo θ). | |
| - Alvo EMA = deepcopy no nascimento (θ̃←m·θ̃+(1−m)·θ APÓS optimizer.step()); | |
| **Teo 31.6**: guarda de ordem EMA por variante (tolerância = lote_efetivo, | |
| RuntimeError na violação — mesmo contrato do MotorJepa/Teo 30.1). | |
| - **Teo 31.3**: conselho renormalizado = média convexa com nascimento neutro | |
| (gating softmax uniforme no nascimento; variantes sem lote no passo são | |
| excluídas e os pesos renormalizados). | |
| - Integração no treinador: perda do conselho via `_aux_norm` (Teo 30.3 | |
| anti-dominação), parâmetros novos no PCGrad, telemetria `jepa_ac/*`. | |
| **SonicMoE no tronco (doc 31 §§5, Teos 31.4–31.5, opt-in):** | |
| - Gate extraído para `_computar_gate` (refatoração VERBATIM — Teo 31.1: | |
| gate bit-idêntico, Δg=0.000e+00 medido). | |
| - `forward_sonico`: dispatch agrupado por expert + GEMM em tiles + | |
| telemetria IO. **Teo 31.4**: equivalência sônico≡vetorial (saída, | |
| gradientes, L_lb/L_ort/_Z_ultimo) — medido: Δy=3.0e-08, Δgrad_x=3.4e-08, | |
| Δgrad_w=2.1e-07, ΔL_lb=0. | |
| - **Teo 31.5 (roofline HONESTO)**: com o gate foco atual (softmax sobre os | |
| ativos), Σ_e n_e = A·BT — fator_trabalho=1; o ganho real é de IO de | |
| PESOS (pilha `torch.stack` evitada: 2.21 MB/forward; ganho modelado | |
| 2.0×). Wallclock CPU medido: 0.83–0.875× (sônico mais lento nesta | |
| escala — overhead do laço em GEMMs pequenos; reportado como está). | |
| 31.5-nota: se o gate tornar-se esparso por token, o mesmo código passa a | |
| omitir linhas automaticamente. | |
| - Wiring: `modelo.sonicmoe {ativo, tile_m}` (default DESLIGADO) — nasce | |
| neutro (Teo 31.1); atua só na fase FOCO (R19.7). | |
| **A/B/C PAREADO em datasets reais (doc 31 §§7/9, Teo 31.7):** | |
| - **Pareamento EXATO**: re-seed pós-construção + máscaras JEPA com | |
| gerador DEDICADO + conselho em eval — o fluxo RNG global dos braços é | |
| idêntico ⟹ mesmos lotes; ΔCE_t pareado por passo (Teo 31.7). | |
| - Corpus REAL 1015 registros (395 FRESCOS: LeRobot fetchman, GSM8K, | |
| MATH-500, hendrycks, OpenR1, IFM socratic — orçamento por fonte), | |
| protocolo 96 passos × 3 braços com retomada por checkpoint (RAM 4 GiB; | |
| OOM da 1ª tentativa com lote_efetivo=4 documentado e corrigido). | |
| - Resultados: A baseline 9.738→6.064 (1.606×) · B v19 λ=0.3 9.726→6.296 | |
| (1.545×, ΔCE=+0.090) · C v19 λ=0.1 9.732→6.187 (1.573×, ΔCE=+0.046) — | |
| **monótono em λ** (Cor. 31.7, Teo 28.7-ii). JEPA acoplada APRENDE: | |
| 0.808→0.205 (−74%) e 0.847→0.215 (−75%); drift dos encoders com JEPA | |
| (8.26e-4/8.75e-4 imagem) > baseline (7.04e-4) — gradiente extra CHEGA | |
| ao encoder real. | |
| - Gráficos: `graficos/v19/v19_evidencias.png` (3 painéis). | |
| **Correção de processo**: `patches/jepa.py` estava DIVERGENTE da produção | |
| (a guarda Teo 30.1 da v18 não foi espelhada) — hash SHA-256 dessincronizado | |
| detectado pelo `verificar_tudo` (48✓/1✗); sincronizado ⟹ 49✓/0✗. | |
| **Verificação**: suíte v19 NOVA — **34/34 verdes** (doc 31 citado em cada | |
| verificação); verificar_tudo **49✓/0✗**; regressão v1–v18 TODA VERDE | |
| (25/36/✓/37/32/48/44/21/✓/✓/28/27/40/—/✓/56/46). | |
| **O que NÃO afirmamos** (doc 31 §10): benefício de wall-clock CPU do | |
| SonicMoE nesta escala; benefício de CE em 96 passos (o acoplamento custa | |
| ≤ +0.09 de CE — benefícios de representação esperados em corrida longa/ | |
| probes downstream); economia de linhas com o gate atual (fator_trabalho=1). | |
| ## 19. v20 — IPC durável (10 correções do usuário com provas) · estresse + Modelo→Modelo em treino · PID-MoE · Stiefel rígido + polar · GuardaRuntime | |
| **Requisitos cumpridos** (doc `32-v20-ipc-durabilidade-pid-stiefel.md`, | |
| Teos 32.1–32.12 + regras R20.1–R20.10): | |
| 1. **IPC v20** — as 10 correções prescritas, cada uma com prova e teste: | |
| - *cache-line padding*: header 64→256 B, `head@64/tail@128/dropped@192` | |
| (Teo 32.1 — MESI: tráfego destrutivo 2·min(λp,λc)→essencial); | |
| replicado no Cython e no fallback; asserts `offset_of!` em | |
| compile-time no Rust. | |
| - *io_uring honesto*: `push_send_fd` REMOVIDO (SCM_RIGHTS é cmsg de | |
| sendmsg — a v18 enfileirava Writev vazio e não entregava FD; Teo | |
| 32.5); `pending.clear()` no reap (Teo 32.6). | |
| - *framing*: CRC32 verificado no decode (Teo 32.4: burst ≤32, peso | |
| ímpar, resíduo ≤2⁻³²) com tabela const — sem dependência nova; | |
| `payload_len` com bounds check (antes: slice fora dos limites ⟹ | |
| pânico); `read_unaligned` no encode (packed sem UB, Teo 32.4-cor). | |
| - *robustez*: EINTR retry em sendmsg/recvmsg (Teo 32.7 — EINTR não é | |
| erro); magic validado na init ANTES de selar (Teo 32.2 — re-init de | |
| região viva zeraria head/tail sob o consumidor; ordem v20 evita o | |
| EPERM opaco de seals re-adicionados); ring cheio ⟹ **BufferError** | |
| com escrita atômica por predicado de espaço (`write_exact`/Teo 32.3); | |
| THP `madvise(MADV_HUGEPAGE)` ≥ 2 MiB nos dois lados (Teo 32.8); | |
| resíduo do consumidor com `_PEND_MAX`=4 MiB (Teo 32.9). | |
| - *bug adicional capturado pelo estresse*: `receber_frame` v18 | |
| descartava os frames extras extraídos do ring na mesma leitura | |
| (perda silenciosa de dados VÁLIDOS) — v20 mantém `_fila_frames`. | |
| 2. **Estresse IPC** (`scripts/28_teste_ipc_stress.py` — APROVADO): | |
| T1 21 frames 1 B→1 MiB (geométrica ×2) em 2 processos; T2 round-trips | |
| byte a byte + CRC; T3 ring cheio → BufferError isolado, drenagem | |
| íntegra, retry OK; T4 latência escrever+ler: média 23,0 µs, **p50 | |
| 21,4 µs, p95 30,4 µs, p99 45,2 µs** (payload 512 B, n=2000). | |
| 3. **Modelo→Modelo DURANTE treino** (`scripts/29_ipc_treino_modelo.py` — | |
| APROVADO): 2 processos, cada um com KHTST real (d=64, 6 camadas 5:1, | |
| vocab 512) treinando 60 passos reais (forward+backward+step); telemetria | |
| (passo, perda, grad_norm) trocada a cada 5 passos pelos 2 rings SPSC; | |
| **uso funcional**: fator de lr de cada modelo acoplado à perda do peer | |
| (não é eco decorativo). Resultado: 12/12 frames por direção, 0 | |
| descartes, ambos aprendem (A 1,019×, B 1,024×), fatores finitos | |
| 0,999/1,001 — canal vivo em treino real. | |
| 4. **PID-MoE** (reqs 1.8/2.7 — `nucleo/pid_moe.py` + wiring no treinador, | |
| Teo 32.10): re-peso multiplicativo λ_lb·u com u saída de PID discreto | |
| em log-escala sobre o desvio de carga D=max f_i−1/N; anti-windup | |
| direcional (integral só acumula quando empurra para dentro da faixa); | |
| nascimento neutro (ativo=False ⟹ u≡1, v19 exato); limites [0,25;4] | |
| preservam a dominância da CE. Suíte: colapso sintético D=0,9 ⟹ | |
| u 1,0→2,0 no primeiro passo, saturação 4,0 sem windup. | |
| 5. **Stiefel rígido + retração polar** (reqs 1.9/2.6/3.5 — | |
| `percepcao/ortogonais.py`, Teo 32.11): renormalizar() tenta QR; em | |
| falha/NaN/desvio>tol recorre à retração polar Q=UVᵀ (ARGMIN de | |
| ‖W−Q‖_F sobre Stiefel — prova por von Neumann: max_Q tr(QᵀW)=Σσ_i); | |
| último recurso identidade; `afirmar_ortogonalidade()` e | |
| `treino.ortogonal_rigido` abortam em violação (bug real de Stiefel | |
| nunca mais silencioso). Medido: pós-QR 4,8e-7; W com NaN recuperado. | |
| 6. **GuardaRuntime** (req 3.6 — `nucleo/guarda_runtime.py`, Teo 32.12): | |
| OLS do RSS (VmRSS de /proc) em janela deslizante com cota e somas | |
| correntes O(1); alerta SOMENTE com janela cheia (Var[β̂] ∝ | |
| 12σ²/s²J(J²−1) — janelas parciais produzem falsos positivos, capturado | |
| pela suíte); vazamento sintético 2000 MB/1k detectado (β̂=2000, 29 | |
| alertas); RSS estacionário β̂=1,0 sem alerta; opt-in (zero custo). | |
| **Verificação**: suíte v20 NOVA **48/48 verdes** (inclui 10 auditorias de | |
| fonte Rust); estresse + demo Modelo→Modelo APROVADOS; verificar_tudo | |
| **49✓/0✗**; smoke v15 ✓; regressão v1–v19 TODA VERDE | |
| (25/36/✓/37/32/48/44/21/✓/✓/28/27/40/—/✓/56/46/34) — todas as mudanças | |
| nascem neutras (opt-in) e são comportamento-preservantes. | |
| **O que NÃO afirmamos** (doc 32 §11): ganho de THP medido isoladamente | |
| (hint best-effort — prova estrutural); speedup do cache-line padding no | |
| sandbox (exige pinagem de núcleos); benefício end-to-end do PID-MoE em CE | |
| (depende da distribuição de carga — A/B pareado fica para a corrida | |
| longa); CRC-32 não substitui ECC — é segunda linha de defesa. | |
| ## 20. v21 — Fonte única do IPC (Rust removido, layout compile-time) · Newton–Schulz espectral certificado · imagem adaptativa · hot-paths Cython · tabela v17 fechada | |
| **Requisitos do usuário atendidos** (refatorações 1–3, melhorias 1–3, PLANO | |
| itens 5–6, treino real, remoção de deprecados): | |
| **IPC — fonte única (doc 33 §2, Teos 33.1/33.2).** O crate `rust/` foi | |
| EXCLUÍDO (3ª implementação redundante do mesmo ABI — auditoria DRY do | |
| usuário aceita); o layout do header (256 B) e do frame (24 B) agora tem | |
| FONTE ÚNICA (`khtst/ipc/layout.py`) com DUAS camadas de verificação: | |
| `_Static_assert` (C11) sobre a struct espelho no `.pyx` — 8 asserts no C | |
| gerado, divergência NÃO COMPILA — e auditoria binário↔layout.py no import | |
| (.so velho falha com erro explícito). O fallback puro-Python importa as | |
| constantes da fonte (zero duplicação). Suíte v21 §1 + estresse v20 | |
| permanecem verdes. | |
| **Newton–Schulz espectral (doc 33 §3, Teos 33.3–33.6).** A v18 assumia | |
| σ₁ no Teorema 24.1 mas normalizava por ‖X‖_F no código (lacuna achada na | |
| auditoria do usuário). A v21 normaliza por | |
| s = min(√‖A₀‖∞/1.2, ‖X‖_F) com A₀ = XXᵀ em fp32: segurança CERTIFICADA | |
| (λ₁ ≤ ‖A‖∞ por normas induzidas; janela invariante (0, 1.255] da quíntica | |
| provada por pontos críticos), NUNCA pior que v20 (o `min`), e escala de | |
| partida 1.2·σ₁/√‖A‖∞ ≥ v20 — nos perfis medidos (pico/exp/plano/mp) a | |
| escala melhora até ~4.6× e os σ pequenos sobrevivem (Teo 33.6); custo | |
| +27% no NS (1 Gram fp32, reusado na 1ª iteração). Sem RNG, sem SVD, sem | |
| iteração de potência. | |
| **Imagem adaptativa (doc 33 §5, Teos 33.7–33.10).** Fonte única | |
| `percepcao/redimensionar.py` nos 3 call sites (treinador, jepa_mundo, | |
| difusao): letterbox (similaridade — nenhuma distorção; kill-switch repõe | |
| v20 bit-a-bit), LANCZOS antialias (Nyquist controlado), janela saliente | |
| por energia de arestas para razões > 2.5 (condicional ρ=0.6, O(W), | |
| determinística) e upscale limitado a 2× (neutralidade I(X;U(X))=I(X;X)). | |
| Bug REAL achado e corrigido durante o desenvolvimento: `total` da energia | |
| era a soma sobre janelas (~alvo× a energia) — as frações nunca passavam; | |
| corrigido para a energia total 1×. | |
| **Hot-paths Cython (doc 33 §6, Teos 33.11–33.13).** `acelerado/ | |
| mamba3hot.pyx`: conv depthwise causal FUNDIDA (1 leitura+1 escrita vs 5 | |
| passadas; ganho medido 2.34×/4.61×/7.58× nas formas B4L128D192/ | |
| B8L512D512/B2L1024D768; equivalência max|Δ|=0) com backward ANALÍTICO | |
| exato (autograd.Function; u/b Δ<1e-4, w 5.8e-7 relativo); top-k parcial | |
| O(N·k) do roteador (valores idênticos ao torch.topk; desempate | |
| determinístico; ganho 1.19–1.81× nas formas do gate — honesto: torch | |
| ganha 2.6× em N=64 k=8, fora do escopo do gate). Fallback v20 automático | |
| (dtype/device/binário) + kill-switches de config. Wired em | |
| `Mamba3Camada`, `Mamba3VLModelo` e `MoEAgrupavel._computar_gate` | |
| (seleção sem gradiente — seguro por construção). | |
| **Tabela v17 fechada (doc 33 §7, Teo 33.14).** O | |
| `AutorreguladorEstendido` (18 controladores, Teo 29.16) estava SEM | |
| chamador; agora o `_ciclo_autorreg_v17` produz 8 sinais REAIS (CV² do | |
| gradiente, norma-peso relativa à inicialização, trust do PRS, Δperda, | |
| razão de clips, razão L_moe/L_ce, logit_max das NoPE) e aplica nos | |
| param_groups (β₁/β₂/ε/wd, momentum/escala, τ_qk) e no PRS (5 parâmetros). | |
| Nascimento neutro: `ativo=false` (default) ⟹ v20 exato; `espera=20` e | |
| limites seguros da tabela; os 10 sinais sem produtor barato ficam com | |
| sinal 0 (honestidade, doc 33 §11). | |
| **Nota de auditoria (doc 33 §8).** A suspeita de typo `etade` em | |
| `indicadores.py::estagnado` era ARTEFATO DE EXIBIÇÃO (dump octal: | |
| `min(janela_perda[metade:])` correto); nada alterado. | |
| **Verificação.** Suíte v21 NOVA 40/40; regressão v1–v20 TODA VERDE | |
| (25/36/✓/37/32/48/44/21/✓/✓/28/27/40/—/✓/56/46/34/38); | |
| verificar_tudo 49✓/0✗; deprecados removidos (rust/, artefatos v6/v7/v10 | |
| da raiz). | |
| **A/B/C/D pareado REAL** (scripts/31_teste_v21.py, 48 passos, corpus 1015 | |
| registros, pareamento exato Teo 31.7): A baseline_v20 9.728→8.772 | |
| (1.109×) · B v21_ns 9.727→8.845 (1.100×, ΔCE +0.073) · C v21_full | |
| 9.763→8.720 (**1.120×**, ΔCE **−0.052**) · D v17_ativo 9.766→8.842 | |
| (1.104×, ΔCE +0.071). Progresso monótono por quarto em TODOS os braços | |
| (9.73→9.47→9.02→9.12±0.05). LEITURA HONESTA: as diferenças de ΔCE | |
| (±0.07) estão no RUÍDO de 48 passos (B e C diferem só por reassociação | |
| de fp nos kernels equivalentes) — o valor da v21 é a correção teórica do | |
| NS + segurança certificada + unificação IPC + wallclock dos hot-paths + | |
| fechamento do laço v17, não salto de CE em corrida curta; o A/B longo | |
| fica para a corrida 9h. | |
| **O que NÃO afirmamos** (doc 33 §11): cota ∞ frouxa em espectros planos | |
| caí no branch Frobenius (nunca pior, mas σ̃_max≈1.2 só quando a cota é | |
| apertada); custo +27% do NS (CPU; GPU não medido); top-k Cython perde | |
| fora do escopo do gate; 10/18 sinais v17 sem produtor (sinal 0); | |
| backward da conv de 1ª ordem. | |
| ## 21. v22 — Fechamento 18/18 da tabela v17: os 10 produtores restantes com medições REAIS, appliers novos e treino real pareado | |
| **Requisito.** "instrumentar os 10 sinais v17 restantes (v22); testar e | |
| treinar com datasets reais verificando progresso". | |
| **O que foi entregue** (doc 34, Teos 34.1–34.11): | |
| 1. **Estado do otimizador — 4 sinais** (`treino/otimizadores.py`): | |
| acumuladores de ‖passo‖², ‖g‖², ‖v‖², ‖Δv‖² (AdamW) e ‖Ghat‖², | |
| ‖buf‖², ‖g‖² (Muon) — **observadores puros** (opt-in | |
| `coletar_metricas`, sem RNG, sem mutação ⟹ **bit-a-bit v21**, | |
| Teo 34.1 provado na suíte com trajetória idêntica). Produtores: | |
| `razao_update_grad` = RMS(passo) (Teo 34.2 — Jensen: |m̂|≤√v̂ | |
| elemento a elemento, ρ≤1/√(1−β^t)→1), `deriva_seg_momento` = RMS(Δv)/ | |
| RMS(v) com calibração pivotal pela própria EMA (Teo 34.4 — alvo 1.0 | |
| sem proxy), `razao_momentum_grad` = √(1−β²)·RMS(buf)/RMS(g) (Teo 34.3 | |
| — piso estacionário E‖b‖²=nσ²/(1−β²)), `razao_rms_mecanismos` = | |
| RMS(Ghat)/RMS(passo) (Teo 34.5 — Teo 24.11 agora MEDIDO). | |
| 2. **Crescimento SOM — contadores reais** (`som_base.py`, | |
| `variantes_crescimento.py`, `orquestrador.py`): GG/GCS/GSOM contam | |
| inserções/podas EXATAMENTE quando uma unidade entra/sai (conservação | |
| k+podas=3+inserções verificada); `contadores_crescimento()` agrega e o | |
| treinador produz taxas por diferença entre ciclos (Teo 34.8). | |
| 3. **ABMO/CIAR/ativacao_som/τ_qk** (mixin `treinador_v22.py`): | |
| `margem_abmo_norm` = cap/lr_base (Teo 34.6), `taxa_aceitacao_ciar` | |
| (fração de janelas com melhora — Hoeffding; alimentada no cadence do | |
| ciclo E no autoajuste, Teo 34.7), `ativacao_som` = | |
| `taxa_ativos_global()` em QUALQUER fase, e `logit_max` lido DIRETO dos | |
| módulos a cada ciclo (frescura ≤ a_cada passos vs 20 antes; Teo 34.9). | |
| 4. **APLICADORES novos** (`aplicar_em_treinador`, Teo 34.10): margem | |
| ABMO (clamp ≤1.0 ⟹ cap>0 sempre), κ_ext do CIAR (×[0.25,2.5]), | |
| λ_inserção e util_poda dos SOMs (sinal de poda INVERTIDO: taxa abaixo | |
| do alvo ⟹ poda mais agressiva) e `_peso_som_v17` (× normalizado pelo | |
| centro 0,05 = default de lambda_som). Nascimento neutro por BASE | |
| CAPTURADA na 1ª escrita — a 1ª aplicação é a identidade mesmo com | |
| config customizada. | |
| 5. **Refatoração estrutural** (Teo 34.11): `_ciclo_autorreg_v17` + | |
| `_init_estado_v17` movidos VERBATIM para o mixin | |
| `treinador_v22.py` — restaurado o limite <80 KB de treinador.py | |
| (suíte v18 46/46 de novo verde). `espera` configurável via cfg | |
| (default 20 = v21 exato). | |
| 6. **Corpus real fresco** (requisito "treinar com datasets reais"): 7 | |
| fontes coletadas NESTA ronda (GSM8K 70, MATH-500 100, OpenR1 100, | |
| IFM-socratic 60, pontuação PT-BR 700, intel-image 160) → 1015 | |
| registros deduplicados em 4 tarefas; tokenizador retreinado com vocab | |
| **16384** (constante do projeto). | |
| **A/B pareado REAL** (scripts/33_teste_v22.py, 48 passos, lote 4, | |
| pareamento exato Teo 31.7; braço B com a_cada=5, espera=2): A | |
| baseline_v21 9.812→7.207 (**1.362×**) · B v22_ativo 9.747→7.568 | |
| (1.288×, ΔCE +0.3617, s/passo 7.03→7.16). **Auditoria do braço B: 10/10 | |
| controladores novos com produtor real MOVERAM** (β₂ ×1.052, ε ×0.754, | |
| momentum ×1.042, escala ×1.005, τ_qk→400 — Teo 34.9-iii: ℓ_natural≈5≪ | |
| banda, sem efeito funcional; ABMO ×1.150 com margem REAL 0.25→0.288; | |
| CIAR κ_ext ×0.998; expand ×0.869; prune ×1.150; peso_som ×1.150) e os | |
| appliers escreveram nos alvos reais (`_abmo["margem"]`, `ciar["kappa_ext"]`, | |
| `_peso_som_v17`, λ/util_poda dos variantes). Progresso monótono por | |
| quarto em ambos (A 9.75→9.02→7.85→7.85; B 9.74→9.01→8.03→8.14). | |
| **Verificação.** Suíte v22 NOVA **46/46** (inclui a prova de | |
| neutralidade bit-a-bit com coletar=True/False); regressão v1–v21 TODA | |
| VERDE (25/36/✓/37/32/48/44/21/✓/✓/28/27/40/—/✓/56/46/34/38/40) + | |
| verificar_tudo **49✓/0✗**; IPC .so reconstruído (o binário no git era um | |
| ponteiro LFS de 132 B — artefatos acelerados agora commitados como | |
| binários reais). | |
| **O que NÃO afirmamos** (doc 34 §10): ganho de CE pela tabela ativa em | |
| 48 passos (medido +0.36 — 18 controladores movem hiperparâmetros | |
| comprovados com janelas curtas; valor estrutural: fechamento, | |
| observabilidade, segurança; produção continua `ativo=false` até o A/B de | |
| longa duração); τ_qk no teto 400 no modelo de teste (inofensivo); | |
| expansão/poda SOM zeradas na fase A (honesto); custo dos acumuladores | |
| não decompõe as causas dos ~2% de s/passo; o produtor τ_qk da v21 NÃO | |
| estava morto (a v22 generaliza o filtro e aumenta a frescura — não é | |
| correção de bug). | |
| ## 22. v23 — Auditoria independente integrada: correções válidas aplicadas com provas, claims refutadas documentadas, corpus sem vazamento | |
| **Fonte:** auditoria externa de 2026-10-17 (7 arquivos: PLANO_MELHORIAS_KHTST.md, | |
| EXECUTAVEL.md, CORRECAO_A01_PCGrad.md, modelo_ram.py, verif_pcgrad_invariantes.py, | |
| verif_pcgrad_rope.py, verif_cinza_lipschitz.py) sobre o espelho v22. O v23 | |
| re-verificou CADA claim contra o código real antes de agir — 5 claims caíram | |
| (§11 do doc 35), o resto foi corrigido com provas (doc 35, Teos 35.1–35.14). | |
| **Correções aplicadas (arquivo:linha no commit):** | |
| | Achado | Correção v23 | Prova | | |
| |---|---|---| | |
| | A-01 PCGrad reescala | `fator=dot/n2`, `g=gm+(ga−fator·gm)` (cirurgia_grad.py) | Teo 35.1; suíte v23 §1: 0 violações I1/I2/I3 (398 pares torch; 100.083 numpy) | | |
| | A-03 RoPE sem offset | `desloc` em aplicar_rope + propagação (modelo.gerar, SessaoKHTST, MoA, blocos) | Teo 35.8; suíte v23 §2: prefill bit a bit, translação exata, decode VARIA com t | | |
| | A-04 tronco 3 camadas (0 NoPE) | `n_camadas=6` + validação do campo REAL (validacao.py) | Teo 35.5; suíte v23 §6: L=3 reprovado, L=6 ⟹ 5:1 | | |
| | I-03 checkpoint não-atômico | tmp+fsync+os.replace+fsync(dir); hash obrigatória; apagar por último | Teo 35.3; suíte v23 §3 (a–d) | | |
| | I-01 IPC header nunca lido | anexar valida capacidade (fallback + Cython; .so recompilado) | Teo 35.4; suíte v23 §4 | | |
| | T-02 dedup 29,5% | `_chave_dedup` (texto+entrada+saída+mídia) única nos 3 consumidores | Teo 35.7; descarte 29,5%→8,7% | | |
| | T-03/T-01 splits de avaliação + Fable "lite" | `papel:"avaliacao"` em 9 fontes benchmark (probe datasets-server), hendrycks→train, Fable→train; filtro P9 com evento PULADA | Teo 35.14; coleta real: MATH-500 PULADA, 1612 registros | | |
| | T-08 NFD | NFC na ingestão (idempotente — Teo 35.6) | suíte v23 §5 | | |
| | A-05 acumulação com viés na retomada | divide pelo tamanho REAL do grupo (`_n_acc_atual`) | Teo 35.9; suíte v23 §7 | | |
| | A-19 hub open/close por linha | buffer 64 linhas/2 s + `fechar()` no scripts/04 | Teo 35.10; suíte v23 §8 | | |
| | A-22 avaliar() vazio silencioso | alerta explícito no hub/stdout | — | | |
| | A-23 árvore INERTE desde a v8 | em treino y_a sempre computado; `y+0·y_a = y` bit a bit | Teo 35.13; grad medido no treino real (−14,16) | | |
| | P16 docstring Lipschitz falso | vit_lra.py cita o bound real do Teo 27.7(ii-a) | verif_cinza_lipschitz.py (razão ≤1; 2δ violado 45× no pixel escuro) | | |
| | E-01/E-02 (doc 26) | erratas: Σ1/τ DIVERGE; T_τ=600/ln 35≈168,76 (τ(600)=0,300 confirma) | Teo 35.12; suíte v23 §9a-b | | |
| | E-03/E-04 (doc 28) | erratas: dH/dT=Var/T³ (FD 0,985); h²/12 exige densidade contínua | Teo 35.11; suíte v23 §9c-d | | |
| | P15 scripts sem assert | auditoria hardened em `auditoria_independente/` (assert + exit code, 4/4 verdes) | — | | |
| | P12 suíte torch-dependente | tests/conftest.py: coleta vira skip com mensagem clara sem torch | — | | |
| **Claims da auditoria REFUTADAS contra o código real (não aplicadas):** | |
| E-05 (`perda_lb` é tensor com gradiente — treinador.py:606), I-05 | |
| (`razao_moe_ce` produzido no mixin v22 — tabela 18/18 real), A-21 (único | |
| call site da conv profunda é guardado por `_hot is not None` — kernel.py:199), | |
| número 0,1502 do E-04 (internamente inconsistente: E[Δ²] ≤ max|Δ|² = 6,8e-4; | |
| o ponto qualitativo entrou na errata com o contra-exemplo EXATO on-grid). | |
| **Teste real (scripts/36_teste_v23.py + 37_graficos_v23.py):** corpus FRESCO | |
| 1612 registros (3 tarefas, P9 auditado — MATH-500 PULADA, hendrycks em train); | |
| A/B pareado exato 48 passos com UMA variável (semântica v≤22 ablation via | |
| monkeypatch vs v23 limpo): baseline 9,671→7,974 (1,213×) vs v23 9,719→8,497 | |
| (1,144×), ΔCE +0,134 — leitura honesta idêntica ao precedente v22: os fixes | |
| são de CORREÇÃO com invariantes provados; corrida curta não mede o valor | |
| (que é estrutural: não-piora garantida, posição relativa restaurada, árvore | |
| viva, treino sem vazamento). Regressão: 21 suítes verdes (v1–v23) + | |
| verificar_tudo 49✓/0✗. Gráfico: graficos/v23/v23_evidencias.png. | |