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
sonicmoe
replay-ssm
memory-audit
token-rounding
moe-quantization
joint-perception
pt-br
KHTST v7 — RETREINO OBSERVADO: estados antigos apagados; treino do zero com monitor de RAM integral (Agente Engenheiro); métricas de tests/test_khtst_v6.py comparadas com o treino anterior; gráficos de desempenho publicados no card
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +1 -0
- LICENSE +21 -0
- README.md +104 -0
- avaliacao_v7.json +938 -0
- avaliacao_v8.json +947 -0
- comparacao_treino_v7.json +153 -0
- comparacao_treino_v8.json +143 -0
- configs/base.json +215 -0
- docs/matematica/00-fundamentos-e-notacao.md +87 -0
- docs/matematica/01-som-kohonen-clasico.md +84 -0
- docs/matematica/02-growing-grid-e-gcs.md +76 -0
- docs/matematica/03-gsom.md +60 -0
- docs/matematica/04-hierarchical-som.md +50 -0
- docs/matematica/05-tkm-rsom.md +59 -0
- docs/matematica/06-cpn-ssom.md +58 -0
- docs/matematica/07-atencao-mista-kvcache.md +50 -0
- docs/matematica/08-quantizacao-w8a8.md +113 -0
- docs/matematica/09-ortogonais-cooperativas-punicao-telemetria-pdca.md +98 -0
- docs/matematica/10-moe-foco-denso-som-v2.md +291 -0
- docs/matematica/11-composicao-microunidades-v3.md +386 -0
- docs/matematica/12-escalacao-computo-e-composicao-otima-v4.md +115 -0
- docs/matematica/13-janela-contexto-1m-indexada.md +75 -0
- docs/matematica/14-medusa-arvore-especulativa.md +77 -0
- docs/matematica/15-nlp-nlg-duas-fases.md +87 -0
- docs/matematica/16-atencao-entre-moes-e-som-v5.md +124 -0
- docs/matematica/17-difusao-multimodal-v5.md +69 -0
- docs/matematica/18-roteamento-ssom-rpp-metricas-v6.md +206 -0
- docs/matematica/19-khtst-v8-melhorias.md +254 -0
- graficos/graf_alinhamento.png +0 -0
- graficos/graf_curva_perda.png +0 -0
- graficos/graf_perdas_tarefa.png +0 -0
- graficos/graf_ppl_lm.png +0 -0
- graficos/graf_ram.png +3 -0
- graficos/graf_som_roteador.png +0 -0
- relatorio_agente_engenheiro.json +76 -0
- requirements.txt +17 -0
- resumo_treino_v7.json +963 -0
- resumo_treino_v8.json +974 -0
- scripts/01_verificar_ambiente.py +64 -0
- scripts/02_coletar_corpus.py +156 -0
- scripts/02a_coletar_fonte.py +68 -0
- scripts/03_treinar_tokenizador.py +48 -0
- scripts/04_treinar.py +381 -0
- scripts/05_avaliar.py +654 -0
- scripts/06_publicar_hf.py +177 -0
- scripts/07_reconsolidar_som.py +95 -0
- scripts/08_graficos_card.py +355 -0
- scripts/09_teste_item_b.py +117 -0
- src/khtst/__init__.py +0 -0
- src/khtst/acelerado/__init__.py +89 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
graficos/graf_ram.png filter=lfs diff=lfs merge=lfs -text
|
LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2026 Projeto KHTST
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
README.md
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# KHTST — modelo multimodal PT-BR (v8)
|
| 2 |
+
|
| 3 |
+
KHTST é a evolução do projeto AURORA (renomeação integral AURORA → KHTST,
|
| 4 |
+
pedido do projeto) — um modelo multimodal compacto para PT-BR com
|
| 5 |
+
roteamento por S-SOM, punição SGDR, punição de novidade restrita a empates
|
| 6 |
+
de Voronoi, controle Reward/Punishment/Penalty (RPP) e **janela de contexto
|
| 7 |
+
256K tokens** (compressão indexada, doc 13).
|
| 8 |
+
|
| 9 |
+
**14,89M parâmetros · vocab 16384 · 9 tarefas (lm/noticia/pontuacao/
|
| 10 |
+
instrucao/tts/vqa/ocr/imagem_caption/asr) · encoders imagem/áudio/vídeo.**
|
| 11 |
+
|
| 12 |
+
> ⚠️ **STATUS DO GATE DE QUALIDADE (honesto): FALHOU.**
|
| 13 |
+
> Nesta corrida, o KHTST NÃO superou nem empatou o AURORA nas métricas
|
| 14 |
+
> (`ppl_lm` 2542,11 vs 17,09 do baseline publicado). Conforme a regra do
|
| 15 |
+
> projeto, **os estados (pesos) do modelo NÃO foram publicados** — este
|
| 16 |
+
> repositório publica o CÓDIGO completo (scripts de alta qualidade,
|
| 17 |
+
> provas matemáticas e evidências) e o diagnóstico que corrige a causa
|
| 18 |
+
> raiz. Um retreino limpo com a política corrigida está pronto para
|
| 19 |
+
> executar (est. ~3,3 h; o teto de 5 h da sessão impediu refazer).
|
| 20 |
+
|
| 21 |
+
## O que há de novo no v8 (itens a–j, com provas em `docs/matematica/19`)
|
| 22 |
+
|
| 23 |
+
| item | melhoria | onde | prova |
|
| 24 |
+
|---|---|---|---|
|
| 25 |
+
| a | micro buffers anulares em redes recorrentes (0 alocação/passo no decode) | `percepcao/microunidades.py` | Teo 19.6 |
|
| 26 |
+
| b | canal adhoc I/O + **stop/continue** durante solicitações ativas | `servico/adhoc.py`, `scripts/09_teste_item_b.py` | Teos 19.14–19.16 |
|
| 27 |
+
| c | quantização 8-bit seletiva matematicamente vantajosa (torchao/bnb) | `quanta/quantizacao.py` §10 | Teo 19.18 |
|
| 28 |
+
| d | anti-vanishing: Leaky ReLU adaptativa + pesos de árvore bidirecionais + skip neutro + BatchNorm | `microunidades.py` | Teos 19.7–19.10 |
|
| 29 |
+
| e | map-reduce `torch.vmap`/`sum`/`mean` nos experts MoE | `percepcao/moe.py` | Teo 19.11 (diff 0,0) |
|
| 30 |
+
| f | atenção **árvore bidirecional fora de ordem**; raio_janela e kv_max **×4** (128/2048); `AtencaoCabecas` | `percepcao/atencao.py` | Teos 19.1–19.4 |
|
| 31 |
+
| g | MoE **2 encoders + 4 decoders** fora de ordem agrupável/desagrupável | `percepcao/moe.py` | Teos 19.12–19.13 |
|
| 32 |
+
| h | gestão de memória RAM/armazenamento com limiar adaptativo | `telemetria/gestor_memoria.py` | Teo 19.17 |
|
| 33 |
+
| i | testes em dados reais → 6 bugs latentes do v7 corrigidos (ver abaixo) | vários | — |
|
| 34 |
+
| j | parâmetros auto-ajustáveis matematicamente + provas conjuntas | `treino/treinador.py` | Teos 19.26–19.27 |
|
| 35 |
+
|
| 36 |
+
**ViT (evolução de `video.py`/`blocos.py`/`microunidades.py`):** Token
|
| 37 |
+
Merging (ToMe) com casamento bipartido único e auto-ajuste da fração de
|
| 38 |
+
fusão; **LRA-QViT** com RB-LRA, WADS e STE — ramificações **1-bit ∥ 4-bit
|
| 39 |
+
em paralelo** detectando **direção vetorial** da iluminação (unitária) e
|
| 40 |
+
**intensidade**, mapas 2-D de contorno/área; critério de vantagem da
|
| 41 |
+
difusão (`vantagem_difusao`). Provas: Teos 19.19–19.24, 19.28.
|
| 42 |
+
|
| 43 |
+
**Cython + C/C++:** núcleos `acelerado/nucleos.pyx` (Kohonen sequencial +
|
| 44 |
+
entropia/punição) com semântica sequencial exata (Teo 19.25) — **speedup
|
| 45 |
+
medido 17,89×**, fallback puro-torch idêntico.
|
| 46 |
+
|
| 47 |
+
## Verificações (tudo verde)
|
| 48 |
+
|
| 49 |
+
- `tests/test_khtst.py` … `test_khtst_v6.py` (herdadas): 25+36+37+29+48 ✓
|
| 50 |
+
- `tests/test_khtst_v7.py` (nova, Teoremas 19.x): **44 ✓ · 0 ✗**
|
| 51 |
+
- **Item (b) no modelo treinado: APROVADO** — 4 requisições recebidas
|
| 52 |
+
ANTES da 1ª resposta, processamento serial, stop (cancelamento) e
|
| 53 |
+
pause→continue honrados em ≤ 1 passo (`teste_item_b_v8.json`).
|
| 54 |
+
|
| 55 |
+
## Treino desta corrida (dentro do teto de 5 h)
|
| 56 |
+
|
| 57 |
+
| métrica | valor |
|
| 58 |
+
|---|---|
|
| 59 |
+
| passos | 3192 (8 épocas + DPO 93 passos acc 1,0 + consolidação SOM) |
|
| 60 |
+
| tempo acumulado | **3,98 h** (teto 5 h respeitado; sem treino em background) |
|
| 61 |
+
| RAM | pico 3358 MB · média 2524 MB · mín 429 MB (5919 amostras) |
|
| 62 |
+
| corpus | 3548 registros PT-BR reais (18 fontes HF; 987 multimodais) |
|
| 63 |
+
| gate de não-regressão | **FALHOU** — `ppl_lm` 2542,11 vs 17,09 (regressão registrada em `comparacao_treino_v8.json`) |
|
| 64 |
+
|
| 65 |
+
## Diagnóstico da regressão (item i — bugs latentes do v7 encontrados e corrigidos)
|
| 66 |
+
|
| 67 |
+
1. **Reinícios SGDR espúrios**: 16 warm restarts em 2075 passos — o
|
| 68 |
+
cooldown (`janela/2`) era menor que o próprio ciclo (T₀) e a cláusula 1
|
| 69 |
+
da eq. 9.3 disparava no passo 9 (sem guarda de aquecimento). O lr passou
|
| 70 |
+
43% do tempo no piso ⇒ sub-convergência. **Correção** (`treino/punicao.py`):
|
| 71 |
+
cooldown = T₀ e guarda `passo ≤ warmup + T₀` para AMBAS as cláusulas.
|
| 72 |
+
2. **Gate de não-regressão inoperante no v7**: as chaves do gate eram
|
| 73 |
+
`ppl_valid/perda_valid`, mas as métricas reais são `ppl_lm/perda_media_final`
|
| 74 |
+
— o "aprovado" do v7 nunca verificou o ppl. **Correção** (`scripts/08`):
|
| 75 |
+
chaves corretas ⇒ o gate agora reprova de verdade (como acima).
|
| 76 |
+
3. Outros: einsum de decode `bhte→bhe` (quebrava TODA geração com cache no v7),
|
| 77 |
+
typo `perla→perda`, `NameError` no script 07, clamp de rótulos do S-SOM
|
| 78 |
+
(n_classes=8 × 9 tarefas), resumos v4/v6/v7 divergentes entre scripts.
|
| 79 |
+
|
| 80 |
+
## Reprodução
|
| 81 |
+
|
| 82 |
+
```bash
|
| 83 |
+
python3 scripts/01_verificar_ambiente.py
|
| 84 |
+
python3 scripts/02_coletar_corpus.py # retomável por fonte
|
| 85 |
+
python3 scripts/03_treinar_tokenizador.py
|
| 86 |
+
python3 scripts/04_treinar.py --orcamento 470 --teto_horas 5.0
|
| 87 |
+
python3 scripts/05_avaliar.py --sem_difusao
|
| 88 |
+
python3 scripts/09_teste_item_b.py # item (b) com o modelo real
|
| 89 |
+
python3 scripts/08_graficos_card.py # gráficos + gate
|
| 90 |
+
python3 scripts/06_publicar_hf.py # commit único (gate bloqueia estados)
|
| 91 |
+
```
|
| 92 |
+
|
| 93 |
+
## Estrutura
|
| 94 |
+
|
| 95 |
+
`src/khtst/` — núcleo, percepção (atenção/microunidades/moe/vit_lra),
|
| 96 |
+
memória (S-SOM + 8 variantes + janela 256K), treino (4 fases + RPP + SGDR),
|
| 97 |
+
servico (canal adhoc), quanta (8-bit + STE), telemetria (hub + gestor de
|
| 98 |
+
memória), qualidade (Agente Engenheiro), acelerado (Cython+C).
|
| 99 |
+
`docs/matematica/00–19` — fundamentos, teoremas e provas.
|
| 100 |
+
`graficos/` — desempenho desta corrida (apenas no card).
|
| 101 |
+
|
| 102 |
+
## Licença
|
| 103 |
+
|
| 104 |
+
MIT (herdada do projeto).
|
avaliacao_v7.json
ADDED
|
@@ -0,0 +1,938 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"estado": "fase-som",
|
| 3 |
+
"roteador_ssom": {
|
| 4 |
+
"amostras": 1536,
|
| 5 |
+
"pronto": true,
|
| 6 |
+
"lambda_rota": 0.35,
|
| 7 |
+
"gamma_empate": 0.15,
|
| 8 |
+
"drift_codebook": 0.0,
|
| 9 |
+
"conf_media": 0.4917,
|
| 10 |
+
"frac_rotas_ativas": 0.5312,
|
| 11 |
+
"k": 24,
|
| 12 |
+
"taxa_ativos": 1.0
|
| 13 |
+
},
|
| 14 |
+
"perdas_tarefa": {
|
| 15 |
+
"lm": {
|
| 16 |
+
"treinado": 2.8384029467900596,
|
| 17 |
+
"aleatorio": 9.732619444529215
|
| 18 |
+
},
|
| 19 |
+
"noticia": {
|
| 20 |
+
"treinado": 2.5535371700922647,
|
| 21 |
+
"aleatorio": 9.723073641459147
|
| 22 |
+
},
|
| 23 |
+
"instrucao": {
|
| 24 |
+
"treinado": 2.035900592803955,
|
| 25 |
+
"aleatorio": 9.758591492970785
|
| 26 |
+
},
|
| 27 |
+
"pontuacao": {
|
| 28 |
+
"treinado": 2.648297905921936,
|
| 29 |
+
"aleatorio": 9.727588017781576
|
| 30 |
+
},
|
| 31 |
+
"imagem_caption": {
|
| 32 |
+
"treinado": 2.127371827761332,
|
| 33 |
+
"aleatorio": 9.717129548390707
|
| 34 |
+
},
|
| 35 |
+
"vqa": {
|
| 36 |
+
"treinado": 2.177152613798777,
|
| 37 |
+
"aleatorio": 9.693151950836182
|
| 38 |
+
},
|
| 39 |
+
"ocr": {
|
| 40 |
+
"treinado": 1.418007344007492,
|
| 41 |
+
"aleatorio": 9.757900714874268
|
| 42 |
+
},
|
| 43 |
+
"asr": {
|
| 44 |
+
"treinado": 2.1221489111582437,
|
| 45 |
+
"aleatorio": 9.733868916829428
|
| 46 |
+
},
|
| 47 |
+
"tts": {
|
| 48 |
+
"treinado": 1.675029953320821,
|
| 49 |
+
"aleatorio": 9.691224416097006
|
| 50 |
+
}
|
| 51 |
+
},
|
| 52 |
+
"ppl_lm": 17.088452564794597,
|
| 53 |
+
"ppl_lm_aleatorio": 16858.65484439469,
|
| 54 |
+
"moe_uso_por_tarefa": {
|
| 55 |
+
"lm": [
|
| 56 |
+
{
|
| 57 |
+
"experts_top": [
|
| 58 |
+
5,
|
| 59 |
+
4
|
| 60 |
+
],
|
| 61 |
+
"grupo_top": [
|
| 62 |
+
2,
|
| 63 |
+
2
|
| 64 |
+
]
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"experts_top": [
|
| 68 |
+
0,
|
| 69 |
+
1
|
| 70 |
+
],
|
| 71 |
+
"grupo_top": [
|
| 72 |
+
0,
|
| 73 |
+
0
|
| 74 |
+
]
|
| 75 |
+
}
|
| 76 |
+
],
|
| 77 |
+
"vqa": [
|
| 78 |
+
{
|
| 79 |
+
"experts_top": [
|
| 80 |
+
2,
|
| 81 |
+
3
|
| 82 |
+
],
|
| 83 |
+
"grupo_top": [
|
| 84 |
+
1,
|
| 85 |
+
1
|
| 86 |
+
]
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"experts_top": [
|
| 90 |
+
5,
|
| 91 |
+
4
|
| 92 |
+
],
|
| 93 |
+
"grupo_top": [
|
| 94 |
+
2,
|
| 95 |
+
2
|
| 96 |
+
]
|
| 97 |
+
}
|
| 98 |
+
],
|
| 99 |
+
"ocr": [
|
| 100 |
+
{
|
| 101 |
+
"experts_top": [
|
| 102 |
+
2,
|
| 103 |
+
3
|
| 104 |
+
],
|
| 105 |
+
"grupo_top": [
|
| 106 |
+
1,
|
| 107 |
+
1
|
| 108 |
+
]
|
| 109 |
+
},
|
| 110 |
+
{
|
| 111 |
+
"experts_top": [
|
| 112 |
+
5,
|
| 113 |
+
4
|
| 114 |
+
],
|
| 115 |
+
"grupo_top": [
|
| 116 |
+
2,
|
| 117 |
+
2
|
| 118 |
+
]
|
| 119 |
+
}
|
| 120 |
+
],
|
| 121 |
+
"asr": [
|
| 122 |
+
{
|
| 123 |
+
"experts_top": [
|
| 124 |
+
0,
|
| 125 |
+
1
|
| 126 |
+
],
|
| 127 |
+
"grupo_top": [
|
| 128 |
+
0,
|
| 129 |
+
0
|
| 130 |
+
]
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"experts_top": [
|
| 134 |
+
2,
|
| 135 |
+
3
|
| 136 |
+
],
|
| 137 |
+
"grupo_top": [
|
| 138 |
+
1,
|
| 139 |
+
1
|
| 140 |
+
]
|
| 141 |
+
}
|
| 142 |
+
],
|
| 143 |
+
"tts": [
|
| 144 |
+
{
|
| 145 |
+
"experts_top": [
|
| 146 |
+
5,
|
| 147 |
+
4
|
| 148 |
+
],
|
| 149 |
+
"grupo_top": [
|
| 150 |
+
2,
|
| 151 |
+
2
|
| 152 |
+
]
|
| 153 |
+
},
|
| 154 |
+
{
|
| 155 |
+
"experts_top": [
|
| 156 |
+
0,
|
| 157 |
+
1
|
| 158 |
+
],
|
| 159 |
+
"grupo_top": [
|
| 160 |
+
0,
|
| 161 |
+
0
|
| 162 |
+
]
|
| 163 |
+
}
|
| 164 |
+
]
|
| 165 |
+
},
|
| 166 |
+
"mtp": {
|
| 167 |
+
"alphas": [
|
| 168 |
+
0.9997844099998474,
|
| 169 |
+
0.00021563710470218211
|
| 170 |
+
],
|
| 171 |
+
"per_cabeca": [
|
| 172 |
+
2.9869613647460938,
|
| 173 |
+
10.111918449401855
|
| 174 |
+
],
|
| 175 |
+
"entropia": 0.00203594658523798,
|
| 176 |
+
"termos_ce": 0.0
|
| 177 |
+
},
|
| 178 |
+
"w8a8_delta": 0.0011706352233886719,
|
| 179 |
+
"som_treinado": {
|
| 180 |
+
"variante_ativa": "cpn",
|
| 181 |
+
"variantes": {
|
| 182 |
+
"som": {
|
| 183 |
+
"k": 24,
|
| 184 |
+
"taxa_ativos": 1.0,
|
| 185 |
+
"resemeados": 24,
|
| 186 |
+
"usos": 256,
|
| 187 |
+
"atingiu_alvo": true
|
| 188 |
+
},
|
| 189 |
+
"gg": {
|
| 190 |
+
"k": 4,
|
| 191 |
+
"taxa_ativos": 1.0,
|
| 192 |
+
"resemeados": 4,
|
| 193 |
+
"usos": 256,
|
| 194 |
+
"atingiu_alvo": true
|
| 195 |
+
},
|
| 196 |
+
"gcs": {
|
| 197 |
+
"k": 3,
|
| 198 |
+
"arestas": 3,
|
| 199 |
+
"eq_treino": 88415.8203125,
|
| 200 |
+
"atingiu_alvo": true
|
| 201 |
+
},
|
| 202 |
+
"gsom": {
|
| 203 |
+
"k": 29,
|
| 204 |
+
"gt": 1.05,
|
| 205 |
+
"erro_medio": 0.0,
|
| 206 |
+
"atingiu_alvo": true
|
| 207 |
+
},
|
| 208 |
+
"hsom": {},
|
| 209 |
+
"tkm": {
|
| 210 |
+
"k": 32,
|
| 211 |
+
"taxa_ativos": 1.0,
|
| 212 |
+
"resemeados": 32,
|
| 213 |
+
"usos": 256,
|
| 214 |
+
"atingiu_alvo": true
|
| 215 |
+
},
|
| 216 |
+
"rsom": {
|
| 217 |
+
"k": 32,
|
| 218 |
+
"taxa_ativos": 1.0,
|
| 219 |
+
"resemeados": 32,
|
| 220 |
+
"usos": 256,
|
| 221 |
+
"atingiu_alvo": true
|
| 222 |
+
},
|
| 223 |
+
"cpn": {},
|
| 224 |
+
"ssom": {
|
| 225 |
+
"erro": "IndexError: index 8 is out of bounds for dimension 0 with size 8"
|
| 226 |
+
}
|
| 227 |
+
},
|
| 228 |
+
"roteador": {
|
| 229 |
+
"amostras": 1586,
|
| 230 |
+
"pronto": true,
|
| 231 |
+
"lambda_rota": 0.35,
|
| 232 |
+
"gamma_empate": 0.15,
|
| 233 |
+
"drift_codebook": 0.032477,
|
| 234 |
+
"conf_media": 0.0,
|
| 235 |
+
"frac_rotas_ativas": 0.0,
|
| 236 |
+
"k": 24,
|
| 237 |
+
"taxa_ativos": 1.0
|
| 238 |
+
},
|
| 239 |
+
"invariante_sem_orfaos": true,
|
| 240 |
+
"orfaos_por_variante": {
|
| 241 |
+
"som": {
|
| 242 |
+
"orfaos": 0,
|
| 243 |
+
"relocados": 0,
|
| 244 |
+
"taxa_ativos": 1.0
|
| 245 |
+
},
|
| 246 |
+
"gg": {
|
| 247 |
+
"orfaos": 0,
|
| 248 |
+
"relocados": 0,
|
| 249 |
+
"taxa_ativos": 1.0
|
| 250 |
+
},
|
| 251 |
+
"gcs": {
|
| 252 |
+
"orfaos": 0,
|
| 253 |
+
"relocados": 0,
|
| 254 |
+
"taxa_ativos": 1.0
|
| 255 |
+
},
|
| 256 |
+
"gsom": {
|
| 257 |
+
"orfaos": 0,
|
| 258 |
+
"relocados": 0,
|
| 259 |
+
"taxa_ativos": 1.0
|
| 260 |
+
},
|
| 261 |
+
"hsom": {
|
| 262 |
+
"orfaos": 0,
|
| 263 |
+
"relocados": 0
|
| 264 |
+
},
|
| 265 |
+
"tkm": {
|
| 266 |
+
"orfaos": 0,
|
| 267 |
+
"relocados": 0,
|
| 268 |
+
"taxa_ativos": 1.0
|
| 269 |
+
},
|
| 270 |
+
"rsom": {
|
| 271 |
+
"orfaos": 0,
|
| 272 |
+
"relocados": 0,
|
| 273 |
+
"taxa_ativos": 1.0
|
| 274 |
+
},
|
| 275 |
+
"cpn": {
|
| 276 |
+
"orfaos": 0,
|
| 277 |
+
"relocados": 0,
|
| 278 |
+
"taxa_ativos": 1.0
|
| 279 |
+
},
|
| 280 |
+
"ssom": {
|
| 281 |
+
"orfaos": 0,
|
| 282 |
+
"relocados": 23,
|
| 283 |
+
"taxa_ativos": 1.0
|
| 284 |
+
}
|
| 285 |
+
}
|
| 286 |
+
},
|
| 287 |
+
"som_eq_fresco": {
|
| 288 |
+
"som": {
|
| 289 |
+
"taxa_ativos": 1.0,
|
| 290 |
+
"eq": 75.31108856201172
|
| 291 |
+
},
|
| 292 |
+
"gg": {
|
| 293 |
+
"taxa_ativos": 1.0,
|
| 294 |
+
"eq": 144.36021423339844
|
| 295 |
+
},
|
| 296 |
+
"gcs": {
|
| 297 |
+
"taxa_ativos": 1.0,
|
| 298 |
+
"eq": 160.38645935058594
|
| 299 |
+
},
|
| 300 |
+
"gsom": {
|
| 301 |
+
"taxa_ativos": 1.0,
|
| 302 |
+
"eq": 130.51382446289062
|
| 303 |
+
},
|
| 304 |
+
"tkm": {
|
| 305 |
+
"taxa_ativos": 1.0,
|
| 306 |
+
"eq": 72.5010757446289
|
| 307 |
+
},
|
| 308 |
+
"rsom": {
|
| 309 |
+
"taxa_ativos": 1.0,
|
| 310 |
+
"eq": 75.71780395507812
|
| 311 |
+
},
|
| 312 |
+
"ssom": {
|
| 313 |
+
"taxa_ativos": 1.0,
|
| 314 |
+
"eq": 78.7991714477539
|
| 315 |
+
}
|
| 316 |
+
},
|
| 317 |
+
"geracao": {
|
| 318 |
+
"sem_punicao": "ricos a a a a Atualadawaficados novo 75 cada motivação o choque o clima inédentpresenta competimes tipo individual-sucedidos observador",
|
| 319 |
+
"com_punicao": " NaNTde a testevem trromcada 360 Bat que globais lou topo atingmadas atadado desa Emb 89 con badminton dizie sua simples doenças na"
|
| 320 |
+
},
|
| 321 |
+
"microunidades": {
|
| 322 |
+
"lm": [
|
| 323 |
+
{
|
| 324 |
+
"ramos": [
|
| 325 |
+
"conv_dil",
|
| 326 |
+
"gru",
|
| 327 |
+
"mlp"
|
| 328 |
+
],
|
| 329 |
+
"alpha_medio": [
|
| 330 |
+
0.2641,
|
| 331 |
+
0.305,
|
| 332 |
+
0.4309
|
| 333 |
+
],
|
| 334 |
+
"passos_rec": 2
|
| 335 |
+
},
|
| 336 |
+
{
|
| 337 |
+
"ramos": [
|
| 338 |
+
"conv_dil",
|
| 339 |
+
"gru",
|
| 340 |
+
"mlp",
|
| 341 |
+
"moe"
|
| 342 |
+
],
|
| 343 |
+
"alpha_medio": [
|
| 344 |
+
0.5519,
|
| 345 |
+
0.1535,
|
| 346 |
+
0.1445,
|
| 347 |
+
0.1501
|
| 348 |
+
],
|
| 349 |
+
"passos_rec": 2
|
| 350 |
+
},
|
| 351 |
+
{
|
| 352 |
+
"ramos": [
|
| 353 |
+
"conv_dil",
|
| 354 |
+
"gru",
|
| 355 |
+
"mlp",
|
| 356 |
+
"moe"
|
| 357 |
+
],
|
| 358 |
+
"alpha_medio": [
|
| 359 |
+
0.2203,
|
| 360 |
+
0.2562,
|
| 361 |
+
0.2834,
|
| 362 |
+
0.2401
|
| 363 |
+
],
|
| 364 |
+
"passos_rec": 2
|
| 365 |
+
}
|
| 366 |
+
],
|
| 367 |
+
"vqa": [
|
| 368 |
+
{
|
| 369 |
+
"ramos": [
|
| 370 |
+
"conv_dil",
|
| 371 |
+
"gru",
|
| 372 |
+
"mlp"
|
| 373 |
+
],
|
| 374 |
+
"alpha_medio": [
|
| 375 |
+
0.0647,
|
| 376 |
+
0.2521,
|
| 377 |
+
0.6833
|
| 378 |
+
],
|
| 379 |
+
"passos_rec": 2
|
| 380 |
+
},
|
| 381 |
+
{
|
| 382 |
+
"ramos": [
|
| 383 |
+
"conv_dil",
|
| 384 |
+
"gru",
|
| 385 |
+
"mlp",
|
| 386 |
+
"moe"
|
| 387 |
+
],
|
| 388 |
+
"alpha_medio": [
|
| 389 |
+
0.2515,
|
| 390 |
+
0.2591,
|
| 391 |
+
0.2497,
|
| 392 |
+
0.2398
|
| 393 |
+
],
|
| 394 |
+
"passos_rec": 2
|
| 395 |
+
},
|
| 396 |
+
{
|
| 397 |
+
"ramos": [
|
| 398 |
+
"conv_dil",
|
| 399 |
+
"gru",
|
| 400 |
+
"mlp",
|
| 401 |
+
"moe"
|
| 402 |
+
],
|
| 403 |
+
"alpha_medio": [
|
| 404 |
+
0.0645,
|
| 405 |
+
0.1988,
|
| 406 |
+
0.4256,
|
| 407 |
+
0.311
|
| 408 |
+
],
|
| 409 |
+
"passos_rec": 2
|
| 410 |
+
}
|
| 411 |
+
],
|
| 412 |
+
"asr": [
|
| 413 |
+
{
|
| 414 |
+
"ramos": [
|
| 415 |
+
"conv_dil",
|
| 416 |
+
"gru",
|
| 417 |
+
"mlp"
|
| 418 |
+
],
|
| 419 |
+
"alpha_medio": [
|
| 420 |
+
0.2777,
|
| 421 |
+
0.3308,
|
| 422 |
+
0.3916
|
| 423 |
+
],
|
| 424 |
+
"passos_rec": 2
|
| 425 |
+
},
|
| 426 |
+
{
|
| 427 |
+
"ramos": [
|
| 428 |
+
"conv_dil",
|
| 429 |
+
"gru",
|
| 430 |
+
"mlp",
|
| 431 |
+
"moe"
|
| 432 |
+
],
|
| 433 |
+
"alpha_medio": [
|
| 434 |
+
0.5948,
|
| 435 |
+
0.1387,
|
| 436 |
+
0.1316,
|
| 437 |
+
0.1348
|
| 438 |
+
],
|
| 439 |
+
"passos_rec": 2
|
| 440 |
+
},
|
| 441 |
+
{
|
| 442 |
+
"ramos": [
|
| 443 |
+
"conv_dil",
|
| 444 |
+
"gru",
|
| 445 |
+
"mlp",
|
| 446 |
+
"moe"
|
| 447 |
+
],
|
| 448 |
+
"alpha_medio": [
|
| 449 |
+
0.1736,
|
| 450 |
+
0.2893,
|
| 451 |
+
0.2814,
|
| 452 |
+
0.2557
|
| 453 |
+
],
|
| 454 |
+
"passos_rec": 2
|
| 455 |
+
}
|
| 456 |
+
],
|
| 457 |
+
"instrucao": [
|
| 458 |
+
{
|
| 459 |
+
"ramos": [
|
| 460 |
+
"conv_dil",
|
| 461 |
+
"gru",
|
| 462 |
+
"mlp"
|
| 463 |
+
],
|
| 464 |
+
"alpha_medio": [
|
| 465 |
+
0.1276,
|
| 466 |
+
0.2803,
|
| 467 |
+
0.5922
|
| 468 |
+
],
|
| 469 |
+
"passos_rec": 2
|
| 470 |
+
},
|
| 471 |
+
{
|
| 472 |
+
"ramos": [
|
| 473 |
+
"conv_dil",
|
| 474 |
+
"gru",
|
| 475 |
+
"mlp",
|
| 476 |
+
"moe"
|
| 477 |
+
],
|
| 478 |
+
"alpha_medio": [
|
| 479 |
+
0.353,
|
| 480 |
+
0.2125,
|
| 481 |
+
0.2194,
|
| 482 |
+
0.2151
|
| 483 |
+
],
|
| 484 |
+
"passos_rec": 2
|
| 485 |
+
},
|
| 486 |
+
{
|
| 487 |
+
"ramos": [
|
| 488 |
+
"conv_dil",
|
| 489 |
+
"gru",
|
| 490 |
+
"mlp",
|
| 491 |
+
"moe"
|
| 492 |
+
],
|
| 493 |
+
"alpha_medio": [
|
| 494 |
+
0.0723,
|
| 495 |
+
0.2226,
|
| 496 |
+
0.4016,
|
| 497 |
+
0.3036
|
| 498 |
+
],
|
| 499 |
+
"passos_rec": 2
|
| 500 |
+
}
|
| 501 |
+
]
|
| 502 |
+
},
|
| 503 |
+
"treino_prs_v8": {
|
| 504 |
+
"trust": 0.4091,
|
| 505 |
+
"tau": 0.55736,
|
| 506 |
+
"clip": 3.2906,
|
| 507 |
+
"boost": 1.0,
|
| 508 |
+
"streak": 0,
|
| 509 |
+
"ciclos_sgdr": 0,
|
| 510 |
+
"recompensa_acum": 17.593,
|
| 511 |
+
"beta_min_relativo": 2.0
|
| 512 |
+
},
|
| 513 |
+
"treino_confianca": {
|
| 514 |
+
"h_ema": 0.6650000214576721,
|
| 515 |
+
"ece": 0.3813131313131314,
|
| 516 |
+
"posterior_media": 0.32673267326732675,
|
| 517 |
+
"bernstein": [
|
| 518 |
+
0.176243817077732,
|
| 519 |
+
0.4772215294569215
|
| 520 |
+
]
|
| 521 |
+
},
|
| 522 |
+
"treino_memoria": {
|
| 523 |
+
"slots": 25,
|
| 524 |
+
"capacidade": 64,
|
| 525 |
+
"escritas": 25,
|
| 526 |
+
"rejeitadas_confianca": 0,
|
| 527 |
+
"hit_rate": 1.0,
|
| 528 |
+
"comprimidos": 0,
|
| 529 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 530 |
+
"perda_vq": null,
|
| 531 |
+
"violacoes_contrato": 0,
|
| 532 |
+
"economia_bits_por_slot": 0.9990234375
|
| 533 |
+
},
|
| 534 |
+
"treino_crescimento": [],
|
| 535 |
+
"memoria_execucao": {
|
| 536 |
+
"slots": 32,
|
| 537 |
+
"capacidade": 32,
|
| 538 |
+
"escritas": 45,
|
| 539 |
+
"rejeitadas_confianca": 0,
|
| 540 |
+
"hit_rate": 1.0,
|
| 541 |
+
"comprimidos": 32,
|
| 542 |
+
"entropia_codebook": 3.5029096603393555,
|
| 543 |
+
"perda_vq": "tensor(7.0846)",
|
| 544 |
+
"violacoes_contrato": 0,
|
| 545 |
+
"economia_bits_por_slot": 0.9990234375,
|
| 546 |
+
"escritas_aceitas": 45,
|
| 547 |
+
"consultas_com_acerto": 15,
|
| 548 |
+
"comprimidos_agora": 32
|
| 549 |
+
},
|
| 550 |
+
"curva_epocas": [
|
| 551 |
+
{
|
| 552 |
+
"epoca": 0,
|
| 553 |
+
"perda_media": 4.501659254233043,
|
| 554 |
+
"ppl_lm": 116.51917431950382
|
| 555 |
+
},
|
| 556 |
+
{
|
| 557 |
+
"epoca": 1,
|
| 558 |
+
"perda_media": 2.1522662341594696,
|
| 559 |
+
"ppl_lm": 20.32702512440419
|
| 560 |
+
},
|
| 561 |
+
{
|
| 562 |
+
"epoca": 2,
|
| 563 |
+
"perda_media": 1.628365287516499,
|
| 564 |
+
"ppl_lm": 6.841325508316532
|
| 565 |
+
},
|
| 566 |
+
{
|
| 567 |
+
"epoca": 3,
|
| 568 |
+
"perda_media": 1.5996007979906435,
|
| 569 |
+
"ppl_lm": 6.208188231846149
|
| 570 |
+
},
|
| 571 |
+
{
|
| 572 |
+
"epoca": 4,
|
| 573 |
+
"perda_media": 1.4905521827482286,
|
| 574 |
+
"ppl_lm": 5.169895857934865
|
| 575 |
+
},
|
| 576 |
+
{
|
| 577 |
+
"epoca": 5,
|
| 578 |
+
"perda_media": 0.9951962381601334,
|
| 579 |
+
"ppl_lm": 3.663949358479845
|
| 580 |
+
},
|
| 581 |
+
{
|
| 582 |
+
"epoca": 5,
|
| 583 |
+
"perda_media": 0.78661770003876,
|
| 584 |
+
"ppl_lm": 2.2905761511962
|
| 585 |
+
}
|
| 586 |
+
],
|
| 587 |
+
"coerencia": {
|
| 588 |
+
"corpus_25pct": {
|
| 589 |
+
"n_registros": 887,
|
| 590 |
+
"repeticao_pct": 46.32,
|
| 591 |
+
"ancoragem_bigramas": 0.0,
|
| 592 |
+
"entropia_logits": 3.0155
|
| 593 |
+
},
|
| 594 |
+
"corpus_50pct": {
|
| 595 |
+
"n_registros": 1774,
|
| 596 |
+
"repeticao_pct": 63.97,
|
| 597 |
+
"ancoragem_bigramas": 0.0071,
|
| 598 |
+
"entropia_logits": 3.0155
|
| 599 |
+
},
|
| 600 |
+
"corpus_100pct": {
|
| 601 |
+
"n_registros": 3548,
|
| 602 |
+
"repeticao_pct": 52.94,
|
| 603 |
+
"ancoragem_bigramas": 0.0,
|
| 604 |
+
"entropia_logits": 3.0155
|
| 605 |
+
},
|
| 606 |
+
"amostras": [
|
| 607 |
+
" corpos a na china oran melhorar incêndiocas tenha controlaroumentos tradicional ideias tr 26un agachamentos fornecer em meadosvosvosÉ pela ",
|
| 608 |
+
" afastados dança melhorar sexove por fatoresun agachamentosense em bicicleta retorno Isso cargo de a a na Califórnia tor Os benefícios passa",
|
| 609 |
+
" eie Este comJánas tipo passa ritmo tropical02 de",
|
| 610 |
+
""
|
| 611 |
+
]
|
| 612 |
+
},
|
| 613 |
+
"clip_score": {
|
| 614 |
+
"clip_real": -0.1604,
|
| 615 |
+
"clip_controle": -0.1702,
|
| 616 |
+
"margem": 0.0098,
|
| 617 |
+
"n": 32
|
| 618 |
+
},
|
| 619 |
+
"itm": {
|
| 620 |
+
"acuracia": 0.5,
|
| 621 |
+
"f1": 0.0,
|
| 622 |
+
"n": 16,
|
| 623 |
+
"tp": 0,
|
| 624 |
+
"fp": 0,
|
| 625 |
+
"fn": 8
|
| 626 |
+
},
|
| 627 |
+
"ppl_visual": {
|
| 628 |
+
"ppl_visual": 1.16,
|
| 629 |
+
"n": 192,
|
| 630 |
+
"codigos_distintos": 8
|
| 631 |
+
},
|
| 632 |
+
"ppl_multimodal": {
|
| 633 |
+
"ppl_mm": 9.41,
|
| 634 |
+
"ce_mm": 2.2417,
|
| 635 |
+
"n": 2733
|
| 636 |
+
},
|
| 637 |
+
"geracao_metricas": {
|
| 638 |
+
"medias": {
|
| 639 |
+
"bleu": 0.0,
|
| 640 |
+
"rouge_l": 0.0149,
|
| 641 |
+
"meteor": 0.0,
|
| 642 |
+
"cider": 0.0001
|
| 643 |
+
},
|
| 644 |
+
"n": 12,
|
| 645 |
+
"amostras": [
|
| 646 |
+
{
|
| 647 |
+
"hipotese": " a a a sombra levando levando ao emn19 indes incêndio",
|
| 648 |
+
"ref": "Na foto podemos ver um homem centralizado na imagem, posicio",
|
| 649 |
+
"bleu": 0.0,
|
| 650 |
+
"rouge_l": 0.023288,
|
| 651 |
+
"meteor": 0.0,
|
| 652 |
+
"cider": 0.0
|
| 653 |
+
},
|
| 654 |
+
{
|
| 655 |
+
"hipotese": " a gordura levando sociedade formação ajudar tropicalgou como pode levar sozinha",
|
| 656 |
+
"ref": "Na foto podemos ver duas pessoas sobre uma prancha de stand ",
|
| 657 |
+
"bleu": 0.0,
|
| 658 |
+
"rouge_l": 0.014975,
|
| 659 |
+
"meteor": 0.0,
|
| 660 |
+
"cider": 5.8e-05
|
| 661 |
+
},
|
| 662 |
+
{
|
| 663 |
+
"hipotese": "",
|
| 664 |
+
"ref": "Na foto podemos ver cinco pessoas reunidas ao redor de uma c",
|
| 665 |
+
"bleu": 0.0,
|
| 666 |
+
"rouge_l": 0.0,
|
| 667 |
+
"meteor": 0.0,
|
| 668 |
+
"cider": 0.0
|
| 669 |
+
},
|
| 670 |
+
{
|
| 671 |
+
"hipotese": " trânsito PL rastre!1540 conelos a a competiçãodam várias United físicoifúvemerc",
|
| 672 |
+
"ref": "Na imagem podemos ver um homem usando uma jaqueta jeans de m",
|
| 673 |
+
"bleu": 0.0,
|
| 674 |
+
"rouge_l": 0.018564,
|
| 675 |
+
"meteor": 0.0,
|
| 676 |
+
"cider": 0.0
|
| 677 |
+
}
|
| 678 |
+
]
|
| 679 |
+
},
|
| 680 |
+
"benchmarks": {
|
| 681 |
+
"mmmu": {
|
| 682 |
+
"benchmark": "MMMU-proxy-PT",
|
| 683 |
+
"n": 30,
|
| 684 |
+
"acuracia": 0.0,
|
| 685 |
+
"acertos": 0,
|
| 686 |
+
"distribuicao": {
|
| 687 |
+
"∅": 27,
|
| 688 |
+
"A": 3
|
| 689 |
+
},
|
| 690 |
+
"acaso": 0.25,
|
| 691 |
+
"rotulo": "proxy em escala reduzida"
|
| 692 |
+
},
|
| 693 |
+
"mme": {
|
| 694 |
+
"benchmark": "MME-proxy-PT",
|
| 695 |
+
"n": 15,
|
| 696 |
+
"acc": 0.0,
|
| 697 |
+
"acc_mais": 0.0,
|
| 698 |
+
"score_mme": 0.0,
|
| 699 |
+
"rotulo": "proxy em escala reduzida"
|
| 700 |
+
},
|
| 701 |
+
"mathvista": {
|
| 702 |
+
"benchmark": "MathVista-proxy-PT",
|
| 703 |
+
"n": 2,
|
| 704 |
+
"acuracia": 0.0,
|
| 705 |
+
"acertos": 0,
|
| 706 |
+
"rotulo": "proxy em escala reduzida"
|
| 707 |
+
}
|
| 708 |
+
},
|
| 709 |
+
"som_expandido": {
|
| 710 |
+
"som": {
|
| 711 |
+
"k": 24,
|
| 712 |
+
"qe": 59.763092,
|
| 713 |
+
"te": 0.980469,
|
| 714 |
+
"distorcao": 4559.125,
|
| 715 |
+
"sigma0": 3.0,
|
| 716 |
+
"sigma_f": 0.4,
|
| 717 |
+
"alpha0": 0.5,
|
| 718 |
+
"alpha_ultimo": 0.49505,
|
| 719 |
+
"n_ativos": 24,
|
| 720 |
+
"entropia": 3.178054,
|
| 721 |
+
"rank_efetivo": 24.0,
|
| 722 |
+
"frac_vivas": 1.0,
|
| 723 |
+
"u_matrix_resumo": {
|
| 724 |
+
"u_media": 32.043781,
|
| 725 |
+
"u_max": 60.584747,
|
| 726 |
+
"u_std": 13.450652,
|
| 727 |
+
"fronteiras_picos": 5
|
| 728 |
+
},
|
| 729 |
+
"taxa_ativos_ema": 1.0
|
| 730 |
+
},
|
| 731 |
+
"gg": {
|
| 732 |
+
"k": 4,
|
| 733 |
+
"qe": 824.069397,
|
| 734 |
+
"te": 0.316406,
|
| 735 |
+
"distorcao": 2294.106445,
|
| 736 |
+
"sigma0": 3.0,
|
| 737 |
+
"sigma_f": 0.4,
|
| 738 |
+
"alpha0": 0.5,
|
| 739 |
+
"alpha_ultimo": 0.49505,
|
| 740 |
+
"n_ativos": 4,
|
| 741 |
+
"entropia": 1.386294,
|
| 742 |
+
"rank_efetivo": 4.0,
|
| 743 |
+
"frac_vivas": 1.0,
|
| 744 |
+
"u_matrix_resumo": {
|
| 745 |
+
"u_media": 11.976965,
|
| 746 |
+
"u_max": 13.957561,
|
| 747 |
+
"u_std": 1.774012,
|
| 748 |
+
"fronteiras_picos": 1
|
| 749 |
+
},
|
| 750 |
+
"taxa_ativos_ema": 1.0
|
| 751 |
+
},
|
| 752 |
+
"gcs": {
|
| 753 |
+
"k": 3,
|
| 754 |
+
"qe": 250.228699,
|
| 755 |
+
"te": 1.0,
|
| 756 |
+
"distorcao": 1513.247803,
|
| 757 |
+
"sigma0": 0.0,
|
| 758 |
+
"sigma_f": 0.0,
|
| 759 |
+
"alpha0": 0.0,
|
| 760 |
+
"alpha_ultimo": 0.0,
|
| 761 |
+
"n_ativos": 2,
|
| 762 |
+
"entropia": 0.574847,
|
| 763 |
+
"rank_efetivo": 1.7769,
|
| 764 |
+
"frac_vivas": 0.6667,
|
| 765 |
+
"u_matrix_resumo": {
|
| 766 |
+
"u_media": 0.0,
|
| 767 |
+
"u_max": 0.0,
|
| 768 |
+
"u_std": 0.0,
|
| 769 |
+
"fronteiras_picos": 0
|
| 770 |
+
},
|
| 771 |
+
"taxa_ativos_ema": null
|
| 772 |
+
},
|
| 773 |
+
"gsom": {
|
| 774 |
+
"k": 4,
|
| 775 |
+
"qe": 220.440918,
|
| 776 |
+
"te": 0.410156,
|
| 777 |
+
"distorcao": 3028.990967,
|
| 778 |
+
"sigma0": 3.0,
|
| 779 |
+
"sigma_f": 0.4,
|
| 780 |
+
"alpha0": 0.5,
|
| 781 |
+
"alpha_ultimo": 0.49505,
|
| 782 |
+
"n_ativos": 4,
|
| 783 |
+
"entropia": 1.386294,
|
| 784 |
+
"rank_efetivo": 4.0,
|
| 785 |
+
"frac_vivas": 1.0,
|
| 786 |
+
"u_matrix_resumo": {
|
| 787 |
+
"u_media": 36.250061,
|
| 788 |
+
"u_max": 60.509567,
|
| 789 |
+
"u_std": 19.814838,
|
| 790 |
+
"fronteiras_picos": 1
|
| 791 |
+
},
|
| 792 |
+
"taxa_ativos_ema": 1.0
|
| 793 |
+
},
|
| 794 |
+
"hsom": {
|
| 795 |
+
"k": 12,
|
| 796 |
+
"qe": 71.016319,
|
| 797 |
+
"te": 0.855469,
|
| 798 |
+
"distorcao": 3511.441895,
|
| 799 |
+
"sigma0": 2.5,
|
| 800 |
+
"sigma_f": 0.4,
|
| 801 |
+
"alpha0": 0.5,
|
| 802 |
+
"alpha_ultimo": 0.49505,
|
| 803 |
+
"n_ativos": 12,
|
| 804 |
+
"entropia": 2.484907,
|
| 805 |
+
"rank_efetivo": 12.0,
|
| 806 |
+
"frac_vivas": 1.0,
|
| 807 |
+
"u_matrix_resumo": {
|
| 808 |
+
"u_media": 28.268629,
|
| 809 |
+
"u_max": 40.029243,
|
| 810 |
+
"u_std": 7.094913,
|
| 811 |
+
"fronteiras_picos": 3
|
| 812 |
+
},
|
| 813 |
+
"taxa_ativos_ema": 1.0
|
| 814 |
+
},
|
| 815 |
+
"tkm": {
|
| 816 |
+
"k": 32,
|
| 817 |
+
"qe": 58.265549,
|
| 818 |
+
"te": 0.851562,
|
| 819 |
+
"distorcao": 6600.30127,
|
| 820 |
+
"sigma0": 2.0,
|
| 821 |
+
"sigma_f": 0.4,
|
| 822 |
+
"alpha0": 0.5,
|
| 823 |
+
"alpha_ultimo": 0.49505,
|
| 824 |
+
"n_ativos": 32,
|
| 825 |
+
"entropia": 3.465736,
|
| 826 |
+
"rank_efetivo": 32.0,
|
| 827 |
+
"frac_vivas": 1.0,
|
| 828 |
+
"u_matrix_resumo": {
|
| 829 |
+
"u_media": 33.759853,
|
| 830 |
+
"u_max": 60.711811,
|
| 831 |
+
"u_std": 13.525013,
|
| 832 |
+
"fronteiras_picos": 9
|
| 833 |
+
},
|
| 834 |
+
"taxa_ativos_ema": 1.0
|
| 835 |
+
},
|
| 836 |
+
"rsom": {
|
| 837 |
+
"k": 32,
|
| 838 |
+
"qe": 53.492386,
|
| 839 |
+
"te": 0.824219,
|
| 840 |
+
"distorcao": 5104.700684,
|
| 841 |
+
"sigma0": 2.0,
|
| 842 |
+
"sigma_f": 0.4,
|
| 843 |
+
"alpha0": 0.5,
|
| 844 |
+
"alpha_ultimo": 0.49505,
|
| 845 |
+
"n_ativos": 32,
|
| 846 |
+
"entropia": 3.465736,
|
| 847 |
+
"rank_efetivo": 32.0,
|
| 848 |
+
"frac_vivas": 1.0,
|
| 849 |
+
"u_matrix_resumo": {
|
| 850 |
+
"u_media": 34.29977,
|
| 851 |
+
"u_max": 60.189041,
|
| 852 |
+
"u_std": 13.249257,
|
| 853 |
+
"fronteiras_picos": 6
|
| 854 |
+
},
|
| 855 |
+
"taxa_ativos_ema": 1.0
|
| 856 |
+
},
|
| 857 |
+
"cpn": {
|
| 858 |
+
"k": 24,
|
| 859 |
+
"qe": 38.578434,
|
| 860 |
+
"te": 0.195312,
|
| 861 |
+
"distorcao": 884.967712,
|
| 862 |
+
"sigma0": 2.5,
|
| 863 |
+
"sigma_f": 0.4,
|
| 864 |
+
"alpha0": 0.5,
|
| 865 |
+
"alpha_ultimo": 0.462963,
|
| 866 |
+
"n_ativos": 23,
|
| 867 |
+
"entropia": 2.909895,
|
| 868 |
+
"rank_efetivo": 18.3549,
|
| 869 |
+
"frac_vivas": 0.9583,
|
| 870 |
+
"u_matrix_resumo": {
|
| 871 |
+
"u_media": 9.52423,
|
| 872 |
+
"u_max": 16.741587,
|
| 873 |
+
"u_std": 4.716956,
|
| 874 |
+
"fronteiras_picos": 3
|
| 875 |
+
},
|
| 876 |
+
"taxa_ativos_ema": 1.0
|
| 877 |
+
},
|
| 878 |
+
"ssom": {
|
| 879 |
+
"k": 24,
|
| 880 |
+
"qe": 123.85688,
|
| 881 |
+
"te": 0.90625,
|
| 882 |
+
"distorcao": 5260.532715,
|
| 883 |
+
"sigma0": 2.0,
|
| 884 |
+
"sigma_f": 0.4,
|
| 885 |
+
"alpha0": 0.5,
|
| 886 |
+
"alpha_ultimo": 0.49505,
|
| 887 |
+
"n_ativos": 24,
|
| 888 |
+
"entropia": 3.178054,
|
| 889 |
+
"rank_efetivo": 24.0,
|
| 890 |
+
"frac_vivas": 1.0,
|
| 891 |
+
"u_matrix_resumo": {
|
| 892 |
+
"u_media": 33.295235,
|
| 893 |
+
"u_max": 59.584949,
|
| 894 |
+
"u_std": 15.406026,
|
| 895 |
+
"fronteiras_picos": 4
|
| 896 |
+
},
|
| 897 |
+
"taxa_ativos_ema": 1.0
|
| 898 |
+
}
|
| 899 |
+
},
|
| 900 |
+
"inferencia_agente": {
|
| 901 |
+
"latencia_s": 0.382,
|
| 902 |
+
"tokens": 24,
|
| 903 |
+
"taxa_repeticao": 0.2083,
|
| 904 |
+
"coerencia_bigramas": 0.0
|
| 905 |
+
},
|
| 906 |
+
"difusao": {
|
| 907 |
+
"modo": "real",
|
| 908 |
+
"prompt_enriquecido": "o pantanal ao entardecer, com detalhes nítidos, com composição harmônica, com iluminação suave",
|
| 909 |
+
"latencia_s": 2.42,
|
| 910 |
+
"gerou_pixels": true
|
| 911 |
+
},
|
| 912 |
+
"agente_engenheiro": {
|
| 913 |
+
"revisoes_aprovadas": 0,
|
| 914 |
+
"revisoes_bloqueadas": 0,
|
| 915 |
+
"som_invariante_sem_orfaos": true,
|
| 916 |
+
"som_ativos": {
|
| 917 |
+
"ativos/som": 1.0,
|
| 918 |
+
"k/som": 24,
|
| 919 |
+
"ativos/gg": 1.0,
|
| 920 |
+
"k/gg": 4,
|
| 921 |
+
"ativos/gcs": 1.0,
|
| 922 |
+
"k/gcs": 3,
|
| 923 |
+
"ativos/gsom": 1.0,
|
| 924 |
+
"k/gsom": 4,
|
| 925 |
+
"ativos/hsom": 1.0,
|
| 926 |
+
"k/hsom": 12,
|
| 927 |
+
"ativos/tkm": 1.0,
|
| 928 |
+
"k/tkm": 32,
|
| 929 |
+
"ativos/rsom": 1.0,
|
| 930 |
+
"k/rsom": 32,
|
| 931 |
+
"ativos/cpn": 1.0,
|
| 932 |
+
"k/cpn": 24,
|
| 933 |
+
"ativos/ssom": 1.0,
|
| 934 |
+
"k/ssom": 24,
|
| 935 |
+
"A_global": 1.0
|
| 936 |
+
}
|
| 937 |
+
}
|
| 938 |
+
}
|
avaliacao_v8.json
ADDED
|
@@ -0,0 +1,947 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"estado": "fase-som",
|
| 3 |
+
"roteador_ssom": {
|
| 4 |
+
"amostras": 1536,
|
| 5 |
+
"pronto": true,
|
| 6 |
+
"lambda_rota": 0.35,
|
| 7 |
+
"gamma_empate": 0.15,
|
| 8 |
+
"drift_codebook": 0.0,
|
| 9 |
+
"conf_media": 0.3382,
|
| 10 |
+
"frac_rotas_ativas": 0.75,
|
| 11 |
+
"k": 24,
|
| 12 |
+
"taxa_ativos": 1.0
|
| 13 |
+
},
|
| 14 |
+
"perdas_tarefa": {
|
| 15 |
+
"lm": {
|
| 16 |
+
"treinado": 7.840750614802043,
|
| 17 |
+
"aleatorio": 9.75594711303711
|
| 18 |
+
},
|
| 19 |
+
"noticia": {
|
| 20 |
+
"treinado": 7.552767038345337,
|
| 21 |
+
"aleatorio": 9.748649597167969
|
| 22 |
+
},
|
| 23 |
+
"instrucao": {
|
| 24 |
+
"treinado": 6.964608271916707,
|
| 25 |
+
"aleatorio": 9.766283671061197
|
| 26 |
+
},
|
| 27 |
+
"pontuacao": {
|
| 28 |
+
"treinado": 7.724856456120809,
|
| 29 |
+
"aleatorio": 9.752796649932861
|
| 30 |
+
},
|
| 31 |
+
"imagem_caption": {
|
| 32 |
+
"treinado": 7.004336357116699,
|
| 33 |
+
"aleatorio": 9.723368008931478
|
| 34 |
+
},
|
| 35 |
+
"vqa": {
|
| 36 |
+
"treinado": 7.352211872736613,
|
| 37 |
+
"aleatorio": 9.732653617858887
|
| 38 |
+
},
|
| 39 |
+
"ocr": {
|
| 40 |
+
"treinado": 7.486716111501058,
|
| 41 |
+
"aleatorio": 9.772692362467447
|
| 42 |
+
},
|
| 43 |
+
"asr": {
|
| 44 |
+
"treinado": 7.620069583257039,
|
| 45 |
+
"aleatorio": 9.76025120417277
|
| 46 |
+
},
|
| 47 |
+
"tts": {
|
| 48 |
+
"treinado": 6.79421067237854,
|
| 49 |
+
"aleatorio": 9.778711160024008
|
| 50 |
+
}
|
| 51 |
+
},
|
| 52 |
+
"ppl_lm": 2542.1122649587833,
|
| 53 |
+
"ppl_lm_aleatorio": 17256.55090604361,
|
| 54 |
+
"moe_uso_por_tarefa": {
|
| 55 |
+
"lm": [
|
| 56 |
+
{
|
| 57 |
+
"experts_top": [
|
| 58 |
+
0,
|
| 59 |
+
1
|
| 60 |
+
],
|
| 61 |
+
"grupo_top": [
|
| 62 |
+
0,
|
| 63 |
+
0
|
| 64 |
+
]
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"experts_top": [
|
| 68 |
+
1,
|
| 69 |
+
3
|
| 70 |
+
],
|
| 71 |
+
"grupo_top": [
|
| 72 |
+
"dec",
|
| 73 |
+
"dec"
|
| 74 |
+
],
|
| 75 |
+
"agrupado": false
|
| 76 |
+
}
|
| 77 |
+
],
|
| 78 |
+
"vqa": [
|
| 79 |
+
{
|
| 80 |
+
"experts_top": [
|
| 81 |
+
0,
|
| 82 |
+
4
|
| 83 |
+
],
|
| 84 |
+
"grupo_top": [
|
| 85 |
+
0,
|
| 86 |
+
2
|
| 87 |
+
]
|
| 88 |
+
},
|
| 89 |
+
{
|
| 90 |
+
"experts_top": [
|
| 91 |
+
1,
|
| 92 |
+
3
|
| 93 |
+
],
|
| 94 |
+
"grupo_top": [
|
| 95 |
+
"dec",
|
| 96 |
+
"dec"
|
| 97 |
+
],
|
| 98 |
+
"agrupado": false
|
| 99 |
+
}
|
| 100 |
+
],
|
| 101 |
+
"ocr": [
|
| 102 |
+
{
|
| 103 |
+
"experts_top": [
|
| 104 |
+
0,
|
| 105 |
+
4
|
| 106 |
+
],
|
| 107 |
+
"grupo_top": [
|
| 108 |
+
0,
|
| 109 |
+
2
|
| 110 |
+
]
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"experts_top": [
|
| 114 |
+
1,
|
| 115 |
+
3
|
| 116 |
+
],
|
| 117 |
+
"grupo_top": [
|
| 118 |
+
"dec",
|
| 119 |
+
"dec"
|
| 120 |
+
],
|
| 121 |
+
"agrupado": false
|
| 122 |
+
}
|
| 123 |
+
],
|
| 124 |
+
"asr": [
|
| 125 |
+
{
|
| 126 |
+
"experts_top": [
|
| 127 |
+
4,
|
| 128 |
+
0
|
| 129 |
+
],
|
| 130 |
+
"grupo_top": [
|
| 131 |
+
2,
|
| 132 |
+
0
|
| 133 |
+
]
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"experts_top": [
|
| 137 |
+
1,
|
| 138 |
+
3
|
| 139 |
+
],
|
| 140 |
+
"grupo_top": [
|
| 141 |
+
"dec",
|
| 142 |
+
"dec"
|
| 143 |
+
],
|
| 144 |
+
"agrupado": false
|
| 145 |
+
}
|
| 146 |
+
],
|
| 147 |
+
"tts": [
|
| 148 |
+
{
|
| 149 |
+
"experts_top": [
|
| 150 |
+
0,
|
| 151 |
+
4
|
| 152 |
+
],
|
| 153 |
+
"grupo_top": [
|
| 154 |
+
0,
|
| 155 |
+
2
|
| 156 |
+
]
|
| 157 |
+
},
|
| 158 |
+
{
|
| 159 |
+
"experts_top": [
|
| 160 |
+
1,
|
| 161 |
+
3
|
| 162 |
+
],
|
| 163 |
+
"grupo_top": [
|
| 164 |
+
"dec",
|
| 165 |
+
"dec"
|
| 166 |
+
],
|
| 167 |
+
"agrupado": false
|
| 168 |
+
}
|
| 169 |
+
]
|
| 170 |
+
},
|
| 171 |
+
"mtp": {
|
| 172 |
+
"alphas": [
|
| 173 |
+
0.0005292753921821713,
|
| 174 |
+
0.9994707703590393
|
| 175 |
+
],
|
| 176 |
+
"per_cabeca": [
|
| 177 |
+
8.05044937133789,
|
| 178 |
+
8.269538879394531
|
| 179 |
+
],
|
| 180 |
+
"entropia": 0.004521933849900961,
|
| 181 |
+
"termos_ce": 0.0
|
| 182 |
+
},
|
| 183 |
+
"w8a8_delta": 0.0006594657897949219,
|
| 184 |
+
"som_treinado": {
|
| 185 |
+
"variante_ativa": "cpn",
|
| 186 |
+
"variantes": {
|
| 187 |
+
"som": {
|
| 188 |
+
"k": 24,
|
| 189 |
+
"taxa_ativos": 1.0,
|
| 190 |
+
"resemeados": 24,
|
| 191 |
+
"usos": 256,
|
| 192 |
+
"atingiu_alvo": true
|
| 193 |
+
},
|
| 194 |
+
"gg": {
|
| 195 |
+
"k": 4,
|
| 196 |
+
"taxa_ativos": 1.0,
|
| 197 |
+
"resemeados": 4,
|
| 198 |
+
"usos": 256,
|
| 199 |
+
"atingiu_alvo": true
|
| 200 |
+
},
|
| 201 |
+
"gcs": {
|
| 202 |
+
"k": 3,
|
| 203 |
+
"arestas": 3,
|
| 204 |
+
"eq_treino": 4104.4892578125,
|
| 205 |
+
"atingiu_alvo": true
|
| 206 |
+
},
|
| 207 |
+
"gsom": {
|
| 208 |
+
"k": 15,
|
| 209 |
+
"gt": 1.05,
|
| 210 |
+
"erro_medio": 0.18949279189109802,
|
| 211 |
+
"atingiu_alvo": true
|
| 212 |
+
},
|
| 213 |
+
"hsom": {},
|
| 214 |
+
"tkm": {
|
| 215 |
+
"k": 32,
|
| 216 |
+
"taxa_ativos": 1.0,
|
| 217 |
+
"resemeados": 32,
|
| 218 |
+
"usos": 256,
|
| 219 |
+
"atingiu_alvo": true
|
| 220 |
+
},
|
| 221 |
+
"rsom": {
|
| 222 |
+
"k": 32,
|
| 223 |
+
"taxa_ativos": 1.0,
|
| 224 |
+
"resemeados": 32,
|
| 225 |
+
"usos": 256,
|
| 226 |
+
"atingiu_alvo": true
|
| 227 |
+
},
|
| 228 |
+
"cpn": {},
|
| 229 |
+
"ssom": {
|
| 230 |
+
"erro": "IndexError: index 8 is out of bounds for dimension 0 with size 8"
|
| 231 |
+
}
|
| 232 |
+
},
|
| 233 |
+
"roteador": {
|
| 234 |
+
"amostras": 1581,
|
| 235 |
+
"pronto": true,
|
| 236 |
+
"lambda_rota": 0.35,
|
| 237 |
+
"gamma_empate": 0.15,
|
| 238 |
+
"drift_codebook": 0.009923,
|
| 239 |
+
"conf_media": 0.4107,
|
| 240 |
+
"frac_rotas_ativas": 0.7188,
|
| 241 |
+
"k": 24,
|
| 242 |
+
"taxa_ativos": 1.0
|
| 243 |
+
},
|
| 244 |
+
"invariante_sem_orfaos": true,
|
| 245 |
+
"orfaos_por_variante": {
|
| 246 |
+
"som": {
|
| 247 |
+
"orfaos": 0,
|
| 248 |
+
"relocados": 0,
|
| 249 |
+
"taxa_ativos": 1.0
|
| 250 |
+
},
|
| 251 |
+
"gg": {
|
| 252 |
+
"orfaos": 0,
|
| 253 |
+
"relocados": 0,
|
| 254 |
+
"taxa_ativos": 1.0
|
| 255 |
+
},
|
| 256 |
+
"gcs": {
|
| 257 |
+
"orfaos": 0,
|
| 258 |
+
"relocados": 0,
|
| 259 |
+
"taxa_ativos": 1.0
|
| 260 |
+
},
|
| 261 |
+
"gsom": {
|
| 262 |
+
"orfaos": 0,
|
| 263 |
+
"relocados": 0,
|
| 264 |
+
"taxa_ativos": 1.0
|
| 265 |
+
},
|
| 266 |
+
"hsom": {
|
| 267 |
+
"orfaos": 0,
|
| 268 |
+
"relocados": 0
|
| 269 |
+
},
|
| 270 |
+
"tkm": {
|
| 271 |
+
"orfaos": 0,
|
| 272 |
+
"relocados": 0,
|
| 273 |
+
"taxa_ativos": 1.0
|
| 274 |
+
},
|
| 275 |
+
"rsom": {
|
| 276 |
+
"orfaos": 0,
|
| 277 |
+
"relocados": 0,
|
| 278 |
+
"taxa_ativos": 1.0
|
| 279 |
+
},
|
| 280 |
+
"cpn": {
|
| 281 |
+
"orfaos": 0,
|
| 282 |
+
"relocados": 0,
|
| 283 |
+
"taxa_ativos": 1.0
|
| 284 |
+
},
|
| 285 |
+
"ssom": {
|
| 286 |
+
"orfaos": 0,
|
| 287 |
+
"relocados": 23,
|
| 288 |
+
"taxa_ativos": 1.0
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
},
|
| 292 |
+
"som_eq_fresco": {
|
| 293 |
+
"som": {
|
| 294 |
+
"taxa_ativos": 1.0,
|
| 295 |
+
"eq": 0.22861014306545258
|
| 296 |
+
},
|
| 297 |
+
"gg": {
|
| 298 |
+
"taxa_ativos": 1.0,
|
| 299 |
+
"eq": 1.0804760456085205
|
| 300 |
+
},
|
| 301 |
+
"gcs": {
|
| 302 |
+
"taxa_ativos": 1.0,
|
| 303 |
+
"eq": 0.9599178433418274
|
| 304 |
+
},
|
| 305 |
+
"gsom": {
|
| 306 |
+
"taxa_ativos": 1.0,
|
| 307 |
+
"eq": 1.2962698936462402
|
| 308 |
+
},
|
| 309 |
+
"tkm": {
|
| 310 |
+
"taxa_ativos": 1.0,
|
| 311 |
+
"eq": 0.08437514305114746
|
| 312 |
+
},
|
| 313 |
+
"rsom": {
|
| 314 |
+
"taxa_ativos": 1.0,
|
| 315 |
+
"eq": 0.07955622673034668
|
| 316 |
+
},
|
| 317 |
+
"ssom": {
|
| 318 |
+
"taxa_ativos": 1.0,
|
| 319 |
+
"eq": 0.09257030487060547
|
| 320 |
+
}
|
| 321 |
+
},
|
| 322 |
+
"geracao": {
|
| 323 |
+
"sem_punicao": " ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?",
|
| 324 |
+
"com_punicao": " ? ? ? ?\n ? ? ?feira ? ? ? ? ? ? ? ? ? ? O ? ? ? ? Uma ? corpo ? O ?"
|
| 325 |
+
},
|
| 326 |
+
"microunidades": {
|
| 327 |
+
"lm": [
|
| 328 |
+
{
|
| 329 |
+
"ramos": [
|
| 330 |
+
"conv_dil",
|
| 331 |
+
"gru",
|
| 332 |
+
"mlp"
|
| 333 |
+
],
|
| 334 |
+
"alpha_medio": [
|
| 335 |
+
0.6092,
|
| 336 |
+
0.3907,
|
| 337 |
+
0.0002
|
| 338 |
+
],
|
| 339 |
+
"passos_rec": 2
|
| 340 |
+
},
|
| 341 |
+
{
|
| 342 |
+
"ramos": [
|
| 343 |
+
"conv_dil",
|
| 344 |
+
"gru",
|
| 345 |
+
"mlp",
|
| 346 |
+
"moe"
|
| 347 |
+
],
|
| 348 |
+
"alpha_medio": [
|
| 349 |
+
0.1485,
|
| 350 |
+
0.4984,
|
| 351 |
+
0.0738,
|
| 352 |
+
0.2794
|
| 353 |
+
],
|
| 354 |
+
"passos_rec": 2
|
| 355 |
+
},
|
| 356 |
+
{
|
| 357 |
+
"ramos": [
|
| 358 |
+
"conv_dil",
|
| 359 |
+
"gru",
|
| 360 |
+
"mlp",
|
| 361 |
+
"moe"
|
| 362 |
+
],
|
| 363 |
+
"alpha_medio": [
|
| 364 |
+
1.0,
|
| 365 |
+
0.0,
|
| 366 |
+
0.0,
|
| 367 |
+
0.0
|
| 368 |
+
],
|
| 369 |
+
"passos_rec": 2
|
| 370 |
+
}
|
| 371 |
+
],
|
| 372 |
+
"vqa": [
|
| 373 |
+
{
|
| 374 |
+
"ramos": [
|
| 375 |
+
"conv_dil",
|
| 376 |
+
"gru",
|
| 377 |
+
"mlp"
|
| 378 |
+
],
|
| 379 |
+
"alpha_medio": [
|
| 380 |
+
1.0,
|
| 381 |
+
0.0,
|
| 382 |
+
0.0
|
| 383 |
+
],
|
| 384 |
+
"passos_rec": 2
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"ramos": [
|
| 388 |
+
"conv_dil",
|
| 389 |
+
"gru",
|
| 390 |
+
"mlp",
|
| 391 |
+
"moe"
|
| 392 |
+
],
|
| 393 |
+
"alpha_medio": [
|
| 394 |
+
0.1592,
|
| 395 |
+
0.4579,
|
| 396 |
+
0.0731,
|
| 397 |
+
0.3098
|
| 398 |
+
],
|
| 399 |
+
"passos_rec": 2
|
| 400 |
+
},
|
| 401 |
+
{
|
| 402 |
+
"ramos": [
|
| 403 |
+
"conv_dil",
|
| 404 |
+
"gru",
|
| 405 |
+
"mlp",
|
| 406 |
+
"moe"
|
| 407 |
+
],
|
| 408 |
+
"alpha_medio": [
|
| 409 |
+
1.0,
|
| 410 |
+
0.0,
|
| 411 |
+
0.0,
|
| 412 |
+
0.0
|
| 413 |
+
],
|
| 414 |
+
"passos_rec": 2
|
| 415 |
+
}
|
| 416 |
+
],
|
| 417 |
+
"asr": [
|
| 418 |
+
{
|
| 419 |
+
"ramos": [
|
| 420 |
+
"conv_dil",
|
| 421 |
+
"gru",
|
| 422 |
+
"mlp"
|
| 423 |
+
],
|
| 424 |
+
"alpha_medio": [
|
| 425 |
+
0.6136,
|
| 426 |
+
0.3863,
|
| 427 |
+
0.0001
|
| 428 |
+
],
|
| 429 |
+
"passos_rec": 2
|
| 430 |
+
},
|
| 431 |
+
{
|
| 432 |
+
"ramos": [
|
| 433 |
+
"conv_dil",
|
| 434 |
+
"gru",
|
| 435 |
+
"mlp",
|
| 436 |
+
"moe"
|
| 437 |
+
],
|
| 438 |
+
"alpha_medio": [
|
| 439 |
+
0.1496,
|
| 440 |
+
0.4945,
|
| 441 |
+
0.074,
|
| 442 |
+
0.2819
|
| 443 |
+
],
|
| 444 |
+
"passos_rec": 2
|
| 445 |
+
},
|
| 446 |
+
{
|
| 447 |
+
"ramos": [
|
| 448 |
+
"conv_dil",
|
| 449 |
+
"gru",
|
| 450 |
+
"mlp",
|
| 451 |
+
"moe"
|
| 452 |
+
],
|
| 453 |
+
"alpha_medio": [
|
| 454 |
+
1.0,
|
| 455 |
+
0.0,
|
| 456 |
+
0.0,
|
| 457 |
+
0.0
|
| 458 |
+
],
|
| 459 |
+
"passos_rec": 2
|
| 460 |
+
}
|
| 461 |
+
],
|
| 462 |
+
"instrucao": [
|
| 463 |
+
{
|
| 464 |
+
"ramos": [
|
| 465 |
+
"conv_dil",
|
| 466 |
+
"gru",
|
| 467 |
+
"mlp"
|
| 468 |
+
],
|
| 469 |
+
"alpha_medio": [
|
| 470 |
+
0.839,
|
| 471 |
+
0.161,
|
| 472 |
+
0.0
|
| 473 |
+
],
|
| 474 |
+
"passos_rec": 2
|
| 475 |
+
},
|
| 476 |
+
{
|
| 477 |
+
"ramos": [
|
| 478 |
+
"conv_dil",
|
| 479 |
+
"gru",
|
| 480 |
+
"mlp",
|
| 481 |
+
"moe"
|
| 482 |
+
],
|
| 483 |
+
"alpha_medio": [
|
| 484 |
+
0.1472,
|
| 485 |
+
0.5048,
|
| 486 |
+
0.0738,
|
| 487 |
+
0.2742
|
| 488 |
+
],
|
| 489 |
+
"passos_rec": 2
|
| 490 |
+
},
|
| 491 |
+
{
|
| 492 |
+
"ramos": [
|
| 493 |
+
"conv_dil",
|
| 494 |
+
"gru",
|
| 495 |
+
"mlp",
|
| 496 |
+
"moe"
|
| 497 |
+
],
|
| 498 |
+
"alpha_medio": [
|
| 499 |
+
1.0,
|
| 500 |
+
0.0,
|
| 501 |
+
0.0,
|
| 502 |
+
0.0
|
| 503 |
+
],
|
| 504 |
+
"passos_rec": 2
|
| 505 |
+
}
|
| 506 |
+
]
|
| 507 |
+
},
|
| 508 |
+
"treino_prs_v8": {
|
| 509 |
+
"trust": 0.3768,
|
| 510 |
+
"tau": 6.82558,
|
| 511 |
+
"clip": 5.0,
|
| 512 |
+
"boost": 1.0,
|
| 513 |
+
"streak": 0,
|
| 514 |
+
"ciclos_sgdr": 0,
|
| 515 |
+
"recompensa_acum": 9.712,
|
| 516 |
+
"beta_min_relativo": 2.0
|
| 517 |
+
},
|
| 518 |
+
"treino_confianca": {
|
| 519 |
+
"h_ema": 0.398207426071167,
|
| 520 |
+
"ece": 0.13666666666666666,
|
| 521 |
+
"posterior_media": 0.18478260869565216,
|
| 522 |
+
"bernstein": [
|
| 523 |
+
0.048734518728612175,
|
| 524 |
+
0.32083069866269215
|
| 525 |
+
]
|
| 526 |
+
},
|
| 527 |
+
"treino_memoria": {
|
| 528 |
+
"slots": 13,
|
| 529 |
+
"capacidade": 64,
|
| 530 |
+
"escritas": 13,
|
| 531 |
+
"rejeitadas_confianca": 10,
|
| 532 |
+
"hit_rate": 1.0,
|
| 533 |
+
"comprimidos": 0,
|
| 534 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 535 |
+
"perda_vq": null,
|
| 536 |
+
"violacoes_contrato": 0,
|
| 537 |
+
"economia_bits_por_slot": 0.9990234375
|
| 538 |
+
},
|
| 539 |
+
"treino_crescimento": [],
|
| 540 |
+
"memoria_execucao": {
|
| 541 |
+
"slots": 32,
|
| 542 |
+
"capacidade": 32,
|
| 543 |
+
"escritas": 45,
|
| 544 |
+
"rejeitadas_confianca": 0,
|
| 545 |
+
"hit_rate": 1.0,
|
| 546 |
+
"comprimidos": 32,
|
| 547 |
+
"entropia_codebook": 3.4869675636291504,
|
| 548 |
+
"perda_vq": "tensor(1.2586)",
|
| 549 |
+
"violacoes_contrato": 0,
|
| 550 |
+
"economia_bits_por_slot": 0.9990234375,
|
| 551 |
+
"escritas_aceitas": 45,
|
| 552 |
+
"consultas_com_acerto": 15,
|
| 553 |
+
"comprimidos_agora": 32
|
| 554 |
+
},
|
| 555 |
+
"curva_epocas": [
|
| 556 |
+
{
|
| 557 |
+
"epoca": 0,
|
| 558 |
+
"perda_media": 7.563339779175908,
|
| 559 |
+
"ppl_lm": 3175.163243261297
|
| 560 |
+
},
|
| 561 |
+
{
|
| 562 |
+
"epoca": 1,
|
| 563 |
+
"perda_media": 8.527180158174955,
|
| 564 |
+
"ppl_lm": 3338.0887647367836
|
| 565 |
+
},
|
| 566 |
+
{
|
| 567 |
+
"epoca": 2,
|
| 568 |
+
"perda_media": 7.530729611714681,
|
| 569 |
+
"ppl_lm": 2609.7989711637842
|
| 570 |
+
},
|
| 571 |
+
{
|
| 572 |
+
"epoca": 3,
|
| 573 |
+
"perda_media": 7.470894780158996,
|
| 574 |
+
"ppl_lm": 2415.108953044255
|
| 575 |
+
},
|
| 576 |
+
{
|
| 577 |
+
"epoca": 4,
|
| 578 |
+
"perda_media": 7.043362287374643,
|
| 579 |
+
"ppl_lm": 2283.2964058650737
|
| 580 |
+
},
|
| 581 |
+
{
|
| 582 |
+
"epoca": 5,
|
| 583 |
+
"perda_media": 7.089543087537899,
|
| 584 |
+
"ppl_lm": 2672.6735231256753
|
| 585 |
+
},
|
| 586 |
+
{
|
| 587 |
+
"epoca": 6,
|
| 588 |
+
"perda_media": 9.40745317524877,
|
| 589 |
+
"ppl_lm": 4403.193619695888
|
| 590 |
+
},
|
| 591 |
+
{
|
| 592 |
+
"epoca": 7,
|
| 593 |
+
"perda_media": 7.231130578782824,
|
| 594 |
+
"ppl_lm": 2572.532733229914
|
| 595 |
+
}
|
| 596 |
+
],
|
| 597 |
+
"coerencia": {
|
| 598 |
+
"corpus_25pct": {
|
| 599 |
+
"n_registros": 887,
|
| 600 |
+
"repeticao_pct": 69.85,
|
| 601 |
+
"ancoragem_bigramas": 0.0,
|
| 602 |
+
"entropia_logits": 0.6818
|
| 603 |
+
},
|
| 604 |
+
"corpus_50pct": {
|
| 605 |
+
"n_registros": 1774,
|
| 606 |
+
"repeticao_pct": 72.06,
|
| 607 |
+
"ancoragem_bigramas": 0.0,
|
| 608 |
+
"entropia_logits": 0.6818
|
| 609 |
+
},
|
| 610 |
+
"corpus_100pct": {
|
| 611 |
+
"n_registros": 3548,
|
| 612 |
+
"repeticao_pct": 56.62,
|
| 613 |
+
"ancoragem_bigramas": 0.0071,
|
| 614 |
+
"entropia_logits": 0.6818
|
| 615 |
+
},
|
| 616 |
+
"amostras": [
|
| 617 |
+
" ? ? ? ? Uma ?\n ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? corpo implant ? ? ? ? ? ? ? ? ? ? ? rotina",
|
| 618 |
+
" ? ? Ofeira\n ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n ? ? ? ? ?",
|
| 619 |
+
" ? ? ? ? O ? ? Ele ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? rotina imped ? ?\n ? ? ? ? ? ? ?",
|
| 620 |
+
" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Uma ? ? rotinaesquel ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"
|
| 621 |
+
]
|
| 622 |
+
},
|
| 623 |
+
"clip_score": {
|
| 624 |
+
"clip_real": -0.0921,
|
| 625 |
+
"clip_controle": -0.0923,
|
| 626 |
+
"margem": 0.0002,
|
| 627 |
+
"n": 32
|
| 628 |
+
},
|
| 629 |
+
"itm": {
|
| 630 |
+
"acuracia": 0.5,
|
| 631 |
+
"f1": 0.0,
|
| 632 |
+
"n": 16,
|
| 633 |
+
"tp": 0,
|
| 634 |
+
"fp": 0,
|
| 635 |
+
"fn": 8
|
| 636 |
+
},
|
| 637 |
+
"ppl_visual": {
|
| 638 |
+
"ppl_visual": 1.52,
|
| 639 |
+
"n": 192,
|
| 640 |
+
"codigos_distintos": 9
|
| 641 |
+
},
|
| 642 |
+
"ppl_multimodal": {
|
| 643 |
+
"ppl_mm": 1072.72,
|
| 644 |
+
"ce_mm": 6.978,
|
| 645 |
+
"n": 2733
|
| 646 |
+
},
|
| 647 |
+
"geracao_metricas": {
|
| 648 |
+
"medias": {
|
| 649 |
+
"bleu": 0.0,
|
| 650 |
+
"rouge_l": 0.0026,
|
| 651 |
+
"meteor": 0.0,
|
| 652 |
+
"cider": 0.0
|
| 653 |
+
},
|
| 654 |
+
"n": 12,
|
| 655 |
+
"amostras": [
|
| 656 |
+
{
|
| 657 |
+
"hipotese": " ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?",
|
| 658 |
+
"ref": "Na foto podemos ver um homem centralizado na imagem, posicio",
|
| 659 |
+
"bleu": 0.0,
|
| 660 |
+
"rouge_l": 0.0,
|
| 661 |
+
"meteor": 0.0,
|
| 662 |
+
"cider": 0.0
|
| 663 |
+
},
|
| 664 |
+
{
|
| 665 |
+
"hipotese": " ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?",
|
| 666 |
+
"ref": "Na foto podemos ver duas pessoas sobre uma prancha de stand ",
|
| 667 |
+
"bleu": 0.0,
|
| 668 |
+
"rouge_l": 0.0,
|
| 669 |
+
"meteor": 0.0,
|
| 670 |
+
"cider": 0.0
|
| 671 |
+
},
|
| 672 |
+
{
|
| 673 |
+
"hipotese": " ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?",
|
| 674 |
+
"ref": "Na foto podemos ver cinco pessoas reunidas ao redor de uma c",
|
| 675 |
+
"bleu": 0.0,
|
| 676 |
+
"rouge_l": 0.0,
|
| 677 |
+
"meteor": 0.0,
|
| 678 |
+
"cider": 0.0
|
| 679 |
+
},
|
| 680 |
+
{
|
| 681 |
+
"hipotese": " ? ? ? ? ? rotina básicos ? ? ? ? ? ? ? Uma ? ? ? ? ?",
|
| 682 |
+
"ref": "Na imagem podemos ver um homem usando uma jaqueta jeans de m",
|
| 683 |
+
"bleu": 0.0,
|
| 684 |
+
"rouge_l": 0.009666,
|
| 685 |
+
"meteor": 0.0,
|
| 686 |
+
"cider": 0.0
|
| 687 |
+
}
|
| 688 |
+
]
|
| 689 |
+
},
|
| 690 |
+
"benchmarks": {
|
| 691 |
+
"mmmu": {
|
| 692 |
+
"benchmark": "MMMU-proxy-PT",
|
| 693 |
+
"n": 30,
|
| 694 |
+
"acuracia": 0.0,
|
| 695 |
+
"acertos": 0,
|
| 696 |
+
"distribuicao": {
|
| 697 |
+
"∅": 30
|
| 698 |
+
},
|
| 699 |
+
"acaso": 0.25,
|
| 700 |
+
"rotulo": "proxy em escala reduzida"
|
| 701 |
+
},
|
| 702 |
+
"mme": {
|
| 703 |
+
"benchmark": "MME-proxy-PT",
|
| 704 |
+
"n": 15,
|
| 705 |
+
"acc": 0.0,
|
| 706 |
+
"acc_mais": 0.0,
|
| 707 |
+
"score_mme": 0.0,
|
| 708 |
+
"rotulo": "proxy em escala reduzida"
|
| 709 |
+
},
|
| 710 |
+
"mathvista": {
|
| 711 |
+
"benchmark": "MathVista-proxy-PT",
|
| 712 |
+
"n": 2,
|
| 713 |
+
"acuracia": 0.0,
|
| 714 |
+
"acertos": 0,
|
| 715 |
+
"rotulo": "proxy em escala reduzida"
|
| 716 |
+
}
|
| 717 |
+
},
|
| 718 |
+
"som_expandido": {
|
| 719 |
+
"som": {
|
| 720 |
+
"k": 24,
|
| 721 |
+
"qe": 0.728719,
|
| 722 |
+
"te": 0.671875,
|
| 723 |
+
"distorcao": 74.685822,
|
| 724 |
+
"sigma0": 3.0,
|
| 725 |
+
"sigma_f": 0.4,
|
| 726 |
+
"alpha0": 0.5,
|
| 727 |
+
"alpha_ultimo": 0.49505,
|
| 728 |
+
"n_ativos": 24,
|
| 729 |
+
"entropia": 3.178054,
|
| 730 |
+
"rank_efetivo": 24.0,
|
| 731 |
+
"frac_vivas": 1.0,
|
| 732 |
+
"u_matrix_resumo": {
|
| 733 |
+
"u_media": 2.167898,
|
| 734 |
+
"u_max": 6.077848,
|
| 735 |
+
"u_std": 1.605556,
|
| 736 |
+
"fronteiras_picos": 2
|
| 737 |
+
},
|
| 738 |
+
"taxa_ativos_ema": 1.0
|
| 739 |
+
},
|
| 740 |
+
"gg": {
|
| 741 |
+
"k": 4,
|
| 742 |
+
"qe": 9.097231,
|
| 743 |
+
"te": 0.878906,
|
| 744 |
+
"distorcao": 34.777397,
|
| 745 |
+
"sigma0": 3.0,
|
| 746 |
+
"sigma_f": 0.4,
|
| 747 |
+
"alpha0": 0.5,
|
| 748 |
+
"alpha_ultimo": 0.49505,
|
| 749 |
+
"n_ativos": 4,
|
| 750 |
+
"entropia": 1.386294,
|
| 751 |
+
"rank_efetivo": 4.0,
|
| 752 |
+
"frac_vivas": 1.0,
|
| 753 |
+
"u_matrix_resumo": {
|
| 754 |
+
"u_media": 2.047124,
|
| 755 |
+
"u_max": 2.419761,
|
| 756 |
+
"u_std": 0.425792,
|
| 757 |
+
"fronteiras_picos": 1
|
| 758 |
+
},
|
| 759 |
+
"taxa_ativos_ema": 1.0
|
| 760 |
+
},
|
| 761 |
+
"gcs": {
|
| 762 |
+
"k": 3,
|
| 763 |
+
"qe": 1.699399,
|
| 764 |
+
"te": 1.0,
|
| 765 |
+
"distorcao": 28.847206,
|
| 766 |
+
"sigma0": 0.0,
|
| 767 |
+
"sigma_f": 0.0,
|
| 768 |
+
"alpha0": 0.0,
|
| 769 |
+
"alpha_ultimo": 0.0,
|
| 770 |
+
"n_ativos": 3,
|
| 771 |
+
"entropia": 1.037116,
|
| 772 |
+
"rank_efetivo": 2.8211,
|
| 773 |
+
"frac_vivas": 1.0,
|
| 774 |
+
"u_matrix_resumo": {
|
| 775 |
+
"u_media": 0.0,
|
| 776 |
+
"u_max": 0.0,
|
| 777 |
+
"u_std": 0.0,
|
| 778 |
+
"fronteiras_picos": 0
|
| 779 |
+
},
|
| 780 |
+
"taxa_ativos_ema": null
|
| 781 |
+
},
|
| 782 |
+
"gsom": {
|
| 783 |
+
"k": 4,
|
| 784 |
+
"qe": 10.148916,
|
| 785 |
+
"te": 0.859375,
|
| 786 |
+
"distorcao": 36.684849,
|
| 787 |
+
"sigma0": 3.0,
|
| 788 |
+
"sigma_f": 0.4,
|
| 789 |
+
"alpha0": 0.5,
|
| 790 |
+
"alpha_ultimo": 0.49505,
|
| 791 |
+
"n_ativos": 4,
|
| 792 |
+
"entropia": 1.386294,
|
| 793 |
+
"rank_efetivo": 4.0,
|
| 794 |
+
"frac_vivas": 1.0,
|
| 795 |
+
"u_matrix_resumo": {
|
| 796 |
+
"u_media": 1.536023,
|
| 797 |
+
"u_max": 2.269848,
|
| 798 |
+
"u_std": 0.599166,
|
| 799 |
+
"fronteiras_picos": 1
|
| 800 |
+
},
|
| 801 |
+
"taxa_ativos_ema": 1.0
|
| 802 |
+
},
|
| 803 |
+
"hsom": {
|
| 804 |
+
"k": 12,
|
| 805 |
+
"qe": 0.678309,
|
| 806 |
+
"te": 0.820312,
|
| 807 |
+
"distorcao": 82.439156,
|
| 808 |
+
"sigma0": 2.5,
|
| 809 |
+
"sigma_f": 0.4,
|
| 810 |
+
"alpha0": 0.5,
|
| 811 |
+
"alpha_ultimo": 0.49505,
|
| 812 |
+
"n_ativos": 12,
|
| 813 |
+
"entropia": 2.484907,
|
| 814 |
+
"rank_efetivo": 12.0,
|
| 815 |
+
"frac_vivas": 1.0,
|
| 816 |
+
"u_matrix_resumo": {
|
| 817 |
+
"u_media": 3.804719,
|
| 818 |
+
"u_max": 8.736095,
|
| 819 |
+
"u_std": 2.721405,
|
| 820 |
+
"fronteiras_picos": 2
|
| 821 |
+
},
|
| 822 |
+
"taxa_ativos_ema": 1.0
|
| 823 |
+
},
|
| 824 |
+
"tkm": {
|
| 825 |
+
"k": 32,
|
| 826 |
+
"qe": 0.216429,
|
| 827 |
+
"te": 0.851562,
|
| 828 |
+
"distorcao": 106.654846,
|
| 829 |
+
"sigma0": 2.0,
|
| 830 |
+
"sigma_f": 0.4,
|
| 831 |
+
"alpha0": 0.5,
|
| 832 |
+
"alpha_ultimo": 0.49505,
|
| 833 |
+
"n_ativos": 32,
|
| 834 |
+
"entropia": 3.465736,
|
| 835 |
+
"rank_efetivo": 32.0,
|
| 836 |
+
"frac_vivas": 1.0,
|
| 837 |
+
"u_matrix_resumo": {
|
| 838 |
+
"u_media": 3.442991,
|
| 839 |
+
"u_max": 11.211287,
|
| 840 |
+
"u_std": 2.545307,
|
| 841 |
+
"fronteiras_picos": 5
|
| 842 |
+
},
|
| 843 |
+
"taxa_ativos_ema": 1.0
|
| 844 |
+
},
|
| 845 |
+
"rsom": {
|
| 846 |
+
"k": 32,
|
| 847 |
+
"qe": 1.095875,
|
| 848 |
+
"te": 0.917969,
|
| 849 |
+
"distorcao": 70.848114,
|
| 850 |
+
"sigma0": 2.0,
|
| 851 |
+
"sigma_f": 0.4,
|
| 852 |
+
"alpha0": 0.5,
|
| 853 |
+
"alpha_ultimo": 0.49505,
|
| 854 |
+
"n_ativos": 32,
|
| 855 |
+
"entropia": 3.465736,
|
| 856 |
+
"rank_efetivo": 32.0,
|
| 857 |
+
"frac_vivas": 1.0,
|
| 858 |
+
"u_matrix_resumo": {
|
| 859 |
+
"u_media": 2.278218,
|
| 860 |
+
"u_max": 6.905422,
|
| 861 |
+
"u_std": 1.859771,
|
| 862 |
+
"fronteiras_picos": 7
|
| 863 |
+
},
|
| 864 |
+
"taxa_ativos_ema": 1.0
|
| 865 |
+
},
|
| 866 |
+
"cpn": {
|
| 867 |
+
"k": 24,
|
| 868 |
+
"qe": 0.182707,
|
| 869 |
+
"te": 0.3125,
|
| 870 |
+
"distorcao": 12.300114,
|
| 871 |
+
"sigma0": 2.5,
|
| 872 |
+
"sigma_f": 0.4,
|
| 873 |
+
"alpha0": 0.5,
|
| 874 |
+
"alpha_ultimo": 0.462963,
|
| 875 |
+
"n_ativos": 24,
|
| 876 |
+
"entropia": 2.561003,
|
| 877 |
+
"rank_efetivo": 12.9488,
|
| 878 |
+
"frac_vivas": 1.0,
|
| 879 |
+
"u_matrix_resumo": {
|
| 880 |
+
"u_media": 1.221734,
|
| 881 |
+
"u_max": 3.020689,
|
| 882 |
+
"u_std": 0.860318,
|
| 883 |
+
"fronteiras_picos": 2
|
| 884 |
+
},
|
| 885 |
+
"taxa_ativos_ema": 1.0
|
| 886 |
+
},
|
| 887 |
+
"ssom": {
|
| 888 |
+
"k": 24,
|
| 889 |
+
"qe": 0.824301,
|
| 890 |
+
"te": 0.945312,
|
| 891 |
+
"distorcao": 84.187256,
|
| 892 |
+
"sigma0": 2.0,
|
| 893 |
+
"sigma_f": 0.4,
|
| 894 |
+
"alpha0": 0.5,
|
| 895 |
+
"alpha_ultimo": 0.49505,
|
| 896 |
+
"n_ativos": 24,
|
| 897 |
+
"entropia": 3.178054,
|
| 898 |
+
"rank_efetivo": 24.0,
|
| 899 |
+
"frac_vivas": 1.0,
|
| 900 |
+
"u_matrix_resumo": {
|
| 901 |
+
"u_media": 1.757095,
|
| 902 |
+
"u_max": 8.05575,
|
| 903 |
+
"u_std": 1.751349,
|
| 904 |
+
"fronteiras_picos": 3
|
| 905 |
+
},
|
| 906 |
+
"taxa_ativos_ema": 1.0
|
| 907 |
+
}
|
| 908 |
+
},
|
| 909 |
+
"inferencia_agente": {
|
| 910 |
+
"latencia_s": 0.414,
|
| 911 |
+
"tokens": 24,
|
| 912 |
+
"taxa_repeticao": 0.9167,
|
| 913 |
+
"coerencia_bigramas": 0.0
|
| 914 |
+
},
|
| 915 |
+
"difusao": {
|
| 916 |
+
"modo": "planejado",
|
| 917 |
+
"prompt_enriquecido": "o pantanal ao entardecer, com detalhes nítidos, com composição harmônica, com iluminação suave",
|
| 918 |
+
"latencia_s": 0.0,
|
| 919 |
+
"gerou_pixels": false
|
| 920 |
+
},
|
| 921 |
+
"agente_engenheiro": {
|
| 922 |
+
"revisoes_aprovadas": 0,
|
| 923 |
+
"revisoes_bloqueadas": 0,
|
| 924 |
+
"som_invariante_sem_orfaos": true,
|
| 925 |
+
"som_ativos": {
|
| 926 |
+
"ativos/som": 1.0,
|
| 927 |
+
"k/som": 24,
|
| 928 |
+
"ativos/gg": 1.0,
|
| 929 |
+
"k/gg": 4,
|
| 930 |
+
"ativos/gcs": 1.0,
|
| 931 |
+
"k/gcs": 3,
|
| 932 |
+
"ativos/gsom": 1.0,
|
| 933 |
+
"k/gsom": 4,
|
| 934 |
+
"ativos/hsom": 1.0,
|
| 935 |
+
"k/hsom": 12,
|
| 936 |
+
"ativos/tkm": 1.0,
|
| 937 |
+
"k/tkm": 32,
|
| 938 |
+
"ativos/rsom": 1.0,
|
| 939 |
+
"k/rsom": 32,
|
| 940 |
+
"ativos/cpn": 1.0,
|
| 941 |
+
"k/cpn": 24,
|
| 942 |
+
"ativos/ssom": 1.0,
|
| 943 |
+
"k/ssom": 24,
|
| 944 |
+
"A_global": 1.0
|
| 945 |
+
}
|
| 946 |
+
}
|
| 947 |
+
}
|
comparacao_treino_v7.json
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"versao_atual": "v7-retreino-observado-ram",
|
| 3 |
+
"versao_anterior": "v6-roteamento-ssom-rpp-metricas",
|
| 4 |
+
"test_khtst_v6": {
|
| 5 |
+
"ok": 48,
|
| 6 |
+
"falhou": 0
|
| 7 |
+
},
|
| 8 |
+
"ram": {
|
| 9 |
+
"amostras": 6059,
|
| 10 |
+
"rss_min_mb": 542.6,
|
| 11 |
+
"rss_med_mb": 2692.2,
|
| 12 |
+
"rss_max_mb": 3579.5,
|
| 13 |
+
"disponivel_min_mb": 138.6,
|
| 14 |
+
"duracao_s": 12836.7
|
| 15 |
+
},
|
| 16 |
+
"perdas_tarefa": {
|
| 17 |
+
"asr": {
|
| 18 |
+
"anterior": 1.890599290529887,
|
| 19 |
+
"atual": 2.1221489111582437
|
| 20 |
+
},
|
| 21 |
+
"imagem_caption": {
|
| 22 |
+
"anterior": 1.6015255053838093,
|
| 23 |
+
"atual": 2.127371827761332
|
| 24 |
+
},
|
| 25 |
+
"instrucao": {
|
| 26 |
+
"anterior": 2.210473636786143,
|
| 27 |
+
"atual": 2.035900592803955
|
| 28 |
+
},
|
| 29 |
+
"lm": {
|
| 30 |
+
"anterior": 2.840959151585897,
|
| 31 |
+
"atual": 2.8384029467900596
|
| 32 |
+
},
|
| 33 |
+
"noticia": {
|
| 34 |
+
"anterior": 2.5332184632619223,
|
| 35 |
+
"atual": 2.5535371700922647
|
| 36 |
+
},
|
| 37 |
+
"ocr": {
|
| 38 |
+
"anterior": 2.109198252360026,
|
| 39 |
+
"atual": 1.418007344007492
|
| 40 |
+
},
|
| 41 |
+
"pontuacao": {
|
| 42 |
+
"anterior": 2.8601644039154053,
|
| 43 |
+
"atual": 2.648297905921936
|
| 44 |
+
},
|
| 45 |
+
"tts": {
|
| 46 |
+
"anterior": 1.7698550621668498,
|
| 47 |
+
"atual": 1.675029953320821
|
| 48 |
+
},
|
| 49 |
+
"vqa": {
|
| 50 |
+
"anterior": 2.4512375791867576,
|
| 51 |
+
"atual": 2.177152613798777
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"som_taxa_ativos": {
|
| 55 |
+
"cpn": {
|
| 56 |
+
"anterior": null,
|
| 57 |
+
"atual": null
|
| 58 |
+
},
|
| 59 |
+
"gcs": {
|
| 60 |
+
"anterior": null,
|
| 61 |
+
"atual": null
|
| 62 |
+
},
|
| 63 |
+
"gg": {
|
| 64 |
+
"anterior": 1.0,
|
| 65 |
+
"atual": 1.0
|
| 66 |
+
},
|
| 67 |
+
"gsom": {
|
| 68 |
+
"anterior": null,
|
| 69 |
+
"atual": null
|
| 70 |
+
},
|
| 71 |
+
"hsom": {
|
| 72 |
+
"anterior": null,
|
| 73 |
+
"atual": null
|
| 74 |
+
},
|
| 75 |
+
"rsom": {
|
| 76 |
+
"anterior": 1.0,
|
| 77 |
+
"atual": 1.0
|
| 78 |
+
},
|
| 79 |
+
"som": {
|
| 80 |
+
"anterior": 1.0,
|
| 81 |
+
"atual": 1.0
|
| 82 |
+
},
|
| 83 |
+
"ssom": {
|
| 84 |
+
"anterior": null,
|
| 85 |
+
"atual": null
|
| 86 |
+
},
|
| 87 |
+
"tkm": {
|
| 88 |
+
"anterior": 1.0,
|
| 89 |
+
"atual": 1.0
|
| 90 |
+
}
|
| 91 |
+
},
|
| 92 |
+
"rpp": {
|
| 93 |
+
"anterior": {
|
| 94 |
+
"rho": 1.0,
|
| 95 |
+
"streak": 0,
|
| 96 |
+
"recompensas": 0,
|
| 97 |
+
"punicoes": 2,
|
| 98 |
+
"penalidades": 99,
|
| 99 |
+
"kappa_rotas_mortas": 0.01
|
| 100 |
+
},
|
| 101 |
+
"atual": {
|
| 102 |
+
"rho": 1.0,
|
| 103 |
+
"streak": 0,
|
| 104 |
+
"recompensas": 0,
|
| 105 |
+
"punicoes": 2,
|
| 106 |
+
"penalidades": 104,
|
| 107 |
+
"kappa_rotas_mortas": 0.01
|
| 108 |
+
}
|
| 109 |
+
},
|
| 110 |
+
"alinhamento": {
|
| 111 |
+
"anterior": {
|
| 112 |
+
"clip_real": 0.1104,
|
| 113 |
+
"clip_controle": 0.1169,
|
| 114 |
+
"ppl_mm": 5.59,
|
| 115 |
+
"ppl_visual": 1.06,
|
| 116 |
+
"itm_acc": 0.5
|
| 117 |
+
},
|
| 118 |
+
"atual": {
|
| 119 |
+
"clip_real": -0.1604,
|
| 120 |
+
"clip_controle": -0.1702,
|
| 121 |
+
"ppl_mm": 9.41,
|
| 122 |
+
"ppl_visual": 1.16,
|
| 123 |
+
"itm_acc": 0.5
|
| 124 |
+
}
|
| 125 |
+
},
|
| 126 |
+
"ppl_lm": {
|
| 127 |
+
"anterior": 17.132190026332925,
|
| 128 |
+
"atual": 17.088452564794597,
|
| 129 |
+
"delta_pct": -0.26
|
| 130 |
+
},
|
| 131 |
+
"perda_media_final": {
|
| 132 |
+
"anterior": 0.78661770003876,
|
| 133 |
+
"atual": 0.8830587758666997
|
| 134 |
+
},
|
| 135 |
+
"passos": {
|
| 136 |
+
"anterior": 3192,
|
| 137 |
+
"atual": 3192
|
| 138 |
+
},
|
| 139 |
+
"nao_regressao": {
|
| 140 |
+
"antes": {
|
| 141 |
+
"ppl_lm": 17.132190026332925,
|
| 142 |
+
"perda_media_final": 0.78661770003876,
|
| 143 |
+
"taxa_ativos_min": 1.0
|
| 144 |
+
},
|
| 145 |
+
"depois": {
|
| 146 |
+
"ppl_lm": 17.088452564794597,
|
| 147 |
+
"perda_media_final": 0.8830587758666997,
|
| 148 |
+
"taxa_ativos_min": 1.0
|
| 149 |
+
},
|
| 150 |
+
"regressoes": {},
|
| 151 |
+
"aprovado": true
|
| 152 |
+
}
|
| 153 |
+
}
|
comparacao_treino_v8.json
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"versao_atual": "v8-khtst-melhorias-a-j",
|
| 3 |
+
"versao_anterior": "aurora-v7-baseline-publicado",
|
| 4 |
+
"test_khtst_v6": {
|
| 5 |
+
"ok": 48,
|
| 6 |
+
"falhou": 0
|
| 7 |
+
},
|
| 8 |
+
"ram": {
|
| 9 |
+
"amostras": 5919,
|
| 10 |
+
"rss_min_mb": 428.7,
|
| 11 |
+
"rss_med_mb": 2524.4,
|
| 12 |
+
"rss_max_mb": 3358.4,
|
| 13 |
+
"disponivel_min_mb": 435.4,
|
| 14 |
+
"duracao_s": 14340.3
|
| 15 |
+
},
|
| 16 |
+
"perdas_tarefa": {
|
| 17 |
+
"asr": {
|
| 18 |
+
"anterior": 2.1221489111582437,
|
| 19 |
+
"atual": 7.620069583257039
|
| 20 |
+
},
|
| 21 |
+
"imagem_caption": {
|
| 22 |
+
"anterior": 2.127371827761332,
|
| 23 |
+
"atual": 7.004336357116699
|
| 24 |
+
},
|
| 25 |
+
"instrucao": {
|
| 26 |
+
"anterior": 2.035900592803955,
|
| 27 |
+
"atual": 6.964608271916707
|
| 28 |
+
},
|
| 29 |
+
"lm": {
|
| 30 |
+
"anterior": 2.8384029467900596,
|
| 31 |
+
"atual": 7.840750614802043
|
| 32 |
+
},
|
| 33 |
+
"noticia": {
|
| 34 |
+
"anterior": 2.5535371700922647,
|
| 35 |
+
"atual": 7.552767038345337
|
| 36 |
+
},
|
| 37 |
+
"ocr": {
|
| 38 |
+
"anterior": 1.418007344007492,
|
| 39 |
+
"atual": 7.486716111501058
|
| 40 |
+
},
|
| 41 |
+
"pontuacao": {
|
| 42 |
+
"anterior": 2.648297905921936,
|
| 43 |
+
"atual": 7.724856456120809
|
| 44 |
+
},
|
| 45 |
+
"tts": {
|
| 46 |
+
"anterior": 1.675029953320821,
|
| 47 |
+
"atual": 6.79421067237854
|
| 48 |
+
},
|
| 49 |
+
"vqa": {
|
| 50 |
+
"anterior": 2.177152613798777,
|
| 51 |
+
"atual": 7.352211872736613
|
| 52 |
+
}
|
| 53 |
+
},
|
| 54 |
+
"som_taxa_ativos": {
|
| 55 |
+
"cpn": {
|
| 56 |
+
"anterior": null,
|
| 57 |
+
"atual": null
|
| 58 |
+
},
|
| 59 |
+
"gcs": {
|
| 60 |
+
"anterior": null,
|
| 61 |
+
"atual": null
|
| 62 |
+
},
|
| 63 |
+
"gg": {
|
| 64 |
+
"anterior": 1.0,
|
| 65 |
+
"atual": 1.0
|
| 66 |
+
},
|
| 67 |
+
"gsom": {
|
| 68 |
+
"anterior": null,
|
| 69 |
+
"atual": null
|
| 70 |
+
},
|
| 71 |
+
"hsom": {
|
| 72 |
+
"anterior": null,
|
| 73 |
+
"atual": null
|
| 74 |
+
},
|
| 75 |
+
"rsom": {
|
| 76 |
+
"anterior": 1.0,
|
| 77 |
+
"atual": 1.0
|
| 78 |
+
},
|
| 79 |
+
"som": {
|
| 80 |
+
"anterior": 1.0,
|
| 81 |
+
"atual": 1.0
|
| 82 |
+
},
|
| 83 |
+
"ssom": {
|
| 84 |
+
"anterior": null,
|
| 85 |
+
"atual": null
|
| 86 |
+
},
|
| 87 |
+
"tkm": {
|
| 88 |
+
"anterior": 1.0,
|
| 89 |
+
"atual": 1.0
|
| 90 |
+
}
|
| 91 |
+
},
|
| 92 |
+
"rpp": {
|
| 93 |
+
"anterior": {},
|
| 94 |
+
"atual": {
|
| 95 |
+
"rho": 1.0,
|
| 96 |
+
"streak": 0,
|
| 97 |
+
"recompensas": 2,
|
| 98 |
+
"punicoes": 1,
|
| 99 |
+
"penalidades": 90,
|
| 100 |
+
"kappa_rotas_mortas": 0.01
|
| 101 |
+
}
|
| 102 |
+
},
|
| 103 |
+
"alinhamento": {
|
| 104 |
+
"anterior": {
|
| 105 |
+
"clip_real": -0.1604,
|
| 106 |
+
"clip_controle": -0.1702,
|
| 107 |
+
"ppl_mm": 9.41,
|
| 108 |
+
"ppl_visual": 1.16,
|
| 109 |
+
"itm_acc": 0.5
|
| 110 |
+
},
|
| 111 |
+
"atual": {
|
| 112 |
+
"clip_real": -0.0921,
|
| 113 |
+
"clip_controle": -0.0923,
|
| 114 |
+
"ppl_mm": 1072.72,
|
| 115 |
+
"ppl_visual": 1.52,
|
| 116 |
+
"itm_acc": 0.5
|
| 117 |
+
}
|
| 118 |
+
},
|
| 119 |
+
"ppl_lm": {
|
| 120 |
+
"anterior": 17.088452564794597,
|
| 121 |
+
"atual": 2542.1122649587833,
|
| 122 |
+
"delta_pct": 14776.2
|
| 123 |
+
},
|
| 124 |
+
"nao_regressao": {
|
| 125 |
+
"antes": {
|
| 126 |
+
"ppl_lm": 17.088452564794597,
|
| 127 |
+
"taxa_ativos_min": 1.0
|
| 128 |
+
},
|
| 129 |
+
"depois": {
|
| 130 |
+
"ppl_lm": 2542.1122649587833,
|
| 131 |
+
"perda_media_final": 7.231130578782824,
|
| 132 |
+
"taxa_ativos_min": 1.0
|
| 133 |
+
},
|
| 134 |
+
"regressoes": {
|
| 135 |
+
"ppl_lm": {
|
| 136 |
+
"antes": 17.088452564794597,
|
| 137 |
+
"depois": 2542.1122649587833,
|
| 138 |
+
"queda_relativa": 147.762
|
| 139 |
+
}
|
| 140 |
+
},
|
| 141 |
+
"aprovado": false
|
| 142 |
+
}
|
| 143 |
+
}
|
configs/base.json
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"modelo": {
|
| 3 |
+
"vocab": 16384,
|
| 4 |
+
"d_modelo": 192,
|
| 5 |
+
"n_camadas": 3,
|
| 6 |
+
"n_cabecas": 4,
|
| 7 |
+
"d_ff": 512,
|
| 8 |
+
"comprimento_ctx": 192,
|
| 9 |
+
"janela_sliding": 128,
|
| 10 |
+
"kv_cache_max": 2048,
|
| 11 |
+
"n_experts_fusao": 4,
|
| 12 |
+
"moe": {
|
| 13 |
+
"ativo": true,
|
| 14 |
+
"n_camadas_moe": 2,
|
| 15 |
+
"n_grupos": 3,
|
| 16 |
+
"experts_por_grupo": 2,
|
| 17 |
+
"d_ff_expert": 160,
|
| 18 |
+
"top_k": 2,
|
| 19 |
+
"margem_foco": 1.0,
|
| 20 |
+
"n_tarefas": 9,
|
| 21 |
+
"vetorial": true
|
| 22 |
+
},
|
| 23 |
+
"mtp": {
|
| 24 |
+
"ativo": true,
|
| 25 |
+
"k_cabecas": 2,
|
| 26 |
+
"beta_entropia": 0.05,
|
| 27 |
+
"k_adaptativo": true
|
| 28 |
+
},
|
| 29 |
+
"roteador": {
|
| 30 |
+
"ativo": true,
|
| 31 |
+
"k": 24,
|
| 32 |
+
"lambda_rota": 0.35,
|
| 33 |
+
"gamma_empate": 0.15,
|
| 34 |
+
"conf_min": 0.25,
|
| 35 |
+
"min_amostras": 200
|
| 36 |
+
},
|
| 37 |
+
"microunidades": {
|
| 38 |
+
"d_gru": 96,
|
| 39 |
+
"d_ramo": 96,
|
| 40 |
+
"d_refino": 128,
|
| 41 |
+
"kernel1": 3,
|
| 42 |
+
"kernel2": 5,
|
| 43 |
+
"gamma_rec": 0.5,
|
| 44 |
+
"k_rec_max": 2,
|
| 45 |
+
"eps_stop": 0.01,
|
| 46 |
+
"tau0": 0.8,
|
| 47 |
+
"kappa_conf": 1.0,
|
| 48 |
+
"delta_explora": 0.3
|
| 49 |
+
},
|
| 50 |
+
"atencao_moe": {
|
| 51 |
+
"ativo": true,
|
| 52 |
+
"alpha0": 0.0
|
| 53 |
+
},
|
| 54 |
+
"usar_atencao_arvore": true,
|
| 55 |
+
"moe_enc_dec": {
|
| 56 |
+
"ativo": true,
|
| 57 |
+
"n_encoders": 2,
|
| 58 |
+
"n_decoders": 4,
|
| 59 |
+
"d_ff_expert": 160,
|
| 60 |
+
"top_k": 2,
|
| 61 |
+
"fora_de_ordem": true
|
| 62 |
+
},
|
| 63 |
+
"autoajuste": {
|
| 64 |
+
"ativo": true,
|
| 65 |
+
"janela_lr": 200,
|
| 66 |
+
"lr_passo": 0.5,
|
| 67 |
+
"raio_min": 32,
|
| 68 |
+
"raio_max": 256,
|
| 69 |
+
"alpha_peso_arvore": 0.05,
|
| 70 |
+
"ppl_alvo": 17.0
|
| 71 |
+
}
|
| 72 |
+
},
|
| 73 |
+
"treino": {
|
| 74 |
+
"epocas": 8,
|
| 75 |
+
"lote": 8,
|
| 76 |
+
"lr_max": 0.003,
|
| 77 |
+
"lr_min": 0.0003,
|
| 78 |
+
"warmup": 60,
|
| 79 |
+
"clip_grad": 1.0,
|
| 80 |
+
"janela_estagnacao": 120,
|
| 81 |
+
"checkpoint_a_cada": 150,
|
| 82 |
+
"avaliar_a_cada": 100,
|
| 83 |
+
"qat_ultimos_passos": 80,
|
| 84 |
+
"fase_densa_ate_epoca": 5,
|
| 85 |
+
"pcgrad": true,
|
| 86 |
+
"lambda_moe_lb": 0.01,
|
| 87 |
+
"lambda_moe_ort": 0.01,
|
| 88 |
+
"lambda_mtp": 0.3,
|
| 89 |
+
"lambda_som": 0.05,
|
| 90 |
+
"mistura_tarefas": {
|
| 91 |
+
"instrucao": 0.22,
|
| 92 |
+
"lm": 0.14,
|
| 93 |
+
"noticia": 0.1,
|
| 94 |
+
"pontuacao": 0.1,
|
| 95 |
+
"imagem_caption": 0.1,
|
| 96 |
+
"vqa": 0.1,
|
| 97 |
+
"ocr": 0.07,
|
| 98 |
+
"asr": 0.09,
|
| 99 |
+
"tts": 0.08
|
| 100 |
+
},
|
| 101 |
+
"abmo": {
|
| 102 |
+
"ativo": true,
|
| 103 |
+
"margem": 0.25,
|
| 104 |
+
"cap_min": 0.05,
|
| 105 |
+
"cap_max": 500.0
|
| 106 |
+
},
|
| 107 |
+
"dpo": {
|
| 108 |
+
"ativo": true,
|
| 109 |
+
"passos": 100,
|
| 110 |
+
"beta": 0.1,
|
| 111 |
+
"lr": 5e-05,
|
| 112 |
+
"lr_beta": 0.001,
|
| 113 |
+
"kl_alvo": 0.5,
|
| 114 |
+
"lote": 4,
|
| 115 |
+
"beta_min": 0.05
|
| 116 |
+
},
|
| 117 |
+
"fase_som": {
|
| 118 |
+
"ativo": true,
|
| 119 |
+
"epocas": 2,
|
| 120 |
+
"alvo_ativos": 0.9,
|
| 121 |
+
"gamma_empate": 0.15,
|
| 122 |
+
"lambda_novidade": 0.25,
|
| 123 |
+
"dim_lote": 64
|
| 124 |
+
},
|
| 125 |
+
"prs_v8": {
|
| 126 |
+
"ativo": true,
|
| 127 |
+
"eta_up": 0.05,
|
| 128 |
+
"eta_down": 0.02,
|
| 129 |
+
"T_ciclo": 400,
|
| 130 |
+
"decay_piso": 1.0,
|
| 131 |
+
"percentil": 0.75,
|
| 132 |
+
"janela_clip": 50,
|
| 133 |
+
"coef_streak": 0.3,
|
| 134 |
+
"vel_alvo": 0.01,
|
| 135 |
+
"boost_max": 1.0
|
| 136 |
+
},
|
| 137 |
+
"confianca": {
|
| 138 |
+
"ativo": true,
|
| 139 |
+
"kappa_punicao": 0.3,
|
| 140 |
+
"kappa_premio": 0.1,
|
| 141 |
+
"janela_tau": 50,
|
| 142 |
+
"quantil_tau": 0.25,
|
| 143 |
+
"h_escrita_memoria": 0.25
|
| 144 |
+
},
|
| 145 |
+
"crescimento": {
|
| 146 |
+
"ativo": true,
|
| 147 |
+
"a_cada": 200,
|
| 148 |
+
"tau_expand": 0.1,
|
| 149 |
+
"tau_prune": 0.01,
|
| 150 |
+
"eps_gate": 0.05,
|
| 151 |
+
"janela_uso": 8,
|
| 152 |
+
"n_max_ramos": 5,
|
| 153 |
+
"n_sondas": 2
|
| 154 |
+
},
|
| 155 |
+
"rpp": {
|
| 156 |
+
"ativo": true,
|
| 157 |
+
"rho_max": 0.15,
|
| 158 |
+
"rho_step": 0.05,
|
| 159 |
+
"rho_decaimento": 0.5,
|
| 160 |
+
"janela": 30,
|
| 161 |
+
"kappa_rotas_mortas": 0.01,
|
| 162 |
+
"alvo_ativos": 0.9
|
| 163 |
+
},
|
| 164 |
+
"sgdr_t_mult": 2
|
| 165 |
+
},
|
| 166 |
+
"ciclo": {
|
| 167 |
+
"tau_escalada": 0.35,
|
| 168 |
+
"entropia_limite": 0.85,
|
| 169 |
+
"orcamento_passos": 6,
|
| 170 |
+
"cache_ferramentas_ttl": 600,
|
| 171 |
+
"cache_ferramentas_max": 64
|
| 172 |
+
},
|
| 173 |
+
"memoria_interna": {
|
| 174 |
+
"ativo": true,
|
| 175 |
+
"n_slots": 64,
|
| 176 |
+
"h_escrita": 0.25,
|
| 177 |
+
"idade_compressao_s": 900.0,
|
| 178 |
+
"n_codigos": 64,
|
| 179 |
+
"lambda_utilidade": 0.1,
|
| 180 |
+
"meia_vida_s": 1800.0,
|
| 181 |
+
"replay_a_cada": 40
|
| 182 |
+
},
|
| 183 |
+
"checkpoints": {
|
| 184 |
+
"dir_local": "/home/z/my-project/khtst/estados_local",
|
| 185 |
+
"pasta_publicacao": "estados/fase-v8"
|
| 186 |
+
},
|
| 187 |
+
"som_atencao": {
|
| 188 |
+
"ativo": true,
|
| 189 |
+
"tau": 0.5,
|
| 190 |
+
"gamma_novidade": 0.15
|
| 191 |
+
},
|
| 192 |
+
"difusao": {
|
| 193 |
+
"ativo": true,
|
| 194 |
+
"repo_id": "hf-internal-testing/tiny-stable-diffusion-torch",
|
| 195 |
+
"altura": 128,
|
| 196 |
+
"largura": 128,
|
| 197 |
+
"passos_inferencia": 8,
|
| 198 |
+
"guia_escala": 7.5
|
| 199 |
+
},
|
| 200 |
+
"agente_engenheiro": {
|
| 201 |
+
"ativo": true,
|
| 202 |
+
"intervalo": 50,
|
| 203 |
+
"tolerancia_regressao": 0.05
|
| 204 |
+
},
|
| 205 |
+
"janela_1m": {
|
| 206 |
+
"ativo": true,
|
| 207 |
+
"n_max_tokens": 262144,
|
| 208 |
+
"l_fino": 4096,
|
| 209 |
+
"w_segmento": 256,
|
| 210 |
+
"s_passo": 128,
|
| 211 |
+
"k_recall": 4,
|
| 212 |
+
"viz_r": 2,
|
| 213 |
+
"m_max": 2017
|
| 214 |
+
}
|
| 215 |
+
}
|
docs/matematica/00-fundamentos-e-notacao.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 00 — Fundamentos e Notação (KHTST)
|
| 2 |
+
|
| 3 |
+
> **Regra do projeto (item 7 do escopo):** nenhum script é escrito antes da análise matemática
|
| 4 |
+
> e da demonstração das equações que ele implementará. Este documento fixa a notação comum
|
| 5 |
+
> a todos os demais. Os documentos são independentemente legíveis e cada teorema lista
|
| 6 |
+
> explicitamente as hipóteses usadas.
|
| 7 |
+
|
| 8 |
+
## 1. Notação
|
| 9 |
+
|
| 10 |
+
| Símbolo | Significado |
|
| 11 |
+
|---|---|
|
| 12 |
+
| $\mathcal{X}$ | espaço de entrada (texto, imagem, áudio, vídeo, tabular, documentos) |
|
| 13 |
+
| $x_t \in \mathcal{X}$ | amostra no instante discreto $t \in \mathbb{N}$ |
|
| 14 |
+
| $W = \{w_1,\dots,w_K\}$, $w_i \in \mathbb{R}^d$ | protótipos/pesos de unidades de um SOM |
|
| 15 |
+
| $c(x) = \arg\min_i \|x - w_i\|$ | unidade vencedora (Best Matching Unit, BMU) |
|
| 16 |
+
| $\alpha(t) \in (0,1)$ | taxa de aprendizado no tempo |
|
| 17 |
+
| $h_{ci}(t)$ | função de vizinhança, $0 \le h_{ci} \le 1$, máx. em $i=c$ |
|
| 18 |
+
| $\sigma(t)$ | raio efetivo da vizinhança gaussiana |
|
| 19 |
+
| $E_q$ | erro de quantização médio: $E_q = \mathbb{E}\,\min_i \|x - w_i\|^2$ |
|
| 20 |
+
| $\theta$ | parâmetros treináveis do modelo neural (transformers etc.) |
|
| 21 |
+
| $Q(\cdot), s$ | quantização W8A8 e fator de escala |
|
| 22 |
+
| $\varphi(\cdot)$ | feature map de atenção linear (kernel trick) |
|
| 23 |
+
| $\mathcal{L}(\theta)$ | perda escalar a minimizar |
|
| 24 |
+
|
| 25 |
+
Convenções: vetores são colunas; $\|\cdot\|$ é a norma euclidiana; $\odot$ produto de Hadamard;
|
| 26 |
+
$\mathbb{E}$ denota esperança empírica sobre o minibatch quando o contexto é amostral.
|
| 27 |
+
Aproximações numéricas usam `float32`; provas são analíticas e independentes da precisão.
|
| 28 |
+
|
| 29 |
+
## 2. Princípios de projeto derivados da matemática
|
| 30 |
+
|
| 31 |
+
1. **Estabilidade antes de plasticidade.** Toda atualização de parâmetro tem a forma
|
| 32 |
+
$\theta_{t+1} = \theta_t + \Delta_t$ com $\|\Delta_t\|$ controlado (taxa decrescente ou clip).
|
| 33 |
+
Isso garante que o "punir/retreinar" (doc 09) não desestabiliza o modelo.
|
| 34 |
+
2. **Convergência tipo Robbins–Monro.** Toda taxa de aprendizado cumpre
|
| 35 |
+
$\sum_t \alpha_t = \infty$ e $\sum_t \alpha_t^2 < \infty$ dentro de cada ciclo de treino
|
| 36 |
+
(ex.: decaimento coseno por reinício, doc 09, Teorema 9.4).
|
| 37 |
+
3. **Erro limitado por construção.** Quantização (doc 08) e camadas ortogonais (doc 09)
|
| 38 |
+
têm cotas de erro/distorção provadas — o modelo nunca opera com erro não caracterizado.
|
| 39 |
+
4. **Crescimento só com evidência.** Variantes crescentes de SOM (docs 02–04) inserem
|
| 40 |
+
unidades apenas onde o erro local o justifica; a monotonicidade do refinamento de
|
| 41 |
+
Voronoi (Teorema 2.1 do doc 02) garante que crescer nunca aumenta $E_q$.
|
| 42 |
+
5. **Memória recursiva estável.** Contextos temporais (doc 05) são médias móveis
|
| 43 |
+
exponenciais com fator $(1-\alpha)\in(0,1)$ — garantia de estabilidade BIBO.
|
| 44 |
+
|
| 45 |
+
## 3. Teorema 0.1 (contração da atualização de Kohonen)
|
| 46 |
+
|
| 47 |
+
**Hipóteses.** $0 < \alpha(t) \le 1$; $0 \le h_{ci}(t) \le 1$ para todo $c,i$.
|
| 48 |
+
|
| 49 |
+
**Afirmação.** A atualização
|
| 50 |
+
$$w_i(t+1) = w_i(t) + \alpha(t)\,h_{c i}(t)\,\big(x(t) - w_i(t)\big)$$
|
| 51 |
+
é uma contração em relação ao alvo $x$: vale
|
| 52 |
+
$$\|w_i(t+1) - x\| = \big(1 - \alpha(t) h_{ci}(t)\big)\,\|w_i(t) - x\| \;\le\; \|w_i(t) - x\|.$$
|
| 53 |
+
|
| 54 |
+
**Demonstração.** Substituindo,
|
| 55 |
+
$w_i(t+1) - x = w_i(t) - x + \alpha h_{ci}(x - w_i(t)) = \big(1 - \alpha h_{ci}\big)\big(w_i(t)-x\big)$.
|
| 56 |
+
Tomando normas, $\|w_i(t+1)-x\| = |1-\alpha h_{ci}|\,\|w_i(t)-x\|$. Como
|
| 57 |
+
$\alpha h_{ci} \in (0,1]$, tem-se $1-\alpha h_{ci} \in [0,1)$ e o resultado segue. $\blacksquare$
|
| 58 |
+
|
| 59 |
+
**Corolário 0.1.1 (não-explosão).** Se $\|x\| \le M$ (dados normalizados), então
|
| 60 |
+
$\|w_i(t)\| \le \max(M, \|w_i(0)\|)$ para todo $t$ — os pesos nunca divergem, o que
|
| 61 |
+
fundamenta os guard-rails de telemetria (doc 09, §5).
|
| 62 |
+
|
| 63 |
+
## 4. Teorema 0.2 (desigualdade de Bhattacharyya/erro de partição — usada nos SOMs crescentes)
|
| 64 |
+
|
| 65 |
+
Seja $V(w)$ a célula de Voronoi do protótipo $w$ e $E_q(V,w)=\int_V \|x-w\|^2 p(x)\,dx$.
|
| 66 |
+
Se $V$ é particionada em $V_1\cup V_2$ com novos protótipos $w_1\in V_1$, $w_2\in V_2$, então
|
| 67 |
+
$$E_q(V_1\cup V_2,\; w_1,w_2) \;\le\; E_q(V,\; w)$$
|
| 68 |
+
**Demonstração.** Para cada $x\in V_1$: $\|x-w_1\|^2 \le \|x-w\|^2$? Não em geral ponto a ponto —
|
| 69 |
+
mas o ótimo por região satisfaz $w_1^\star=\mathbb{E}[x\mid x\in V_1]$ (centroide), e o mínimo
|
| 70 |
+
de uma função convexa restrita a um subconjunto não pode ser maior que o mínimo no conjunto
|
| 71 |
+
todo: $E_q(V_1,w_1^\star) \le E_q(V_1, w) \le E_q(V, w)$, pois $w\notin V_1$ é um candidato
|
| 72 |
+
viável (pior) para $V_1$. Somando sobre $V_1, V_2$ obtém-se o resultado. $\blacksquare$
|
| 73 |
+
|
| 74 |
+
**Uso prático:** inserção de unidades em SOMs crescentes (GG/GCS/GSOM) nunca piora o erro
|
| 75 |
+
de quantização *global* quando os novos centros são inicializados perto do pai — é a base
|
| 76 |
+
da prova do doc 02.
|
| 77 |
+
|
| 78 |
+
## 5. Referências primárias
|
| 79 |
+
|
| 80 |
+
- Kohonen, T. *Self-Organizing Maps*, 3ª ed. Springer (2001) — Teorema 0.1, condições de convergência.
|
| 81 |
+
- Robbins & Monro (1951) — aproximação estocástica.
|
| 82 |
+
- Fritzke, B. (1995; 1994) — Growing Grid, Growing Cell Structures.
|
| 83 |
+
- Alahakoon et al. (2000) — GSOM; Voegtlin (2002) — RSOM; Hecht-Nielsen (1987) — CPN.
|
| 84 |
+
- Roy & Vetterli (2007) — effective rank; Swets/Wu — PSI de população.
|
| 85 |
+
- Vaswani et al. (2017); Katharopoulos et al. (2020) — atenção e atenção linear.
|
| 86 |
+
- Dettmers et al. (2022) — LLM.int8(); W8A8 conforme docs 08.
|
| 87 |
+
- Bengio et al. (2013) — straight-through estimator.
|
docs/matematica/01-som-kohonen-clasico.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 01 — SOM de Kohonen clássico: derivação, convergência e ordenamento
|
| 2 |
+
|
| 3 |
+
**Objetivo do módulo `memoria/som_base.py`.** Minimizar o erro de quantização vetorial
|
| 4 |
+
*topologicamente ordenado*: aproximar $p(x)$ por um conjunto $W=\{w_i\}_{i=1}^K$ de protótipos
|
| 5 |
+
dispostos numa grade cuja vizinhança preserva a topologia dos dados.
|
| 6 |
+
|
| 7 |
+
## 1. Derivação da função objetivo
|
| 8 |
+
|
| 9 |
+
O SOM minimiza (Erwin–Obermayer–Schulten, 1992)
|
| 10 |
+
$$E(W) \;=\; \sum_{i=1}^{K}\int_{V_i} \sum_{j=1}^{K} h_{ij}\,\|x - w_j\|^2\, p(x)\,dx,$$
|
| 11 |
+
onde $V_i$ é a célula de Voronoi de $w_i$. Fazendo gradiente em $w_j$ e usando
|
| 12 |
+
$\int_{V_i} p(x) dx$ como frequência de ativação $n_i$:
|
| 13 |
+
$$\frac{\partial E}{\partial w_j} \;=\; -2\sum_i h_{ij}\, n_i\,\big(\mathbb{E}[x \mid V_i] - w_j\big),$$
|
| 14 |
+
logo o gradiente descendente estocástico sobre amostras produz exatamente a **regra de Kohonen**:
|
| 15 |
+
$$\boxed{\;w_j(t+1) = w_j(t) + \alpha(t)\, h_{c(t),j}(t)\,\big(x(t) - w_j(t)\big),\qquad
|
| 16 |
+
c(t)=\arg\min_i \|x(t)-w_i(t)\|\;} \tag{1.1}$$
|
| 17 |
+
com vizinhança gaussiana
|
| 18 |
+
$$h_{cj}(t) = \exp\!\Big(-\frac{\|r_c - r_j\|^2}{2\sigma(t)^2}\Big), \qquad \sigma(t)=\sigma_0\Big(\frac{\sigma_f}{\sigma_0}\Big)^{t/T}. \tag{1.2}$$
|
| 19 |
+
|
| 20 |
+
## 2. Teorema 1.1 (estabilidade com alvos móveis — extensão do Teorema 0.1)
|
| 21 |
+
|
| 22 |
+
**Hipóteses.** $\alpha h_{cj}\in[0,1)$; $\|x(t)\|\le M$.
|
| 23 |
+
**Afirmação.** $\|w_j(t+1)\| \le (1-\alpha h)\,\|w_j(t)\| + \alpha h\, M$, e por indução
|
| 24 |
+
$\limsup_t \|w_j(t)\| \le M$.
|
| 25 |
+
**Demonstração.** Da regra (1.1), $\|w_j(t+1)\| \le (1-\alpha h)\|w_j(t)\| + \alpha h \|x(t)\|
|
| 26 |
+
\le (1-\alpha h)\|w_j(t)\| + \alpha h M$. A recorrência linear com ponto fixo $M$ dá
|
| 27 |
+
$\|w_j(t)\| \le M + (1-\alpha h)^t(\|w_j(0)\|-M) \to M$ quando $\alpha h>0$ com frequência
|
| 28 |
+
positiva. $\blacksquare$
|
| 29 |
+
|
| 30 |
+
## 3. Teorema 1.2 (convergência — condições de Robbins–Monro)
|
| 31 |
+
|
| 32 |
+
**Hipóteses.**
|
| 33 |
+
(R1) $\alpha(t) = \alpha_0 (t+1)^{-\gamma}$ com $\gamma\in(\tfrac12,1]$;
|
| 34 |
+
(R2) os dados são i.i.d. de $p$ com suporte compacto;
|
| 35 |
+
(R3) $\sigma(t)\to\sigma_f > 0$ (fase de convergência após ordenamento).
|
| 36 |
+
|
| 37 |
+
**Afirmação.** $E\big[\|W(t+1)-W(t)\|^2\big] \to 0$ e $W(t)\to W^\star$ q.s., com $W^\star$
|
| 38 |
+
ponto estacionário de $E(W)$.
|
| 39 |
+
|
| 40 |
+
**Esboço de demonstração** (padrão de Kohonen 2001, cap. 3.5; Erwin et al. 1992).
|
| 41 |
+
Escreva a atualização como processo estocástico aproximator
|
| 42 |
+
$W(t+1)-W(t) = \alpha(t)\big[\,F(W(t)) + G(t)\,\big]$, com
|
| 43 |
+
$F(W) = \mathbb{E}_x\big[h_{c(x),\cdot}\,(x-W_\cdot)\big]$ o campo médio e $G(t)$ ruído centrado
|
| 44 |
+
condicional. As condições (R1) dão $\sum\alpha=\infty$, $\sum\alpha^2<\infty$ — exatamente as
|
| 45 |
+
condições de Robbins–Monro — e então, pela teoria clássica de aproximação estocástica,
|
| 46 |
+
$W(t)$ converge q.s. ao conjunto estacionário de $F$, desde que $G$ tenha momento finito
|
| 47 |
+
(garantido por R2) e $F$ seja Lipschitz (garantido pela suavidade de $h$ gaussiana e
|
| 48 |
+
compacidade do suporte). $\blacksquare$
|
| 49 |
+
|
| 50 |
+
**Consequência de engenharia (implementada em `treinador.py`):** a fase 1 (ordenamento) usa
|
| 51 |
+
$\sigma$ alto e $\alpha$ alto; a fase 2 (convergência) usa $\sigma=\sigma_f$ pequeno e
|
| 52 |
+
$\alpha$ decaindo como $(t+1)^{-\gamma}$ — nunca constante para sempre, evitando oscilação
|
| 53 |
+
estacionária (que a telemetria classificaria como *não-aprendizado*).
|
| 54 |
+
|
| 55 |
+
## 4. Teorema 1.3 (ordenamento topológico 1-D — prova completa de Erwin et al.)
|
| 56 |
+
|
| 57 |
+
**Hipóteses.** Grade 1-D com $K$ unidades, pesos escalares ordenáveis $w_1<\dots<w_K$,
|
| 58 |
+
$h_{cj}$ decrescente com $|c-j|$.
|
| 59 |
+
**Afirmação.** Sob apresentação repetida de amostras, o vetor de pesos converge para
|
| 60 |
+
ordenação monotônica; qualquer inversão $(w_i>w_{i+1}$ com $\mu_i<\mu_{i+1}$, onde
|
| 61 |
+
$\mu_i=\int_{V_i} x\,p(x)dx$ é o centroide da célula) é corrigida com probabilidade 1.
|
| 62 |
+
|
| 63 |
+
**Demonstração.** Defina a troca de energia esperada por passo para um par invertido.
|
| 64 |
+
Para $K=2$ e vizinhança passo-1, o erro quadrático esperado
|
| 65 |
+
$E(w_1,w_2)=\int_{-\infty}^{m}\!(x-w_1)^2 p dx + \int_m^\infty\!(x-w_2)^2 p dx$ (com $m$ a fronteira
|
| 66 |
+
de Voronoi) tem única bacia de mínimo em $w_1=\mu_1<w_2=\mu_2$; o fluxo do campo médio
|
| 67 |
+
$\dot w = F(w)$ leva monotonicamente à bacia (Erwin et al., 1992, §3, prova para $K=2$).
|
| 68 |
+
Para $K$ geral, usa-se indução: o par invertido de *menor* índice reduz seu erro esperado
|
| 69 |
+
a cada passo pois a atualização puxa $w_c$ para $x$ e $w_{c\pm1}$ na direção de $x$ com peso
|
| 70 |
+
$h>0$, o que diminui a distância entre $\mu$ e $w$ nos pares não-invertidos e corrige a
|
| 71 |
+
inversão mínima; removendo-se o par, repete-se. O processo termina pois $E(W)$ é função de
|
| 72 |
+
Lyapunov estritamente decrescente fora do conjunto estacionário. $\blacksquare$
|
| 73 |
+
|
| 74 |
+
*(No projeto, o ordenamento é verificado empiricamente pela telemetria: correlação de
|
| 75 |
+
Spearman entre posição na grade e 1ª componente principal das amostras, `indicadores.py`.)*
|
| 76 |
+
|
| 77 |
+
## 5. Métricas derivadas
|
| 78 |
+
|
| 79 |
+
1. **EQ (erro de quantização):** $\widehat{E_q} = \frac1n\sum_k \min_i\|x_k-w_i\|^2$ — decresce
|
| 80 |
+
monotonicamente por Teorema 0.2 quando unidades crescem.
|
| 81 |
+
2. **TE (erro topográfico):** fração de amostras cujas 2 BMUs não são vizinhas na grade —
|
| 82 |
+
mede a qualidade do mapeamento.
|
| 83 |
+
3. **Rank efetivo da matriz $U$ de ativações por unidade** (doc 09, §4) — mede diversidade
|
| 84 |
+
de uso das unidades; rank baixo = unidades mortas (dispara poda/retreino, item 6 do escopo).
|
docs/matematica/02-growing-grid-e-gcs.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 02 — Growing Grid (GG) e Growing Cell Structures (GCS)
|
| 2 |
+
|
| 3 |
+
**Módulos:** `memoria/gg.py`, `memoria/gcs.py`. Ideia de Fritzke (1995, 1994): em vez de
|
| 4 |
+
grade fixa, **inserir/remover unidades** onde o erro acumulado é maior, ajustando $K$ ao dado.
|
| 5 |
+
|
| 6 |
+
## 1. GG — inserção por linhas/colunas (Fritzke, 1995)
|
| 7 |
+
|
| 8 |
+
Estrutura: grade retangular $L_1\times L_2$. Cada unidade $i$ acumula erro
|
| 9 |
+
$e_i \leftarrow e_i + \|x - w_{c}\|^2$ por amostra (decaimento periódico $e_i \leftarrow (1-\beta)e_i$).
|
| 10 |
+
A cada $\lambda$ amostras, na unidade $q=\arg\max_i e_i$ insere-se uma **linha ou coluna**
|
| 11 |
+
(escolhida pela direção de maior dispersão de $q$ com seus vizinhos), distribui-se o erro de $q$
|
| 12 |
+
entre os novos vizinhos e decai todos os erros.
|
| 13 |
+
|
| 14 |
+
### Teorema 2.1 (monotonicidade do refinamento — fundamento da inserção)
|
| 15 |
+
|
| 16 |
+
**Hipóteses.** Protótipo novo inicializado na média entre $q$ e seu vizinho mais distante $v$
|
| 17 |
+
(perto da célula de maior erro); população fixa $p$.
|
| 18 |
+
**Afirmação.** $\widehat{E_q}$ após inserção $\le \widehat{E_q}$ antes, para a mesma amostra histórica.
|
| 19 |
+
**Demonstração.** A partição de Voronoi após inserção é um **refinamento** da anterior: cada
|
| 20 |
+
antiga célula é subdividida ou mantida. Para cada amostra $x$ que permanece na célula de $q$
|
| 21 |
+
sem subdivisão, o erro é idêntico. Para $x$ que migra para o novo protótipo $w_{new}$:
|
| 22 |
+
$\|x - w_{new}\| \le \|x - w_q\|$ se, e somente se, $w_{new}$ está mais perto — verdade para a
|
| 23 |
+
sub-região do lado de $w_{new}$ (definição de fronteira de Voronoi). Logo o erro empírico
|
| 24 |
+
ponto a ponto não aumenta em nenhuma amostra, e o ótimo por região (Teorema 0.2) só o reduz.
|
| 25 |
+
Portanto $E_q$ é **monótona não-crescente** sob inserção. $\blacksquare$
|
| 26 |
+
|
| 27 |
+
*(Isso responde diretamente ao item 7 do escopo: "se um problema não tem solução imediata,
|
| 28 |
+
outra equação auxilia" — quando a grade fixa satura em $E_q$, a equação de refinamento
|
| 29 |
+
(Teorema 2.1) abre caminho em vez de estagnar.)*
|
| 30 |
+
|
| 31 |
+
### Escolha da dimensão a crescer
|
| 32 |
+
Seja $v_1, v_2$ os dois vizinhos de $q$ mais distantes entre si. Cresce-se na direção
|
| 33 |
+
$v_1 \leftrightarrow v_2$ (Fritzke usa $L_1/L_2$ pela razão de distâncias médias):
|
| 34 |
+
direção $d^\star = \arg\max_{d\in\{1,2\}} \frac{\bar d_d(q)}{L_d}$, garantindo grade o mais
|
| 35 |
+
quadrada possível — minimiza $\max_i \|r_i - r_j\|$ médio, i.e. o raio da vizinhança.
|
| 36 |
+
|
| 37 |
+
## 2. GCS — crescimento simplicial com poda por utilidade (Fritzke, 1994)
|
| 38 |
+
|
| 39 |
+
Topologia: complexo simplicial 2-D (triângulos) ou 3-D (tetraedros); cada nova unidade
|
| 40 |
+
insere-se **no meio da aresta** $(q, f)$ com $f$ = vizinho mais distante de $q$.
|
| 41 |
+
|
| 42 |
+
### Teorema 2.2 (conectividade preservada após inserção)
|
| 43 |
+
|
| 44 |
+
**Hipóteses.** Rede inicial um triângulo (conectada). Inserção de $w_{new}$ no ponto médio da
|
| 45 |
+
aresta $(q,f)$, conectado a $q$, $f$ e a todos os vizinhos comuns de $q$ e $f$.
|
| 46 |
+
**Afirmação.** A rede permanece conexa e a vizinhança direta refina a anterior.
|
| 47 |
+
**Demonstração.** Remover a aresta $(q,f)$ e reconectar ambos a $w_{new}$ preserva caminhos:
|
| 48 |
+
todo caminho que usava $(q,f)$ usa $(q,w_{new})+(w_{new},f)$. Vizinhos comuns ganham aresta a
|
| 49 |
+
$w_{new}$ sem perder as antigas — o grau só aumenta localmente. Conexidade é invariante. $\blacksquare$
|
| 50 |
+
|
| 51 |
+
### 2.3 Distribuição de erro e remoção (pruning)
|
| 52 |
+
Inserção: $e_{new} = e_q/2$; $e_q \leftarrow e_q/2$; vizinhos decaem $e_i \leftarrow (1-\beta)e_i$.
|
| 53 |
+
**Utilidade** (Fritzke): $u_i = e_i - e_{i^\dagger}$ não funciona para poda direta; usa-se
|
| 54 |
+
$u_i = \frac{\text{número de usos como 2ª BMU}}{\text{usos como 1ª BMU}}$ ponderado, ou a versão
|
| 55 |
+
clássica: $u_i$ = erro que a rede teria se $w_i$ fosse removido e suas amostras absorvidas pelo
|
| 56 |
+
vizinho mais útil. Remove-se a unidade com menor $u_i$ se $K>K_{max}/2$ e $u_i < u_{max}/k_{prune}$.
|
| 57 |
+
|
| 58 |
+
**Teorema 2.3 (podas não aumentam $E_q$ além de cota local).** Remover $w_i$ realoca seus
|
| 59 |
+
pontos ao vizinho mais próximo $w_j$: $\|x-w_j\| \le \|x-w_i\| + \|w_i - w_j\|$ para esses pontos,
|
| 60 |
+
logo $\Delta E_q \le \int_{V_i}\big(\|x-w_j\|^2-\|x-w_i\|^2\big)p\,dx \le 2\,\|w_i-w_j\|\,\|w_i\|_V + \|w_i-w_j\|^2$,
|
| 61 |
+
com $\|w_i-w_j\|$ pequeno por construção da vizinhança — poda é *segura* quando a unidade é
|
| 62 |
+
redundante ($w_j$ quase coincide com $w_i$), que é exatamente o caso detectado por $u_i$ baixo. $\blacksquare$
|
| 63 |
+
|
| 64 |
+
## 3. Parâmetros implementados (e sua justificativa matemática)
|
| 65 |
+
|
| 66 |
+
| Parâmetro | Valor padrão | Justificativa |
|
| 67 |
+
|---|---|---|
|
| 68 |
+
| $\lambda$ | 600 | período entre inserções: compromisso entre adaptação e crescimento |
|
| 69 |
+
| $\beta$ | 0.9995 | decaimento do erro acumulado (meia-vida $\approx 1385$ amostras) |
|
| 70 |
+
| $\alpha_{burnin}$ | decaimento (1.1) | convergência Robbins–Monro (Teorema 1.2) |
|
| 71 |
+
| $K_{max}$ | orçamento de RAM | acoplado ao requisito de otimização de memória |
|
| 72 |
+
|
| 73 |
+
## 4. Critério de parada de crescimento
|
| 74 |
+
Crescer enquanto $\max_i e_i > \tau_{grow}\cdot \overline{E_q}$ e $K<K_{max}$; parar quando a
|
| 75 |
+
inserção marginal reduz $\widehat{E_q}$ menos que $\epsilon_{min}$ (regra do cotovelo
|
| 76 |
+
computável em linha).
|
docs/matematica/03-gsom.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 03 — GSOM (Growing Self-Organizing Map) com fator de espalhamento
|
| 2 |
+
|
| 3 |
+
**Módulo:** `memoria/gsom.py`. Referência: Alahakoon, Halgamuge & Srinivasan (2000).
|
| 4 |
+
O GSOM introduz um único hiperparâmetro de granularidade, o **Spread Factor** $SF\in(0,1)$,
|
| 5 |
+
que controla o quanto o mapa cresce.
|
| 6 |
+
|
| 7 |
+
## 1. Gatilho de crescimento (Growth Threshold)
|
| 8 |
+
|
| 9 |
+
Cada unidade acumula erro $e_i$; define-se
|
| 10 |
+
$$\boxed{\;GT = -D\,\ln(SF)\;} \tag{3.1}$$
|
| 11 |
+
com $D$ a dimensionalidade da entrada. Quando $e_c > GT$ na BMU $c$ **e** $c$ é uma unidade
|
| 12 |
+
de fronteira, cresce uma nova unidade na direção livre com
|
| 13 |
+
$w_{new} = w_c + (w_c - w_{vizinho})$ (espelhamento para fora).
|
| 14 |
+
|
| 15 |
+
### Teorema 3.1 (derivação de $GT$ a partir da distância média entre vizinhos)
|
| 16 |
+
|
| 17 |
+
**Afirmação.** $GT$ equivale à distância quadrática que a rede considera "resolvida".
|
| 18 |
+
**Demonstração.** Sejam $x,x'$ amostras vizinhas em uma mesma região já bem quantizada, com
|
| 19 |
+
distância média intra-região $\delta$. A rede deve crescer somente quando o erro acumulado
|
| 20 |
+
local supera a escala natural dos dados. Sob normalização para $[0,1]^D$, a distância média
|
| 21 |
+
entre pares aleatórios é $\mathbb{E}\|x-x'\|^2 = 2D\cdot\mathrm{Var}$ com $\mathrm{Var}=1/12$
|
| 22 |
+
(uniforme), dando $\mathbb{E}\|x-x'\|^2 = D/6$. O GSOM padroniza o limiar como múltiplo
|
| 23 |
+
negativo-logarítmico do $SF$ para obter monotonicidade estrita e invariância de escala:
|
| 24 |
+
$GT(SF)=-D\ln(SF)$ é **decrescente em $SF$** ($\partial GT/\partial SF = -D/SF < 0$), logo:
|
| 25 |
+
$$SF_1 < SF_2 \;\Rightarrow\; GT_1 > GT_2 \;\Rightarrow\; \text{crescimento mais raro} \;\Rightarrow\; \text{mapa menor.} \tag{3.2}$$
|
| 26 |
+
A forma logarítmica garante que duplicações sucessivas de resolução correspondam a incrementos
|
| 27 |
+
aditivos constantes em $\ln(1/SF)$ — granularidade geométrica, não linear. $\blacksquare$
|
| 28 |
+
|
| 29 |
+
**Corolário 3.1.1 (orçamento de memória).** Como $K(SF)$ cresce aproximadamente como
|
| 30 |
+
$\mathcal{O}\big(SF^{-c}\big)$ para constante $c\in(0,1)$ dependente de $p$, o $SF$ dá controle
|
| 31 |
+
direto e **pré-computável** do uso de RAM — requisito do item 1 do escopo.
|
| 32 |
+
|
| 33 |
+
## 2. Fases e suavização
|
| 34 |
+
|
| 35 |
+
1. **Inicialização:** 4 unidades $(0,0),(0,1),(1,0),(1,1)$ em grade mínima.
|
| 36 |
+
2. **Crescimento:** varre o dataset; unidade de fronteira com $e_i>GT$ gera vizinho.
|
| 37 |
+
3. **Suavização:** congela o crescimento e roda $\eta_{sm}$ épocas com vizinhança reduzida.
|
| 38 |
+
|
| 39 |
+
**Teorema 3.2 (finitude).** Com $SF>0$ fixo e dados de suporte compacto, o mapa atinge tamanho
|
| 40 |
+
finito quase certamente.
|
| 41 |
+
**Demonstração.** Cada crescimento exige $e_i>GT>0$. Após suficientes apresentações, o erro
|
| 42 |
+
médio por unidade tende ao mínimo local $\bar\epsilon(\sigma_f)$ (Teorema 1.2). Se
|
| 43 |
+
$\bar\epsilon(\sigma_f) \le GT$, apenas um número finito de unidades pode ultrapassar $GT$
|
| 44 |
+
(massa de probabilidade finita acima do limiar); cada unidade nova tem vizinhança própria que
|
| 45 |
+
reduz localmente o erro (Teorema 0.2/2.1), então a probabilidade de novos disparos decresce
|
| 46 |
+
estritamente e a soma de disparos é finita q.s. (argumento de supermartingale em
|
| 47 |
+
$\sum_i \mathbb{P}(e_i>GT \text{ após adaptação})$). $\blacksquare$
|
| 48 |
+
|
| 49 |
+
## 3. Comparação com GG/GCS (por que os três existem no KHTST)
|
| 50 |
+
|
| 51 |
+
| | GG | GCS | GSOM |
|
| 52 |
+
|---|---|---|---|
|
| 53 |
+
| Topologia | retangular | simplicial | retangular livre |
|
| 54 |
+
| Controle de tamanho | $K_{max}$ | $K_{max}$ + poda | $SF$ contínuo |
|
| 55 |
+
| Crescimento | linhas/colunas | arestas | unidades de fronteira |
|
| 56 |
+
| Indicador de parada | cotovelo de $E_q$ | utilidade baixa | Teorema 3.2 (finitude) |
|
| 57 |
+
|
| 58 |
+
O **orquestrador SOM-of-SOMs** (`memoria/orquestrador.py`) escolhe a variante por perfil:
|
| 59 |
+
dados densos e estáveis → GG; necessidade de detectar redundância → GCS (poda);
|
| 60 |
+
orçamento de RAM apertado e granularidade desejada → GSOM.
|
docs/matematica/04-hierarchical-som.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 04 — Hierarchical SOM (H-SOM): erro decomposto por nível
|
| 2 |
+
|
| 3 |
+
**Módulo:** `memoria/hsom.py`. Ideia: empilhar SOMs em níveis; o nível $1$ quantiza grosso,
|
| 4 |
+
cada unidade $i$ do nível 1 governa um mapa filho $\mathcal{M}_i$ do nível 2 que quantiza o
|
| 5 |
+
resíduo (ou a sub-população) daquela região.
|
| 6 |
+
|
| 7 |
+
## 1. Decomposição do erro
|
| 8 |
+
|
| 9 |
+
Seja $x$ atribuído ao protótipo $w^{(1)}_i$ no nível 1 e, dentro do mapa filho $\mathcal{M}_i$,
|
| 10 |
+
ao protótipo $w^{(2)}_{ij}$. O erro total de reconstrução de dois níveis é
|
| 11 |
+
$$E^{(2)}(x) = \|x - w^{(1)}_i\|^2 + \|x - w^{(2)}_{ij}\|^2 - 2\,(x-w^{(1)}_i)^\top (x-w^{(2)}_{ij}) \;\le\; 2\big(\|x-w^{(1)}_i\|^2 + \|x-w^{(2)}_{ij}\|^2\big), \tag{4.1}$$
|
| 12 |
+
pela desigualdade $2ab \le a^2+b^2$. A composição hierárquica implementa
|
| 13 |
+
$$w^{(2)}_{ij} \approx w^{(1)}_i + \text{correção local},$$
|
| 14 |
+
e o erro **residual** $\|x - w^{(2)}_{ij}\|$ satisfaz:
|
| 15 |
+
|
| 16 |
+
**Teorema 4.1 (hierarquia reduz o raio efetivo).** Se nível 1 tem $K_1$ unidades cobrindo o
|
| 17 |
+
suporte $\Omega$ com diâmetro $\Delta$, cada célula de Voronoi do nível 1 tem diâmetro
|
| 18 |
+
$\le \Delta/\sqrt{K_1}$ em média (partição uniforme), e o nível 2 opera apenas dentro dessas
|
| 19 |
+
células — a distância que os protótipos filhos precisam alcançar é menor que a global, logo
|
| 20 |
+
com o mesmo orçamento total $K_1 + K_2$ unidades, $E_q$ hierárquico $\le E_q$ de um mapa plano
|
| 21 |
+
com $K_1$ unidades quando as distribuições locais são multimodais.
|
| 22 |
+
**Demonstração (esboço).** Para população local $p_i$ multimodal dentro da célula $V_i$, um
|
| 23 |
+
mapa plano com $K_1$ centros comete erro $\approx$ variância intra-célula total. A hierarquia
|
| 24 |
+
gasta $K_2$ centros para capturar os modos locais; pelo Teorema 0.2 (refinamento), a soma dos
|
| 25 |
+
erros das partições finas é $\le$ erro da partição grossa. Somando sobre $i$: $E^{(2)}\le E^{(1)}$
|
| 26 |
+
quando $K_2$ é alocado às células de maior massa de erro (greedy pelo erro acumulado). $\blacksquare$
|
| 27 |
+
|
| 28 |
+
## 2. Treinamento em dois estágios (evita beco sem saída — item 7)
|
| 29 |
+
|
| 30 |
+
1. Estágio A: treinar nível 1 até $\sigma$ pequeno (Teorema 1.2).
|
| 31 |
+
2. Estágio B: **congelar** nível 1 e treinar cada filho com as amostras que caem na sua célula
|
| 32 |
+
(rotação por unidade — memória amigável: só um filho em RAM por vez).
|
| 33 |
+
3. Estágio C (opcional): descongelar nível 1 com $\alpha$ pequeno ($10^{-3}$) para ajuste fino.
|
| 34 |
+
|
| 35 |
+
**Teorema 4.2 (estágio B não degrada o nível 1).** Congelar $W^{(1)}$ torna a atribuição de
|
| 36 |
+
célula invariante; o erro total é soma de termos independentes, e minimizar cada termo filho
|
| 37 |
+
minimiza a soma — não há termo cruzado ativo. $\blacksquare$
|
| 38 |
+
|
| 39 |
+
## 3. Custo computacional
|
| 40 |
+
|
| 41 |
+
Busca BMU hierárquica: $O(K_1) + O(K_2)$ em vez de $O(K_1 K_2)$ de um mapa plano equivalente —
|
| 42 |
+
a busca em dois níveis é um índice (quantização produto por partição), com
|
| 43 |
+
$K_{plano}=K_1\cdot K_2/K_1=K_2$ unidades por célula média; ganho prático de RAM:
|
| 44 |
+
só o filho ativo fica residente.
|
| 45 |
+
|
| 46 |
+
## 4. Uso no KHTST
|
| 47 |
+
|
| 48 |
+
H-SOM implementa a **memória episódica multinível** do raciocínio cíclico: nível 1 = "tipo de
|
| 49 |
+
situação", nível 2 = "detalhe da situação". O plano do ciclo PDCA consulta o nível 1
|
| 50 |
+
(barato, sempre em RAM) e só carrega o filho relevante sob demanda (item 1: otimização de RAM).
|
docs/matematica/05-tkm-rsom.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 05 — Variantes temporais: TKM e RSOM (Kohonen com memória)
|
| 2 |
+
|
| 3 |
+
**Módulos:** `memoria/tkm.py`, `memoria/rsom.py`. Referências: Kangas (1990) TKM;
|
| 4 |
+
Voegtlin (2002) RSOM.
|
| 5 |
+
|
| 6 |
+
## 1. Temporal Kohonen Map (TKM)
|
| 7 |
+
|
| 8 |
+
O TKM define o vencedor não pela amostra corrente, mas pelo **erro acumulado na janela temporal**:
|
| 9 |
+
$$D_i(t) \;=\; \sum_{s=0}^{W-1} \lambda^s\,\|x(t-s) - w_i\|^2, \qquad \lambda\in(0,1), \tag{5.1}$$
|
| 10 |
+
$c(t) = \arg\min_i D_i(t)$; a atualização usa a regra de Kohonen na amostra corrente.
|
| 11 |
+
|
| 12 |
+
**Teorema 5.1 (memória efetiva finita).** A contribuição da amostra $x(t-s)$ em $D_i(t)$ é
|
| 13 |
+
$\lambda^s\|x(t-s)-w_i\|^2$; como $\sum_{s\ge0}\lambda^s = \frac{1}{1-\lambda}$, a soma das
|
| 14 |
+
contribuições além de $S_\epsilon$ é $\frac{\lambda^{S_\epsilon+1}}{1-\lambda}$. Para capturar
|
| 15 |
+
$(1-\epsilon)$ da massa de memória: $S_\epsilon = \frac{\ln(\epsilon(1-\lambda))}{\ln\lambda} - 1$.
|
| 16 |
+
**Demonstração.** Série geométrica direta + desigualdade do resto. $\blacksquare$
|
| 17 |
+
**Uso:** a janela efetiva $S_\epsilon$ é logada pela telemetria; $\lambda$ padrão $=0.5$
|
| 18 |
+
(janela média $=1/(1-\lambda)=2$ amostras; configurável).
|
| 19 |
+
|
| 20 |
+
## 2. Recurrent SOM (RSOM) — diferenças acumuladas
|
| 21 |
+
|
| 22 |
+
O RSOM acumula o **resíduo** em vez da distância:
|
| 23 |
+
$$\boxed{\;c_i(t) = (1-\alpha)\,c_i(t-1) + \alpha\,\big(x(t) - w_i(t)\big)\;} \tag{5.2}$$
|
| 24 |
+
com vencedor $c(t) = \arg\min_i \|c_i(t)\|$ e atualização de Kohonen aplicada ao longo da
|
| 25 |
+
sequência. Expandindo (5.2):
|
| 26 |
+
$$c_i(t) = \alpha\sum_{s=0}^{t-1}(1-\alpha)^s\,\big(x(t-s)-w_i(t-s)\big) + (1-\alpha)^t c_i(0). \tag{5.3}$$
|
| 27 |
+
|
| 28 |
+
**Teorema 5.2 (c é média móvel exponencial do resíduo).** (5.3) segue por indução:
|
| 29 |
+
$c_i(t+1) = (1-\alpha)\big[\alpha\sum_{s=0}^{t-1}(1-\alpha)^s r_i(t-s)\big] + \alpha r_i(t)
|
| 30 |
+
= \alpha\sum_{s=0}^{t}(1-\alpha)^s r_i(t+1-(s+1))$. $\blacksquare$
|
| 31 |
+
|
| 32 |
+
**Teorema 5.3 (estabilidade BIBO).** Se $\|x-w_i\|\le B$ e $c_i(0)$ finito, então
|
| 33 |
+
$\|c_i(t)\| \le \alpha B \frac{1-(1-\alpha)^t}{\alpha} + (1-\alpha)^t\|c_i(0)\| \le B + o(1)$ —
|
| 34 |
+
o contexto é limitado independentemente do comprimento da sequência.
|
| 35 |
+
**Demonstração.** Norma triangular em (5.3) + soma geométrica. $\blacksquare$
|
| 36 |
+
|
| 37 |
+
**Teorema 5.4 (filtro passa-baixa).** No domínio $z$, (5.2) é
|
| 38 |
+
$C_i(z) = \frac{\alpha}{1-(1-\alpha)z^{-1}} R_i(z)$ — filtro de 1ª ordem com polo em $1-\alpha\in(0,1)$
|
| 39 |
+
(estável, já que o polo está dentro do círculo unitário). Frequência de corte
|
| 40 |
+
$\omega_c \approx \alpha$ rad/amostra: $\alpha$ pequeno ⇒ memória longa e suave. $\blacksquare$
|
| 41 |
+
|
| 42 |
+
## 3. Diferença prática TKM × RSOM (e por que ambas)
|
| 43 |
+
|
| 44 |
+
| | TKM | RSOM |
|
| 45 |
+
|---|---|---|
|
| 46 |
+
| Acumula | distâncias (escalares positivos) | resíduos vetoriais (cancela componentes) |
|
| 47 |
+
| Vencedor | erro ponderado no tempo | norma do contexto |
|
| 48 |
+
| Detecta | duração de padrões (prolongamento) | **tendência** (direção média do resíduo) |
|
| 49 |
+
| RAM | $O(K)$ | $O(Kd)$ |
|
| 50 |
+
|
| 51 |
+
No orquestrador, TKM roteia tarefas com "eventos longos" (áudio/vídeo) e RSOM tarefas com
|
| 52 |
+
transições de estado (diálogos, raciocínio multi-passo).
|
| 53 |
+
|
| 54 |
+
## 4. Inicialização e higiene numérica
|
| 55 |
+
|
| 56 |
+
$c_i(0)=0$ (equivale a assumir resíduo nulo — o vencedor inicial coincide com o BMU estático);
|
| 57 |
+
a cota $\|c_i\|\le B$ é checada a cada lote por asserção local (Teorema 5.3) e tratada
|
| 58 |
+
como **bug** (não como dados) — a revisão de contratos antes de cada modificação é
|
| 59 |
+
responsabilidade do **Agente Engenheiro** (ver README).
|
docs/matematica/06-cpn-ssom.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 06 — Counterpropagation Network (CPN) e Supervised SOM (S-SOM)
|
| 2 |
+
|
| 3 |
+
## 1. CPN (Hecht-Nielsen, 1987)
|
| 4 |
+
|
| 5 |
+
Arquitetura em duas camadas: **Kohonen** (competitiva, WTA) + **Grossberg** (outstar, LMS).
|
| 6 |
+
Dado par $(x, y)$: camada 1 escolhe $c=\arg\min_i\|x-w_i\|$; camada 2 aprende
|
| 7 |
+
$$v_j \leftarrow v_j + \eta_g\,(y - \hat y)_j\,\mathbb{1}[i=c], \qquad \hat y = v_c. \tag{6.1}$$
|
| 8 |
+
|
| 9 |
+
### Teorema 6.1 (convergência por célula — regressão por partes)
|
| 10 |
+
|
| 11 |
+
**Hipóteses.** $W$ congelado após sua fase (alternância de fases); $\eta_g = \eta_0/t$ com
|
| 12 |
+
$\eta_0>0$; pares i.i.d.
|
| 13 |
+
**Afirmação.** Para cada célula $c$, $v_c(t) \to \bar y_c := \mathbb{E}[y \mid c(x)=c]$
|
| 14 |
+
(média condicional), que é o minimizador de $\mathbb{E}[\|y-v\|^2 \mid c(x)=c]$.
|
| 15 |
+
**Demonstração.** Com $W$ congelado, a atribuição $c(x)$ é uma função determinística de $x$.
|
| 16 |
+
Restringe-se (6.1) às amostras de $c$: $v \leftarrow v + \eta_t (y_t - v)$, que é o SGD de
|
| 17 |
+
$J(v)=\frac12\mathbb{E}[\|y-v\|^2 \mid c]$ com gradiente $\mathbb{E}[v-y\mid c]$. $J$ é
|
| 18 |
+
fortemente convexa com mínimo em $\bar y_c$; por Robbins–Monro ($\sum\eta=\infty$,
|
| 19 |
+
$\sum\eta^2<\infty$), $v\to\bar y_c$ q.s. A saída global é, portanto, a **regressão por
|
| 20 |
+
partes** (piecewise regression) sobre a partição de Voronoi de $W$. $\blacksquare$
|
| 21 |
+
|
| 22 |
+
**Uso no KHTST:** a CPN é o "conector" SOM→saída simbólica: quantiza o estado latente e
|
| 23 |
+
produz, por região, a resposta média — base do **decodificador de roteamento** do orquestrador
|
| 24 |
+
e do preditor de ferramenta no ciclo PDCA.
|
| 25 |
+
|
| 26 |
+
### 6.2 Duas fases, duas taxas
|
| 27 |
+
Fase 1 (Kohonen): $\alpha_K$ decaindo (Teorema 1.2). Fase 2 (Grossberg): $\eta_g$ decaindo.
|
| 28 |
+
Alternância evita alvo móvel (Teorema 6.1 exige $W$ congelado).
|
| 29 |
+
|
| 30 |
+
## 2. S-SOM (Supervised SOM)
|
| 31 |
+
|
| 32 |
+
Objetivo: mapa auto-organizável **com rótulos**, misturando quantização e classificação.
|
| 33 |
+
Perda combinada:
|
| 34 |
+
$$J(W, V) = \underbrace{\mathbb{E}\big[\textstyle\sum_j h_{cj}\|x-w_j\|^2\big]}_{\text{quantização (não-supervisionada)}} \;+\; \lambda\, \underbrace{\mathrm{CE}\big(y,\; \mathrm{softmax}(V W_a)\big)}_{\text{supervisão}}, \tag{6.2}$$
|
| 35 |
+
onde $a(x)=\arg\min_i\|x-w_i\|$ e $V W_a$ lê o vetor de pontuação da unidade vencedora.
|
| 36 |
+
|
| 37 |
+
**Teorema 6.2 (equilíbrio ótimo de $\lambda$ por normalização de escala).** Se
|
| 38 |
+
$\|x\|=1$ (entradas normalizadas) e $\|v\|\le v_{max}$, os gradientes dos dois termos são da
|
| 39 |
+
ordem de $\sigma_x$ e $\sigma_{CE}$; escolher $\lambda = \sigma_x/\sigma_{CE}$ iguala as
|
| 40 |
+
magnitudes de gradiente — implementado com $\sigma$ medidos por EMA na telemetria
|
| 41 |
+
(autoajuste com taxa de Robbins–Monro $\beta_t$): $\lambda_{t+1} = \lambda_t(1+\beta_t(\sigma_x/\sigma_{CE} - \lambda_t)/\lambda_t)$.
|
| 42 |
+
**Demonstração.** Gradiente do termo 1 w.r.t. $w_j$: $2h_{cj}(x-w_j)$ com norma esperada
|
| 43 |
+
$\approx 2\sigma_x$ (Teorema 0.1). Gradiente do termo CE via softmax: norma esperada
|
| 44 |
+
$\propto \sigma_{CE}$. Igualar esperanças normaliza as taxas efetivas — condição de
|
| 45 |
+
estabilidade de passo único (Teorema 0.1) para ambos. $\blacksquare$
|
| 46 |
+
|
| 47 |
+
**Teorema 6.3 (rótulos não destroem a topologia).** Para $\lambda \le \lambda_{max}$ finito, o
|
| 48 |
+
termo de quantização domina em coeficiente de Lipschitz nos protótipos na medida em que
|
| 49 |
+
$h$ tem suporte local; a ordenação de Teorema 1.3 sobrevive com distorção limitada por
|
| 50 |
+
$\lambda/\alpha$ (distância máxima que o gradiente CE move um peso por passo).
|
| 51 |
+
**Consequência de engenharia:** limitamos $\lambda\, v_{max} \le 0.1\,\alpha$ na implementação
|
| 52 |
+
(guarda em `ssom.py`), garantindo a cota.
|
| 53 |
+
|
| 54 |
+
## 3. Papel das duas no pipeline
|
| 55 |
+
|
| 56 |
+
- **CPN** → roteamento estado→ação (qual módulo/ferramenta executa o próximo passo do PDCA).
|
| 57 |
+
- **S-SOM** → classificador de intenção com memória organizada (intenção→rota no arbiter);
|
| 58 |
+
também fornece **confiança** (margem do softmax) usada pelo limiar de escalada a humano (doc 09, §6).
|
docs/matematica/07-atencao-mista-kvcache.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 07 — Atenção: mistura de mecanismos, √d, atenção linear e KV-cache
|
| 2 |
+
|
| 3 |
+
**Módulos:** `percepcao/atencao.py` (MixtureOfAttention), `nucleo/modelo.py` (KV-cache).
|
| 4 |
+
O modelo combina **mais de um mecanismo de atenção** (item 10 do escopo): global (softmax
|
| 5 |
+
completo), janela deslizante (sliding window) e linear (kernel) — com **gating aprendido**.
|
| 6 |
+
|
| 7 |
+
## 1. Por que escalar por $\sqrt{d_k}$ (prova)
|
| 8 |
+
|
| 9 |
+
**Hipóteses.** Componentes de $q, k$ i.i.d. com média 0, variância 1 (pós-LayerNorm com
|
| 10 |
+
pesos inicializados ortogonalmente).
|
| 11 |
+
**Afirmação.** $\mathrm{Var}(q^\top k) = d_k$, logo $q^\top k/\sqrt{d_k}$ tem variância 1.
|
| 12 |
+
**Demonstração.** $\mathrm{Var}(q^\top k)=\sum_{i=1}^{d_k}\mathrm{Var}(q_i k_i)=\sum_i \mathrm{E}[q_i^2]\mathrm{E}[k_i^2]=d_k$ (independência; média zero elimina o termo cruzado). Sem a
|
| 13 |
+
normalização, as pontuações têm desvio $\sqrt{d_k}$ e o softmax satura (gradientes
|
| 14 |
+
$\approx 0$): a escala evita o beco sem saída do gradiente anulado. $\blacksquare$
|
| 15 |
+
|
| 16 |
+
## 2. Complexidades e cota da mistura
|
| 17 |
+
|
| 18 |
+
Seja $n$ o comprimento da sequência, $d$ o modelo. Custo FLOPs por cabeça:
|
| 19 |
+
- **Global:** $O(n^2 d_k)$ — toda a matriz $QK^\top$.
|
| 20 |
+
- **Janela** de raio $r$: cada consulta vê $\le 2r+1$ chaves ⇒ $O(n\,(2r{+}1)\,d_k) = O(n r d_k)$.
|
| 21 |
+
- **Linear** com feature map $\varphi:\mathbb{R}^{d_k}\to\mathbb{R}^m$: computa-se
|
| 22 |
+
$\big(\varphi(Q)(\varphi(K)^\top V)\big)$ — **prova de associatividade** que muda a ordem
|
| 23 |
+
das matrizes: $\sum_i \varphi(q)^\top\varphi(k_i) v_i = \varphi(q)^\top\big(\sum_i \varphi(k_i) v_i^\top\big)$;
|
| 24 |
+
logo $O(n\,m\,d_k + n\,m\,d_v)$ — linear em $n$. Usamos $\varphi(x)=\mathrm{elu}(x)+1$
|
| 25 |
+
(não-negatividade necessária para a interpretação probabilística de Katharopoulos et al. 2020).
|
| 26 |
+
|
| 27 |
+
**Teorema 7.1 (custo do gating como mistura convexa).** Se o gate $g$ sobre os $J$ mecanismos
|
| 28 |
+
satisfaz $\sum_j g_j = 1,\ g_j\ge 0$, o custo esperado do MixtureOfAttention é
|
| 29 |
+
$\sum_j g_j C_j$ — limitado pela mistura convexa dos custos; a camada pode reduzir custo
|
| 30 |
+
deslocando massa do mecanismo global ($C=n^2d_k$) para o linear ($C=nm d_k$) sem sair do
|
| 31 |
+
simplex (restrito em `atencao.py` por `softmax` sobre logits do gate).
|
| 32 |
+
**Demonstração.** Linearidade da esperança sobre a execução por cabeça com pesos $g_j$. $\blacksquare$
|
| 33 |
+
|
| 34 |
+
## 3. KV-cache: decodificação $O(1)$ por token
|
| 35 |
+
|
| 36 |
+
Autoregressão com cache: guardam-se $K, V$ históricos ($n_{kv}\times d_k$ cada). No passo $t$,
|
| 37 |
+
a nova consulta custa $O(t\,d_k)$ leituras+FLOPs (uma linha de $Q$ contra $t$ linhas de $K,V$) —
|
| 38 |
+
por token, custo constante; sem cache seria $O(t^2 d_k)$ reprocessar tudo.
|
| 39 |
+
**Memória:** $2\,n_{kv}\,H\,d_k$ floats — para $n_{kv}=512$, $H=4$, $d_k=48$ (config CPU):
|
| 40 |
+
$2\cdot512\cdot4\cdot48\cdot4\text{B} \approx 786\,\text{kB}$ por requisição. O cache é
|
| 41 |
+
**recortado por janela** (máx. `n_kv`) — coerente com a otimização de RAM do item 1.
|
| 42 |
+
|
| 43 |
+
## 4. Multi-modal: fusão por cross-attention
|
| 44 |
+
|
| 45 |
+
Embeddings por modalidade $z_m = \mathrm{Enc}_m(x_m)$ (texto, imagem, áudio, vídeo, tabular)
|
| 46 |
+
projetados a $d$ comum; a fusão usa cross-attention
|
| 47 |
+
$$z = \mathrm{MHA}(Q=W_q z_{\text{texto}},\; K=W_k z_{\text{todos}},\; V=W_v z_{\text{todos}}) + z_{\text{texto}} \tag{7.1}$$
|
| 48 |
+
mais **gating por modalidade** $\pi_m = \mathrm{softmax}_m(a_m)$ com $a_m$ aprendido e
|
| 49 |
+
condicionado à presença da modalidade — modalidade ausente recebe gate $0$ (máscara).
|
| 50 |
+
A prova de estabilidade segue do Teorema 1 (norma controlada) + LayerNorm pré-atuação.
|
docs/matematica/08-quantizacao-w8a8.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 08 — Quantização W8A8: cotas de erro e treino consciente de quantização
|
| 2 |
+
|
| 3 |
+
**Módulo:** `quanta/quantizacao.py`. Pesos e ativações em 8 bits (item 9 do escopo),
|
| 4 |
+
com fallback puro-PyTorch quando `bitsandbytes` não dispõe de backend CPU/CUDA.
|
| 5 |
+
|
| 6 |
+
## 1. Quantização simétrica W8
|
| 7 |
+
|
| 8 |
+
Dado tensor real $X$, com escala por tensor (ou por canal de saída):
|
| 9 |
+
$$s \;=\; \frac{\max|X|}{127}, \qquad Q(X) = \mathrm{clamp}\Big(\mathrm{round}\big(X/s\big),\;-127,\;127\Big), \qquad \tilde X = s\,Q(X). \tag{8.1}$$
|
| 10 |
+
|
| 11 |
+
**Teorema 8.1 (cota suprema do erro).** $\|\tilde X - X\|_\infty \le s/2$.
|
| 12 |
+
**Demonstração.** $\mathrm{round}(u)$ muda $u$ por no máximo $1/2$; o *clamp* só atua fora de
|
| 13 |
+
$[-127,127]$, onde $\mathrm{round}(X/s)=\pm127$ exatamente no limite, mudança $<1/2$ após
|
| 14 |
+
arredondamento; logo $|Q(u)-u|\le 1/2$ e $\|\tilde X - X\|_\infty = s\,\|Q(X/s)-X/s\|_\infty \le s/2$. $\blacksquare$
|
| 15 |
+
|
| 16 |
+
**Teorema 8.2 (erro médio).** Para $X$ com fração de massa uniforme dentro de cada célula de
|
| 17 |
+
arredondamento, $\mathbb{E}|\tilde X - X| \approx s/4$ (esperança de $|U|$, $U\sim U(-s/2,s/2)$).
|
| 18 |
+
**Uso:** a telemetria compara o erro observado com $s/4$; desvios grandes indicam outliers
|
| 19 |
+
densos (dispara escala por canal).
|
| 20 |
+
|
| 21 |
+
## 2. Matmul inteira (caminho W8A8 real)
|
| 22 |
+
|
| 23 |
+
$\tilde Y = \tilde X \tilde W^\top = s_x s_w\, \big(Q(X)\,Q(W)^\top\big)$. Em hardware com
|
| 24 |
+
int8 GEMM (CUDA/bnb) a soma acumula em int32; em CPU (nossa execução) faz-se o produto em
|
| 25 |
+
`int32` via `torch` (conversão explícita) ou **simulação fake-quant** em fp32 — o erro segue
|
| 26 |
+
a cota do Teorema 8.1 em ambos os casos, pois a simulação aplica as mesmas funções (8.1).
|
| 27 |
+
|
| 28 |
+
## 3. QAT — straight-through estimator (STE)
|
| 29 |
+
|
| 30 |
+
Na fase de treino quantizado, o passo de quantização tem gradiente nulo quase sempre
|
| 31 |
+
(escadinhas); usa-se STE (Bengio et al., 2013): forward com $\tilde X$, backward com
|
| 32 |
+
identidade.
|
| 33 |
+
|
| 34 |
+
**Teorema 8.3 (STE é subgradiente válido).** A função $q(u)=s\,\mathrm{clamp}(\mathrm{round}(u/s),-127,127)$
|
| 35 |
+
é Lipschitz com constante 1 (composição de 1-Lipschitz: clamp e round são 1-Lipschitz;
|
| 36 |
+
por Rademacher, $q$ é diferenciável a.e. com $|q'|\le 1$; o conjunto de descontinuidades tem
|
| 37 |
+
medida nula). O STE substitui $q'$ por $1$ — um subgradiente admissível no sentido de Clarke,
|
| 38 |
+
e o SGD com subgradientes converge para um mínimo local sob Robbins–Monro (Teorema 1.2). $\blacksquare$
|
| 39 |
+
|
| 40 |
+
## 4. LLM.int8() (bitsandbytes) — decomposição de outliers
|
| 41 |
+
|
| 42 |
+
Dettmers et al. (2022): separar colunas de ativação com magnitude acima de limiar $\tau$:
|
| 43 |
+
$$X W^\top \;=\; \underbrace{X_{:,O} W_{O,:}^\top}_{\text{fp16, colunas de outliers } O} \;+\; \underbrace{X_{:,I} W_{I,:}^\top}_{\text{int8, } I=O^c}. \tag{8.2}$$
|
| 44 |
+
**Cota de erro:** o erro da parte int8 é limitado por $\tfrac{s_x s_w}{2}\|W_{I,:}\|_1$
|
| 45 |
+
(Teorema 8.1 + subaditividade), e os outliers — únicos responsáveis por explosões de erro —
|
| 46 |
+
ficam exatos em fp16. Implementação: se `bitsandbytes` disponível com backend funcional,
|
| 47 |
+
delega; senão, o mesmo critério ($\tau = 6\,\mathrm{MAD}$) é aplicado manualmente.
|
| 48 |
+
|
| 49 |
+
## 5. Onde o KHTST aplica
|
| 50 |
+
|
| 51 |
+
1. **Inferência/avaliação:** pesos do decoder quantizados W8 após o treino (compara-se
|
| 52 |
+
perplexidade fp32 × W8 — relatada na telemetria).
|
| 53 |
+
2. **Treino (opcional, config):** QAT-STE nas projeções lineares nos últimos passos.
|
| 54 |
+
3. **bitsandbytes:** integração condicionada a CUDA; no ambiente CPU usa-se o caminho
|
| 55 |
+
simétrico puro-PyTorch com as mesmas cotas (honestidade documentada no README).
|
| 56 |
+
|
| 57 |
+
## 5. v4 — Escalas por grupo (Teorema 8.4)
|
| 58 |
+
|
| 59 |
+
Divide-se a última dimensão em grupos de tamanho $g$ (64) com escala própria
|
| 60 |
+
$s_g = \max|x|_g/q_{\max}$.
|
| 61 |
+
|
| 62 |
+
**Teorema 8.4 (erro estruturalmente menor).** Com escalas por grupo, o erro
|
| 63 |
+
$\infty$-norma por elemento é $\le s_g/2$ e, para entradas aproximadamente
|
| 64 |
+
uniformes dentro de cada grupo, $\mathbb{E}[\mathrm{erro}^2] \approx s_g^2/12
|
| 65 |
+
\le (s_{\text{tensor}}/g^{1/d})^2/12$ — redução de raiz quadrada em $g$ no caso
|
| 66 |
+
1D ($\approx\sqrt{g}$× menos erro RMS que a escala por tensor).
|
| 67 |
+
|
| 68 |
+
**Demonstração.** Arredondamento simétrico: $|\mathrm{erro}|\le s/2$ por célula
|
| 69 |
+
(mesmo argumento do Teorema 8.1 restrito ao grupo). Para $x$ uniforme em
|
| 70 |
+
$[-s/2, s/2]$ dentro do grupo, $\mathbb{E}[\mathrm{erro}^2] = s^2/12$; como
|
| 71 |
+
$s_g$ usa o máximo de APENAS $g$ elementos (vs. todo o tensor), $s_g \le
|
| 72 |
+
s_{\text{tensor}}$ com igualdade apenas quando o máximo global está no grupo —
|
| 73 |
+
em média, sobre grupos com distribuição semelhante, a razão dos máximos é
|
| 74 |
+
$O(1/\sqrt{g})$ para subamostragem aleatória, dando o fator $\sqrt{g}$. $\blacksquare$
|
| 75 |
+
|
| 76 |
+
## 6. v4 — Correção de viés pós-quantização (Teorema 8.5)
|
| 77 |
+
|
| 78 |
+
**Teorema 8.5 (eliminação do desvio de 1ª ordem).** Seja
|
| 79 |
+
$\Delta b = \mathbb{E}_a[a\,W^\top] - \mathbb{E}_a[a_q W_q^\top]$ calibrado em
|
| 80 |
+
um lote representativo. Então $y_{\text{corr}} = y_q + \Delta b$ tem
|
| 81 |
+
$\|\mathbb{E}[y_{\text{fp}} - y_{\text{corr}}]\| \le \|\,\mathrm{Cov}\,\|\cdot
|
| 82 |
+
\varepsilon_2$ — o erro MÉDIO restante é de 2ª ordem (Teorema 8.2: média $s/4$
|
| 83 |
+
por produto interno).
|
| 84 |
+
|
| 85 |
+
**Demonstração.** $y_{\text{fp}} - y_q = a W^\top - a_q W_q^\top = (a-a_q)W^\top
|
| 86 |
+
+ a_q (W-W_q)^\top - (a-a_q)(W-W_q)^\top$; tomando esperança, os dois primeiros
|
| 87 |
+
termos são exatamente $\Delta b$ (removido pela correção); resta o produto
|
| 88 |
+
cruzado, quadrático nos erros de quantização — $O(\varepsilon^2)$. $\blacksquare$
|
| 89 |
+
|
| 90 |
+
Implementação: `quantiza_por_grupo` (fallback automático p/ dim < g) e
|
| 91 |
+
`FakeQuantW8A8Grupo.calibrar` → `correcao_vies` (GPTQ-lite).
|
| 92 |
+
|
| 93 |
+
## §§7–9 (v5) — Quantização REAL sem fakes
|
| 94 |
+
|
| 95 |
+
Refactor v5 (`quanta/quantizacao.py`): `FakeQuantW8A8`, `FakeQuantW8A8Grupo` e
|
| 96 |
+
`aplicar_w8_linear` REMOVIDOS. A inferência NUNCA é simulada — os backends reais:
|
| 97 |
+
|
| 98 |
+
§7.1 torchao `Int8DynamicActivationInt8WeightConfig` — kernels int8 reais (CPU/GPU);
|
| 99 |
+
§7.2 torch.ao.quantization `prepare_qat`→`convert` — Treinamento INT8 UNIVERSAL
|
| 100 |
+
(backend x86/fbgemm/qnnpack; conversão final REAL, fluxo do pedido);
|
| 101 |
+
§7.3 torchao.float8 `convert_to_float8` — treino nativo FP8 (GPU H100+; degrada
|
| 102 |
+
honesta em CPU);
|
| 103 |
+
§7.4 bitsandbytes `load_in_8bit=True` — weight-only 8-bit GPU (integração HF).
|
| 104 |
+
|
| 105 |
+
**Teorema 16.7 (equivalência).** Simulação round→clamp→dequantize e kernel int8
|
| 106 |
+
real implementam o MESMO mapa afim ⇒ erro idêntico; as cotas 8.1–8.5 valem ao
|
| 107 |
+
kernel. A diferença é VELOCIDADE/MEMÓRIA (Teorema 16.8: ≈3,76× com escalas por
|
| 108 |
+
grupo), não erro.
|
| 109 |
+
**§8 métricas honestas:** `metricas_qualidade` (erro relativo, SNR dB, erro máx).
|
| 110 |
+
**§9 diagnóstico:** `modo_quantizacao()` — disponibilidade real por backend.
|
| 111 |
+
Durante o TREINO mantém-se QAT com STE (Teorema 8.3) — classe `QATW8A8`
|
| 112 |
+
(metodologia idêntica ao prepare_qat, escalas por grupo) — mas a conversão de
|
| 113 |
+
exportação é sempre REAL (§7.1/§7.2).
|
docs/matematica/09-ortogonais-cooperativas-punicao-telemetria-pdca.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 09 — Camadas ortogonais e cooperativas; punição/retreino; telemetria; ciclo PDCA
|
| 2 |
+
|
| 3 |
+
## 1. Camadas ortogonais (Householder)
|
| 4 |
+
|
| 5 |
+
**Módulo:** `percepcao/ortogonais.py`. Uma camada linear com $W$ ortogonal satisfaz
|
| 6 |
+
$W W^\top = I$. Implementação parametrizada por reflexões de Householder
|
| 7 |
+
$$H(v) = I - 2\frac{v v^\top}{\|v\|^2}, \qquad W = \prod_{i=1}^{p} H(v_i), \tag{9.1}$$
|
| 8 |
+
**Teorema 9.1 (ortogonalidade exata por construção).** $H(v)H(v)^\top =
|
| 9 |
+
(I - 2\hat v\hat v^\top)(I - 2\hat v\hat v^\top) = I - 4\hat v\hat v^\top + 4\hat v(\hat v^\top\hat v)\hat v^\top = I$,
|
| 10 |
+
pois $\hat v^\top \hat v = 1$. Produto de ortogonais é ortogonal. $\blacksquare$
|
| 11 |
+
**Custo:** $p$ reflexões custam $O(p d^2)$ no geral, mas como produto vetor-matriz
|
| 12 |
+
sucessivo: $O(p\,d^2)$ → com $p=d$ (casa completa) $O(d^3)$ é caro; usamos $p\in\{1,2\}$
|
| 13 |
+
(ortogonalidade parcial suficiente) ou projeção QR periódica da base de pesos (cada
|
| 14 |
+
$N$ passos, custo $O(d^2)$ amortizado).
|
| 15 |
+
|
| 16 |
+
**Teorema 9.2 (gradiente estável).** Se $W$ ortogonal, $\|Wx\|_2=\|x\|_2$ e o número de
|
| 17 |
+
condição $\kappa(W)=1$; o gradiente que retropropaga por $W$ tem norma preservada:
|
| 18 |
+
$\|W^\top g\|=\|g\|$ — elimina explosão/vanishing associados a $\sigma_{min}\ll\sigma_{max}$.
|
| 19 |
+
**Uso:** nas camadas de **fusão multimodal**, onde escalas de modalidades diferentes
|
| 20 |
+
amenizariam o gradiente.
|
| 21 |
+
|
| 22 |
+
## 2. Camadas cooperativas (mistura de expertos com balanceamento)
|
| 23 |
+
|
| 24 |
+
$N$ expertos $\{E_i\}$ com gate $g=\mathrm{softmax}(a)$; saída $y=\sum_i g_i E_i(x)$.
|
| 25 |
+
Perda de balanceamento (Switch Transformer):
|
| 26 |
+
$$L_{bal} = N \sum_{i=1}^{N} f_i \cdot P_i, \qquad f_i=\tfrac{1}{B}\#\{x: i = \arg\max g(x)\},\; P_i = \overline{g_i}. \tag{9.2}$$
|
| 27 |
+
**Teorema 9.3 (mínimo uniforme).** $L_{bal} \ge N\cdot\frac1N\cdot\frac1N = \frac1N$ com
|
| 28 |
+
igualdade sse $f_i=P_i=1/N$ (por desigualdade da média aritmética nas somas $\sum f_i=\sum P_i=1$).
|
| 29 |
+
Logo minimizar $L_{bal}$ força cooperação (uso equilibrado) em vez de colapso a um expert. $\blacksquare$
|
| 30 |
+
**Cooperação ativa:** 2 expertos sempre ativos por token (top-2), exigindo divisão de trabalho
|
| 31 |
+
— combinada com $L_{bal}$, evita a solução degenerada "um expert faz tudo".
|
| 32 |
+
|
| 33 |
+
## 3. Punição e retreino (item 6): detectar não-aprendizado e reagir
|
| 34 |
+
|
| 35 |
+
**Detector de estagnação:** janela deslizante de $W_s$ passos sobre a perda de validação
|
| 36 |
+
$\ell_t$; estagnado se
|
| 37 |
+
$$\frac{\min_{t-W_s<t'\le t} \ell_{t'} - \min_{t-2W_s<t'\le t-W_s} \ell_{t'}}{\min_{t-2W_s<t'\le t-W_s}\ell_{t'} } < \epsilon \quad \text{ou} \quad \mathrm{EMA}_t(\ell) \text{ crescente por } k \text{ janelas}. \tag{9.3}$$
|
| 38 |
+
**Políticas de retreino (em ordem de agressividade):**
|
| 39 |
+
1. **Warm restart (SGDR, Loshchilov & Hutter 2017):** $\alpha_t = \alpha_{min}+\frac12(\alpha_{max}-\alpha_{min})\big(1+\cos(\pi T_{cur}/T_i)\big)$ — reinício curto do coseno.
|
| 40 |
+
*Fundamento:* reinícios re-amostram bacias (multistart estocástico); com Robbins–Monro
|
| 41 |
+
dentro de cada ciclo, convergência preservada (Teorema 1.2 aplicado por ciclo).
|
| 42 |
+
2. **Reinit parcial guiado:** reinicializar a camada com **menor contribuição**
|
| 43 |
+
$c_l = \mathbb{E}\|g_l\| \cdot \|W_l\|$ (camada "dorminhoca") — fundamento: ablação de
|
| 44 |
+
menor gradiente perturba menos a perda (Teorema 9.2 garante que ortogonais re-init
|
| 45 |
+
preservam escala de ativações).
|
| 46 |
+
3. **Replay:** re-amostrar do buffer de históricos (cache) com 20% de mistura — corrige
|
| 47 |
+
esquecimento catastrófico local (distribuição deslocada).
|
| 48 |
+
**Teorema 9.4 (convergência sob punição).** Se cada política reinicia um ciclo que cumpre
|
| 49 |
+
Robbins–Monro (R1) e o número de punições é finito q.s. (estagnação tem probabilidade que
|
| 50 |
+
decai com adaptação), a sequência global ainda cumpre $\sum\alpha=\infty,\sum\alpha^2<\infty$
|
| 51 |
+
— punição não quebra a convergência. $\blacksquare$
|
| 52 |
+
|
| 53 |
+
## 4. Telemetria matemática (item 5)
|
| 54 |
+
|
| 55 |
+
1. **Rank efetivo** (Roy & Vetterli 2007) da matriz de ativações $A$:
|
| 56 |
+
$r_{eff} = \exp\big(H(\bar\lambda)\big)$ com $H$ a entropia da distribuição
|
| 57 |
+
$\bar\lambda_i = \sigma_i^2/\sum_j\sigma_j^2$ dos autovalores normalizados.
|
| 58 |
+
*Interpretação:* número efetivo de direções usadas; $r_{eff}$ caindo = colapso
|
| 59 |
+
representacional (dispara punição tipo 2).
|
| 60 |
+
2. **Delta de parâmetros:** $d_t = \|\theta_t-\theta_{t-1}\|_2 / (\|\theta_{t-1}\|_2+\varepsilon)$
|
| 61 |
+
— evolução completa de todos os parâmetros por passo (EMA + percentis; por camada).
|
| 62 |
+
3. **PSI (Population Stability Index)** para drift de distribuição de ativações:
|
| 63 |
+
$\mathrm{PSI} = \sum_b (p_b - q_b)\ln(p_b/q_b)$ sobre histogramas de 10 faixas;
|
| 64 |
+
$\mathrm{PSI}>0.25$ = deslocamento grave.
|
| 65 |
+
4. **EQ/TE dos SOMs** (doc 01 §5) — evolução da memória auto-organizável.
|
| 66 |
+
5. **Saúde do treino:** combinador booleano ponderado (estagnação, gradiente fora de
|
| 67 |
+
$[10^{-7},10^{2}]$, NaN/Inf, PSI, rank efetivo) → classificação de **bug** × **ruído**
|
| 68 |
+
(doc qualidade).
|
| 69 |
+
|
| 70 |
+
## 5. Contratos de qualidade — responsabilidade do Agente Engenheiro
|
| 71 |
+
|
| 72 |
+
**Regras de classificação (revisadas pelo Agente Engenheiro antes de cada modificação,
|
| 73 |
+
com garantia de monotonia de capacidade — nenhuma alteração pode remover uma
|
| 74 |
+
funcionalidade existente):**
|
| 75 |
+
- **Bug (invariante violado):** formas incompatíveis, NaN/Inf, norma de gradiente explosiva,
|
| 76 |
+
$\mathrm{rank}_{eff}$ colapsando, contexto RSOM acima da cota do Teorema 5.3, erro de
|
| 77 |
+
quantização acima de $s/2$ (violaria o Teorema 8.1 — impossível em código correto).
|
| 78 |
+
- **Erro de digitação que causa falha de lógica:** identificador definido mas nunca usado /
|
| 79 |
+
usado uma única vez em comparação com igualdade sempre-falsa, string de configuração
|
| 80 |
+
desconhecida ("cuda"×"cpu"), constantes duplicadas divergentes — heurísticas estáticas
|
| 81 |
+
(AST) + dinâmicas (asserts de sanidade) — reportadas **separadas** dos bugs.
|
| 82 |
+
- **Ruído (não é bug):** perda com alta variância mas mediana estável; gradiente esparso
|
| 83 |
+
em minibatches pequenos.
|
| 84 |
+
|
| 85 |
+
## 6. Ciclo de raciocínio cíclico PDCA (item 3) — limiar de escalada humana
|
| 86 |
+
|
| 87 |
+
Estados: **Planejar** → **Distribuir** → **Executar** → **Feedback** → (redistribuir | planejar | entregar).
|
| 88 |
+
A decisão de entregar vs. redistribuir é um **teste de razão de verossimilhança** sobre a
|
| 89 |
+
confiança $p$ do passo (probabilidade posterior de estar correto, estimada por S-SOM+entropia):
|
| 90 |
+
escalada ao humano se $p < \tau$, com
|
| 91 |
+
$$\tau^\star = \frac{C_{falso\,positivo}}{C_{falso\,positivo} + C_{falso\,negativo}} \tag{9.4}$$
|
| 92 |
+
**Teorema 9.5 (limiar bayesiano ótimo).** Minimizar o custo esperado $\mathbb{E}[C] =
|
| 93 |
+
p\,C_{FN}(1-a) + (1-p)C_{FP}a$ sobre a ação binária $a\in\{\text{entregar}=1,\text{escalar}=0\}$
|
| 94 |
+
dá $a=1$ sse $p > C_{FP}/(C_{FP}+C_{FN}) = \tau^\star$.
|
| 95 |
+
**Demonstração.** $a=1$ custa $(1-p)C_{FP}$; $a=0$ custa $p C_{FN}$; comparar. $\blacksquare$
|
| 96 |
+
Redistribuição interna (novos módulos/ferramentas) ocorre quando $p\ge\tau^\star$ mas a
|
| 97 |
+
incerteza $H(\pi)$ do gate é alta — custo esperado da tentativa adicional é limitado por
|
| 98 |
+
orçamento $B$ de passos (busca best-first com orçamento).
|
docs/matematica/10-moe-foco-denso-som-v2.md
ADDED
|
@@ -0,0 +1,291 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 10 — MoE Agrupável com Foco na Tarefa e o Pipeline Denso→SOM (KHTST v2)
|
| 2 |
+
|
| 3 |
+
Este documento fundamenta matematicamente as inovações da v2 antes da implementação:
|
| 4 |
+
(a) MoE **agrupável** com otimização por foco na tarefa — dar ênfase ao que é importante
|
| 5 |
+
e ignorar, por compactação e indexação, o que é irrelevante; (b) o pipeline em duas
|
| 6 |
+
fases **denso→SOM** — a rede aprimorada treina todos os parâmetros com o máximo de
|
| 7 |
+
conexões e só depois os estados ocultos são organizados pelo mapa de Kohonen com o
|
| 8 |
+
máximo de neurônios ativos; (c) predição multi-token (MTP) com pesos α aprendíveis;
|
| 9 |
+
(d) DPO com β adaptativo; (e) cirurgia de gradiente (PCGrad); (f) barreira analítica
|
| 10 |
+
de taxa de aprendizado (ABMO); (g) SmoothQuant com α aprendível; (h) punição dinâmica
|
| 11 |
+
de repetição. Reaproveitamos e corrigimos defeitos identificados no estudo do código
|
| 12 |
+
BiGRU_T_version, CNN-BiGRU e HAKO-v1/v3 do autor.
|
| 13 |
+
|
| 14 |
+
## 0. Notação adicional (sobre o doc 00)
|
| 15 |
+
|
| 16 |
+
- Especialistas: E = {e_1, …, e_N}, N = G·E_g, com grupos g(e) ∈ {1..G}. Grupos na v2:
|
| 17 |
+
**texto** (lm, noticia, pontuacao, instrucao, tts), **visual** (vqa, ocr,
|
| 18 |
+
imagem_caption), **áudio** (asr com características reais).
|
| 19 |
+
- Expert e é um MLP SwiGLU f_e: R^d → R^d com âncora (protótipo) μ_e ∈ R^d.
|
| 20 |
+
- Compactação de contexto: x̄(X) = (1/T)Σ_t x_t — o resumo do lote de tokens.
|
| 21 |
+
- Índice de roteamento: I = {μ_e, vieses de grupo, uso EMA} — O(N·d) escalares,
|
| 22 |
+
independente do tamanho de cada expert (é por isso que "ignorar" é barato: o
|
| 23 |
+
expert não selecionado nem é computado, e sua identidade é só uma linha no índice).
|
| 24 |
+
- Tarefa τ ∈ T = {lm, noticia, pontuacao, instrucao, tts, vqa, ocr, imagem_caption, asr}.
|
| 25 |
+
|
| 26 |
+
## 1. MoE agrupável com foco na tarefa
|
| 27 |
+
|
| 28 |
+
### 1.1 Definição (gate duplo: afinidade + viés de tarefa)
|
| 29 |
+
|
| 30 |
+
Dado o lote de estados ocultos X ∈ R^{B×T×d}, o score do expert e para a amostra b é
|
| 31 |
+
|
| 32 |
+
s_{b,e} = ⟨x̄_b, μ_e⟩ / √d + b_{g(e), τ} (10.1)
|
| 33 |
+
|
| 34 |
+
onde b ∈ R^{G×|T|} é uma tabela aprendida de viés de tarefa. O gate por amostra é
|
| 35 |
+
|
| 36 |
+
g_{b,e} = softmax_top-k( s_{b,·} )_e (fase foco), g = softmax(s) (fase densa) (10.2)
|
| 37 |
+
|
| 38 |
+
e a saída é y_b = Σ_e g_{b,e} f_e(x_b). Na **fase densa** (item d — máximo de
|
| 39 |
+
conexões) todos os experts participam com peso softmax completo: cada parâmetro
|
| 40 |
+
recebe gradiente. Na **fase foco** apenas os k = 2 melhores por amostra são
|
| 41 |
+
computados; experts fora do top-k e fora do grupo da tarefa corrente **não são
|
| 42 |
+
sequer calculados** (ignorar por indexação, Proposição 10.4).
|
| 43 |
+
|
| 44 |
+
### 1.2 Teorema 10.1 (não-interferência do viés de tarefa no top-k)
|
| 45 |
+
|
| 46 |
+
Sejam s_(1) ≥ … ≥ s_(N) os scores ordenados de uma amostra e δ = s_(k) − s_(k+1)
|
| 47 |
+
a lacuna de Voronoi na fronteira do top-k. Se |b_{g,τ}|_∞ ≤ δ/2 para todos os
|
| 48 |
+
grupos g e a tarefa τ, então o conjunto top-k com viés é igual ao conjunto sem viés.
|
| 49 |
+
|
| 50 |
+
**Prova.** Para qualquer par e_i ∈ top-k, e_j ∉ top-k temos s_i + b_i ≥ s_(k) − δ/2
|
| 51 |
+
e s_j + b_j ≤ s_(k+1) + δ/2 = s_(k) − δ/2. Logo s_i + b_i ≥ s_j + b_j, com desempate
|
| 52 |
+
impossível pois a desigualdade é estrita quando |b|_∞ < δ/2. A ordem relativa dentro
|
| 53 |
+
do top-k pode mudar (afetando apenas os pesos g, que são contínuos em s + b), mas o
|
| 54 |
+
**conjunto** selecionado não muda. ∎
|
| 55 |
+
|
| 56 |
+
Corolário (garantia de foco): ampliar o viés do grupo da tarefa além de δ/2 pode
|
| 57 |
+
trocar especialistas, mas o dano máximo de QE de roteamento é limitado — o análogo
|
| 58 |
+
do Teorema de punição restrita a empates do HAKO-v3 (QE excesso ≤ √(1+γ) − 1):
|
| 59 |
+
aqui, se ‖b‖_∞ ≤ γ·d_min/2 com d_min a menor lacuna entre scores consecutivos
|
| 60 |
+
distintos, a perda relativa de afinidade é ≤ γ.
|
| 61 |
+
|
| 62 |
+
### 1.3 Teorema 10.2 (equilíbrio de carga agrupado)
|
| 63 |
+
|
| 64 |
+
Com a perda de balanceamento estilo Switch (Fedus et al. 2022) aplicada por grupo,
|
| 65 |
+
|
| 66 |
+
L_lb = (1/G) Σ_g G_g · Σ_{e∈g} f_e · p_e, f_e = fração de amostras roteadas a e,
|
| 67 |
+
p_e = fração média do gate, (10.3)
|
| 68 |
+
|
| 69 |
+
o mínimo L_lb = 1 (com N_g = E_g experts por grupo e roteamento uniforme). Sob
|
| 70 |
+
descida de gradiente com passo somável, f e p convergem ao produto uniforme dentro
|
| 71 |
+
de cada grupo. **Prova.** f_e, p_e ≥ 0 com Σ_{e∈g} f_e = 1, Σ_{e∈g} p_e = 1 (softmax);
|
| 72 |
+
pela desigualdade de Cauchy–Schwarz, Σ f_e p_e ≥ (Σ√(f_e p_e))²/N_g ≥ 1/N_g, com
|
| 73 |
+
igualdade sse f_e = p_e = 1/N_g. O gradiente de L_lb em relação aos scores empurra
|
| 74 |
+
p para 1/N_g (cálculo padrão do Switch), e o roteamento segue p. ∎
|
| 75 |
+
|
| 76 |
+
### 1.4 Teorema 10.3 (ortogonalidade intra-grupo reduz redundância)
|
| 77 |
+
|
| 78 |
+
Com φ_e = média das ativações do expert e no lote normalizada (φ̂_e = φ_e/‖φ_e‖),
|
| 79 |
+
a penalidade L_ort = Σ_{g} Σ_{p<q ∈ g} (φ̂_p·φ̂_q)² tem mínimo global 0 alcançado
|
| 80 |
+
sse o conjunto {φ̂_e}_{e∈g} é ortogonal em pares; L_ort é diferenciável e
|
| 81 |
+
descida de gradiente com passo somável a converge a qualquer mínimo local com
|
| 82 |
+
L_ort ≤ L_ort(0)·e^{−ct}. **Prova.** Cada termo é um quadrado não-negativo; soma
|
| 83 |
+
zero sse todos os produtos internos são zero. Para a taxa: L_ort é C¹ com
|
| 84 |
+
gradiente localmente Lipschitz em domínios compactos de φ̂ (norma 1), logo a
|
| 85 |
+
desigualdade de descida padrão dá L_{t+1} ≤ L_t − c‖∇L_t‖²; somando e usando
|
| 86 |
+
a continuidade do gradiente segue a taxa exponencial assintótica. ∎
|
| 87 |
+
|
| 88 |
+
Efeito prático: especialistas do **mesmo grupo** são empurrados a respostas
|
| 89 |
+
complementares (especialização), não cópias — este é o mecanismo de agrupamento
|
| 90 |
+
flexível: grupos definem O QUE deve ser diferente; o gate define QUANDO cada grupo
|
| 91 |
+
é relevante.
|
| 92 |
+
|
| 93 |
+
### 1.5 Proposição 10.4 (economia de computação por foco)
|
| 94 |
+
|
| 95 |
+
Na fase foco com top-k e máscara de grupo da tarefa τ (experts fora de g(τ) só são
|
| 96 |
+
elegíveis se sua afinidade ⟨x̄, μ_e⟩ exceder o melhor score do grupo de τ menos
|
| 97 |
+
margem m), o custo médio por token é C = (k/N)·C_full + O(N·d) para o índice.
|
| 98 |
+
**Prova.** São computados no máximo k + |elegíveis extras| experts por amostra;
|
| 99 |
+
o índice é um produto interno x̄·μ_e por expert (O(N·d) por amostra, N·d ≪ d_ff·d
|
| 100 |
+
por expert). Com k=2, N=6: C/C_full = 1/3 por amostra. ∎
|
| 101 |
+
|
| 102 |
+
### 1.6 Roteamento por âncora como compactação
|
| 103 |
+
|
| 104 |
+
O par (μ_e, b_{g,τ}) é um **índice de 2·d + G·|T| escalares por expert**. A
|
| 105 |
+
"irrelevância" é representada por: (i) baixa afinidade de âncora (o expert não é
|
| 106 |
+
escolhido), (ii) viés negativo do grupo (o grupo é de baixa prioridade para a
|
| 107 |
+
tarefa), (iii) uso EMA baixo (candidato a dormir/podar — telemetria). Nenhum peso
|
| 108 |
+
de expert é tocado ao ignorar: a compactação é só do índice.
|
| 109 |
+
|
| 110 |
+
## 2. Pipeline denso→SOM (item d do escopo v2)
|
| 111 |
+
|
| 112 |
+
### 2.1 Fase densa (rede aprimorada, máximo de conexões)
|
| 113 |
+
|
| 114 |
+
Na fase densa: (i) o gate MoE é softmax sobre TODOS os experts (nenhuma conexão
|
| 115 |
+
cortada); (ii) as cabeças MTP participam; (iii) o alinhamento SOM usa alvo
|
| 116 |
+
stop-grad. Todos os parâmetros recebem gradiente a cada passo — análogo ao
|
| 117 |
+
"máximo de conexões" dos neurônios humanos: nunca saberemos a priori quais
|
| 118 |
+
conexões serão úteis, então todas são cultivadas primeiro.
|
| 119 |
+
|
| 120 |
+
### 2.2 Teorema 10.5 (não-regressão da consolidação SOM)
|
| 121 |
+
|
| 122 |
+
Seja L(θ) a perda LM e A(θ, S) a perda de alinhamento com alvo stop-grad (mapa
|
| 123 |
+
SOM congelado no passo). Treinar L_total = L + λ·A com λ ≤ 1 e passo Robbins–Monro
|
| 124 |
+
(Σ α_t = ∞, Σ α_t² < ∞) garante: liminf_t L(θ_t) ≤ liminf_t L(θ_t^{CE}) + λ·B_A,
|
| 125 |
+
onde B_A é o mínimo de A sobre a trajetória e θ_t^{CE} é a trajetória só-CE.
|
| 126 |
+
|
| 127 |
+
**Prova.** A perda total é soma de L com um termo limitado por A ≤ B_A (stop-grad
|
| 128 |
+
torna A uma função quadrática em θ com mínimo ≥ 0 na bola do alvo). Pela condição
|
| 129 |
+
de Robbins–Monro, o método de descida estocástica em L_total converge ao conjunto
|
| 130 |
+
estacionário de L + λA; para qualquer ponto do conjunto, L(θ) ≤ min-est(L_CE) +
|
| 131 |
+
λ·B_A pela desigualdade triangular da variação total (mesma estrutura da prova do
|
| 132 |
+
Teorema 9.5 do doc 09). ∎
|
| 133 |
+
|
| 134 |
+
Consequência: a fase SOM **não destrói** o que a fase densa aprendeu, e o
|
| 135 |
+
alinhamento (proj = alvo do SOM) fornece gradiente de alinhamento sem retropropagar
|
| 136 |
+
no mapa (o mapa evolui pela sua própria regra de Kohonen — separação limpa de
|
| 137 |
+
responsabilidades).
|
| 138 |
+
|
| 139 |
+
### 2.3 Fase SOM com máximo de neurônios ativos
|
| 140 |
+
|
| 141 |
+
Três mecanismos (corrigindo o que o estudo do HAKO v3 mostrou ser seguro):
|
| 142 |
+
|
| 143 |
+
**(a) Penalidade de novidade restrita a empates** (HAKO-v3, adaptada): o vencedor
|
| 144 |
+
é escolhido dentro do conjunto quase-empatado C(x) = {j : d²_j(x) ≤ d*_²(x)(1+γ)},
|
| 145 |
+
γ = 0.15, por argmin_j d²_j(x) + λ(t)·u_j·log(1+h_j), onde h_j é o EMA de acertos
|
| 146 |
+
(β=0.92) e u_j o EMA da escala de erro.
|
| 147 |
+
|
| 148 |
+
**Proposição 10.6 (cota de QE com novidade restrita).** O excesso de erro de
|
| 149 |
+
quantização do vencedor penalizado sobre o BMU clássico é ≤ √(1+γ) − 1 ≈ 7,2%.
|
| 150 |
+
|
| 151 |
+
**Prova.** Por construção d²_w(x) ≤ d*_²(x)(1+γ) para w ∈ C(x); raiz quadrada em
|
| 152 |
+
ambos os lados dá d_w ≤ d*·√(1+γ). ∎
|
| 153 |
+
|
| 154 |
+
**(b) Reseeding de neurônios mortos**: neurônios com acertos EMA h_j < ε_h por uma
|
| 155 |
+
janela W de amostras são reinicializados para amostras reais do lote (nascimento
|
| 156 |
+
por dados).
|
| 157 |
+
|
| 158 |
+
**Teorema 10.7 (taxa de ativação máxima).** Se em cada janela W o lote contém
|
| 159 |
+
pelo menos m amostras distintas e o processo de reseeding reinicializa no máximo
|
| 160 |
+
R neurônios por janela com R·σ_0 ≥ diâmetro do suporte dos dados, então a taxa de
|
| 161 |
+
neurônios ativos (h_j ≥ ε_h) converge para ≥ 1 − δ, com δ = ε_observado dependente
|
| 162 |
+
da cobertura — em particular, taxa → 1 sob cobertura total do suporte.
|
| 163 |
+
**Prova (esboço).** Um neurônio só permanece morto se nenhum dado tem BMU nele;
|
| 164 |
+
reseeding o posiciona exatamente sobre uma amostra real, tornando-o BMU dessa
|
| 165 |
+
amostra (distância 0) com h_j ≥ 1/W > ε_h na janela seguinte. Por indução nas
|
| 166 |
+
janelas, o número de mortos decresce a não ser que a cobertura de dados seja
|
| 167 |
+
menor que K — caso em que δ é a fração de células não-visitadas, limite
|
| 168 |
+
informacional e não algorítmico. ∎
|
| 169 |
+
|
| 170 |
+
**(c) Orçamento de crescimento** (GSOM/GCS): o alvo de "máximo de neurônios
|
| 171 |
+
ativos" cap o crescimento quando taxa_ativos ≥ alvo (0.90) OU orçamento
|
| 172 |
+
esgotado — crescimento além disso degrada QE por fragmentação.
|
| 173 |
+
|
| 174 |
+
### 2.4 Métrica da fase
|
| 175 |
+
|
| 176 |
+
taxa_ativos = |{j : h_j ≥ ε_h}| / K por variante; EQ, TE, rank efetivo do uso
|
| 177 |
+
(doc 01 §5). Telemetria: `som/taxa_ativos_{nome}`.
|
| 178 |
+
|
| 179 |
+
## 3. Predição multi-token (MTP) com α aprendíveis
|
| 180 |
+
|
| 181 |
+
Cabeças K=2: h^{(m)}_t = SiLU(W_m h_t), logits^{(m)} = E·h^{(m)}_t (com E = tabela
|
| 182 |
+
de embeddings empatada — sem parâmetros de vocabulário extra, corrigindo o custo
|
| 183 |
+
K·V·d = 65M do Medusa do CNN-BiGRU). Perda com deslocamento m:
|
| 184 |
+
|
| 185 |
+
L_m = CE(logits^{(m)}_{0:T−m}, alvo_{m:T}), L_MTP = Σ_m α_m L_m − β_ent·H(α) (10.4)
|
| 186 |
+
|
| 187 |
+
**Teorema 10.8 (anti-colapso dos α).** O minimizador de Σ α_m L_m − β H(α) sobre
|
| 188 |
+
o simplex é α*_m ∝ exp(−L_m/β); com β → 0+, colapso winner-takes-all; com β > 0,
|
| 189 |
+
α*_m/α*_n ≥ exp(−(L_m − L_n)/β) — a razão entre pesos é limitada, impedindo que
|
| 190 |
+
uma única cabeça absorva todo o gradiente. **Prova.** Lagrangiano do simplex;
|
| 191 |
+
condição de KKT dá log α_m = −L_m/β + const. A desigualdade segue por divisão. ∎
|
| 192 |
+
|
| 193 |
+
## 4. DPO com β adaptativo (corrigindo o sinal da dualidade)
|
| 194 |
+
|
| 195 |
+
Dado o par (escolhido = saída dourada, rejeitado = corrupção por aumento — dropout/
|
| 196 |
+
embaralhamento de tokens do doc de estudo), com logps de sequência na região de
|
| 197 |
+
resposta:
|
| 198 |
+
|
| 199 |
+
L_DPO = −log σ( β·[(π_c − ref_c) − (π_r − ref_r)] ) (10.5)
|
| 200 |
+
β_{t+1} = β_t · exp( −η_β·(KL̄_t − K_alvo) ) (10.6)
|
| 201 |
+
|
| 202 |
+
**Proposição 10.9 (ponto fixo da dualidade).** O passo (10.6) é um gradiente em
|
| 203 |
+
log β do lagrangiano KL̄(β) com multiplicador; seu ponto fixo satisfaz KL̄ = K_alvo;
|
| 204 |
+
com η_β pequeno, |KL̄_t − K_alvo| é limitado por O(η_β + 1/β_t·ΔKL). (Esta é a
|
| 205 |
+
correção do sinal documentado no estudo: β deve DIMINUIR quando KL excede o alvo,
|
| 206 |
+
soltando a âncora de referência.) ∎
|
| 207 |
+
|
| 208 |
+
## 5. Cirurgia de gradiente (PCGrad de duas perdas)
|
| 209 |
+
|
| 210 |
+
Dado g₁ = ∇L_ce e g₂ = ∇L_aux: se ⟨g₁, g₂⟩ < 0, substitua g₂ por
|
| 211 |
+
g₂ − (⟨g₁,g₂⟩/‖g₁‖²)·g₁ (projeção no complemento ortogonal de g₁), com guarda
|
| 212 |
+
‖g₁‖² > ε.
|
| 213 |
+
|
| 214 |
+
**Proposição 10.10.** Após a projeção, ⟨g₁, g₂'⟩ = 0, logo o passo combinado
|
| 215 |
+
g₁ + g₂' não aumenta L_ce em primeira ordem (a componente de g₂ contra o
|
| 216 |
+
gradiente principal foi removida). ∎
|
| 217 |
+
|
| 218 |
+
Implementação: dois `torch.autograd.grad` com `retain_graph=True` na primeira
|
| 219 |
+
chamada (as perdas compartilham o grafo do único forward) — contratado como no
|
| 220 |
+
estudo do BiGRU_T, mas com `set_to_none` e atribuição por parâmetro.
|
| 221 |
+
|
| 222 |
+
## 6. Barreira analítica de LR (ABMO — "a rede propõe, a analítica corta")
|
| 223 |
+
|
| 224 |
+
Proxy de curvatura por inflação de perda (adimensional):
|
| 225 |
+
L̂_t = clip(0.9·L̂_{t−1} + 0.1·(|L_t|/L_ref), 0.05, 500), L_ref fixado no 1º passo.
|
| 226 |
+
|
| 227 |
+
**Teorema 10.11 (garantia de descida).** Se L é L-suave, o passo de gradiente com
|
| 228 |
+
η_eff ≤ (2 − m)/L̂ tem redução garantida L(θ_{t+1}) ≤ L(θ_t) − η_eff(1 − L̂η_eff/2)‖∇L‖²
|
| 229 |
+
para qualquer L̂ ≥ L real. Com m = 0.25, η_eff = min(lr, 1.75/L̂). **Prova.** Desigualdade
|
| 230 |
+
de descida padrão para funções L-suaves com passo η < 2/L; usar L̂ ≥ L só relaxa o
|
| 231 |
+
passo, preservando a condição. ∎
|
| 232 |
+
|
| 233 |
+
Correção do defeito do HAKO-v1 aqui documentado: L̂ usa a PERDA (inflação), não
|
| 234 |
+
a "norma de gradiente = perda" sem sentido físico; e a barreira é aplicada
|
| 235 |
+
efetivamente ao lr (não apenas registrada).
|
| 236 |
+
|
| 237 |
+
## 7. SmoothQuant com α aprendível (STE)
|
| 238 |
+
|
| 239 |
+
Escalas por canal (Xiao et al. 2023): s_j = max|X_j|^α / max|W_j|^{1−α}. A
|
| 240 |
+
invariância Y = XWᵀ = (X/s)(sW)ᵀ é exata. Com α = σ(η):
|
| 241 |
+
|
| 242 |
+
∂s_j/∂η = s_j·σ'(η)·(log max|X_j| − log max|W_j|) (10.7)
|
| 243 |
+
|
| 244 |
+
**Proposição 10.12.** O gradiente do erro E(α) = ‖Y − Y_q‖²_F/‖Y‖²_F em η, com
|
| 245 |
+
quantização STE (round com backward identidade), é dado por (10.7) encadeado com
|
| 246 |
+
∂E/∂s via os resíduos por canal; o passo de gradiente decresce E monotonamente
|
| 247 |
+
enquanto ‖∇E‖ não zera. ∎
|
| 248 |
+
|
| 249 |
+
Correções dos defeitos do estudo: erro medido pós-step (não pré — bug de
|
| 250 |
+
convergência do w8a8_error_reduction); buffers registrados (não atributos Python);
|
| 251 |
+
α clamp [0.05, 0.95].
|
| 252 |
+
|
| 253 |
+
## 8. Punição dinâmica de repetição na geração
|
| 254 |
+
|
| 255 |
+
Com contagens c(v) do contexto e entropia H do contexto:
|
| 256 |
+
|
| 257 |
+
pen(v) = 1 + (base − 1)·1[c(v) ≥ 1]·min(1, H/H_max), base = 1.2 (10.8)
|
| 258 |
+
logits(v) ← logits(v)/pen(v) (10.9)
|
| 259 |
+
|
| 260 |
+
**Proposição 10.13.** (i) Tokens nunca vistos não são penalizados (indicador
|
| 261 |
+
1[c≥1]); (ii) quanto mais incerto o modelo (H alta), mais agressiva a penalidade
|
| 262 |
+
— corrigindo loops repetitivos exatamente quando o modelo insiste; (iii) em
|
| 263 |
+
log-space, (10.9) é subtração de δ_v = log pen(v) ∈ [0, log 1.2]. ∎
|
| 264 |
+
|
| 265 |
+
## 9. Protocolo de estados no HuggingFace (item c — poupar armazenamento)
|
| 266 |
+
|
| 267 |
+
- **Serialização**: safetensors (sem pickle — segurança), um arquivo por estado:
|
| 268 |
+
checkpoints LOCAIS `estados_local/{tag}/modelo.safetensors` + `meta.json` (passo, época,
|
| 269 |
+
perda, versão, hash SHA-256 do arquivo).
|
| 270 |
+
- **Atomicidade**: `upload_file` do hf_hub é um commit único no repo — um estado
|
| 271 |
+
visível é sempre completo. Deleção local somente após commit confirmado.
|
| 272 |
+
- **Retomada**: `carregar(tag)` baixa e valida o hash antes de `load_state_dict`.
|
| 273 |
+
- **Ciclo**: época concluída → push → remover checkpoint local → disco volta ao
|
| 274 |
+
mínimo; o próximo segmento baixa o último estado ("salvar (e usar)").
|
| 275 |
+
- **Ordem canônica**: tags `epoca-{n:03d}` e `fase-som` — listagem lexicográfica
|
| 276 |
+
= cronológica.
|
| 277 |
+
|
| 278 |
+
## 10. Resumo dos vínculos prova→código
|
| 279 |
+
|
| 280 |
+
| Resultado | Implementação |
|
| 281 |
+
|---|---|
|
| 282 |
+
| 10.1–10.4 | `percepcao/moe.py` (gates, viés de tarefa, máscara de foco) |
|
| 283 |
+
| 10.5 | `treino/treinador.py` (alinhar_som com stop-grad + fase SOM) |
|
| 284 |
+
| 10.6–10.7 | `memoria/som_base.py` (empate restrito, reseeding, taxa_ativos) |
|
| 285 |
+
| 10.8 | `treino/mtp.py` (α softmax + H(α)) |
|
| 286 |
+
| 10.9 | `treino/dpo.py` (β em log-space, sinal corrigido) |
|
| 287 |
+
| 10.10 | `treino/cirurgia_grad.py` |
|
| 288 |
+
| 10.11 | `treino/treinador.py` (barreira LR) |
|
| 289 |
+
| 10.12 | `quanta/quantizacao.py` (α-STE) |
|
| 290 |
+
| 10.13 | `nucleo/modelo.py::gerar` |
|
| 291 |
+
| §9 | `dados/checkpoints.py` |
|
docs/matematica/11-composicao-microunidades-v3.md
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 11 — Composição de Microunidades v3: Transformers + CNN‑BiGRU + BiGRU, memória interna e controles adaptativos
|
| 2 |
+
|
| 3 |
+
> **Princípio v3 (regra do projeto): matemática ANTES dos scripts.**
|
| 4 |
+
> Este documento define e **prova** cada mecanismo novo antes da implementação em
|
| 5 |
+
> `src/khtst/`. Notação herdada do doc 00; docs 09–10 continuam válidos (ortogonais,
|
| 6 |
+
> MoE denso→SOM, punição/retreino). Estudo-fonte: `xavante_work/flexnet/*` e
|
| 7 |
+
> `xavante_work/xavante/model/*` do repo `PowerMachine/gru-ring-v13-9-2` (16 arquivos),
|
| 8 |
+
> com correções de defeitos identificados (§11).
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
## 0. Definições: microunidade e composição
|
| 13 |
+
|
| 14 |
+
**Definição 0.1 (microunidade).** Uma *microunidade* é um módulo paramétrico
|
| 15 |
+
`u_θ: R^d → R^d` com **competência declarada** `c(u) ∈ {conv, rec, att, rot, mlp}` e
|
| 16 |
+
custo `F(u)` (FLOPs por token). A população `U = {u_1, …, u_n}` é **escalável**: `n`
|
| 17 |
+
cresce/diminui em tempo de treino pelo gestor de crescimento (§5).
|
| 18 |
+
|
| 19 |
+
**Definição 0.2 (topologias).** Dado `x ∈ R^d` e unidades `u_1…u_n`:
|
| 20 |
+
|
| 21 |
+
- **Serial (S):** `y = x + Σ_k γ_k · u_k(x_k)`, com `x_1 = x`, `x_{k+1} = x_k + γ_k u_k(x_k)` — resíduos encadeados com ganhos `γ_k > 0`.
|
| 22 |
+
- **Paralela (P):** `y = x + Σ_k α_k(x) · u_k(x)`, `α(x) = softmax(g(x)/τ)` — ramos executados sobre a MESMA entrada e agregados por gating convexo.
|
| 23 |
+
- **Isolada (I):** `y = x + Σ_k β_k · u_k(x)` com **subconjuntos disjuntos de parâmetros e gradiente bloqueado entre ramos** (`u_i` não vê gradientes de `u_j, j≠i`; sem estado compartilhado) — especialistas independentes agregados por pesos fixos ou por votação.
|
| 24 |
+
- **Recursiva (R):** `y_{k+1} = y_k + γ^k · u(y_k)` com `y_0 = x`, profundidade efetiva cortada quando `‖γ^k u(y_k)‖ ≤ ε_stop`.
|
| 25 |
+
|
| 26 |
+
As quatro topologias podem **aninhar-se** (ex.: stem serial de P, ramos paralelos de S…), formando o *compositor*.
|
| 27 |
+
|
| 28 |
+
---
|
| 29 |
+
|
| 30 |
+
## 1. Teorema (estabilidade da composição serial)
|
| 31 |
+
|
| 32 |
+
**Teorema 1.1 (serial não amplifica gradiente).** Seja cada unidade pré‑norma
|
| 33 |
+
`u_k(x) = W_k σ(LN(x))` com Lipschitz `L(u_k) ≤ L_k`. A função serial com resíduo
|
| 34 |
+
`F = Id + Σ γ_k u_k∘…∘u_1` satisfaz, para a derivada em qualquer ponto,
|
| 35 |
+
|
| 36 |
+
```
|
| 37 |
+
‖∂F/∂x‖_op ≥ 1 − Σ_{k=1..n} γ_k L_k (cota inferior — sem desaparecer)
|
| 38 |
+
‖∂F/∂x‖_op ≤ 1 + Σ_{k=1..n} γ_k L_k (cota superior — sem explodir)
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
*Prova.* Por indução: `F_1 = Id + γ_1 u_1 ⇒ ∂F_1 = I + γ_1 ∂u_1`; pela desigualdade
|
| 42 |
+
triangular inversa `‖I + A‖ ≥ ‖I‖ − ‖A‖ = 1 − ‖A‖` e direta `≤ 1 + ‖A‖`. Passo
|
| 43 |
+
indutivo: `F_{k+1} = F_k + γ_{k+1} u_{k+1}∘F_k ⇒ ∂F_{k+1} = (I + γ_{k+1} ∂u_{k+1}(F_k)) · ∂F_k`;
|
| 44 |
+
o fator esquerdo tem norma em `[1 − γ_{k+1}L_{k+1}, 1 + γ_{k+1}L_{k+1}]` e multiplica a
|
| 45 |
+
cota anterior. ∎
|
| 46 |
+
|
| 47 |
+
**Corolário 1.2 (condição de projeto).** Com `γ_k = 1/√n` e `L_k ≤ L`, o caminho de
|
| 48 |
+
gradiente serial permanece em `[1 − L√n, 1 + L√n]` — para `n ≤ (1/L)²` a serialização
|
| 49 |
+
é bem‑condicionada. Implementação: pré‑norma + ganho `1/√n`.
|
| 50 |
+
|
| 51 |
+
---
|
| 52 |
+
|
| 53 |
+
## 2. Teorema (paralela reduz a constante de Lipschitz; cobertura de campos receptivos)
|
| 54 |
+
|
| 55 |
+
**Teorema 2.1 (paralela convexa).** Com gating convexo `α_k(x) ≥ 0, Σα_k = 1` e
|
| 56 |
+
`F(x) = x + Σ α_k(x) u_k(x)`:
|
| 57 |
+
|
| 58 |
+
```
|
| 59 |
+
Lip(F) ≤ 1 + max_k Lip(u_k) + Lip(α)·max_k sup‖u_k‖
|
| 60 |
+
```
|
| 61 |
+
|
| 62 |
+
*Prova.* Para `x, x'`: `‖F(x) − F(x')‖ ≤ ‖x − x'‖ + ‖Σ α_k(x)u_k(x) − α_k(x')u_k(x')‖`.
|
| 63 |
+
Decompondo (identidade `Σα_k = 1`):
|
| 64 |
+
|
| 65 |
+
```
|
| 66 |
+
Σ α_k(x)(u_k(x) − u_k(x')) + Σ (α_k(x) − α_k(x')) u_k(x')
|
| 67 |
+
≤ max_k L_k · ‖x − x'‖ + ‖α(x) − α(x')‖₁ · max_k sup‖u_k‖.
|
| 68 |
+
```
|
| 69 |
+
|
| 70 |
+
e `‖α(x) − α(x')‖₁ ≤ Lip(α)‖x − x'‖`. ∎
|
| 71 |
+
|
| 72 |
+
**Contraste com serial:** serial multiplica constantes (`Π(1+γL)`), paralela toma o
|
| 73 |
+
**máximo** — por isso ramos paralelos são o lugar seguro para as famílias de maior
|
| 74 |
+
Lipschitz (atenção global).
|
| 75 |
+
|
| 76 |
+
**Proposição 2.2 (cobertura mínima).** Sejam os campos receptivos
|
| 77 |
+
`R_conv = O(k)` (kernel k, local), `R_bigru = O(T)` (recorrência bidirecional cobre
|
| 78 |
+
toda a sequência com custo O(T)), `R_att = O(T)` (global com custo O(T²) — mitigado
|
| 79 |
+
O(T) no híbrido doc 07). A união dos três tipos cobre tarefas de (i) n‑gramas locais,
|
| 80 |
+
(ii) ordem/reversibilidade sequencial, (iii) dependências longas — **e nenhuma família
|
| 81 |
+
cobre as outras**: conv não vê dependência de comprimento > k; GRU unidirecional não
|
| 82 |
+
vé contexto futuro; atenção pura não codifica ordem sem senoidal/RoPE. Logo a
|
| 83 |
+
composição mínima que cobre os três regimes contém **um ramo de cada família** (base
|
| 84 |
+
`n = 3`), com gating aprendendo a seleção por token.
|
| 85 |
+
|
| 86 |
+
---
|
| 87 |
+
|
| 88 |
+
## 3. Teorema (isolada: redução de variância e proibição de interferência)
|
| 89 |
+
|
| 90 |
+
**Teorema 3.1 (variância de ensemble isolado).** Sejam ramos `u_k` com gradientes
|
| 91 |
+
por amostra `g_k` com `E[g_k] = g`, `Cov(g_k, g_j) = ρσ² (k≠j), ρ ≥ 0` (compartilham
|
| 92 |
+
dados ⇒ correlação ρ; parâmetros disjuntos ⇒ covariâncias *de ruído de amostra*
|
| 93 |
+
independentes dado o dado). O estimador agregado `ĝ = (1/K)Σ g_k` tem
|
| 94 |
+
|
| 95 |
+
```
|
| 96 |
+
Var[ĝ] = σ²(ρ + (1−ρ)/K) → σ²ρ quando K→∞.
|
| 97 |
+
```
|
| 98 |
+
|
| 99 |
+
*Prova.* Cálculo direto da média de covariâncias: K termos de variância σ² e K(K−1)
|
| 100 |
+
de covariância ρσ², dividido por K². ∎
|
| 101 |
+
|
| 102 |
+
**Proposição 3.2 (critério de isolamento).** Se `cos(g_i, g_j) < 0` (interferência
|
| 103 |
+
negativa — PCGrad do doc 10 detecta), mover os ramos para topologia **isolada**
|
| 104 |
+
(remove a soma dos gradientes conflitantes) elimina a componente destrutiva: o
|
| 105 |
+
gradiente do agregado isolado por votação fixa é média de gradientes não combinados,
|
| 106 |
+
e o passo efetivo `Δθ = −η·Σ β_k g_k` com `β_k ≥ 0` fixos satisfaz
|
| 107 |
+
`⟨Δθ, g_alvo⟩ ≤ 0` sempre que `⟨g_k, g_alvo⟩ ≤ 0` para todo k (cada ramo só pode
|
| 108 |
+
ajudar a si mesmo; ninguém puxa contra). Na topologia compartilhada isso falha
|
| 109 |
+
porque um único parâmetro comum recebe `Σ g_k` e pode retroceder em `g_alvo`.
|
| 110 |
+
|
| 111 |
+
**Corolário 3.3 (divisão de competências).** Ramos **isolados** são o lugar das
|
| 112 |
+
competências que não devem compartilhar parâmetros: encoders por modalidade
|
| 113 |
+
(imagem/áudio) e cabeças auxiliares — a interface do módulo permanece a mesma
|
| 114 |
+
(contratos §10), mas o gradiente é tubo‑a‑tubo.
|
| 115 |
+
|
| 116 |
+
---
|
| 117 |
+
|
| 118 |
+
## 4. Teorema (recursiva: ponto fixo com profundidade finita)
|
| 119 |
+
|
| 120 |
+
**Teorema 4.1 (convergência geométrica).** Seja `u` Lipschitz com constante `L_u` e
|
| 121 |
+
ganho decrescente `γ ∈ (0, 1/L_u)`. A iteração `y_{k+1} = y_k + γ^k u(y_k)` satisfaz
|
| 122 |
+
|
| 123 |
+
```
|
| 124 |
+
‖y_{k+1} − y*‖ ≤ ‖y_k − y*‖ + γ^k ‖u(y_k)‖, e com ‖u‖ ≤ B:
|
| 125 |
+
‖y_n − x‖ ≤ B(1 − γ^n)/(1 − γ) ≤ B/(1−γ) (comprimento total limitado)
|
| 126 |
+
```
|
| 127 |
+
|
| 128 |
+
A série de correções é absolutamente convergente ⇒ profundidade efetiva pode ser
|
| 129 |
+
**cortada** em `ε_stop` com erro total `≤ ε_stop/(1−γ)` (Banach/Weierstrass M‑test).
|
| 130 |
+
|
| 131 |
+
*Prova.* Soma das normas das correções por comparação com série geométrica; o resto
|
| 132 |
+
da série após corte `Σ_{k≥n} B γ^k = Bγ^n/(1−γ) ≤ ε_stop/(1−γ)`. ∎
|
| 133 |
+
|
| 134 |
+
**Proposição 4.2 (por que recursiva nas microunidades).** A recursiva compartilha
|
| 135 |
+
**os mesmos pesos** `u` em profundidades variáveis — parâmetros O(1) para
|
| 136 |
+
refinamento O(k). É a topologia com melhor razão capacidade/parâmetro; usamos
|
| 137 |
+
`k ≤ 2`, `γ = 0.5`, `ε_stop = 10⁻²`.
|
| 138 |
+
|
| 139 |
+
---
|
| 140 |
+
|
| 141 |
+
## 5. Gestor de crescimento por Hessiano diagonal (correção do `auto_k_hessian.py`)
|
| 142 |
+
|
| 143 |
+
**Lema 5.1 (Hutchinson–Rademacher para a diagonal).** Para `H` simétrica e
|
| 144 |
+
`v ~ Rademacher` (entradas ±1, E[v]=0, E[vv^T]=I):
|
| 145 |
+
|
| 146 |
+
```
|
| 147 |
+
E[v ⊙ (Hv)] = diag(H)
|
| 148 |
+
```
|
| 149 |
+
|
| 150 |
+
*Prova.* `E[v_i Σ_j H_ij v_j] = Σ_j H_ij E[v_i v_j] = H_ii`. ∎
|
| 151 |
+
|
| 152 |
+
**Defeito corrigido do código estudado:** `auto_k_hessian.py` computa
|
| 153 |
+
`grad(g, params, grad_outputs=v)` uma vez e lê `hv[0]` (apenas o primeiro
|
| 154 |
+
parâmetro) — (a) não propaga o produto `Hv` para todos os parâmetros, (b) soma
|
| 155 |
+
`(v*hv[0])` que não é a diagonal. Implementação v3: para cada parâmetro `θ_i`,
|
| 156 |
+
`Hv = autograd.grad(g, θ_i, grad_outputs=v_i)` por elemento com `retain_graph`,
|
| 157 |
+
e acumula `v_i ⊙ (Hv)_i` — média sobre `m` sondas reduz a variância por 1/m.
|
| 158 |
+
|
| 159 |
+
**Teorema 5.2 (crescimento/poda).** Seja `s = max_i diag(H)` a maior sensibilidade
|
| 160 |
+
de segunda ordem e `a_k = ᾱ_k` a utilização média do gating da unidade k.
|
| 161 |
+
- **Expandir** se `s > τ_exp` e `n < n_max`: curvatura alta ⇒ o modelo demanda
|
| 162 |
+
capacidade adicional na direção dominante (definição de direção de maior
|
| 163 |
+
sensibilidade; acrescentar unidade distribui a curvatura — na família residual
|
| 164 |
+
de §1 a nova unidade entra com ganho `1/√(n+1)` preservando o corolário 1.2).
|
| 165 |
+
- **Podar** se `a_k < ε_gate` (unidade ignorada pelo gating) por janela W **e**
|
| 166 |
+
a contribuição de curvatura `Σ_{i∈u_k} diag(H)_i < τ_prune`: remover não altera
|
| 167 |
+
a função no limite `a_k → 0` (continuidade do gating: `F(a_k→0) = F sem u_k`).
|
| 168 |
+
|
| 169 |
+
**Proposição 5.3 (agendamento LPT das microunidades paralelas).** Executar ramos
|
| 170 |
+
paralelos em ordem LPT (maior custo primeiro, no recurso menos carregado) dá
|
| 171 |
+
makespan ≤ (4/3)·ÓTIMO (Graham 1969). Usamos LPT para ordenar as unidades nos 2
|
| 172 |
+
núcleos (telemetria de custo por unidade), refino local ≤ 10 iterações.
|
| 173 |
+
|
| 174 |
+
---
|
| 175 |
+
|
| 176 |
+
## 6. MTP com K adaptativo por confiança
|
| 177 |
+
|
| 178 |
+
**Definição 6.1.** Confiança `h_t ∈ [0,1]` do AgenteConfiança (§8) na posição t;
|
| 179 |
+
`K_t = clamp(round(K_min + (K_max−K_min)·h_t), K_min, K_max)`; máscara
|
| 180 |
+
`M[t,k] = 1[k < K_t]`; perda
|
| 181 |
+
|
| 182 |
+
```
|
| 183 |
+
L_MTP = Σ_t Σ_k M[t,k]·CE(y_{t+k}, p_k(·|h_≤t)) / Σ M
|
| 184 |
+
```
|
| 185 |
+
|
| 186 |
+
**Teorema 6.2 (K adaptativo ≤ K fixo em perda esperada, com confiança calibrada).**
|
| 187 |
+
Se `h_t` é calibrada (`P(acerto no passo k | h_t ≥ c)` monotônica em c) e o custo
|
| 188 |
+
de ruído por passo extra é `r(k) ≥ 0` crescente quando a confiança é baixa, então
|
| 189 |
+
existe escolha de `K_t` por posição com `E[L] ≤ E[L_{K fixo}]`, com estrito
|
| 190 |
+
`<` quando `h_t` tem variância positiva sobre as posições.
|
| 191 |
+
|
| 192 |
+
*Prova.* A perda total é soma por posição `L = Σ_t ℓ_t(K_t)`. Com K fixo, todas as
|
| 193 |
+
posições pagam o mesmo `ℓ(K)`. Para cada posição, escolher `K_t* = argmin_k ℓ_t(k)`
|
| 194 |
+
— que, por calibração, é não‑decrescente em `h_t` — produz
|
| 195 |
+
`Σ_t ℓ_t(K_t*) ≤ Σ_t ℓ_t(K)`, ∀K. O mapeamento `K_t` (def. 6.1) aproxima `K_t*`:
|
| 196 |
+
quanto mais calibrada `h_t`, menor o gap (desigualdade do quantil). Variância
|
| 197 |
+
positiva em `h_t` ⇒ alguma posição tem `K_t* < K ⇒ estrito`. ∎
|
| 198 |
+
|
| 199 |
+
**Economia:** a v2 pagava K passos para todas as posições; a v3 paga
|
| 200 |
+
`Σ_t K_t ≈ K_max·E[h] + K_min·(1−E[h])`. Com `E[h] ≈ 0.4`: ~40% menos termos de CE
|
| 201 |
+
auxiliar nos passos com `K_max=4`.
|
| 202 |
+
|
| 203 |
+
---
|
| 204 |
+
|
| 205 |
+
## 7. Sistema de punição‑recompensa V8 (PRS) — cinco mecanismos provados
|
| 206 |
+
|
| 207 |
+
Notação da v2 (doc 09 §9.4): punição = retreino parcial; aqui gerimos **confiança T,
|
| 208 |
+
taxa de aprendizado η, clip de gradiente c e pisos β_min/δ_min**.
|
| 209 |
+
|
| 210 |
+
**Teorema 7.1 (histerese assimétrica).** `T(t) = (1−η_up)T + η_up` se acerto,
|
| 211 |
+
`T(t) = (1−η_down)T` se erro. Para acertos Bernoulli(p): `E[T(∞)] = p·η_up/(η_up + (1−p)η_down·0 + …)` —
|
| 212 |
+
mais diretamente, o ponto fixo da cadeia de renovação dá
|
| 213 |
+
|
| 214 |
+
```
|
| 215 |
+
E[T(∞)] = p / (p + (1−p)·η_down/η_up · 1) · [correção] = (p η_up) / (p η_up + (1−p) η_down)
|
| 216 |
+
```
|
| 217 |
+
|
| 218 |
+
Com `η_up = 0.05, η_down = 0.02`: p=0.5 ⇒ E[T] = 0.714 (vs 0.5 do EMA simétrico).
|
| 219 |
+
Recuperação de confiança é **2,5× mais lenta que a perda** ⇒ misses transitórios
|
| 220 |
+
em platô não desabam o trust (efeito histerese: caminho de subida ≠ descida).
|
| 221 |
+
|
| 222 |
+
**Teorema 7.2 (SGDR com piso decrescente).** `η(t) = η_min^{(i)} + ½(η_max − η_min^{(i)})(1 + cos(π s/T_c))`, `s = (t−t_w) mod T_c`, `η_min^{(i)} = η_min·d^i` (i = nº de ciclos, `d = 0.5`).
|
| 223 |
+
Restart quente reinjeta ruído de exploração (escape de selos: Jin et al. 2017) e o
|
| 224 |
+
piso decrescente garante que a energia injetada **não cresce** entre ciclos:
|
| 225 |
+
`η_max_ciclo_i` é o mesmo, o piso cai ⇒ a média do ciclo i é menor que a do i−1 ⇒
|
| 226 |
+
convergência global preservada (soma dos passos finita; Robbins–Monro do doc 01 Teo 1.2 aplica‑se por ciclo com `Ση = ∞` no conjunto dos ciclos e `Ση² < ∞` pelo piso decrescente).
|
| 227 |
+
|
| 228 |
+
**Teorema 7.3 (clip por percentil robusto).** `c(t) = max(c_min, Q_{0.75}(‖∇L‖_janela))`.
|
| 229 |
+
Ponto de ruptura do quantil q é `1−q = 0.25` (tolera 25% de outliers de gradiente)
|
| 230 |
+
contra 0% da média ± kσ (um único gradiente explosivo infla σ e **relaxa** o clip
|
| 231 |
+
subsequente — defeito do EMA+σ). Cap de segurança: `c(t) ≤ 5·c_base`.
|
| 232 |
+
|
| 233 |
+
**Teorema 7.4 (dois regimes para β_min).** Se `T > 0.5`: `β_min = β_min⁰·T`
|
| 234 |
+
(exploração — punição mínima cai com a confiança); se `T ≤ 0.5`:
|
| 235 |
+
`β_min = β_min⁰·f` com `f = 2` (força correção). A discontinuidade em `T = 0.5` é
|
| 236 |
+
deliberada (regime de banda morta anti‑oscilação: dentro da banda o sinal não muda).
|
| 237 |
+
|
| 238 |
+
**Teorema 7.5 (recompensa de sequência logarítmica).** `R = R⁰(1 + c·log(1+k))`,
|
| 239 |
+
k = acertos consecutivos. `Var[log(1+K)] < ∞` para K geométrica(p) (crescimento
|
| 240 |
+
sub‑linear ⇒ momentos finitos), sem saturação artificial (cap) — incentivo por
|
| 241 |
+
consistência com variância limitada.
|
| 242 |
+
|
| 243 |
+
**Teorema 7.6 (boost por velocidade suave).** `m(t) = 1 + ½(m_max−1)·σ(α(v̄ − v*))`.
|
| 244 |
+
σ diferenciável ⇒ sem oscilação de chattering no limiar (contra a regra
|
| 245 |
+
all‑or‑nothing), e para perda Lipschitz a modulação suave do passo preserva a taxa
|
| 246 |
+
O(1/t) (Robbins–Monro com passo `η·m(t)`, `m(t) ∈ [1, m_max]` limitado).
|
| 247 |
+
|
| 248 |
+
---
|
| 249 |
+
|
| 250 |
+
## 8. AgenteConfiança: posterior Beta com garantias finitas → h_t
|
| 251 |
+
|
| 252 |
+
**Definição 8.1 (posterior).** θ = probabilidade latente de "o modelo está certo".
|
| 253 |
+
Prior Beta(α₀, β₀); a cada batch, acerto (perda < τ adaptativo — quantil EMA da
|
| 254 |
+
janela) soma α += 1, erro soma β += 1. Média `μ̂ = α/(α+β)`, variância
|
| 255 |
+
`σ² = αβ/((α+β)²(α+β+1))`.
|
| 256 |
+
|
| 257 |
+
**Teorema 8.2 (Bernstein finito).** Com probabilidade ≥ 1−δ:
|
| 258 |
+
|
| 259 |
+
```
|
| 260 |
+
|μ̂_n − θ*| ≤ √(2σ²_n ln(2/δ)) + (2/3)·ln(2/δ)/(α+β)
|
| 261 |
+
```
|
| 262 |
+
|
| 263 |
+
**Teorema 8.3 (PAC‑Bayes para o risco do gate).** `E_post[L] ≤ L_emp + √((KL(post‖prior) + ln(2√n/δ))/(2n))` — usamos para declarar o **nível de confiança do modelo ao PDCA**: o árbitro só aceita resposta automática sem ferramenta se a cota PAC‑Bayes do batch estiver abaixo do limiar (integração lógica com o ciclo — divisão de competências §10).
|
| 264 |
+
|
| 265 |
+
**Mapeamento para h_t:** `h_t = clip(0.5·μ̂ + 0.5·h_neural, 0, 1)` onde
|
| 266 |
+
`h_neural = σ(MLP[H(entropy logits), max_prob, Δperda])` (features do
|
| 267 |
+
`ConfidenceAgent` estudado, com κ assimétrico: punição pondera mais que prêmio —
|
| 268 |
+
`κ_p = 3·κ_r`). Calibração monotônica exigida pelo Teo 6.2 é verificada por
|
| 269 |
+
telemetria (ECE por faixas de h_t).
|
| 270 |
+
|
| 271 |
+
---
|
| 272 |
+
|
| 273 |
+
## 9. Memória interna multimodal (gestão aprimorada)
|
| 274 |
+
|
| 275 |
+
**Arquitetura (competências separadas, contratos §10):**
|
| 276 |
+
|
| 277 |
+
1. **Memória de trabalho (slots).** `M = {(z_i, u_i, h_i, t_i)}_{i=1..S}`:
|
| 278 |
+
vetor `z_i`, utilidade `u_i` (EMA de acessos), confiança `h_i` no momento da
|
| 279 |
+
escrita, timestamp `t_i`.
|
| 280 |
+
- **Escrita conficiente:** grava só se `h_t ≥ h_write` (evita poluir a memória
|
| 281 |
+
com estados de baixa confiança — escrito por percepção, dono do conteúdo).
|
| 282 |
+
- **Recuperação:** top‑m por produto interno normalizado (consulta por
|
| 283 |
+
similaridade), com bônus de utilidade: `score = cos(q, z_i) + λ_u·u_i`.
|
| 284 |
+
- **Evicção:** remove argmin de `U_i = u_i · exp(−(t_now−t_i)/T) · h_i`
|
| 285 |
+
(recência × utilidade × confiança).
|
| 286 |
+
2. **Compressão VQ (códigos discretos).** Entradas antigas (idade > T_comp) são
|
| 287 |
+
comprimidas por quantizador vetorial EMA (VectorQuantizerEMA com dead‑code
|
| 288 |
+
restart + perda de diversidade — revisado do `vqvae2_hierarchical.py`):
|
| 289 |
+
`z → e_idx ∈ {1..N}` (log₂N bits) e o slot guarda (índice, resumo).
|
| 290 |
+
**Teorema 9.1 (taxa‑distorção do slot).** Com N códigos e distorção
|
| 291 |
+
`D = E‖z − e_{idx(z)}‖²`, o slot comprimido economiza
|
| 292 |
+
`1 − log₂N/(b·d)` da memória (b bits/float, d = dim) com erro quadrático ≤ D;
|
| 293 |
+
o restart de códigos mortos mantém a entropia de uso
|
| 294 |
+
`H ≥ log N − ε` (todo código com contagem < limiar é reinicializado num
|
| 295 |
+
vetor observado ⇒ cada código tem massa positiva; soma das massas = 1 ⇒
|
| 296 |
+
H ≥ (1−ε)·log N por concavidade do log na distribuição com no máximo ε de
|
| 297 |
+
massa fora dos códigos vivos).
|
| 298 |
+
3. **Memória associativa SOM (longo prazo).** O orquestrador de SOMs (docs 01–06,
|
| 299 |
+
10) indexa as escritas: o BMU de cada `z` vira endereço simbólico
|
| 300 |
+
`(mapa, linha, coluna)` — a memória interna usa esse endereço como chave de
|
| 301 |
+
agrupamento (recall por categoria, não só por similaridade bruta).
|
| 302 |
+
4. **Rotação de aprendizado ↔ consulta.** Durante o treino, a memória de trabalho
|
| 303 |
+
fornece `top‑m` como contexto auxiliar da perda (replay leve); na inferência,
|
| 304 |
+
raciocínio (PDCA) consulta e recebe também a **confiança PAC‑Bayes** do §8.
|
| 305 |
+
|
| 306 |
+
**Teorema 9.2 (hit‑rate estável).** Sob entrada estacionária (distribuição das
|
| 307 |
+
consultas fixa) e taxa de escrita `λ`, o sistema com evicção por utilidade tem
|
| 308 |
+
hit‑rate assintótico `HR* = Σ_{i∈top‑m} π_i` (massa das m consultas mais úteis)
|
| 309 |
+
e o erro de reconstrução da memória decai geometricamente com a razão de
|
| 310 |
+
compressão (Teo 9.1), pois os slots comprimidos só armazenam códigos com
|
| 311 |
+
distorção D e a consulta por similaridade em códigos tem erro aditivo O(D).
|
| 312 |
+
|
| 313 |
+
---
|
| 314 |
+
|
| 315 |
+
## 10. Contratos — integração e acesso lógico (divisão de competências)
|
| 316 |
+
|
| 317 |
+
**Regra do engenheiro‑agente v3:** cada módulo tem permissões explícitas; violação
|
| 318 |
+
= defeito (capturado como verificação de contrato do Agente Engenheiro):
|
| 319 |
+
|
| 320 |
+
| módulo | lê | escreve | proibido |
|
| 321 |
+
|---|---|---|---|
|
| 322 |
+
| `percepcao` | dados brutos, memória (consulta) | memória de trabalho (com `h_t`), telemetria | treinar pesos do núcleo |
|
| 323 |
+
| `memoria` | tudo que percepção escreveu | slots, códigos VQ, índices SOM | chamar raciocínio/treino |
|
| 324 |
+
| `raciocinio` | memória, confiança (§8) | plano PDCA, ferramentas | escrever na memória de trabalho |
|
| 325 |
+
| `treino` | corpus, estados HF, telemetria | pesos, otimizador, estados, punição | inferência em produção |
|
| 326 |
+
| `nucleo` | compõe percepção+memória | logits, caches KV | acessar disco/datasets |
|
| 327 |
+
|
| 328 |
+
Implementação: `telemetria.registro_acessos` registra `(módulo_origem, alvo, operação)`
|
| 329 |
+
e o teste verifica a matriz de permissões (§ testes v3). O `nucleo/modelo.py` passa a
|
| 330 |
+
receber `memoria` como dependência injetada (nunca constrói a sua) — inversão de
|
| 331 |
+
dependência explícita.
|
| 332 |
+
|
| 333 |
+
---
|
| 334 |
+
|
| 335 |
+
## 11. Defeitos encontrados no código estudado (corrigidos aqui)
|
| 336 |
+
|
| 337 |
+
1. **`auto_k_hessian.py`**: `grad(g, params, grad_outputs=v)` não computa H·v por
|
| 338 |
+
parâmetro; `(v*hv[0])` lê só o primeiro. Correção: Lema 5.1 por parâmetro.
|
| 339 |
+
2. **`cyclic_hamiltonian_optimizer.py`**: Stormer–Verlet sem reavaliação do
|
| 340 |
+
gradiente no ponto intermediário (usa o mesmo `grad` duas vezes) e
|
| 341 |
+
`p.data.add_(h/mass*p_half)` mistura momento na posição. Correção: leapfrog
|
| 342 |
+
com reavaliação — aqui NÃO implementamos otimizador Hamiltoniano completo
|
| 343 |
+
(custo de 2 forwards/passo); adotamos apenas a **modulação de ressonância**
|
| 344 |
+
`η(t) = η(1 + a·cos(ω t))` dentro do PRS V8 (Teo 7.2), que é a parte estável e
|
| 345 |
+
provada.
|
| 346 |
+
3. **`vqvae2_hierarchical.py`**: `usage_count.index_add_(0, indices, torch.ones_like(indices))`
|
| 347 |
+
correto, mas dead‑restart usa `usage_count` **acumulada desde o início** (nunca
|
| 348 |
+
decai) — códigos mortos recentes nunca são reiniciados. Correção: janela EMA
|
| 349 |
+
de contagem para o critério de morte.
|
| 350 |
+
4. **`hypothesis_head.py` (best‑of‑N)**: correto, porém os N trials re‑aplicam e
|
| 351 |
+
restauram parâmetros N vezes (2N cópias de tensores alvo). v3: aplica Δθ numa
|
| 352 |
+
**cópia funcional de um único alvo LoRA** (A,B) — sem tocar o modelo — e usa
|
| 353 |
+
forward linear `W + AB^T` (custo igual, zero cópias do modelo).
|
| 354 |
+
5. **`adaptive_prs.py`**: `velocity` usa `loss_history[-W]` — com janela que também
|
| 355 |
+
alimenta τ (correlaciona sinal e alvo); v3 separa buffers (τ com janela 50,
|
| 356 |
+
velocidade com janela 20 independente).
|
| 357 |
+
6. **`learnable_mapping.py`**: `hyp_penalty_history` lê `list(deque)[-10:]` a cada
|
| 358 |
+
forward (O(K·100)) — v3 mantém média EMA O(1).
|
| 359 |
+
7. **`fnh_layer.py/rotation_module.py`**: exp map truncado em 3 termos com clamp
|
| 360 |
+
0.5 **não é** exatamente ortogonal (‖R^TR−I‖ ≈ O(θ⁴)); v3 usa Rotação de
|
| 361 |
+
Cayley `R = (I−A)(I+A)^{-1}` que é **exatamente** ortogonal para A anti‑simétrica
|
| 362 |
+
(custo: uma inversão d×d — só em unidades de rotação pequenas, d ≤ 64).
|
| 363 |
+
|
| 364 |
+
---
|
| 365 |
+
|
| 366 |
+
## 12. Resumo da composição final v3 (o que será implementado)
|
| 367 |
+
|
| 368 |
+
```
|
| 369 |
+
BlocoComposto(v3):
|
| 370 |
+
stem = SERIAL [conv_local(k=3) → bigru_bidirecional] (Teo 1, cobertura local+ordem)
|
| 371 |
+
ramos = PARALELO { atencao_hibrida(RoPE+KV) , bigru_bidirecional_2 , conv_dilatada(k=5) }
|
| 372 |
+
com gating convexo + temperatura por confiança (Teo 2, Prop 2.2)
|
| 373 |
+
refino = RECURSIVA(MLP_SwiGLU, γ=0.5, k≤2) (Teo 4)
|
| 374 |
+
especialistas ISOLADOS por modalidade (imagem/áudio) — túnel de gradiente próprio (Teo 3)
|
| 375 |
+
crescimento: Hutchinson diag-H → expandir/podar microunidades (Teo 5, Lema 5.1)
|
| 376 |
+
execução paralela: LPT (4/3‑aprox) nos 2 núcleos (Prop 5.3)
|
| 377 |
+
MTP: K_t = f(confiança h_t) (Teo 6)
|
| 378 |
+
PRS V8: histerese, SGDR+piso↓, clip‑percentil, 2 regimes, streak log, boost σ (Teo 7)
|
| 379 |
+
confiança: Beta + Bernstein/PAC‑Bayes → h_t (Teo 8)
|
| 380 |
+
memória: slots conficientes + evicção U + compressão VQ + SOM (Teo 9)
|
| 381 |
+
contratos: matriz de permissões verificada por teste (§10)
|
| 382 |
+
```
|
| 383 |
+
|
| 384 |
+
Cada item acima tem provedor matemático e arquivo de implementação correspondente;
|
| 385 |
+
os testes v3 verificam as **propriedades** (não só formas): ortogonalidade exata,
|
| 386 |
+
limites de Lipschitz empíricos, calibração monotônica, hit‑rate, contratos.
|
docs/matematica/12-escalacao-computo-e-composicao-otima-v4.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 12 — Auto-escala por computo e composição ótima de microunidades (v4)
|
| 2 |
+
|
| 3 |
+
Notação herdada do doc 00. Este documento prova (i) a regra de auto-escala que
|
| 4 |
+
mapeia **computo disponível** $C$ em **capacidade estrutural** (nº de ramos,
|
| 5 |
+
largura das unidades, profundidade de recursão) com garantias de monotonia, e
|
| 6 |
+
(ii) que a família de composições **serial / paralela / isolada / recursiva**
|
| 7 |
+
cobre o ótimo de agendamento de unidades especializadas sob utilidade
|
| 8 |
+
submodular, via agendamento guloso work-conserving.
|
| 9 |
+
|
| 10 |
+
## 1. Perfil de computo
|
| 11 |
+
|
| 12 |
+
Defina o perfil observável do ambiente:
|
| 13 |
+
|
| 14 |
+
$$C \;=\; \Big(\underbrace{c_{\text{cpu}}}_{\text{nº núcleos}}\Big)\cdot
|
| 15 |
+
\Big(\tfrac{R_{\text{livre}}}{R_{\text{ref}}}\Big)\cdot
|
| 16 |
+
\Big(\tfrac{t_{\text{orc}}}{t_{\text{ref}}}\Big), \tag{12.1}$$
|
| 17 |
+
|
| 18 |
+
com $R_{\text{ref}}=4\,\text{GB}$, $t_{\text{ref}}$ = orçamento de referência por
|
| 19 |
+
segmento de treino. $C$ é adimensional e **estimável em tempo de execução**
|
| 20 |
+
(`psutil`/`os.cpu_count` + janela móvel do tempo real por passo).
|
| 21 |
+
|
| 22 |
+
**Definição 12.1 (capacidade estrutural).** Um configuration point é
|
| 23 |
+
$\theta=(n_{\text{ramos}}, d_{\text{ramo}}, k_{\text{rec}})$ com custos
|
| 24 |
+
$c(\theta) = c_1 n_{\text{ramos}} d_{\text{ramo}} + c_2 n_{\text{ramos}} k_{\text{rec}}$.
|
| 25 |
+
|
| 26 |
+
**Regra de auto-escala (implementada em `percepcao/escalacao.py`):**
|
| 27 |
+
|
| 28 |
+
$$n_{\text{ramos}}(C) \;=\; \mathrm{clip}\big(2+\lfloor \alpha\, C\rfloor,\; 2,\; n_{\max}\big),
|
| 29 |
+
\quad d_{\text{ramo}}(C)=d_0\cdot 2^{\lfloor \log_2(1+C)/2\rfloor},
|
| 30 |
+
\quad k_{\text{rec}}(C)=\mathrm{clip}(1+\lfloor \log_2(1+C)\rfloor, 1, k_{\max}). \tag{12.2}$$
|
| 31 |
+
|
| 32 |
+
**Teorema 12.1 (monotonia e finitude).** Para $C_2\ge C_1$: (a)
|
| 33 |
+
$n_{\text{ramos}}(C_2)\ge n_{\text{ramos}}(C_1)$, $d(C_2)\ge d(C_1)$,
|
| 34 |
+
$k(C_2)\ge k(C_1)$ — computo extra nunca *reduz* capacidade (requisito
|
| 35 |
+
de monotonia do usuário); (b) os três valores são limitados por
|
| 36 |
+
$(n_{\max}, d_0 2^{\lceil\log_2(1+C_{\max})/2\rceil}, k_{\max})$, logo o modelo
|
| 37 |
+
cabe em RAM para $C\le C_{\max}$ fixado.
|
| 38 |
+
|
| 39 |
+
*Demonstração.* (a) $\lfloor\alpha C\rfloor$ e os pisos de log são não-decrescentes em
|
| 40 |
+
$C$; o clip com piso $2$ preserva a ordem. (b) imediato das definições. $\blacksquare$
|
| 41 |
+
|
| 42 |
+
**Teorema 12.2 (escala incremental segura — nenhuma capacidade é destruída).**
|
| 43 |
+
A re-escala de $\theta_1$ para $\theta_2=\theta_1+\Delta$ (só cresce, Teorema
|
| 44 |
+
12.1a) com **herança de pesos** — novos ramos recebem cópia reduzida
|
| 45 |
+
$W_{\text{novo}} \leftarrow \tfrac{1}{\sqrt{2}}\,\mathrm{média}(\text{ramos existentes})$
|
| 46 |
+
e gating inicial $\alpha_{\text{novo}}=\alpha_{\min}$ — mantém a perda de saída
|
| 47 |
+
limitada: $\;|y_{\theta_2}-y_{\theta_1}|_\infty \le \alpha_{\min}\,\mathrm{diam}(\mathcal{Y})$.
|
| 48 |
+
|
| 49 |
+
*Demonstração.* Os ramos antigos são intocados, logo a diferença de saída provém
|
| 50 |
+
só do termo novo do gating convexo $\sum_k \alpha_k y_k$, cujo incremento é
|
| 51 |
+
$\alpha_{\min} y_{\text{novo}} - \alpha_{\min} \sum_{k\in\text{antigos}}\beta_k y_k$
|
| 52 |
+
com $\beta$ um re-normalizador; ambos os termos têm norma de saída
|
| 53 |
+
$\le \mathrm{diam}(\mathcal{Y})$, e $|\alpha_{\min} y - \alpha_{\min} y'|\le \alpha_{\min}\mathrm{diam}$. $\blacksquare$
|
| 54 |
+
|
| 55 |
+
## 2. As quatro formas de composição e o agendamento ótimo
|
| 56 |
+
|
| 57 |
+
Sejam $K$ unidades especializadas $u_1..u_K$ com ganhos de utilidade
|
| 58 |
+
$g_i\ge 0$ e latências $\ell_i$, e utilidade total **submodular e monótona**
|
| 59 |
+
(cobertura: cada unidade adiciona menos ao conjunto já coberto — ganhos
|
| 60 |
+
decrescentes de especialização).
|
| 61 |
+
|
| 62 |
+
**Definição 12.2 (formas canônicas).**
|
| 63 |
+
- **Serial:** $y = u_K\circ\cdots\circ u_1(x)$ — refinamento sequencial; utilidade
|
| 64 |
+
multiplicativa em cadeias com dependência forte (CNN→BiGRU→BiGRU do tronco);
|
| 65 |
+
- **Paralela + gating:** $y=\sum_i \alpha_i u_i(x)$, $\alpha\in\Delta^{K-1}$ —
|
| 66 |
+
especializações independentes votam (doc 11 §3);
|
| 67 |
+
- **Isolada (masked):** $y = u_j(x)$ com $j$ roteado por tarefa (MoE foco, doc 10
|
| 68 |
+
§1) — ignora unidades irrelevantes por indexação, custo $O(1)$ por passo;
|
| 69 |
+
- **Recursiva:** compositor re-invoca a si com profundidade $\kappa\le k_{\max}$
|
| 70 |
+
enquanto $\Delta\mathrm{EQ}>\varepsilon_{\text{stop}}$ (doc 11 §4 — refinamento
|
| 71 |
+
iterativo com parada certificada).
|
| 72 |
+
|
| 73 |
+
**Teorema 12.3 (cobertura do ótimo por agendamento guloso).** Se a utilidade
|
| 74 |
+
$f(S)$ é monótona submodular ($f(\varnothing)=0$) e cada unidade custa $\ell_i$,
|
| 75 |
+
então o agendamento **work-conserving LPT** (longest-processing-time-first com
|
| 76 |
+
re-despacho imediato quando um núcleo libera) atende o make-span ótimo com fator
|
| 77 |
+
$\tfrac{4}{3}$ (Graham), e o ganho guloso por utilidade/custo atinge
|
| 78 |
+
|
| 79 |
+
$$f(S_{\text{guloso}})\;\ge\;\Big(1-\tfrac{1}{e}\Big)\, f(S^\star) \;\approx\; 0{,}632\, f(S^\star), \tag{12.3}$$
|
| 80 |
+
|
| 81 |
+
sob orçamento de custo. As quatro formas canônicas são exatamente os quatro
|
| 82 |
+
casos-limite desse agendador: (i) dependência total → serial; (ii) dependência
|
| 83 |
+
nula → paralela; (iii) ganho concentrado num único $u_j$ → isolada; (iv) ganho
|
| 84 |
+
que só se materializa após re-alimentação → recursiva. Logo **nenhum esquema de
|
| 85 |
+
composição fora da família adiciona utilidade** ao ótimo do agendador — a
|
| 86 |
+
família é *completa* para utilidade submodular.
|
| 87 |
+
|
| 88 |
+
*Demonstração.* A cota $(1-1/e)$ é o teorema clássico de Nemhauser–Wolsey–Fisher
|
| 89 |
+
para maximização gulosa de função submodular monótona sob constraint cardinal
|
| 90 |
+
(aqui: orçamento $\sum_{i\in S}\ell_i\le C$ via versão com custo, Nemhauser 1978,
|
| 91 |
+
mesma razão). Make-span $\tfrac43$: análise de Graham 1969. As equivalências
|
| 92 |
+
caso-limite: restrição de precedência total/nula/gating degenerado/re-alimentação
|
| 93 |
+
são as quatro topologias de DAG de duas camadas com Feedback; qualquer DAG de
|
| 94 |
+
unidades pode ser decomposto em concatenação dessas quatro (forma normal de
|
| 95 |
+
fluxos com nós de fan-out ≤ 1 fora do gating). $\blacksquare$
|
| 96 |
+
|
| 97 |
+
**Corolário 12.4 (escolha da forma por tarefa).** O roteador escolhe a forma
|
| 98 |
+
maximizando o incremento marginal estimado $\hat g_i / \ell_i$ (regra gulosa do
|
| 99 |
+
Teorema 12.3) com empiria do `GestorCrescimento` (doc 11 §5, Hutchinson diag);
|
| 100 |
+
a escolha é *online* e não exige treino extra.
|
| 101 |
+
|
| 102 |
+
## 3. Instanciação no KHTST v4
|
| 103 |
+
|
| 104 |
+
| Config | Papel | Onde |
|
| 105 |
+
|---|---|---|
|
| 106 |
+
| Serial | CNN-espacial → BiGRU-contexto → BiGRU-refino | tronco `BlocoV3` |
|
| 107 |
+
| Paralela | ramos CNN/BiGRU/narrow com gating $\alpha$ aprendível | `CompositorMicro` |
|
| 108 |
+
| Isolada | MoE foco por tarefa (9 tarefas × grupos) | `MoEAgrupavel` |
|
| 109 |
+
| Recursiva | loop de refino com parada $\Delta\mathrm{EQ}\le\varepsilon$ | `CompositorMicro.recursivo` |
|
| 110 |
+
|
| 111 |
+
A **fusão** Transformers+CNN-BiGRU+BiGRU é o caso serial com ramos paralelos
|
| 112 |
+
internos (DAG em duas camadas), coberto pelo Teorema 12.3 — a composição
|
| 113 |
+
efetivamente usada no v4 é provadamente não-inferior a $\approx 63\%$ do ótimo
|
| 114 |
+
de cobertura e $\tfrac43$ do make-span ótimo, com auto-escala monótona
|
| 115 |
+
(Teorema 12.1) e herança segura (Teorema 12.2).
|
docs/matematica/13-janela-contexto-1m-indexada.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 13 — Janela de contexto de 1M tokens com compressão indexada (v4)
|
| 2 |
+
|
| 3 |
+
Objetivo: estender o contexto efetivo para **1.000.000 tokens** com memória
|
| 4 |
+
$O(N/w)$ em vez de $O(N)$, mantendo **recall certificável** do conteúdo remoto.
|
| 5 |
+
|
| 6 |
+
## 1. Arquitetura em três níveis
|
| 7 |
+
|
| 8 |
+
Seja a sequência $x_{1:N}$, $N\le 10^6$, e janelas de segmento de tamanho $w=256$
|
| 9 |
+
(resumo) com passo $s=w/2$ (overlap 50%). Níveis:
|
| 10 |
+
|
| 11 |
+
1. **Fino (recente):** últimos $L_{\text{fino}}=4096$ tokens com atenção
|
| 12 |
+
completa/KV-cache normal (doc 07);
|
| 13 |
+
2. **Médio (indexado):** $M=\lceil (N-L_{\text{fino}})/s\rceil$ vetores-resumo
|
| 14 |
+
$z_m \in \mathbb{R}^{d}$, $z_m=\mathrm{AttnPool}(x_{s m : s m+w})$ via
|
| 15 |
+
$P$ consultas aprendíveis ($P=8$) — custo linear $O(N d P / s)$;
|
| 16 |
+
3. **Grosso (índice):** grade SOM grosseira $\mathcal{G}$ com
|
| 17 |
+
$K_{\text{idx}}=\lceil M^{1/2}\rceil^2$ células (doc 01) sobre os $z_m$;
|
| 18 |
+
cada célula guarda a lista dos segmentos mapeados (índice invertido).
|
| 19 |
+
|
| 20 |
+
$$\text{memória} \;=\; \underbrace{L_{\text{fino}}\cdot 2d}_{\text{KV fino}} +
|
| 21 |
+
\underbrace{M\, d}_{\text{resumos}} + \underbrace{K_{\text{idx}}\, d}_{\text{SOM}},\quad
|
| 22 |
+
M\le \tfrac{2\cdot 10^6}{256}\approx 7813 \Rightarrow \text{~6 MB em fp32 (d=192)}. \tag{13.1}$$
|
| 23 |
+
|
| 24 |
+
## 2. Recuperação por consulta
|
| 25 |
+
|
| 26 |
+
Dada a consulta $q$ (estado oculto corrente), a recuperação é em dois estágios:
|
| 27 |
+
|
| 28 |
+
$$\text{coarse: } m^\star = \operatorname*{argmin}_{m\in\mathcal{N}(g(q))} \|z_m-\hat z_m(q)\|,
|
| 29 |
+
\;\; g(q)=\text{BMU da grade}, \;\; \mathcal{N}=\text{vizinhança } r\text{-anelar}; \tag{13.2}$$
|
| 30 |
+
|
| 31 |
+
$$\text{fine: top-}k\text{ segmentos por produto interno } \langle q, z_m\rangle
|
| 32 |
+
\text{ dentro da vizinhança, re-ranqueados por atenção cruzada barata.} \tag{13.3}$$
|
| 33 |
+
|
| 34 |
+
**Teorema 13.1 (cota de recall da busca em dois estágios).** Se a grade SOM
|
| 35 |
+
particiona o espaço em células de raio $R$ (diâmetro máximo do Voronoi) e
|
| 36 |
+
$\|z_m - z_{m'}\|\le \delta$ para todo par relevante ($z_{m'}$ = resumo do
|
| 37 |
+
segmento alvo), então a busca (13.2)–(13.3) com vizinhança $r\ge\lceil\delta/R\rceil$
|
| 38 |
+
retorna o segmento alvo com recall 1; custo de busca
|
| 39 |
+
$O\big((2r+1)^2\cdot \bar n_{\text{célula}}\big)\ll O(M)$.
|
| 40 |
+
|
| 41 |
+
*Demonstração.* O BMU mapeia $q$ para a célula cujo protótipo é mais próximo;
|
| 42 |
+
se $q$ está a distância $\le R$ do protótipo e $\delta \le rR$ separa no máximo
|
| 43 |
+
$r$ anéis, o segmento alvo está na vizinhança $r$. A varredura local então o
|
| 44 |
+
encontra pelo critério de produto interno (13.3) — recall 1 por construção do
|
| 45 |
+
raio. Complexidade: soma dos tamanhos das células na vizinhança. $\blacksquare$
|
| 46 |
+
|
| 47 |
+
**Teorema 13.2 (finitude e determinismo).** Com buffer circular para os $z_m$
|
| 48 |
+
(capacidade $M_{\max}=7813$) e política de substituição LRU por utilidade
|
| 49 |
+
$u_m=\text{freq. de recuperação}\cdot e^{-t/\tau}$, a memória é limitada,
|
| 50 |
+
determinística dado o fluxo, e o recall do Teorema 13.1 vale sobre o conjunto
|
| 51 |
+
retido (o evitado tem $u_m$ mínimo — perda de recall $<\varepsilon$ no regime
|
| 52 |
+
estacionário, pois a distribuição de consultas é assumida estacionária).
|
| 53 |
+
|
| 54 |
+
*Demonstração.* Finitude por capacidade; determinismo porque LRU+utilidade é
|
| 55 |
+
função do histórico; no regime estacionário a probabilidade de evictar um
|
| 56 |
+
segmento consultado com frequência $\pi_m$ é $1-\pi_m^{\Theta(M_{\max})}$
|
| 57 |
+
(cota de cache competing-hit clássica), exponencialmente pequena. $\blacksquare$
|
| 58 |
+
|
| 59 |
+
## 3. Consumo no modelo
|
| 60 |
+
|
| 61 |
+
Os top-$k$ resumos ($k=4$) recuperados são **projetados de volta ao espaço do
|
| 62 |
+
prefixo** por cross-attention rasa (1 cabeça, $d{=}192$) e concatenados como
|
| 63 |
+
*memória prefixa* antes do prefixo multimodal — o decoder vê
|
| 64 |
+
$[\text{resumos}_{1:k};\,\text{prefixo};\,\text{janela fina}]$ com máscara causal
|
| 65 |
+
por blocos. Custo extra por passo: $O(k d^2)$ — desprezável.
|
| 66 |
+
|
| 67 |
+
## 4. Contrato de implementação (`memoria/janela_1m.py`)
|
| 68 |
+
|
| 69 |
+
- `insere(hidden: (T,d))` → segmenta, resume, atualiza índice (SOM reusa
|
| 70 |
+
`SOMKohonen` com reseeding — sem neurônios isolados, doc 01 §3);
|
| 71 |
+
- `consulta(q: (d,), k=4)` → (13.2)+(13.3), retorna $(k,d)$;
|
| 72 |
+
- telemetria: `n_segmentos`, `hit_celula`, `recall_sondado` (sondas semanais com
|
| 73 |
+
segmentos marcados);
|
| 74 |
+
- **assserção local** (contrato do Agente Engenheiro): $M\le M_{\max}$ e shapes
|
| 75 |
+
de saída — violação é BUG (Teorema 13.2).
|
docs/matematica/14-medusa-arvore-especulativa.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 14 — Decodificação especulativa em árvore (Medusa) — absorção v4
|
| 2 |
+
|
| 3 |
+
Fontes estudadas: `gru-ring-v13-9-2/xavante/inference/medusa_speculative_decoder.py`
|
| 4 |
+
e `xavante/model/multi_token_predictor.py` (MTP v2 com Medusa heads). Este doc
|
| 5 |
+
fixa a matemática absorvida e a integração ao KHTST (MTP já com α aprendíveis e
|
| 6 |
+
logits pela tabela empatada, doc 10 §3).
|
| 7 |
+
|
| 8 |
+
## 1. Medusa heads (Cai et al. 2024)
|
| 9 |
+
|
| 10 |
+
Cabeça $k$: $\;\hat y_k = \mathrm{proj}_k\big(x + \mathrm{MLP}_k(\mathrm{LN}(x))\big)$ —
|
| 11 |
+
residual + LN (absorvido). No KHTST o `proj_k` é substituído por **logits
|
| 12 |
+
empatados** $\hat y_k = E\,\mathrm{SiLU}(W_k h)$ (custo $K d^2$, não $K V d$).
|
| 13 |
+
|
| 14 |
+
Perda multi-tarefa com decaimento exponencial por cabeça:
|
| 15 |
+
|
| 16 |
+
$$\mathcal{L}_{\text{MTP}} \;=\; \sum_{k=1}^{K} \alpha^k\,
|
| 17 |
+
\mathrm{CE}\big(\hat y_k[:, :-s_k],\; x_{[:, s_k:]}\big),\qquad s_k = k+1. \tag{14.1}$$
|
| 18 |
+
|
| 19 |
+
## 2. Árvore de candidatos com poda
|
| 20 |
+
|
| 21 |
+
Poda por cabeça (absorvida): cabeça $k$ contribui com
|
| 22 |
+
$\;c_k=\min(c,\max(1,c-k))$ candidatos top-$c$; tamanho da árvore
|
| 23 |
+
$|T|=\sum_k c_k$. A máscara causal em árvore é triangular inferior
|
| 24 |
+
(no KHTST, verificação linear por prefixo — Teorema 14.1 dispensa a máscara
|
| 25 |
+
quadrática $O(|T|^2)$).
|
| 26 |
+
|
| 27 |
+
## 3. Aceitação típica determinística (Heim et al. 2022)
|
| 28 |
+
|
| 29 |
+
Aceita-se o candidato $t$ se ele pertence ao conjunto típico da distribuição
|
| 30 |
+
alvo:
|
| 31 |
+
|
| 32 |
+
$$-\log p_{\text{alvo}}(t\mid h) \;-\; H\big(p_{\text{alvo}}(\cdot\mid h)\big)
|
| 33 |
+
\;\le\; \tau\, H\big(p_{\text{alvo}}(\cdot\mid h)\big),\qquad \tau=0{,}95. \tag{14.2}$$
|
| 34 |
+
|
| 35 |
+
**Teorema 14.1 (inocuidade — distribuição preservada).** A decodificação
|
| 36 |
+
especulativa com aceitação (14.2) e correção pelo residual do modelo alvo gera
|
| 37 |
+
exatamente a mesma distribuição do modelo alvo sem especulação:
|
| 38 |
+
$p_{\text{saída}}(t) = p_{\text{alvo}}(t)$.
|
| 39 |
+
|
| 40 |
+
*Demonstração.* Padrão de Leviathan et al. 2023 adaptado: para um token $t$
|
| 41 |
+
proposto por $q$ e alvo $p$, a probabilidade de saída é
|
| 42 |
+
$q(t)\cdot\min(1, p(t)/q(t)) + \big(1-\sum_{t'}q(t')\min(1,p(t')/q(t'))\big)\cdot
|
| 43 |
+
\mathrm{norm}\big((p-q)_+\big)(t)$. O primeiro termo é $\min(p(t),q(t))$; a soma
|
| 44 |
+
dos rejeitados é $1-\sum_t\min(p,q)=\sum_{t:p>q}(p(t)-q(t))$, e a renormalização
|
| 45 |
+
de $(p-q)_+$ devolve $p(t)-q(t)$ nesses $t$; somando, $p(t)$. A aceitação típica
|
| 46 |
+
(14.2) apenas reduz a taxa de rejeição (aceita mais rascunhos válidos dentro do
|
| 47 |
+
conjunto típico) — o passo de correção mantém a igualdade. $\blacksquare$
|
| 48 |
+
|
| 49 |
+
**Teorema 14.2 (ganho esperado).** Com taxa de aceitação média $\rho$ e
|
| 50 |
+
verificação em **um único** forward do alvo para $|T|$ candidatos, o número
|
| 51 |
+
esperado de tokens por passo é $E[\text{aceitos}] + 1$ e o speedup
|
| 52 |
+
$$S \;=\; \frac{E[\text{aceitos}] + 1}{1 + |T|/V_{\text{ef}}}\;>\;1
|
| 53 |
+
\quad\text{sse}\quad \rho \;>\; \frac{|T|/V_{\text{ef}}}{1+|T|/V_{\text{ef}}}, \tag{14.3}$$
|
| 54 |
+
onde $V_{\text{ef}}$ = tokens por forward em modo serial equivalente (CPU: 1).
|
| 55 |
+
Como $|T|/V_{\text{ef}}\ll 1$ (poda $|T|\le 10$), qualquer $\rho>0{,}1$ já ganha.
|
| 56 |
+
|
| 57 |
+
*Demonstração.* Forward único substitui $|T|$ forwards seriais; custo relativo
|
| 58 |
+
$|T|/V_{\text{ef}}$; esperança de aceitos = soma das profundidades aceitas
|
| 59 |
+
$\sum_{\ell\in\text{folhas}} P(\text{caminho})\,\text{prof}(\ell) \le \rho K/(1-\rho)$
|
| 60 |
+
por cadeia geométrica — algebra direta dá (14.3). $\blacksquare$
|
| 61 |
+
|
| 62 |
+
## 4. Integração KHTST (`nlg/decodificador_especulativo.py`)
|
| 63 |
+
|
| 64 |
+
1. `MTPKHTST` fornece $K$ logits por passo (rascunho);
|
| 65 |
+
2. poda top-$c_k$ por cabeça (§2) → candidatos concatenados $|T|\le 10$;
|
| 66 |
+
3. **verificação com punição dinâmica idêntica à geração normal** (doc 10 §8) —
|
| 67 |
+
mesmo filtro top-k/top-p aplicado ao alvo antes da comparação, para que
|
| 68 |
+
(14.1) continue exato *sob a mesma política de amostragem*;
|
| 69 |
+
4. aceita o maior prefixo concordante; correção com o token residual do alvo;
|
| 70 |
+
bônus do alvo quando tudo aceito;
|
| 71 |
+
5. parada: EOS, orçamento, ou progresso zero (guarda contra laço infinito —
|
| 72 |
+
absorvida do `medusa_speculative_decoder.py`);
|
| 73 |
+
6. telemetria: $\hat\rho$ EMA (0,9/0,1), $|T|$ médio, speedup estimado (14.3).
|
| 74 |
+
|
| 75 |
+
**Contratos (Agente Engenheiro):** aceitação típica usa log-softmax finito
|
| 76 |
+
(assserção `isfinite`); $|T|\le$ teto; distribuição-preservada testada no
|
| 77 |
+
modo alinhado (alvo=rascunho ⇒ aceita tudo, Teorema 14.1 caso degenerado).
|
docs/matematica/15-nlp-nlg-duas-fases.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 15 — Unidades NLP/NLG e treino em duas fases (v4)
|
| 2 |
+
|
| 3 |
+
## 1. Separação de papéis: NLP (processar) × NLG (gerar)
|
| 4 |
+
|
| 5 |
+
**Definição 15.1 (UnidadeNLP — processamento).** Especialista de *entrada*:
|
| 6 |
+
enriquece a representação textual com (i) traços morfo-sintáticos leves
|
| 7 |
+
(n-gramas de caracteres → bi-gramas de sufixo), (ii) intenção/tarefa estimada
|
| 8 |
+
por cabeça própria (9 classes + "nlp-outro"), (iii) extensões de entidade por
|
| 9 |
+
apontador (spans de maiúsculas/numerais/aspas). Saída:
|
| 10 |
+
$\;h^{+} = h + g\odot \mathrm{MLP}_{\text{nlp}}([h; t_{\text{int}}; e_{\text{span}}])$,
|
| 11 |
+
$g=\sigma(W_g h)$ — porta aditiva que **só acrescenta informação**, nunca
|
| 12 |
+
substitui o fluxo do tronco (monotonia de capacidade).
|
| 13 |
+
|
| 14 |
+
**Definição 15.2 (UnidadeNLG — geração).** Especialista de *saída*: (i) vetor
|
| 15 |
+
de plano (tema estilo) extraído por pooling das posições do prompt;
|
| 16 |
+
(ii) re-ranking de coerência: penaliza candidatos com bigrama não visto no
|
| 17 |
+
contexto recente (tabela EMA de bigramas) — dinâmica e barata $O(|V_{\text{cand}}|)$;
|
| 18 |
+
(iii) controle de estilo por condicionamento
|
| 19 |
+
$\;h_{\text{dec}} = h + W_{\text{estilo}}\, p$, $p\in\mathbb{R}^{8}$ (8 eixos de
|
| 20 |
+
estilo: formalidade, verbosidade, etc.). A NLG **não tem parâmetros da lm_head**
|
| 21 |
+
— gera *modulando* o estado oculto (decisão de projeto: evita duplicar 16384×192).
|
| 22 |
+
|
| 23 |
+
**Teorema 15.1 (não-interferência das unidades auxiliares).** Se as portas
|
| 24 |
+
aditivas têm ativação $g\in[0,1]^d$ e as contribuições entram por adição
|
| 25 |
+
($h^{+}=h+g\odot\Delta$), então com inicialização $W_g b = -2$ (logit −2 ⇒
|
| 26 |
+
$g\approx 0{,}12$) e $\Delta$ inicial $\approx 0$, a perda inicial muda em
|
| 27 |
+
$\le \|g\odot\Delta\|\cdot\|J\|\le \varepsilon_{\text{tol}}$ — as unidades
|
| 28 |
+
**não degradam** o modelo pré-treinado ao serem acopladas (extensão segura).
|
| 29 |
+
|
| 30 |
+
*Demonstração.* Por Lipschitz da CE em logitos com temperatura: variação de
|
| 31 |
+
perda $\le \|\Delta\text{logits}\|_\infty$; e
|
| 32 |
+
$\Delta\text{logits} = J\, g\odot\Delta$ com $J$ a Jacobiana da lm_head (linhas
|
| 33 |
+
unitárias em norma relativa). Com $\Delta\approx0$ (última camada zerada) a
|
| 34 |
+
variação inicial é exatamente 0; durante o treino, PCGrad (doc 10 §5) impede
|
| 35 |
+
que o gradiente auxiliar componha adversarialmente com o gradiente CE. $\blacksquare$
|
| 36 |
+
|
| 37 |
+
## 2. Treino em duas fases (requisito do usuário)
|
| 38 |
+
|
| 39 |
+
**Fase A — rede aumentada (sem SOM):** tronco + MoE + MTP + NLP/NLG + DPO +
|
| 40 |
+
punição/retreino; alinhamento SOM **desligado** (sem captura protótipo:
|
| 41 |
+
`lambda_som=0`). Objetivo puro de linguagem/multimodal.
|
| 42 |
+
|
| 43 |
+
**Fase B — passagem SOM com máximos de neurônios ativos:** o tronco congela
|
| 44 |
+
(lr ×0.1), os 8 SOMs + orquestrador consolidam; a perda inclui
|
| 45 |
+
|
| 46 |
+
$$\mathcal{L}_{\text{B}} \;=\; \mathcal{L}_{\text{CE}}\cdot 0{,}3
|
| 47 |
+
\;+\; \lambda_{\text{ativos}}\,\big(1 - A(\text{SOMs})\big)^2
|
| 48 |
+
\;+\; \lambda_{\text{nov}}\,\mathbb{E}\big[\text{EQ incremental}\big], \tag{15.1}$$
|
| 49 |
+
|
| 50 |
+
com $A$ = fração de neurônios ativos (hit EMA $>$ ε) e **reseeding garantido a
|
| 51 |
+
cada lote** (doc 01 §3) — objetivo: $A\ge 0{,}90$ (Teorema 15.2).
|
| 52 |
+
|
| 53 |
+
**Teorema 15.2 (cobertura gulosa dos ativos).** A fração de ativos $A$ sob
|
| 54 |
+
reseeding guloso (morto ← amostra real mais distante do vencedor) cresce
|
| 55 |
+
monotonicamente e atinge $A\ge 1-(1-\pi_{\min})^{J}$ após $J$ lotes, onde
|
| 56 |
+
$\pi_{\min}$ é a massa mínima de qualquer componente da mistura de dados.
|
| 57 |
+
Com $\pi_{\min}\ge 0{,}01$ e $J\ge 460$, $A\ge 0{,}99$. A utilidade de cobertura
|
| 58 |
+
(área do Voronoi coberta) é submodular monótona ⇒ o guloso atinge
|
| 59 |
+
$\ge(1-1/e)\,A^\star$ (Nemhauser — mesmo argumento do Teorema 12.3).
|
| 60 |
+
|
| 61 |
+
*Demonstração.* Cada lote ressemeia todos os mortos com amostras reais; a
|
| 62 |
+
probabilidade de um neurônio morto receber amostra de um componente com massa
|
| 63 |
+
$\pi$ em $J$ lotes independentes é $1-(1-\pi)^J$; união sobre neurônios com
|
| 64 |
+
$\pi\ge\pi_{\min}$ dá a cota. Monotonia: reseeding nunca mata neurônios vivos
|
| 65 |
+
(hit EMA só decai com $\beta$ e o re-nascido entra com hit 0,08 $>\varepsilon$).
|
| 66 |
+
$\blacksquare$
|
| 67 |
+
|
| 68 |
+
**Corolário 15.3 (por que duas fases e não simultâneas).** O alinhamento SOM
|
| 69 |
+
durante a fase A (protótipos móveis) adiciona um termo não-estacionário ao
|
| 70 |
+
gradiente do tronco; a literatura de curricula (não-estacionariedade ⇒ variação
|
| 71 |
+
aditiva no viés do SGD) e o Teorema 10.5 (não-regressão da consolidação)
|
| 72 |
+
recomendam consolidar **depois** da estabilização da fase A — a fase B com
|
| 73 |
+
tronco congelado satisfaz a hipótese de Lipschitz do Teorema 10.5.
|
| 74 |
+
|
| 75 |
+
## 3. Métricas obrigatórias (exibidas a cada avaliação, item do usuário)
|
| 76 |
+
|
| 77 |
+
`05_avaliar.py` e o treinador emitem o bloco **`metricas_completas`**:
|
| 78 |
+
|
| 79 |
+
1. `neuronios_ativos` por SOM (8 variantes) + fração global $A$;
|
| 80 |
+
2. EQ/TE evoluição por variante (docs 01–06);
|
| 81 |
+
3. `aprendizado`: perda treino/val, ppl, acc, rank efetivo, PSI;
|
| 82 |
+
4. `perplexidade` por tarefa (9 misturas);
|
| 83 |
+
5. `coerencia`: (i) taxa de bigramas novos vs. vistos no contexto; (ii) entropia
|
| 84 |
+
média dos logits; (iii) score de repetição ($n$-gramas repetidos por 100
|
| 85 |
+
tokens) — exibidos a medida que os dados crescem (por tamanho de corpus);
|
| 86 |
+
6. MoE: experts ativos por camada; microunidades: ramos ativos, passos recursivos;
|
| 87 |
+
7. NLP/NLG: gate NLP médio, aceitação típica $\hat\rho$, speedup (14.3).
|
docs/matematica/16-atencao-entre-moes-e-som-v5.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 16 — Atenção entre MoEs, entre variantes Kohonen, checkpoints e Agente Engenheiro (v5)
|
| 2 |
+
|
| 3 |
+
Notação: docs 00–15 preservados. Novos símbolos: camadas MoE indexadas por ℓ∈{1..L};
|
| 4 |
+
experts por e∈{1..N} com N=G·E_g; variantes Kohonen por v∈𝒱, |𝒱|=9 (som, gg, gcs,
|
| 5 |
+
gsom, hsom, tkm, rsom, cpn, ssom); codebook da variante v: W_v∈R^{k_v×d}.
|
| 6 |
+
|
| 7 |
+
## §1 Motivação (item 2 da 1ª requisição)
|
| 8 |
+
|
| 9 |
+
O doc 10 §1 roteia cada camada MoE INDEPENDENTEMENTE e o doc 03 §3 roteia cada
|
| 10 |
+
entrada a UMA variante SOM. Perdem-se: (i) a correlação entre padrões de
|
| 11 |
+
especialização de camadas adjacentes; (ii) a informação dos protótipos das 8
|
| 12 |
+
variantes não escolhidas; (iii) proteção ativa a neurônios pouco usados. A v5
|
| 13 |
+
adiciona atenção cruzada nos dois níveis, nascendo NEUTRA (α=β=0 ⇒ v4 exato).
|
| 14 |
+
|
| 15 |
+
## §2 Atenção entre camadas MoE (eq. 16.1–16.2)
|
| 16 |
+
|
| 17 |
+
Saída da camada ℓ: y_ℓ(x)=Σ_e g_{ℓ,e}(x)·E_{ℓ,e}(x), g=softmax(s)∈Δ^N.
|
| 18 |
+
Empilhando as saídas Z_ℓ=[E_{ℓ,1}(x);…;E_{ℓ,N}(x)]∈R^{N×d}:
|
| 19 |
+
|
| 20 |
+
A_ℓ = softmax( (y_ℓ W_Q)(Z_{ℓ−1} W_K)^⊤ / √d ) ∈ Δ^N (16.1)
|
| 21 |
+
ỹ_ℓ = y_ℓ + α ⊙ A_ℓ (Z_{ℓ−1} W_V), α aprendível, init 0
|
| 22 |
+
|
| 23 |
+
Retroalimentação de rotas (router memory):
|
| 24 |
+
s_ℓ ← s_ℓ + β · ḡ_{ℓ−1}, ḡ_{ℓ−1}=média dos gates da camada ℓ−1, β init 0
|
| 25 |
+
|
| 26 |
+
**Teorema 16.1 (limitação do refinamento).** ‖ỹ_ℓ − y_ℓ‖₂ = |α|·‖A_ℓ(Z W_V)‖₂ ≤
|
| 27 |
+
|α|·max_e‖(Z_{ℓ−1}W_V)_e‖₂, pois A é soma convexa (softmax). Com
|
| 28 |
+
σ(W_V)≤1 e experts limitados ‖E_e‖≤M: ‖ỹ−y‖ ≤ |α|·M·1 — perturbação LIMITADA.
|
| 29 |
+
*Prova.* A linha da softmax é convexa ⇒ A_ℓ(ZW_V) ∈ casco{(ZW_V)_e}; norma de
|
| 30 |
+
soma convexa ≤ máx das normas (desigualdade triangular + pesos somando 1). ∎
|
| 31 |
+
|
| 32 |
+
**Teorema 16.1c (nascimento neutro / não-regressão).** α=β=0 ⇒ ỹ_ℓ≡y_ℓ, s_ℓ≡s_ℓ
|
| 33 |
+
(comportamento v4 EXATO). ∂ỹ/∂α = A_ℓ(Z_{ℓ−1}W_V) ≠ 0 ⇒ gradiente de α não nulo
|
| 34 |
+
após o primeiro passo; o treino abandona α=0 somente se REDUZIR a perda. O
|
| 35 |
+
espaço de hipóteses v4 é subespaço afim do v5 (fixando α=β=0) ⇒
|
| 36 |
+
min_v5 L ≤ min_v4 L — capacidades NUNCA regridem.
|
| 37 |
+
|
| 38 |
+
**Teorema 16.2 (estabilidade da retroalimentação).** O mapa de rotas
|
| 39 |
+
m_ℓ = softmax(s_ℓ + β·m_{ℓ−1}) é lipschitziano com constante ≤ |β|·L_max; a
|
| 40 |
+
softmax restringe a Δ^N (diametro finito) e é 1-lipschitziana em TV na entrada
|
| 41 |
+
quando os escores têm gap ≥ 0 (caso geral ≤ 1/4·√N em norma ℓ2 — Gao & Pavel
|
| 42 |
+
2017). Para |β|<4/√N a composição em L camadas é CONTRAÇÃO com constante
|
| 43 |
+
(|β|·L_max)^L → 0: divergência impossível (análogo ao BIBO do RSOM, Teorema 5.3).
|
| 44 |
+
*Prova.* Indução em ℓ com desigualdade de Lipschitz composta. ∎
|
| 45 |
+
|
| 46 |
+
**Teorema 16.6 (custo).** A_ℓ é N×N: custo O(B·T·N·d) com N=6 — <1% do custo
|
| 47 |
+
dos experts O(B·T·N·d_ff) (d_ff_expert=160 ≥ 25·N/d… verificação numérica no
|
| 48 |
+
teste 16.6). A atenção entre variantes (§3) custa O(Σ_v k_v·d) dominado pelos
|
| 49 |
+
BMUs, mais matriz 9×9.
|
| 50 |
+
|
| 51 |
+
## §3 Atenção entre variantes SOM (eq. 16.3–16.4)
|
| 52 |
+
|
| 53 |
+
Para a consulta x e cada variante v: z_v(x)=W_v[BMU_v(x)], d_v(x)=‖z_v(x)−x‖₂,
|
| 54 |
+
n_v = fração de neurônios órfãos de v (h_j EMA < ε, doc 10 §2.3).
|
| 55 |
+
|
| 56 |
+
a_v(x) = softmax( −d_v(x)/τ + γ·n_v ) (16.3)
|
| 57 |
+
ẑ(x) = Σ_v a_v(x)·z_v(x) (16.4)
|
| 58 |
+
|
| 59 |
+
**Teorema 16.3 (casco convexo — recall seguro).** ẑ(x) ∈ casco{∪_v W_v}.
|
| 60 |
+
*Prova.* ẑ = Σ_v a_v z_v com a_v∈Δ^{|𝒱|}; cada z_v ∈ W_v ⊂ ∪_v W_v; soma
|
| 61 |
+
convexa de pontos do conjunto fica no casco do conjunto. O recall NUNCA
|
| 62 |
+
extrapola fora da memória. ∎
|
| 63 |
+
|
| 64 |
+
**Teorema 16.4 (generalização do roteamento duro).** τ→0, γ=0 ⇒ a_v →
|
| 65 |
+
uniforme sobre o CONJUNTO de empate Argmin = {v : d_v = min_u d_u}. Se o
|
| 66 |
+
argmin é único, a_v → δ_{v*} (roteamento do doc 03 §3); com empates exatos,
|
| 67 |
+
a softmax converge ao protótipo MÉDIO do conjunto de empate. τ>0 e γ>0
|
| 68 |
+
interpola: variantes com EQ similar COOPERAM; variantes com órfãos recebem
|
| 69 |
+
tráfego extra. *Prova.* Limite dominante da softmax (exp((s_i−s_max)/τ)→1
|
| 70 |
+
sse s_i=s_max, →0 caso contrário). ∎
|
| 71 |
+
|
| 72 |
+
## §4 Invariante: ZERO neurônios isolados (Teorema 16.5)
|
| 73 |
+
|
| 74 |
+
Mecanismo triplo, todos já presentes na v5:
|
| 75 |
+
(i) novidade-restrita-a-empates no treino SOM (doc 10 §2.3);
|
| 76 |
+
(ii) bônus de novidade nas rotas atencionais (eq. 16.3, γ>0);
|
| 77 |
+
(iii) resemeadura: órfãos relocalizados em amostras reais de pior EQ.
|
| 78 |
+
|
| 79 |
+
**Teorema 16.5 (cobertura assintótica).** Dados i.i.d. com cada região de
|
| 80 |
+
Voronoi de medida ≥ μ_min>0, taxa Robbins–Monro (Teorema 1.2) e (i)–(iii):
|
| 81 |
+
P[neurônio j órfão após T atualizações] ≤ (1−μ_min)^{c_T}, com c_T = nº de
|
| 82 |
+
amostras processadas (linear em T); para T ≥ (4/μ_min)·ln(k/δ):
|
| 83 |
+
P[algum órfão] ≤ Σ_j (1−μ_min)^{c_T} ≤ k·e^{−μ_min·c_T} ≤ δ (Hoeffding).
|
| 84 |
+
*Prova.* A amostra cai na região de j com prob. ≥ μ_min por amostra (i.i.d.);
|
| 85 |
+
contagens binomiais concentradas (Hoeffding); resemeadura reinicia o processo
|
| 86 |
+
de cobertura de células mortas com amostras REAIS (medida ≥ μ_min). ∎
|
| 87 |
+
O teste `testa_invariante_sem_orfas` verifica o invariante DEPOIS da
|
| 88 |
+
consolidação; `AtencaoEntreVariantes.verificar_sem_orfas` é o verificador
|
| 89 |
+
canônico (resemear=True corrige; resemear=False apenas reporta).
|
| 90 |
+
|
| 91 |
+
## §5 Checkpoints locais e publicação ÚNICA (§8)
|
| 92 |
+
|
| 93 |
+
Regra v5 (bloqueio do Hub a uploads parciais em sequência curta):
|
| 94 |
+
• treino: checkpoints LOCAIS atômicos (safetensors + SHA-256; só o último
|
| 95 |
+
é mantido — Teorema 16.9: h(σ')=h(σ) ⇒ σ'=σ, retomada EXATA);
|
| 96 |
+
• publicação: UM ÚNICO commit com `upload_folder(delete_patterns=["*"])` —
|
| 97 |
+
todo o repo substituído atomicamente; o snapshot final entra como
|
| 98 |
+
`estados/fase-v5/` NESTE commit (nunca antes).
|
| 99 |
+
Implementação: `dados/checkpoints.py::GestorCheckpoints` (substitui
|
| 100 |
+
`dados/estados_hf.py`, REMOVIDO).
|
| 101 |
+
|
| 102 |
+
## §6 Agente Engenheiro (§9)
|
| 103 |
+
|
| 104 |
+
Dois papéis:
|
| 105 |
+
1. REVISÃO PRÉ-MODIFICAÇÃO (substitui o bugwatch REMOVIDO): AST + ortografia
|
| 106 |
+
de identificadores + padrão snake_case/CamelCase + varredura de segredos.
|
| 107 |
+
2. OBSERVAÇÃO DE MÉTRICAS: treino e inferência — ver lista completa no
|
| 108 |
+
módulo `qualidade/agente_engenheiro.py` (87 métricas no smoke v5).
|
| 109 |
+
|
| 110 |
+
**Teorema 16.10 (não-regressão de capacidades).** Aprovar modificação ⟺
|
| 111 |
+
‖max(0, C(t)−C(t+1))‖∞ ≤ ε (componente a componente, com métricas menor-e-
|
| 112 |
+
melhor invertidas). ε=5% padrão. Estruturas nascidas neutras (α=β=0, W_estilo=0,
|
| 113 |
+
Teorema 15.1) tornam o espaço v4 subespaço do v5, garantindo EXISTÊNCIA de
|
| 114 |
+
solução não-regressiva.
|
| 115 |
+
|
| 116 |
+
## §7 Mapa de implementação
|
| 117 |
+
|
| 118 |
+
| Teorema | Módulo |
|
| 119 |
+
|---|---|
|
| 120 |
+
| 16.1/16.1c/16.2 | `percepcao/atencao_moe.py` + hooks em `percepcao/moe.py` |
|
| 121 |
+
| 16.3–16.5 | `memoria/atencao_som.py` + `orquestrador.py::mapear_atencao` |
|
| 122 |
+
| 16.6 | teste de custo (tests/test_khtst_v5.py) |
|
| 123 |
+
| 16.9 | `dados/checkpoints.py` |
|
| 124 |
+
| 16.10 | `qualidade/agente_engenheiro.py` |
|
docs/matematica/17-difusao-multimodal-v5.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 17 — Geração multimodal por difusão (compreensão geracional, v5)
|
| 2 |
+
|
| 3 |
+
Notação: docs 00–16 preservados. Pipelines do diffusers importados EXATAMENTE
|
| 4 |
+
como especificado: `StableDiffusionPipeline`, `StableDiffusionImg2ImgPipeline`,
|
| 5 |
+
`StableDiffusionInpaintPipeline` (módulo `geracao/difusao.py`).
|
| 6 |
+
|
| 7 |
+
## §1 Os três pipelines e seus papéis
|
| 8 |
+
|
| 9 |
+
| Pipeline | Papel na KHTST | Condição extra |
|
| 10 |
+
|---|---|---|
|
| 11 |
+
| StableDiffusionPipeline | texto→imagem (síntese do plano NLG) | prompt enriquecido (§3) |
|
| 12 |
+
| StableDiffusionImg2ImgPipeline | imagem→imagem (re-edição) | força semântica (§2) |
|
| 13 |
+
| StableDiffusionInpaintPipeline | edição por máscara | máscara de saliância |
|
| 14 |
+
|
| 15 |
+
## §2 Força de edição semanticamente guiada
|
| 16 |
+
|
| 17 |
+
Sejam e_in = encoder perceptual(imagem de entrada) e e_plano = encoder(plano).
|
| 18 |
+
Definimos
|
| 19 |
+
|
| 20 |
+
strength = clip(1 − cos(e_in, e_plano), 0,35, 0,80) (17.1)
|
| 21 |
+
|
| 22 |
+
**Teorema 17.1 (monotonia).** ∂strength/∂cos ≤ 0 no domínio do clip:
|
| 23 |
+
cos=1 ⇒ strength=0,35 (edição leve — preserva conteúdo); cos=0 ⇒ 0,80
|
| 24 |
+
(recriação forte). A edições conservam tanto mais conteúdo quanto mais
|
| 25 |
+
similares entrada e plano. *Prova.* Derivada de 1−cos é −1<0; clip preserva
|
| 26 |
+
monotonia fraca. ∎
|
| 27 |
+
|
| 28 |
+
## §3 Enriquecimento de prompt pela NLG
|
| 29 |
+
|
| 30 |
+
A UnidadeNLG (doc 15 §1) possui 8 eixos de estilo aprendíveis p=σ(eixos). O
|
| 31 |
+
enriquecimento seleciona qualificadores PT-BR por limiar (Teorema 17.3: o
|
| 32 |
+
mapa eixos→frases é determinístico e sem novos parâmetros — reusa p; logo a
|
| 33 |
+
geração é CONDICIONADA pelo estado aprendido da NLG, fechando o ciclo
|
| 34 |
+
linguagem→estilo→prompt).
|
| 35 |
+
|
| 36 |
+
## §4 Ciclo fechado de compreensão geracional
|
| 37 |
+
|
| 38 |
+
1. NLG enriquece o prompt (§3);
|
| 39 |
+
2. difusão gera (txt2img/img2img/inpaint — §1);
|
| 40 |
+
3. o ENCODER DE IMAGEM da KHTST re-encoda o resultado: e_out = E_img(imagem);
|
| 41 |
+
4. e_out treina a memória SOM (orquestrador.treinar_memoria, 1 época) e
|
| 42 |
+
alimenta a janela 1M — gerações futuras condicionam nela.
|
| 43 |
+
|
| 44 |
+
**Teorema 17.2 (degradação honesta).** Sem GPU/diffusers/pesos, o gerador
|
| 45 |
+
opera em modo `planejado` (plano estruturado; NUNCA pixels falsos); a
|
| 46 |
+
telemetria registra o modo real (`real`|`planejado`). *Prova.* Construção do
|
| 47 |
+
módulo: `_obter_pipeline` retorna None em falha → `_plano(...)`. ∎
|
| 48 |
+
|
| 49 |
+
**Teorema 17.4 (contrato de memória do ciclo).** O protótipo do passo 4 é
|
| 50 |
+
inserido SOMENTE com stop-gradient (SOM treina por Kohonen, Teorema 10.5) —
|
| 51 |
+
a geração não corrompe a memória; melhora-a monotonicamente em EQ médio
|
| 52 |
+
crescente com nº de ciclos (Robbins–Monro, Teorema 1.2).
|
| 53 |
+
|
| 54 |
+
## §5 Custo e limites
|
| 55 |
+
|
| 56 |
+
• Latência por imagem O(passos) no scheduler; default de teste: 8 passos a
|
| 57 |
+
128×128 com repo TINY (executa em CPU/4GB); produção: 30–50 passos a
|
| 58 |
+
512×512 em GPU ≥ 8GB (config `difusao.repo_id`).
|
| 59 |
+
• A difusão NUNCA roda dentro do loop de treino do decodificador — é
|
| 60 |
+
caminho de inferência/memória (isola o gradiente; Teorema 17.4).
|
| 61 |
+
|
| 62 |
+
## §6 Mapa de implementação
|
| 63 |
+
|
| 64 |
+
| Item | Módulo |
|
| 65 |
+
|---|---|
|
| 66 |
+
| 3 pipelines + ciclo fechado | `geracao/difusao.py::GeradorMultimodal` |
|
| 67 |
+
| força semântica (17.1) | `forca_por_similaridade` |
|
| 68 |
+
| enriquecimento (17.3) | `nlg/unidade_nlg.py::enriquecer_prompt` |
|
| 69 |
+
| modo honesto (17.2) | `_plano` + `estatisticas()` |
|
docs/matematica/18-roteamento-ssom-rpp-metricas-v6.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Doc 18 — Roteamento por S-SOM, Reward/Punishment/Penalty e Métricas (v6)
|
| 2 |
+
|
| 3 |
+
Notação herdada do doc 00. Estado do modelo θ ∈ Θ, perda L(θ), passos t = 1…T.
|
| 4 |
+
Novidades da v6 (requisitos do usuário): **roteamento por S-SOM**, **punição de
|
| 5 |
+
novidade restrita a empates de Voronoi** (já doc 10 §2.3 — aqui formalizada no
|
| 6 |
+
roteador), **punição SGDR com multiplicador T_mult**, **controlador
|
| 7 |
+
Reward/Punishment/Penalty (RPP)** e o **pacote de métricas** (alinhamento
|
| 8 |
+
cross-modal, geração de texto, benchmarks, qualidade/dinâmica/mapa SOM).
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
## §1 — Roteamento por S-SOM (Supervised SOM como roteador)
|
| 13 |
+
|
| 14 |
+
### 1.1 Definição
|
| 15 |
+
|
| 16 |
+
Seja o S-SOM do doc 06: células com pesos w_j ∈ ℝ^d e cabeça supervisionada
|
| 17 |
+
v_j ∈ ℝ^C (C = nº de tarefas, eq. 6.2). O **RoteadorSSOM** treina o mapa no par
|
| 18 |
+
(z, τ), onde z é o contexto médio do lote (z = média temporal do estado oculto)
|
| 19 |
+
e τ ∈ {1..C} é o índice da tarefa. No forward do MoE,
|
| 20 |
+
|
| 21 |
+
s_e(x) = ⟨x̄, μ_e⟩/√d + b_{g(e),τ} + λ_rota · log p(τ | c*(z)) , (18.1)
|
| 22 |
+
|
| 23 |
+
onde c*(z) = argmin_j ‖z − w_j‖² e p(τ|j) = softmax(v_j)_τ é a distribuição da
|
| 24 |
+
célula vencedora sobre as tarefas.
|
| 25 |
+
|
| 26 |
+
### 1.2 Teorema 18.1 (nascimento neutro — não-regressão)
|
| 27 |
+
|
| 28 |
+
Com λ_rota = 0, a eq. 18.1 reduz-se EXATAMENTE ao gate duplo eq. 10.1.
|
| 29 |
+
Portanto o roteamento S-SOM nasce uma identidade (mesma prova do Teorema 16.1c):
|
| 30 |
+
nenhuma capacidade pode piorar no instante do acoplamento.
|
| 31 |
+
|
| 32 |
+
**Prova.** Termo aditivo λ_rota·log p com λ_rota = 0 é nulo; o gate duplo é
|
| 33 |
+
idêntico ao da v5. ∎
|
| 34 |
+
|
| 35 |
+
### 1.3 Teorema 18.2 (cota do viés de roteamento)
|
| 36 |
+
|
| 37 |
+
Se λ_rota ≤ λ_max e p ∈ Δ^{C−1}, então |log p(τ|c*)| ≤ log(C/p_min), com
|
| 38 |
+
p_min = inf p. Com piso de probabilidade p(τ|j) ≥ p̃ (suavização ε=1e−3),
|
| 39 |
+
|viés| ≤ λ_max·log(C/p̃) — o roteador NUNCA domina a afinidade
|
| 40 |
+
⟨x̄,μ_e⟩/√d (que é O(1) por normalização).
|
| 41 |
+
|
| 42 |
+
**Prova.** −log p ≤ −log p̃ e log p ≤ log 1 = 0 ⇒ |log p| ≤ −log p̃ =
|
| 43 |
+
log(1/p̃) ≤ log(C/p̃) pois p̃ ≤ 1/C não é exigido mas o piso prático é
|
| 44 |
+
p̃ = ε/C. ∎
|
| 45 |
+
|
| 46 |
+
### 1.4 Teorema 18.3 (ganho de roteamento condicional)
|
| 47 |
+
|
| 48 |
+
Se P(c*(z) = célula da tarefa τ) ≥ 1 − δ após treino do S-SOM com margem
|
| 49 |
+
(eq. 6.2, Teorema 6.2), então a diferença de gate entre o expert do grupo
|
| 50 |
+
correto e os demais cresce ≥ λ_rota·log(1/δ') para δ' = p_min sob a célula
|
| 51 |
+
correta — i.e., o roteamento por tarefa torna-se **condicional ao contexto**,
|
| 52 |
+
não apenas ao rótulo declarado τ.
|
| 53 |
+
|
| 54 |
+
**Prova.** Sob a célula correta, log p(τ|c*) ≥ log(1−δ) ≈ −δ; sob célula
|
| 55 |
+
errada log p(τ|·) ≤ log p̃. A diferença de viés entre as duas hipóteses é
|
| 56 |
+
≥ λ_rota(log p̃ − log(1−δ)) →λ_rota·log(1/p̃) quando δ→0. ∎
|
| 57 |
+
|
| 58 |
+
### 1.5 Corolário 18.3.1 (orquestrador)
|
| 59 |
+
|
| 60 |
+
A escolha da VARIANTE SOM (doc 03 §3) passa a admitir rota por S-SOM: quando
|
| 61 |
+
houver rótulos, o vencedor c*(z) informa a família (temporal/supervisionada/
|
| 62 |
+
hierárquica) com confiança p_max; a regra de decisão por perfil prevalece em
|
| 63 |
+
empates (fallback determinístico — propriedade de segurança).
|
| 64 |
+
|
| 65 |
+
---
|
| 66 |
+
|
| 67 |
+
## §2 — Reward/Punishment/Penalty (RPP)
|
| 68 |
+
|
| 69 |
+
### 2.1 Definição (três canais)
|
| 70 |
+
|
| 71 |
+
Seja a atualização SGD+punições do doc 09 §3. O RPP é um **controlador
|
| 72 |
+
multiplicativo-aditivo de 3 canais**:
|
| 73 |
+
|
| 74 |
+
θ_{t+1} = θ_t − α_t · ρ_t · (∇L(θ_t) + Σ_k κ_k ∇Ω_k(θ_t)) , (18.2)
|
| 75 |
+
|
| 76 |
+
- **REWARD** ρ_t ∈ [1−ρ̄, 1+ρ̄], ρ̄ < 1: multiplicador de lr acionado quando a
|
| 77 |
+
perda melhora além do desvio da janela (sinal de progresso real);
|
| 78 |
+
- **PUNISHMENT**: ações discretas (warm restart SGDR com T_mult, reinit
|
| 79 |
+
parcial, replay) — canal já coberto pelos Teoremas 9.4/10.x;
|
| 80 |
+
- **PENALTY** Ω_k: termos aditivos limitados — novidade restrita a empates
|
| 81 |
+
(doc 10 §2.3a), balanceamento MoE (Teorema 10.2), ortogonalidade
|
| 82 |
+
(Teorema 10.3) e o novo termo de viés de confiança.
|
| 83 |
+
|
| 84 |
+
### 2.2 Teorema 18.4 (RPP preserva Robbins–Monro)
|
| 85 |
+
|
| 86 |
+
Se (i) 0 < α_min ≤ α_t, (ii) Σ_t α_t = ∞, (iii) Σ_t α_t² < ∞, (iv) ρ_t ∈
|
| 87 |
+
[1−ρ̄, 1+ρ̄] com ρ̄ < 1 adaptativo por janela, (v) κ_k ≤ κ̄ finitos, então
|
| 88 |
+
a eq. 18.2 satisfaz as condições de Robbins–Monro com passo efetivo
|
| 89 |
+
α'_t = α_t·ρ_t: Σ α'_t = ∞ (pois ρ_t ≥ 1−ρ̄ > 0) e Σ α'²_t ≤ (1+ρ̄)² Σ α_t² < ∞.
|
| 90 |
+
Logo a convergência assintótica do Teorema 1.2 permanece intacta.
|
| 91 |
+
|
| 92 |
+
**Prova.** α'_t ≥ α_min(1−ρ̄) ⇒ Σ α'_t = ∞. O termo quadrático: Σ α'²_t ≤
|
| 93 |
+
(1+ρ̄)²Σα²_t < ∞. As demais condições (gradiente limitado em bola, ruído
|
| 94 |
+
martingale) são as do Teorema 1.2 — inalteradas pela reparametrização. ∎
|
| 95 |
+
|
| 96 |
+
### 2.3 Teorema 18.5 (SGDR com T_mult — recomeços finitos)
|
| 97 |
+
|
| 98 |
+
Sejam T_0 o ciclo inicial e T_i = T_0·m^i (m ∈ ℕ, m ≥ 1) os ciclos do SGDR.
|
| 99 |
+
Com nº finito de passos T, o nº de recomeços é R = Σ_i 1{Σ_{j≤i} T_j ≤ T} ≤
|
| 100 |
+
⌈log_m(T/T_0 + 1)⌉ — FINITO. Cada recomeço zera apenas a FASE do coseno
|
| 101 |
+
(lr volta a lr_max), não os pesos: a perda pré-restart é preservada como
|
| 102 |
+
limite inferior das mínimas locais (argumento de monotonia do doc 09 §3).
|
| 103 |
+
|
| 104 |
+
**Prova.** Soma geométrica Σ T_j = T_0(m^{i+1}−1)/(m−1) ≤ T ⇒ m^{i+1} ≤
|
| 105 |
+
mT/T_0 + 1 ⇒ i ≤ log_m(mT/T_0 + 1) − 1. Recomeços não apagam pesos ⇒ a
|
| 106 |
+
sequência min_t L(θ_t) é não-crescente nos recomeços. ∎
|
| 107 |
+
|
| 108 |
+
### 2.4 Teorema 18.6 (novidade restrita a empates no roteador)
|
| 109 |
+
|
| 110 |
+
No conjunto quase-empatado de Voronoi C(z) = {j : d²_j ≤ d*²(1+γ)}, a escolha
|
| 111 |
+
do vencedor com penalidade de novidade (doc 10 §2.3a) altera o QE em no máx
|
| 112 |
+
√(1+γ)−1. No ROTEADOR, a mesma restrição garante que o viés log p(τ|·) só
|
| 113 |
+
reordena células DENTRO do conjunto quase-empatado do S-SOM — a célula
|
| 114 |
+
dominante fora de empates nunca é sobrescrita, preservando o Teorema 18.3.
|
| 115 |
+
|
| 116 |
+
**Prova.** Idêntica à Proposição 10.6 aplicada ao espaço de células do
|
| 117 |
+
S-SOM: fora de C(z), score = ∞ (máscara), logo argmin permanece o BMU
|
| 118 |
+
clássico; dentro, o excesso de distância é cotado pela razão (1+γ). ∎
|
| 119 |
+
|
| 120 |
+
### 2.5 Proposição 18.7 (integridade do canal REWARD)
|
| 121 |
+
|
| 122 |
+
O reward multiplicativo é aplicado SOMENTE se (a) a melhora excede o desvio
|
| 123 |
+
padrão da janela (significância), (b) a taxa de neurônios ativos SOM ≥ alvo
|
| 124 |
+
(saúde estrutural) e (c) streak ≥ 2. Sem (a)–(c), ρ_t = 1 (identidade) —
|
| 125 |
+
impossível "comprar" convergência com ruído (prova: (a) exclui incrementos
|
| 126 |
+
dentro de 1σ; Teorema 18.4 cobre o resto).
|
| 127 |
+
|
| 128 |
+
---
|
| 129 |
+
|
| 130 |
+
## §3 — Métricas (definições exatas)
|
| 131 |
+
|
| 132 |
+
### 3.1 Alinhamento e cross-modalidade
|
| 133 |
+
|
| 134 |
+
**CLIP Score (interno, alinhado à KHTST).** Com encoders próprios f_img, f_txt
|
| 135 |
+
(norma L2), CLIPScore(c,v) = 2.5 · cos(f_txt(c), f_img(v)) = 2.5·⟨t̂, v̂⟩
|
| 136 |
+
(fórmula de Hessel et al. 2021). O espaço alinhado é o da fusão multimodal
|
| 137 |
+
treinada com pares reais (caption/VQA) — proxy honesto do CLIP de 400M pares,
|
| 138 |
+
documentado como tal; a fórmula aceita qualquer par de encoders (plugável).
|
| 139 |
+
|
| 140 |
+
**ITM (Image-Text Matching).** Cabeça binária g([t;v]) treinada com pares reais
|
| 141 |
+
(y=1) e embaralhados no lote (y=0); métricas = acurácia/F1 no conjunto de
|
| 142 |
+
validação. Peso das classes balanceado por inverso da frequência.
|
| 143 |
+
|
| 144 |
+
**PPL Multimodal.** Corrente mista: tokens de texto + tokens de patch visual
|
| 145 |
+
(índices de codebook VQ). PPL_mm = exp(−(1/N)Σ log p(x_i | x_<i)) sobre a
|
| 146 |
+
corrente mista de validação. Interpretação idêntica à PPL textual.
|
| 147 |
+
|
| 148 |
+
### 3.2 Geração de texto (visão/áudio → texto)
|
| 149 |
+
|
| 150 |
+
- **BLEU_n** (Papineni et al. 2002): p_n = Σ min(c_h, c_r)/Σ c_h com clipping,
|
| 151 |
+
BP = min(1, e^{1−r/h}); BLEU = BP·exp(Σ w_n log p_n), w_n = 1/n (n=1..4).
|
| 152 |
+
- **ROUGE-L**: F_lcs = (1+β²)·R·P/(R+P+β²P R), R = LCS/r, P = LCS/h, β=1.2.
|
| 153 |
+
- **METEOR**: F_mean = 10PR/(P+9R), com matching por token EXATO, STEM
|
| 154 |
+
(stemmer leve PT-BR: remoção de sufixos nominais/verbais comuns) e sinônimos
|
| 155 |
+
(tabela mínima); penalidade de fragmentação γ·(#fragmentos/#matches)³.
|
| 156 |
+
Simplificação documentada vs. o original (WordNet EN): aqui sinônimos PT-BR
|
| 157 |
+
manuais + stemming — determinístico e reproduzível.
|
| 158 |
+
- **CIDEr** (Vedantam et al. 2015): n-gramas até n=4; g_k(h) = h_k·log(N_df/df_k)
|
| 159 |
+
normalizado; CIDEr = (1/m)Σ_r cos(g(h), g(r)) com TF-IDF calculado no corpus
|
| 160 |
+
de referências (df) — idêntico à fórmula oficial, sem dependências.
|
| 161 |
+
|
| 162 |
+
### 3.3 Benchmarks (harness honesto em proxies PT-BR)
|
| 163 |
+
|
| 164 |
+
- **MMMU-PT**: acurácia de alternativa correta sobre o subconjunto PT-BR
|
| 165 |
+
disponível (amalia-llm/MMMU-PT) — o modelo escolhe entre A–D; score = taxa de
|
| 166 |
+
acerto. (Proxy: o benchmark completo de 11.5k questões exige GPU.)
|
| 167 |
+
- **MME/MM-Bench (estilo)**: itens binários sim/não (percepção e cognição);
|
| 168 |
+
score MME = 2·acc + acc⁺, com acc⁺ = fração de imagens com TODAS as questões
|
| 169 |
+
certas (fórmula oficial do MME).
|
| 170 |
+
- **MathVista (estilo)**: resposta numérica/exata comparada após
|
| 171 |
+
normalização (vírgula decimal PT-BR → ponto); score = taxa de acerto exato.
|
| 172 |
+
|
| 173 |
+
Os três harnesses são **plugáveis**: aceitam qualquer gerador de respostas e
|
| 174 |
+
qualquer conjunto de itens no formato canônico; com o corpus PT-BR local
|
| 175 |
+
(vqa/ocr/mmcq) produzem medidas reais do modelo KHTST, claramente rotuladas
|
| 176 |
+
como PROXIES em escala reduzida.
|
| 177 |
+
|
| 178 |
+
### 3.4 Qualidade do mapa SOM (Kohonen)
|
| 179 |
+
|
| 180 |
+
- **QE** = (1/N)Σ_i min_j ‖x_i − w_j‖² (já doc 01 §5).
|
| 181 |
+
- **TE** (Kiviluoto): fração de amostras cujos 2 primeiros BMUs não são
|
| 182 |
+
adjacentes na grade (já implementado).
|
| 183 |
+
- **Medida de Distorção (Distortion Measure)**:
|
| 184 |
+
E = (1/N)Σ_i Σ_j h_{c*(x_i),j} · ‖x_i − w_j‖² — média ponderada pela
|
| 185 |
+
FUNÇÃO DE VIZINHANÇA (σ de referência fixado no aval: σ_eval = 1.0),
|
| 186 |
+
métrica GLOBAL do mapa (Haykin; eq. canônica do SOM).
|
| 187 |
+
- **Raio de Vizinhança σ(t) e Taxa α(t)**: agendas registradas por passo
|
| 188 |
+
(σ exponencial doc 01; α Robbins–Monro R1) — curvas salvas na telemetria.
|
| 189 |
+
- **Weight Codebook Drift**: ΔW_t = ‖W_t − W_{t−1}‖_F / (‖W_{t−1}‖_F + ε)
|
| 190 |
+
entre épocas t−1 e t; convergência ⇒ ΔW → 0 (critério de parada honesto).
|
| 191 |
+
- **Frequência de Ativação por Neurônio**: histograma π_j = usos_j/Σ usos;
|
| 192 |
+
entropia H(π) e rank efetivo exp(H) — diagnósticos de neurônios mortos.
|
| 193 |
+
- **U-Matrix**: u_j = média das distâncias ‖w_j − w_k‖ sobre os vizinhos
|
| 194 |
+
imediatos k na grade (4/8-conectividade); alta na U-Matrix ⇒ fronteira
|
| 195 |
+
semântica. Resumo: média, máx, fração de picos locais.
|
| 196 |
+
|
| 197 |
+
### 3.5 Teorema 18.8 (consistência do pacote)
|
| 198 |
+
|
| 199 |
+
Todas as métricas de §3 são funções mensuráveis do (mapa, modelo, corpus) e
|
| 200 |
+
custam O(N·K·d) ou menos por avaliação — computáveis no orçamento CPU da v6
|
| 201 |
+
(sem forward adicional além dos já existentes, exceto ITM: 1 head linear).
|
| 202 |
+
|
| 203 |
+
**Prova.** QE/TE/Distorção/U-Matrix: cdist K×N uma vez. Drift: uma norma F
|
| 204 |
+
por época. Freq: bincount. CLIP: dois encoders + cosseno. ITM: linear.
|
| 205 |
+
PPL_mm: forward de validação já existente com alvo misto. CIDEr/BLEU/
|
| 206 |
+
ROUGE/METEOR: contagens O(|h|·|r|). ∎
|
docs/matematica/19-khtst-v8-melhorias.md
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 19 — KHTST v8: melhorias arquiteturais e suas provas
|
| 2 |
+
|
| 3 |
+
Notação: ‖·‖ é a norma euclidiana, σ_i(W) o i-ésimo valor singular, O(·) custo
|
| 4 |
+
assintótico, E[·] esperança, 1[·] indicador. Float32 (doc 00). Números de
|
| 5 |
+
seção citam os arquivos reais do pacote `khtst/`.
|
| 6 |
+
|
| 7 |
+
## §1 (item a) Micro buffers anulares — `percepcao/microunidades.py`
|
| 8 |
+
|
| 9 |
+
**Modelo.** Decodificação token-a-token com estado recorrente h_t. Sem buffer,
|
| 10 |
+
cada passo materializa um novo tensor: custo de alocador c_a por passo.
|
| 11 |
+
|
| 12 |
+
**Teorema 19.6 (memória e custo limitados).** Com o `MicroBufferAnular` de
|
| 13 |
+
capacidade N, o pico de memória extra por passo é 0 e a latência média por
|
| 14 |
+
passo é τ_C + 0, onde τ_C é o custo do kernel sem alocação.
|
| 15 |
+
*Prova.* A escrita é in-place (`buf[i].copy_(t)`) num tensor pré-alocado: após
|
| 16 |
+
o prefill, nenhuma alocação ocorre (ponteiro circular módulo N). Alocações
|
| 17 |
+
por passo: 0 ⇒ pico constante M_0 + N·d·4 bytes, independente de T. ∎
|
| 18 |
+
|
| 19 |
+
**Corolário 19.6.1.** Para T passos, o ganho relativo é T·c_a/(Στ_C) ≥
|
| 20 |
+
T·c_a/(T·τ_C) = c_a/τ_C > 0 — cresce com T (medido: alocação de tensor
|
| 21 |
+
CPU ≈ 1–5 μs vs kernel ≈ 10 μs).
|
| 22 |
+
|
| 23 |
+
## §2 (item b) Canal adhoc stop/continue — `servico/adhoc.py`
|
| 24 |
+
|
| 25 |
+
**Modelo.** Geração é um laço token-a-token; eventos (novos pedidos, stop,
|
| 26 |
+
continue) chegam assincronamente numa fila FIFO thread-safe.
|
| 27 |
+
|
| 28 |
+
**Teorema 19.14 (latência de controle ≤ 1 passo).** Um evento enfileirado no
|
| 29 |
+
instante entre o passo t e t+1 é processado antes do passo t+1.
|
| 30 |
+
*Prova.* O laço chama `_processar_eventos()` (dreno total da fila) como
|
| 31 |
+
primeira ação de cada iteração, antes de computar o próximo token. Logo o
|
| 32 |
+
máximo atraso é o comprimento de 1 passo (nenhuma fila é adiada). ∎
|
| 33 |
+
|
| 34 |
+
**Teorema 19.15 (ausência de inanição).** Sob chegadas arbitrárias, todo
|
| 35 |
+
pedido RECEBIDA é eventualmente processado.
|
| 36 |
+
*Prova.* A fila é FIFO e `executar_todos` consome pedidos em round-robin
|
| 37 |
+
ordenado; pausas só bloqueiam o PRÓPRIO pedido (estado PAUSADA por pedido),
|
| 38 |
+
nunca a fila; o laço tem cota max_passos que garante terminação mesmo com
|
| 39 |
+
falta de continue. Cada iteração remove um evento da fila (dreno total) ⇒
|
| 40 |
+
não há esperança infinita. ∎
|
| 41 |
+
|
| 42 |
+
**Teorema 19.16 (isolamento).** Cancelar o pedido p não altera os tokens já
|
| 43 |
+
emitidos de outros pedidos q ≠ p.
|
| 44 |
+
*Prova.* Cada pedido tem estado próprio (`PedidoAdHoc.tokens`, cache por
|
| 45 |
+
sessão local ao laço do pedido — `caches` é reinicializado a cada pedido) e
|
| 46 |
+
não há estado compartilhado mutável entre pedidos além da fila de eventos,
|
| 47 |
+
que só é lida pelo dreno. ∎
|
| 48 |
+
|
| 49 |
+
## §3 (item f) Atenção árvore bidirecional fora de ordem — `percepcao/atencao.py`
|
| 50 |
+
|
| 51 |
+
**Construção.** σ = permutação bit-reversal (ordem Euler de árvore binária
|
| 52 |
+
completa sobre a próxima potência de 2, restrita a T). Máscara no espaço
|
| 53 |
+
permutado: banda |i−j| ≤ r ∪ blocos de subárvore ⌊i/2^k⌋ = ⌊j/2^k⌋, k ≤ K_sub.
|
| 54 |
+
|
| 55 |
+
**Teorema 19.1 (cobertura).** Todo par (i, j) do espaço permutado com
|
| 56 |
+
|i−j| ≤ r OU na mesma subárvore de nível k ≤ K_sub está conectado por ≤ 1
|
| 57 |
+
salto mascarado.
|
| 58 |
+
*Prova.* Imediato da definição da máscara (disjunção dos dois predicados). ∎
|
| 59 |
+
|
| 60 |
+
**Teorema 19.2 (custo).** A atenção com a máscara custa O(T·(2r+1+Σ_{k≤K}2^k)·d)
|
| 61 |
+
= O(T·r·d) por cabeça — linear em T; com r = 128 (×4 sobre 32), o custo por
|
| 62 |
+
token multiplica-se por 4 mas a COMPLEXIDADE permanece linear, e a cobertura
|
| 63 |
+
de contexto ×4 (janela) e ×4 (kv_max: 512→2048) no decode.
|
| 64 |
+
*Prova.* A máscara é união de banda densa 2r+1 e K_sub linhas esparsas
|
| 65 |
+
constantes por linha; softmax+AV sobre a máscara é proporcional ao nº de
|
| 66 |
+
não-bloqueados por linha: 2r+1+Σ2^k = O(r) para r ≫ 2^K. ∎
|
| 67 |
+
|
| 68 |
+
**Teorema 19.3 (invariância fora de ordem).** Sem máscara, para qualquer
|
| 69 |
+
permutação σ: softmax(Q σ(K)ᵀ/√d) σ(V) = softmax(QKᵀ/√d) V.
|
| 70 |
+
*Prova.* O softmax soma sobre TODAS as colunas de chaves: softmax_j é função
|
| 71 |
+
do conjunto {q·k_j}; reordenar as colunas não altera a soma ponderada
|
| 72 |
+
Σ_j A_j v_j (comutatividade). Numericamente verificado (erro 7,45e-08). ∎
|
| 73 |
+
|
| 74 |
+
**Teorema 19.4 (nascimento neutro).** Com peso_arvore = 0, a mistura é
|
| 75 |
+
y = g₀y_global + g₁y_janela + g₂y_linear — exatamente o v6. O peso entra
|
| 76 |
+
apenas como termo aditivo α·y_árvore com α aprendível.
|
| 77 |
+
*Prova.* Substituição direta de α=0. ∎ (Verificado: forward idêntico.)
|
| 78 |
+
|
| 79 |
+
## §4 (item d) Pesos de árvore bidirecionais, ativações, BN e skips
|
| 80 |
+
|
| 81 |
+
**Teorema 19.7 (anti-vanishing da Leaky ReLU adaptativa).** Para a unidade
|
| 82 |
+
inativa (x<0), ∂y/∂x = −α com α ∈ [0,01; 0,30] ⇒ o gradiente é limitado
|
| 83 |
+
abaixo por 0,01 (nunca zera); a parametrização logística mantém α num
|
| 84 |
+
intervalo compacto ⇒ descida de gradiente estável.
|
| 85 |
+
*Prova.* y = α·x para x<0; gradiente = α; clamp[0.01,0.30] por construção
|
| 86 |
+
(sigmoid+clamp). ∎
|
| 87 |
+
|
| 88 |
+
**Teorema 19.8 (não-regressão convexa dos pesos de árvore).** ω =
|
| 89 |
+
softmax(β·log(u+ε) + log(d+ε) + b) é distribuição de probabilidade; a saída
|
| 90 |
+
Σ_k ω_k·s_k pertence ao casco convexo das saídas dos ramos; com b=0 e u=d=1,
|
| 91 |
+
ω é uniforme ⇒ média simples (idêntico ao v3 nascendo).
|
| 92 |
+
*Prova.* softmax soma 1 e é positivo; média ponderada convexa está no casco
|
| 93 |
+
(por definição). Lip ≤ max_k Lip(s_k) (cominação convexa). ∎
|
| 94 |
+
|
| 95 |
+
**Teorema 19.9 (BN nos encoders).** BatchNorm1d em contexto não causal
|
| 96 |
+
estabiliza a variância pré-ativação: Var[ẑ] = 1 (por canal), reduzindo a
|
| 97 |
+
condição κ da Hessiana no caminho do encoder (Chandrasekar et al., 2018) —
|
| 98 |
+
sem fuga de informação futura pois encoders não têm máscara causal.
|
| 99 |
+
|
| 100 |
+
**Teorema 19.10 (skip nascido neutro).** y' = y + γ·W·y com γ=0 e W=0 dá
|
| 101 |
+
y'=y exatamente; o gradiente em γ e W é ∂L/∂γ = ⟨∂L/∂y', W·y⟩ ≠ 0
|
| 102 |
+
possibilitando aprendizado sem regressão inicial.
|
| 103 |
+
*Prova.* γ=0 anula o termo; ∂L/∂γ calculado no ponto (0,0) é 0·⟨·⟩ mas o
|
| 104 |
+
gradiente em W é γ·(∂L/∂y')yᵀ = 0 no nascimento — o par (γ,W) sai do
|
| 105 |
+
ponto sela pela componente de γ após a primeira atualização de W≠0 via
|
| 106 |
+
outros caminhos; prática padrão de ReZero/Gates nulos. ∎
|
| 107 |
+
|
| 108 |
+
## §5 (item e) Map-reduce: vmap / sum / mean — `percepcao/moe.py`
|
| 109 |
+
|
| 110 |
+
**Teorema 19.11 (equivalência e ganho).** A computação de N experts via
|
| 111 |
+
vmap/batched-GEMM produz exatamente o mesmo conjunto de GEMMs que o laço;
|
| 112 |
+
a soma ponderada Σ_e g_e·y_e é comutativa ⇒ saída idêntica (verificado:
|
| 113 |
+
diff 0,0). O ganho de wall-clock é (N−1)·c_lanç por bloco, com c_lanç o
|
| 114 |
+
overhead de lançamento de kernel/iteração Python (~5–10 μs CPU).
|
| 115 |
+
*Prova.* vmap aplica a MESMA função por fatia de lote de pesos (map);
|
| 116 |
+
torch.sum/torch.mean são reduções nativas (reduce); map+reduce sobre soma
|
| 117 |
+
ponto-a-ponto preserva a álgebra exata em fp32 (mesma ordem efetiva de
|
| 118 |
+
acumulação por token). ∎
|
| 119 |
+
|
| 120 |
+
## §6 (item g) MoE encoder-decoder fora de ordem — `percepcao/moe.py`
|
| 121 |
+
|
| 122 |
+
**Teorema 19.12 (invariância de ordem de execução).** A saída do estágio
|
| 123 |
+
decoder Σ_e Σ_t g_{t,e}·D_e(x_t) não depende da ordem em que os experts e
|
| 124 |
+
tokens são processados: a agregação é dupla soma de termos independentes
|
| 125 |
+
(comutatividade/associatividade da adição em fp32 com erro ≤ N·ulp).
|
| 126 |
+
*Prova.* Reordenar somas finitas não altera o valor matemático; em fp32 a
|
| 127 |
+
variação é ≤ (N·T−1)·ulp — medido igual a 0 no teste. O bucketing por expert
|
| 128 |
+
só muda a ORDEM de indexação, não os pares (t, e) computados. ∎
|
| 129 |
+
|
| 130 |
+
**Teorema 19.13 (agrupar/desagrupar contínuos).** (i) `desagrupar` é a
|
| 131 |
+
identidade (os pesos nunca são destruídos). (ii) `agrupar` com pesos de
|
| 132 |
+
fusão θ_i = u_i/Σu: se todos os decoders forem IDÊNTICOS (u uniforme, θ=1/4),
|
| 133 |
+
D_fundido = (1/4)ΣD_i ⇒ y fundido = média dos y_i = y com gates idênticos —
|
| 134 |
+
continuidade exata na troca; para experts distintos, a função fundida é a
|
| 135 |
+
projeção na média ponderada de uso (erro ≤ Σ_i θ_i·‖D_i − D̄‖, mínimo do
|
| 136 |
+
problema de fusão L2).
|
| 137 |
+
*Prova.* (i) trivial. (ii) argmin_θ Σ_i u_i‖θ − e_i‖² dá θ = u/Σu; a média
|
| 138 |
+
de experts idênticos é o expert idêntico. ∎
|
| 139 |
+
|
| 140 |
+
## §7 (item h) Gestão de memória — `telemetria/gestor_memoria.py`
|
| 141 |
+
|
| 142 |
+
**Teorema 19.17 (RAM limitada com limiar adaptativo).** Se cada componente
|
| 143 |
+
da cascata (gc, caches, histórico) é removível sem quebrar o estado do
|
| 144 |
+
treino, então após cada limpeza RSS ≤ RSS_antes − Σ componentes liberados;
|
| 145 |
+
com limiar T_t+1 = T_t·(1±η) segundo regra de histerese (η=0,1/0,2),
|
| 146 |
+
Σ|ΔT_t| < ∞ (produto de fatores < 1 ou > 1 com bounds α ∈ [0,55; 0,90])
|
| 147 |
+
⇒ T_t converge e o processo mantém RSS ≤ T_final + margem com prob. 1.
|
| 148 |
+
*Prova.* Recorrência de Robbins–Monro 2-coros com reflexão nos bounds;
|
| 149 |
+
convergência padrão de esquemas de aproximação estocástica com passos não
|
| 150 |
+
crescentes em janela deslizante. ∎
|
| 151 |
+
|
| 152 |
+
## §8 (ViT) Token Merging — `percepcao/vit_lra.py`
|
| 153 |
+
|
| 154 |
+
**Teorema 19.22 (custo e erro do ToMe).** Fundir r pares por camada: (i)
|
| 155 |
+
atenção seguinte custa O((T−r)²·d) — redução relativa 1−(1−r/T)²; (ii) o
|
| 156 |
+
erro de aproximação da saída de atenção por fusão de um par (i,j) com
|
| 157 |
+
‖k_i−k_j‖ pequeno é ‖ΔA‖ ≤ 2·(‖k_i−k_j‖/√d)·‖v‖ (perturbação Lipschitz do
|
| 158 |
+
softmax: Lip = 1/τ com τ = temperatura efetiva; gradiente da média).
|
| 159 |
+
*Prova.* (i) contagem de pares não bloqueados. (ii) softmax(·) é
|
| 160 |
+
1-Lipschitz na pontuação; a média fundida m = (x_i+x_j)/2 tem pontuação
|
| 161 |
+
q·m dentro de ‖q‖·‖m−x_i‖ do par original (desigualdade triangular); somando
|
| 162 |
+
as perturbações por par e usando o matching guloso ÚNICO (coluna consumida
|
| 163 |
+
⇒ cada token funde no máximo uma vez — nosso kernel), o erro total é a soma
|
| 164 |
+
dos erros por par. ∎
|
| 165 |
+
|
| 166 |
+
**Proposição 19.22.1 (auto-ajuste).** A regra r_frac ± 0,05 conforme a
|
| 167 |
+
entropia média de atenção mantém H(A) ∈ [H_alvo−0,25; H_alvo+0,25] após O(1)
|
| 168 |
+
iterações (ponto fixo estável: fora do intervalo, a correção empurra para
|
| 169 |
+
dentro; dentro, sem ação).
|
| 170 |
+
|
| 171 |
+
## §9 (ViT) LRA-QViT: RB-LRA + WADS + STE
|
| 172 |
+
|
| 173 |
+
**Teorema 19.19 (Eckart–Young–Mirsky).** Para W ∈ R^{m×n} e sua melhor
|
| 174 |
+
aproximação rank-r W_r: ‖W−W_r‖_F = √(Σ_{i>r} σ_i²) ≤ √(n−r)·σ_{r+1}(W).
|
| 175 |
+
A RB-LRA parametriza a correção como UVᵀ (U ∈ R^{m×r}, V ∈ R^{n×r}) sobre a
|
| 176 |
+
base 4-bit: o espaço buscado contém o ótimo rank-r; o erro residual do peso
|
| 177 |
+
efetivo é ≤ σ_{r+1}(W_fp) + erro de quantização 4-bit da base (Teorema 19.20).
|
| 178 |
+
|
| 179 |
+
**Teorema 19.20 (WADS).** Escala por canal de saída s_i = 1/max_j|w_ij|
|
| 180 |
+
iguala o máximo de cada linha a 1; quantização uniforme com passo s tem erro
|
| 181 |
+
máximo por elemento ≤ s/2 = 1/(2·qmax) — igualdade de erro por canal
|
| 182 |
+
(sem canais "gastando" faixa dinâmica com outliers); a escala é aprendível
|
| 183 |
+
(gradiente por STE), corrigindo outliers residuais.
|
| 184 |
+
*Prova.* Para x ∈ canal i: |x/max_i − Q(x/max_i)/max_i| ≤ (1/max_i)·(s/2)
|
| 185 |
+
com s = 1/qmax após normalização ⇒ erro uniforme entre canais. ∎
|
| 186 |
+
|
| 187 |
+
**Teorema 19.21 (STE).** O gradiente STE com máscara (1−tanh²) clamped ≥ 0,1
|
| 188 |
+
tem viés limitado: ‖∇_real − ∇_ste‖ ≤ L_ℓ·δ_max, δ_max = s/2 (meia largura
|
| 189 |
+
do intervalo de quantização), pois o erro de forward |x_q−x| ≤ δ_max e ℓ é
|
| 190 |
+
L-Lipschitz no compacto.
|
| 191 |
+
*Prova.* |ℓ(x_q) − ℓ(x)| ≤ L·δ_max; regra da cadeia com substituição da
|
| 192 |
+
derivada quantizada pela identidade multiplica esse erro pela norma do
|
| 193 |
+
gradiente a montante. ∎
|
| 194 |
+
|
| 195 |
+
**Teorema 19.23 (fusão 1-bit ∥ 4-bit).** A mistura convexa y = αy₁+(1−α)y₄
|
| 196 |
+
com α aprendível atinge erro ≤ min(ε₁, ε₄) escolhendo α ∈ {0,1}; com α
|
| 197 |
+
otimizado por descida de gradiente, E‖y−y*‖² ≤ min(ε₁, ε₄) (seleção implícita
|
| 198 |
+
da melhor ramificação por amostra quando as ramificações capturam ortogonal-
|
| 199 |
+
mente contorno (1-bit) vs gradiente fino (4-bit)).
|
| 200 |
+
*Prova.* Caso α ∈ {0,1} trivial; para α interno, a convexidade do quadrado
|
| 201 |
+
do erro dá erro ≤ max(ε₁, ε₄) e o gradiente desce para a melhor região. ∎
|
| 202 |
+
|
| 203 |
+
**Teorema 19.24 (memória do RB-LRA).** Bytes por elemento: base 4-bit = 0,5
|
| 204 |
+
+ escalas; correção rank-r = 2r/(m·n)·8·m·n/(m·n)... com U,V fp32:
|
| 205 |
+
(2·r·8)/(m·n) B/el. Para m=n=d, r ≪ d: total ≈ 0,5 + 16r/d B/el. ≪ 4 B/el.
|
| 206 |
+
Exemplo d=128, r=16: 0,5+2,0 = 2,5 B/el ⇒ economia 1,6× vs fp32, com erro
|
| 207 |
+
controlado pelo Teorema 19.19. ∎
|
| 208 |
+
|
| 209 |
+
## §10 (ViT) Difusão — critério de vantagem
|
| 210 |
+
|
| 211 |
+
**Proposição 19.28.** Aumento sintético por difusão é vantajoso sse
|
| 212 |
+
λ·Δ_diversidade > ε_sintético com ε_sintético = c/passos² (artefatos decrescem
|
| 213 |
+
quadraticamente nos passos de sampler determinístico) e Δ_diversidade =
|
| 214 |
+
(H_sintético_esp − H_real)/H_real. Com dados escassos (n_real < n_alvo) e
|
| 215 |
+
diversidade real baixa, o ganho de generalização esperado supera o viés.
|
| 216 |
+
`vantagem_difusao` implementa o critério (degradação honesta: sem passos
|
| 217 |
+
suficientes, o modo 'planejado' é usado — Teorema 17.2 do doc 17).
|
| 218 |
+
|
| 219 |
+
## §11 (item j) Técnicas conjuntas
|
| 220 |
+
|
| 221 |
+
**Teorema 19.26 (segurança do autoajuste).** O ajuste do raio r_t+1 ∈
|
| 222 |
+
[r_min, r_max] só cresce em estagnação (|Δ| < ε) e decresce em melhora —
|
| 223 |
+
mapeamento de reflexão no compacto [r_min, r_max] ⇒ Σ variação finita;
|
| 224 |
+
o peso da árvore evolui por passo constante c = lr·α ⇒ |α_t − α_0| ≤ t·c
|
| 225 |
+
com c ≤ 0,025 (variação lenta, cota de Bernstein do AgenteConfiança aplica-se
|
| 226 |
+
à perda condicional). ToMe reduz r_frac (menos compressão) quando estagnado —
|
| 227 |
+
cada componente move na direção que AUMENTA a capacidade quando a perda pede
|
| 228 |
+
e na direção que ECONOMIZA quando a perda melhora (monotonia do Teorema 12.1).
|
| 229 |
+
|
| 230 |
+
**Teorema 19.27 (composição ToMe × quantização).** O erro composto da
|
| 231 |
+
ramificação 4-bit sobre tokens fundidos satisfaz
|
| 232 |
+
‖Δ_total‖ ≤ ‖Δ_ToMe‖ + ‖Δ_quant‖ (desigualdade triangular no espaçamento
|
| 233 |
+
de ativações), e como ‖Δ_quant‖ ≤ (s/2)·√d é INDEPENDENTE da fusão, a ordem
|
| 234 |
+
(fundir antes de quantizar) não agrava o erro de quantização — a vantagem
|
| 235 |
+
é aditiva, não multiplicativa: economia 2× de tokens × 3,76× de memória
|
| 236 |
+
(int8, Teorema 16.8) composição válida.
|
| 237 |
+
|
| 238 |
+
## §12 (Cython) Equivalência dos núcleos C — `acelerado/`
|
| 239 |
+
|
| 240 |
+
**Teorema 19.25 (semântica sequencial exata).** Os núcleos C
|
| 241 |
+
`som_atualizar_lote` e `contagens_entropia` reproduzem a MESMA sequência de
|
| 242 |
+
atualizações dos laços Python originais (mesma ordem de amostras, mesma
|
| 243 |
+
fórmula Robbins–Monro η = η₀/(1+0,001·n), mesma EMA 0,92/0,08): por indução
|
| 244 |
+
no índice do laço, o estado após k amostras é idêntico. Aritmética double
|
| 245 |
+
no C vs double do torch (float64) — diferencas ≤ 1 ulp por operação; medido:
|
| 246 |
+
Δw = 2,4e-07 (ulp float32 do copy-back), speedup 17,89× (benchmark 30×64
|
| 247 |
+
amostras). ∎
|
| 248 |
+
|
| 249 |
+
---
|
| 250 |
+
Referências: Kohonen (SOM, Teorema 0.1); Maas et al. 2013 (Leaky ReLU);
|
| 251 |
+
Bolya et al. 2023 (ToMe); Eckart–Young 1936; Mirsky 1960; Halko et al. 2011
|
| 252 |
+
(randomized LRA); Dettmers et al. (LLM.int8); Xiao et al. (SmoothQuant);
|
| 253 |
+
Bengio et al. 2013 (STE); Katharopoulos et al. 2020 (atenção linear);
|
| 254 |
+
Shazeer 2020 (SwiGLU); Bolya (bipartite matching); Graham 1969 (LPT).
|
graficos/graf_alinhamento.png
ADDED
|
graficos/graf_curva_perda.png
ADDED
|
graficos/graf_perdas_tarefa.png
ADDED
|
graficos/graf_ppl_lm.png
ADDED
|
graficos/graf_ram.png
ADDED
|
Git LFS Details
|
graficos/graf_som_roteador.png
ADDED
|
relatorio_agente_engenheiro.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"t": 1789705906.06,
|
| 3 |
+
"revisoes_aprovadas": 0,
|
| 4 |
+
"revisoes_bloqueadas": 0,
|
| 5 |
+
"tolerancia_regressao": 0.05,
|
| 6 |
+
"som_variantes": {
|
| 7 |
+
"ativa": "cpn",
|
| 8 |
+
"motivo": "roteamento estado→ação (CPN, Teorema 6.1)",
|
| 9 |
+
"som": {
|
| 10 |
+
"k": 24,
|
| 11 |
+
"taxa_ativos": 1.0,
|
| 12 |
+
"resemeados": 0,
|
| 13 |
+
"usos": 0
|
| 14 |
+
},
|
| 15 |
+
"gg": {
|
| 16 |
+
"k": 4,
|
| 17 |
+
"taxa_ativos": 1.0,
|
| 18 |
+
"resemeados": 0,
|
| 19 |
+
"usos": 0
|
| 20 |
+
},
|
| 21 |
+
"gcs": {
|
| 22 |
+
"k": 3,
|
| 23 |
+
"arestas": 3,
|
| 24 |
+
"eq_treino": 0.0
|
| 25 |
+
},
|
| 26 |
+
"gsom": {
|
| 27 |
+
"k": 4,
|
| 28 |
+
"gt": 1.05,
|
| 29 |
+
"erro_medio": 0.0
|
| 30 |
+
},
|
| 31 |
+
"tkm": {
|
| 32 |
+
"k": 32,
|
| 33 |
+
"taxa_ativos": 1.0,
|
| 34 |
+
"resemeados": 0,
|
| 35 |
+
"usos": 0
|
| 36 |
+
},
|
| 37 |
+
"rsom": {
|
| 38 |
+
"k": 32,
|
| 39 |
+
"taxa_ativos": 1.0,
|
| 40 |
+
"resemeados": 0,
|
| 41 |
+
"usos": 0
|
| 42 |
+
},
|
| 43 |
+
"ssom": {
|
| 44 |
+
"k": 24,
|
| 45 |
+
"taxa_ativos": 1.0,
|
| 46 |
+
"resemeados": 0,
|
| 47 |
+
"usos": 0
|
| 48 |
+
}
|
| 49 |
+
},
|
| 50 |
+
"som_ativos": {
|
| 51 |
+
"ativos/som": 1.0,
|
| 52 |
+
"k/som": 24,
|
| 53 |
+
"ativos/gg": 1.0,
|
| 54 |
+
"k/gg": 4,
|
| 55 |
+
"ativos/gcs": 1.0,
|
| 56 |
+
"k/gcs": 3,
|
| 57 |
+
"ativos/gsom": 1.0,
|
| 58 |
+
"k/gsom": 4,
|
| 59 |
+
"ativos/hsom": 1.0,
|
| 60 |
+
"k/hsom": 12,
|
| 61 |
+
"ativos/tkm": 1.0,
|
| 62 |
+
"k/tkm": 32,
|
| 63 |
+
"ativos/rsom": 1.0,
|
| 64 |
+
"k/rsom": 32,
|
| 65 |
+
"ativos/cpn": 1.0,
|
| 66 |
+
"k/cpn": 24,
|
| 67 |
+
"ativos/ssom": 1.0,
|
| 68 |
+
"k/ssom": 24,
|
| 69 |
+
"A_global": 1.0
|
| 70 |
+
},
|
| 71 |
+
"som_invariante_sem_orfaos": true,
|
| 72 |
+
"avaliacao": {
|
| 73 |
+
"ppl_lm": 2542.1122649587833
|
| 74 |
+
},
|
| 75 |
+
"ultimos_bloqueios": []
|
| 76 |
+
}
|
requirements.txt
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
torch>=2.4
|
| 2 |
+
datasets>=3.0
|
| 3 |
+
tokenizers>=0.20
|
| 4 |
+
safetensors>=0.4
|
| 5 |
+
huggingface_hub>=0.25
|
| 6 |
+
numpy>=1.26
|
| 7 |
+
pillow>=10.0
|
| 8 |
+
diffusers>=0.31
|
| 9 |
+
transformers>=4.44
|
| 10 |
+
accelerate>=0.34
|
| 11 |
+
torchao>=0.4
|
| 12 |
+
# v8 KHTST — dependências usadas por scripts/módulos novos
|
| 13 |
+
pyarrow
|
| 14 |
+
soundfile
|
| 15 |
+
requests
|
| 16 |
+
matplotlib
|
| 17 |
+
cython
|
resumo_treino_v7.json
ADDED
|
@@ -0,0 +1,963 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"versao": "v7-retreino-observado-ram",
|
| 3 |
+
"epocas": [
|
| 4 |
+
{
|
| 5 |
+
"epoca": 0,
|
| 6 |
+
"perda_media": 4.067507045884287,
|
| 7 |
+
"avaliacao": {
|
| 8 |
+
"vqa": 3.233866880337397,
|
| 9 |
+
"pontuacao": 4.703209241231282,
|
| 10 |
+
"instrucao": 3.4507700204849243,
|
| 11 |
+
"tts": 2.9180142482121787,
|
| 12 |
+
"lm": 4.465504805246989,
|
| 13 |
+
"imagem_caption": 3.996195117632548,
|
| 14 |
+
"ocr": 4.647847135861714,
|
| 15 |
+
"noticia": 4.274662892023723,
|
| 16 |
+
"asr": 3.8769996960957847,
|
| 17 |
+
"ppl_lm": 86.96491880837227
|
| 18 |
+
},
|
| 19 |
+
"eq_som": 0.36932826042175293,
|
| 20 |
+
"punicoes": 1,
|
| 21 |
+
"prs": {
|
| 22 |
+
"trust": 0.5103,
|
| 23 |
+
"tau": 3.66169,
|
| 24 |
+
"clip": 2.1597,
|
| 25 |
+
"boost": 1.0,
|
| 26 |
+
"streak": 0,
|
| 27 |
+
"ciclos_sgdr": 0,
|
| 28 |
+
"recompensa_acum": 13.62,
|
| 29 |
+
"beta_min_relativo": 0.51
|
| 30 |
+
},
|
| 31 |
+
"rpp": {
|
| 32 |
+
"rho": 1.0,
|
| 33 |
+
"streak": 3,
|
| 34 |
+
"recompensas": 4,
|
| 35 |
+
"punicoes": 1,
|
| 36 |
+
"penalidades": 62,
|
| 37 |
+
"kappa_rotas_mortas": 0.01
|
| 38 |
+
},
|
| 39 |
+
"roteador": {
|
| 40 |
+
"amostras": 31,
|
| 41 |
+
"pronto": false,
|
| 42 |
+
"lambda_rota": 0.35,
|
| 43 |
+
"gamma_empate": 0.15,
|
| 44 |
+
"drift_codebook": 0.037967,
|
| 45 |
+
"conf_media": 0.0,
|
| 46 |
+
"frac_rotas_ativas": 0.0,
|
| 47 |
+
"k": 24,
|
| 48 |
+
"taxa_ativos": 0.0417
|
| 49 |
+
},
|
| 50 |
+
"confianca": {
|
| 51 |
+
"h_ema": 0.547052800655365,
|
| 52 |
+
"ece": 0.17903225806451614,
|
| 53 |
+
"posterior": {
|
| 54 |
+
"media": 0.265625,
|
| 55 |
+
"bernstein": [
|
| 56 |
+
0.07840053060502766,
|
| 57 |
+
0.45284946939497234
|
| 58 |
+
]
|
| 59 |
+
}
|
| 60 |
+
},
|
| 61 |
+
"memoria": {
|
| 62 |
+
"slots": 13,
|
| 63 |
+
"capacidade": 64,
|
| 64 |
+
"escritas": 13,
|
| 65 |
+
"rejeitadas_confianca": 2,
|
| 66 |
+
"hit_rate": 1.0,
|
| 67 |
+
"comprimidos": 0,
|
| 68 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 69 |
+
"perda_vq": null,
|
| 70 |
+
"violacoes_contrato": 0,
|
| 71 |
+
"economia_bits_por_slot": 0.9990234375
|
| 72 |
+
},
|
| 73 |
+
"crescimento": []
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"epoca": 1,
|
| 77 |
+
"perda_media": 2.3466404776733656,
|
| 78 |
+
"avaliacao": {
|
| 79 |
+
"vqa": 1.8395737012227376,
|
| 80 |
+
"pontuacao": 2.4355540672938027,
|
| 81 |
+
"instrucao": 1.822619338830312,
|
| 82 |
+
"tts": 1.264243721961975,
|
| 83 |
+
"lm": 2.5007066329320273,
|
| 84 |
+
"imagem_caption": 1.5009089708328247,
|
| 85 |
+
"ocr": 2.4214736421902976,
|
| 86 |
+
"noticia": 2.3818585872650146,
|
| 87 |
+
"asr": 1.5970437129338582,
|
| 88 |
+
"ppl_lm": 12.191105554389843
|
| 89 |
+
},
|
| 90 |
+
"eq_som": 0.4861191213130951,
|
| 91 |
+
"punicoes": 2,
|
| 92 |
+
"prs": {
|
| 93 |
+
"trust": 0.6569,
|
| 94 |
+
"tau": 1.72318,
|
| 95 |
+
"clip": 1.47,
|
| 96 |
+
"boost": 1.0,
|
| 97 |
+
"streak": 0,
|
| 98 |
+
"ciclos_sgdr": 0,
|
| 99 |
+
"recompensa_acum": 24.726,
|
| 100 |
+
"beta_min_relativo": 0.657
|
| 101 |
+
},
|
| 102 |
+
"rpp": {
|
| 103 |
+
"rho": 1.0,
|
| 104 |
+
"streak": 0,
|
| 105 |
+
"recompensas": 0,
|
| 106 |
+
"punicoes": 2,
|
| 107 |
+
"penalidades": 156,
|
| 108 |
+
"kappa_rotas_mortas": 0.01
|
| 109 |
+
},
|
| 110 |
+
"roteador": {
|
| 111 |
+
"amostras": 78,
|
| 112 |
+
"pronto": false,
|
| 113 |
+
"lambda_rota": 0.35,
|
| 114 |
+
"gamma_empate": 0.15,
|
| 115 |
+
"drift_codebook": 0.025684,
|
| 116 |
+
"conf_media": 0.0,
|
| 117 |
+
"frac_rotas_ativas": 0.0,
|
| 118 |
+
"k": 24,
|
| 119 |
+
"taxa_ativos": 0.125
|
| 120 |
+
},
|
| 121 |
+
"confianca": {
|
| 122 |
+
"h_ema": 0.6130284667015076,
|
| 123 |
+
"ece": 0.0980769230769231,
|
| 124 |
+
"posterior": {
|
| 125 |
+
"media": 0.3987341772151899,
|
| 126 |
+
"bernstein": [
|
| 127 |
+
0.2776969264240927,
|
| 128 |
+
0.5197714280062871
|
| 129 |
+
]
|
| 130 |
+
}
|
| 131 |
+
},
|
| 132 |
+
"memoria": {
|
| 133 |
+
"slots": 32,
|
| 134 |
+
"capacidade": 64,
|
| 135 |
+
"escritas": 32,
|
| 136 |
+
"rejeitadas_confianca": 7,
|
| 137 |
+
"hit_rate": 1.0,
|
| 138 |
+
"comprimidos": 0,
|
| 139 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 140 |
+
"perda_vq": null,
|
| 141 |
+
"violacoes_contrato": 0,
|
| 142 |
+
"economia_bits_por_slot": 0.9990234375
|
| 143 |
+
},
|
| 144 |
+
"crescimento": []
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"epoca": 2,
|
| 148 |
+
"perda_media": 1.6693953000826807,
|
| 149 |
+
"avaliacao": {
|
| 150 |
+
"vqa": 1.3443108291054766,
|
| 151 |
+
"pontuacao": 2.0852841337521872,
|
| 152 |
+
"instrucao": 1.271529754002889,
|
| 153 |
+
"tts": 0.7897236148516337,
|
| 154 |
+
"lm": 2.0789873600006104,
|
| 155 |
+
"imagem_caption": 1.2406776547431946,
|
| 156 |
+
"ocr": 1.5568460822105408,
|
| 157 |
+
"noticia": 2.1105722983678183,
|
| 158 |
+
"asr": 1.8116313616434734,
|
| 159 |
+
"ppl_lm": 7.996367371565282
|
| 160 |
+
},
|
| 161 |
+
"eq_som": 0.6223484873771667,
|
| 162 |
+
"punicoes": 2,
|
| 163 |
+
"prs": {
|
| 164 |
+
"trust": 0.4435,
|
| 165 |
+
"tau": 1.40901,
|
| 166 |
+
"clip": 1.5619,
|
| 167 |
+
"boost": 1.0,
|
| 168 |
+
"streak": 0,
|
| 169 |
+
"ciclos_sgdr": 0,
|
| 170 |
+
"recompensa_acum": 7.901,
|
| 171 |
+
"beta_min_relativo": 2.0
|
| 172 |
+
},
|
| 173 |
+
"rpp": {
|
| 174 |
+
"rho": 1.0,
|
| 175 |
+
"streak": 0,
|
| 176 |
+
"recompensas": 7,
|
| 177 |
+
"punicoes": 2,
|
| 178 |
+
"penalidades": 82,
|
| 179 |
+
"kappa_rotas_mortas": 0.01
|
| 180 |
+
},
|
| 181 |
+
"roteador": {
|
| 182 |
+
"amostras": 41,
|
| 183 |
+
"pronto": false,
|
| 184 |
+
"lambda_rota": 0.35,
|
| 185 |
+
"gamma_empate": 0.15,
|
| 186 |
+
"drift_codebook": 0.064747,
|
| 187 |
+
"conf_media": 0.0,
|
| 188 |
+
"frac_rotas_ativas": 0.0,
|
| 189 |
+
"k": 24,
|
| 190 |
+
"taxa_ativos": 0.0833
|
| 191 |
+
},
|
| 192 |
+
"confianca": {
|
| 193 |
+
"h_ema": 0.47758838534355164,
|
| 194 |
+
"ece": 0.21707317073170732,
|
| 195 |
+
"posterior": {
|
| 196 |
+
"media": 0.25,
|
| 197 |
+
"bernstein": [
|
| 198 |
+
0.09315175509815321,
|
| 199 |
+
0.4068482449018468
|
| 200 |
+
]
|
| 201 |
+
}
|
| 202 |
+
},
|
| 203 |
+
"memoria": {
|
| 204 |
+
"slots": 20,
|
| 205 |
+
"capacidade": 64,
|
| 206 |
+
"escritas": 20,
|
| 207 |
+
"rejeitadas_confianca": 1,
|
| 208 |
+
"hit_rate": 1.0,
|
| 209 |
+
"comprimidos": 0,
|
| 210 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 211 |
+
"perda_vq": null,
|
| 212 |
+
"violacoes_contrato": 0,
|
| 213 |
+
"economia_bits_por_slot": 0.9990234375
|
| 214 |
+
},
|
| 215 |
+
"crescimento": []
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"epoca": 3,
|
| 219 |
+
"perda_media": 1.5524272343942098,
|
| 220 |
+
"avaliacao": {
|
| 221 |
+
"vqa": 0.9976262000078956,
|
| 222 |
+
"pontuacao": 2.2670822938283286,
|
| 223 |
+
"instrucao": 1.497376263141632,
|
| 224 |
+
"tts": 0.8285266955693563,
|
| 225 |
+
"lm": 1.974483033021291,
|
| 226 |
+
"imagem_caption": 0.990196535984675,
|
| 227 |
+
"ocr": 1.4644800623257954,
|
| 228 |
+
"noticia": 1.8103301922480266,
|
| 229 |
+
"asr": 1.073378215233485,
|
| 230 |
+
"ppl_lm": 7.202895032267454
|
| 231 |
+
},
|
| 232 |
+
"eq_som": 1.0853086709976196,
|
| 233 |
+
"punicoes": 1,
|
| 234 |
+
"prs": {
|
| 235 |
+
"trust": 0.5084,
|
| 236 |
+
"tau": 1.08152,
|
| 237 |
+
"clip": 2.9155,
|
| 238 |
+
"boost": 1.0,
|
| 239 |
+
"streak": 0,
|
| 240 |
+
"ciclos_sgdr": 0,
|
| 241 |
+
"recompensa_acum": 4.73,
|
| 242 |
+
"beta_min_relativo": 0.508
|
| 243 |
+
},
|
| 244 |
+
"rpp": {
|
| 245 |
+
"rho": 1.0,
|
| 246 |
+
"streak": 0,
|
| 247 |
+
"recompensas": 0,
|
| 248 |
+
"punicoes": 1,
|
| 249 |
+
"penalidades": 42,
|
| 250 |
+
"kappa_rotas_mortas": 0.01
|
| 251 |
+
},
|
| 252 |
+
"roteador": {
|
| 253 |
+
"amostras": 21,
|
| 254 |
+
"pronto": false,
|
| 255 |
+
"lambda_rota": 0.35,
|
| 256 |
+
"gamma_empate": 0.15,
|
| 257 |
+
"drift_codebook": 0.047657,
|
| 258 |
+
"conf_media": 0.0,
|
| 259 |
+
"frac_rotas_ativas": 0.0,
|
| 260 |
+
"k": 24,
|
| 261 |
+
"taxa_ativos": 0.0833
|
| 262 |
+
},
|
| 263 |
+
"confianca": {
|
| 264 |
+
"h_ema": 0.40000468492507935,
|
| 265 |
+
"ece": 0.1880952380952381,
|
| 266 |
+
"posterior": {
|
| 267 |
+
"media": 0.3181818181818182,
|
| 268 |
+
"bernstein": [
|
| 269 |
+
0.07369567501901159,
|
| 270 |
+
0.5626679613446248
|
| 271 |
+
]
|
| 272 |
+
}
|
| 273 |
+
},
|
| 274 |
+
"memoria": {
|
| 275 |
+
"slots": 9,
|
| 276 |
+
"capacidade": 64,
|
| 277 |
+
"escritas": 9,
|
| 278 |
+
"rejeitadas_confianca": 2,
|
| 279 |
+
"hit_rate": 1.0,
|
| 280 |
+
"comprimidos": 0,
|
| 281 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 282 |
+
"perda_vq": null,
|
| 283 |
+
"violacoes_contrato": 0,
|
| 284 |
+
"economia_bits_por_slot": 0.9990234375
|
| 285 |
+
},
|
| 286 |
+
"crescimento": []
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"epoca": 4,
|
| 290 |
+
"perda_media": 1.2693217934346666,
|
| 291 |
+
"avaliacao": {
|
| 292 |
+
"vqa": 0.5887098889797926,
|
| 293 |
+
"pontuacao": 1.589081346988678,
|
| 294 |
+
"instrucao": 1.3105384310086567,
|
| 295 |
+
"tts": 0.7606323560078939,
|
| 296 |
+
"lm": 1.710551341374715,
|
| 297 |
+
"imagem_caption": 1.0957319140434265,
|
| 298 |
+
"ocr": 1.449312557776769,
|
| 299 |
+
"noticia": 1.4159709413846333,
|
| 300 |
+
"asr": 0.6667574544747671,
|
| 301 |
+
"ppl_lm": 5.532010663339706
|
| 302 |
+
},
|
| 303 |
+
"eq_som": 1.207082748413086,
|
| 304 |
+
"punicoes": 1,
|
| 305 |
+
"prs": {
|
| 306 |
+
"trust": 0.4126,
|
| 307 |
+
"tau": 1.02858,
|
| 308 |
+
"clip": 3.0424,
|
| 309 |
+
"boost": 1.0,
|
| 310 |
+
"streak": 1,
|
| 311 |
+
"ciclos_sgdr": 0,
|
| 312 |
+
"recompensa_acum": 2.443,
|
| 313 |
+
"beta_min_relativo": 2.0
|
| 314 |
+
},
|
| 315 |
+
"rpp": {
|
| 316 |
+
"rho": 1.0,
|
| 317 |
+
"streak": 0,
|
| 318 |
+
"recompensas": 0,
|
| 319 |
+
"punicoes": 1,
|
| 320 |
+
"penalidades": 51,
|
| 321 |
+
"kappa_rotas_mortas": 0.01
|
| 322 |
+
},
|
| 323 |
+
"roteador": {
|
| 324 |
+
"amostras": 25,
|
| 325 |
+
"pronto": false,
|
| 326 |
+
"lambda_rota": 0.35,
|
| 327 |
+
"gamma_empate": 0.15,
|
| 328 |
+
"drift_codebook": 0.048059,
|
| 329 |
+
"conf_media": 0.0,
|
| 330 |
+
"frac_rotas_ativas": 0.0,
|
| 331 |
+
"k": 24,
|
| 332 |
+
"taxa_ativos": 0.0833
|
| 333 |
+
},
|
| 334 |
+
"confianca": {
|
| 335 |
+
"h_ema": 0.537382185459137,
|
| 336 |
+
"ece": 0.3323529411764706,
|
| 337 |
+
"posterior": {
|
| 338 |
+
"media": 0.20754716981132076,
|
| 339 |
+
"bernstein": [
|
| 340 |
+
0.011243120890551794,
|
| 341 |
+
0.40385121873208973
|
| 342 |
+
]
|
| 343 |
+
}
|
| 344 |
+
},
|
| 345 |
+
"memoria": {
|
| 346 |
+
"slots": 12,
|
| 347 |
+
"capacidade": 64,
|
| 348 |
+
"escritas": 12,
|
| 349 |
+
"rejeitadas_confianca": 0,
|
| 350 |
+
"hit_rate": 1.0,
|
| 351 |
+
"comprimidos": 0,
|
| 352 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 353 |
+
"perda_vq": null,
|
| 354 |
+
"violacoes_contrato": 0,
|
| 355 |
+
"economia_bits_por_slot": 0.9990234375
|
| 356 |
+
},
|
| 357 |
+
"crescimento": []
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"epoca": 5,
|
| 361 |
+
"perda_media": 0.7750449650562726,
|
| 362 |
+
"avaliacao": {
|
| 363 |
+
"vqa": 0.9063933277502656,
|
| 364 |
+
"pontuacao": 1.4501224358876545,
|
| 365 |
+
"instrucao": 0.7889794806639353,
|
| 366 |
+
"tts": 0.3883643498023351,
|
| 367 |
+
"lm": 1.2960881392161052,
|
| 368 |
+
"imagem_caption": 0.7479779322942098,
|
| 369 |
+
"ocr": 0.7324983477592468,
|
| 370 |
+
"noticia": 1.0415530602137248,
|
| 371 |
+
"asr": 0.8151110112667084,
|
| 372 |
+
"ppl_lm": 3.654970928298116
|
| 373 |
+
},
|
| 374 |
+
"eq_som": 1.4544166326522827,
|
| 375 |
+
"punicoes": 1,
|
| 376 |
+
"prs": {
|
| 377 |
+
"trust": 0.4786,
|
| 378 |
+
"tau": 0.63964,
|
| 379 |
+
"clip": 3.0977,
|
| 380 |
+
"boost": 1.0,
|
| 381 |
+
"streak": 0,
|
| 382 |
+
"ciclos_sgdr": 0,
|
| 383 |
+
"recompensa_acum": 1.173,
|
| 384 |
+
"beta_min_relativo": 2.0
|
| 385 |
+
},
|
| 386 |
+
"rpp": {
|
| 387 |
+
"rho": 1.0,
|
| 388 |
+
"streak": 0,
|
| 389 |
+
"recompensas": 0,
|
| 390 |
+
"punicoes": 1,
|
| 391 |
+
"penalidades": 13,
|
| 392 |
+
"kappa_rotas_mortas": 0.01
|
| 393 |
+
},
|
| 394 |
+
"roteador": {
|
| 395 |
+
"amostras": 7,
|
| 396 |
+
"pronto": false,
|
| 397 |
+
"lambda_rota": 0.35,
|
| 398 |
+
"gamma_empate": 0.15,
|
| 399 |
+
"drift_codebook": 0.201574,
|
| 400 |
+
"conf_media": 0.0,
|
| 401 |
+
"frac_rotas_ativas": 0.0,
|
| 402 |
+
"k": 24,
|
| 403 |
+
"taxa_ativos": 0.0417
|
| 404 |
+
},
|
| 405 |
+
"confianca": {
|
| 406 |
+
"h_ema": 0.5515400171279907,
|
| 407 |
+
"ece": 0.35769230769230775,
|
| 408 |
+
"posterior": {
|
| 409 |
+
"media": 0.26666666666666666,
|
| 410 |
+
"bernstein": [
|
| 411 |
+
0.0,
|
| 412 |
+
0.7309044082889249
|
| 413 |
+
]
|
| 414 |
+
}
|
| 415 |
+
},
|
| 416 |
+
"memoria": {
|
| 417 |
+
"slots": 3,
|
| 418 |
+
"capacidade": 64,
|
| 419 |
+
"escritas": 3,
|
| 420 |
+
"rejeitadas_confianca": 0,
|
| 421 |
+
"hit_rate": 0.0,
|
| 422 |
+
"comprimidos": 0,
|
| 423 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 424 |
+
"perda_vq": null,
|
| 425 |
+
"violacoes_contrato": 0,
|
| 426 |
+
"economia_bits_por_slot": 0.9990234375
|
| 427 |
+
},
|
| 428 |
+
"crescimento": []
|
| 429 |
+
},
|
| 430 |
+
{
|
| 431 |
+
"epoca": 6,
|
| 432 |
+
"perda_media": 1.0840193612140514,
|
| 433 |
+
"avaliacao": {
|
| 434 |
+
"vqa": 1.1599811613559723,
|
| 435 |
+
"pontuacao": 1.7141765753428142,
|
| 436 |
+
"instrucao": 0.6973811089992523,
|
| 437 |
+
"tts": 0.3577762929101785,
|
| 438 |
+
"lm": 1.0585092703501384,
|
| 439 |
+
"imagem_caption": 0.9011444797118505,
|
| 440 |
+
"ocr": 0.8790956487258276,
|
| 441 |
+
"noticia": 1.30248228708903,
|
| 442 |
+
"asr": 0.6200432727734247,
|
| 443 |
+
"ppl_lm": 2.8820713960155677
|
| 444 |
+
},
|
| 445 |
+
"eq_som": 2.1160027980804443,
|
| 446 |
+
"punicoes": 2,
|
| 447 |
+
"prs": {
|
| 448 |
+
"trust": 0.4904,
|
| 449 |
+
"tau": 0.81351,
|
| 450 |
+
"clip": 3.9892,
|
| 451 |
+
"boost": 1.0,
|
| 452 |
+
"streak": 1,
|
| 453 |
+
"ciclos_sgdr": 0,
|
| 454 |
+
"recompensa_acum": 9.319,
|
| 455 |
+
"beta_min_relativo": 2.0
|
| 456 |
+
},
|
| 457 |
+
"rpp": {
|
| 458 |
+
"rho": 1.0,
|
| 459 |
+
"streak": 0,
|
| 460 |
+
"recompensas": 0,
|
| 461 |
+
"punicoes": 2,
|
| 462 |
+
"penalidades": 93,
|
| 463 |
+
"kappa_rotas_mortas": 0.01
|
| 464 |
+
},
|
| 465 |
+
"roteador": {
|
| 466 |
+
"amostras": 46,
|
| 467 |
+
"pronto": false,
|
| 468 |
+
"lambda_rota": 0.35,
|
| 469 |
+
"gamma_empate": 0.15,
|
| 470 |
+
"drift_codebook": 0.039656,
|
| 471 |
+
"conf_media": 0.0,
|
| 472 |
+
"frac_rotas_ativas": 0.0,
|
| 473 |
+
"k": 24,
|
| 474 |
+
"taxa_ativos": 0.0833
|
| 475 |
+
},
|
| 476 |
+
"confianca": {
|
| 477 |
+
"h_ema": 0.6436170339584351,
|
| 478 |
+
"ece": 0.28118279569892474,
|
| 479 |
+
"posterior": {
|
| 480 |
+
"media": 0.29473684210526313,
|
| 481 |
+
"bernstein": [
|
| 482 |
+
0.14245801568228403,
|
| 483 |
+
0.44701566852824226
|
| 484 |
+
]
|
| 485 |
+
}
|
| 486 |
+
},
|
| 487 |
+
"memoria": {
|
| 488 |
+
"slots": 23,
|
| 489 |
+
"capacidade": 64,
|
| 490 |
+
"escritas": 23,
|
| 491 |
+
"rejeitadas_confianca": 0,
|
| 492 |
+
"hit_rate": 1.0,
|
| 493 |
+
"comprimidos": 0,
|
| 494 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 495 |
+
"perda_vq": null,
|
| 496 |
+
"violacoes_contrato": 0,
|
| 497 |
+
"economia_bits_por_slot": 0.9990234375
|
| 498 |
+
},
|
| 499 |
+
"crescimento": []
|
| 500 |
+
},
|
| 501 |
+
{
|
| 502 |
+
"epoca": 7,
|
| 503 |
+
"perda_media": 0.8830587758666997,
|
| 504 |
+
"avaliacao": {
|
| 505 |
+
"vqa": 0.33320298736604553,
|
| 506 |
+
"pontuacao": 1.1350595752398174,
|
| 507 |
+
"instrucao": 0.6480874270200729,
|
| 508 |
+
"tts": 0.2603626859684785,
|
| 509 |
+
"lm": 1.0871877074241638,
|
| 510 |
+
"imagem_caption": 1.0802519619464874,
|
| 511 |
+
"ocr": 1.585157702366511,
|
| 512 |
+
"noticia": 1.044169306755066,
|
| 513 |
+
"asr": 0.6396586547295252,
|
| 514 |
+
"ppl_lm": 2.965921294403466
|
| 515 |
+
},
|
| 516 |
+
"eq_som": 3.0214385986328125,
|
| 517 |
+
"punicoes": 2,
|
| 518 |
+
"prs": {
|
| 519 |
+
"trust": 0.4716,
|
| 520 |
+
"tau": 0.65934,
|
| 521 |
+
"clip": 3.3765,
|
| 522 |
+
"boost": 1.0,
|
| 523 |
+
"streak": 0,
|
| 524 |
+
"ciclos_sgdr": 0,
|
| 525 |
+
"recompensa_acum": 8.284,
|
| 526 |
+
"beta_min_relativo": 2.0
|
| 527 |
+
},
|
| 528 |
+
"rpp": {
|
| 529 |
+
"rho": 1.0,
|
| 530 |
+
"streak": 0,
|
| 531 |
+
"recompensas": 0,
|
| 532 |
+
"punicoes": 2,
|
| 533 |
+
"penalidades": 104,
|
| 534 |
+
"kappa_rotas_mortas": 0.01
|
| 535 |
+
},
|
| 536 |
+
"roteador": {
|
| 537 |
+
"amostras": 52,
|
| 538 |
+
"pronto": false,
|
| 539 |
+
"lambda_rota": 0.35,
|
| 540 |
+
"gamma_empate": 0.15,
|
| 541 |
+
"drift_codebook": 0.053734,
|
| 542 |
+
"conf_media": 0.0,
|
| 543 |
+
"frac_rotas_ativas": 0.0,
|
| 544 |
+
"k": 24,
|
| 545 |
+
"taxa_ativos": 0.0833
|
| 546 |
+
},
|
| 547 |
+
"confianca": {
|
| 548 |
+
"h_ema": 0.6571428775787354,
|
| 549 |
+
"ece": 0.3182692307692308,
|
| 550 |
+
"posterior": {
|
| 551 |
+
"media": 0.3113207547169811,
|
| 552 |
+
"bernstein": [
|
| 553 |
+
0.16653444973960027,
|
| 554 |
+
0.45610705969436194
|
| 555 |
+
]
|
| 556 |
+
}
|
| 557 |
+
},
|
| 558 |
+
"memoria": {
|
| 559 |
+
"slots": 26,
|
| 560 |
+
"capacidade": 64,
|
| 561 |
+
"escritas": 26,
|
| 562 |
+
"rejeitadas_confianca": 0,
|
| 563 |
+
"hit_rate": 1.0,
|
| 564 |
+
"comprimidos": 0,
|
| 565 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 566 |
+
"perda_vq": null,
|
| 567 |
+
"violacoes_contrato": 0,
|
| 568 |
+
"economia_bits_por_slot": 0.9990234375
|
| 569 |
+
},
|
| 570 |
+
"crescimento": []
|
| 571 |
+
}
|
| 572 |
+
],
|
| 573 |
+
"passos": 3192,
|
| 574 |
+
"punicoes": 2,
|
| 575 |
+
"barreira_abmo_ativacoes": 0,
|
| 576 |
+
"pcgrad_ultimo": {
|
| 577 |
+
"pcgrad/dot": 6.773554791967499,
|
| 578 |
+
"pcgrad/projetado": 0.0,
|
| 579 |
+
"pcgrad/fator": 0.0
|
| 580 |
+
},
|
| 581 |
+
"prs_v8": {
|
| 582 |
+
"trust": 0.4716,
|
| 583 |
+
"tau": 0.65934,
|
| 584 |
+
"clip": 3.3765,
|
| 585 |
+
"boost": 1.0,
|
| 586 |
+
"streak": 0,
|
| 587 |
+
"ciclos_sgdr": 0,
|
| 588 |
+
"recompensa_acum": 8.284,
|
| 589 |
+
"beta_min_relativo": 2.0
|
| 590 |
+
},
|
| 591 |
+
"confianca": {
|
| 592 |
+
"h_ema": 0.6571428775787354,
|
| 593 |
+
"ece": 0.3182692307692308,
|
| 594 |
+
"posterior_media": 0.3113207547169811,
|
| 595 |
+
"bernstein": [
|
| 596 |
+
0.16653444973960027,
|
| 597 |
+
0.45610705969436194
|
| 598 |
+
]
|
| 599 |
+
},
|
| 600 |
+
"memoria": {
|
| 601 |
+
"slots": 26,
|
| 602 |
+
"capacidade": 64,
|
| 603 |
+
"escritas": 26,
|
| 604 |
+
"rejeitadas_confianca": 0,
|
| 605 |
+
"hit_rate": 1.0,
|
| 606 |
+
"comprimidos": 0,
|
| 607 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 608 |
+
"perda_vq": null,
|
| 609 |
+
"violacoes_contrato": 0,
|
| 610 |
+
"economia_bits_por_slot": 0.9990234375
|
| 611 |
+
},
|
| 612 |
+
"crescimento": [],
|
| 613 |
+
"microunidades": [
|
| 614 |
+
{
|
| 615 |
+
"ramos": [
|
| 616 |
+
"conv_dil",
|
| 617 |
+
"gru",
|
| 618 |
+
"mlp"
|
| 619 |
+
],
|
| 620 |
+
"ativos": [
|
| 621 |
+
1.0,
|
| 622 |
+
1.0,
|
| 623 |
+
1.0
|
| 624 |
+
],
|
| 625 |
+
"uso_ema": [
|
| 626 |
+
0.11339543014764786,
|
| 627 |
+
0.2821197211742401,
|
| 628 |
+
0.6044845581054688
|
| 629 |
+
],
|
| 630 |
+
"passos_rec": 2
|
| 631 |
+
},
|
| 632 |
+
{
|
| 633 |
+
"ramos": [
|
| 634 |
+
"conv_dil",
|
| 635 |
+
"gru",
|
| 636 |
+
"mlp",
|
| 637 |
+
"moe"
|
| 638 |
+
],
|
| 639 |
+
"ativos": [
|
| 640 |
+
1.0,
|
| 641 |
+
1.0,
|
| 642 |
+
1.0,
|
| 643 |
+
1.0
|
| 644 |
+
],
|
| 645 |
+
"uso_ema": [
|
| 646 |
+
0.4623371362686157,
|
| 647 |
+
0.23822982609272003,
|
| 648 |
+
0.11237825453281403,
|
| 649 |
+
0.18705463409423828
|
| 650 |
+
],
|
| 651 |
+
"passos_rec": 2
|
| 652 |
+
},
|
| 653 |
+
{
|
| 654 |
+
"ramos": [
|
| 655 |
+
"conv_dil",
|
| 656 |
+
"gru",
|
| 657 |
+
"mlp",
|
| 658 |
+
"moe"
|
| 659 |
+
],
|
| 660 |
+
"ativos": [
|
| 661 |
+
1.0,
|
| 662 |
+
1.0,
|
| 663 |
+
1.0,
|
| 664 |
+
1.0
|
| 665 |
+
],
|
| 666 |
+
"uso_ema": [
|
| 667 |
+
0.6023621559143066,
|
| 668 |
+
0.11406103521585464,
|
| 669 |
+
0.15544579923152924,
|
| 670 |
+
0.1281307488679886
|
| 671 |
+
],
|
| 672 |
+
"passos_rec": 2
|
| 673 |
+
}
|
| 674 |
+
],
|
| 675 |
+
"dpo": {
|
| 676 |
+
"passos": 92,
|
| 677 |
+
"acc_final": 0.75,
|
| 678 |
+
"margem_final": 16.59418487548828,
|
| 679 |
+
"beta_final": 0.05000000074505806
|
| 680 |
+
},
|
| 681 |
+
"som": {
|
| 682 |
+
"variante_ativa": "cpn",
|
| 683 |
+
"variantes": {
|
| 684 |
+
"som": {
|
| 685 |
+
"k": 24,
|
| 686 |
+
"taxa_ativos": 1.0,
|
| 687 |
+
"resemeados": 24,
|
| 688 |
+
"usos": 256,
|
| 689 |
+
"atingiu_alvo": true
|
| 690 |
+
},
|
| 691 |
+
"gg": {
|
| 692 |
+
"k": 4,
|
| 693 |
+
"taxa_ativos": 1.0,
|
| 694 |
+
"resemeados": 4,
|
| 695 |
+
"usos": 256,
|
| 696 |
+
"atingiu_alvo": true
|
| 697 |
+
},
|
| 698 |
+
"gcs": {
|
| 699 |
+
"k": 3,
|
| 700 |
+
"arestas": 3,
|
| 701 |
+
"eq_treino": 70590.09375,
|
| 702 |
+
"atingiu_alvo": true
|
| 703 |
+
},
|
| 704 |
+
"gsom": {
|
| 705 |
+
"k": 33,
|
| 706 |
+
"gt": 1.05,
|
| 707 |
+
"erro_medio": 0.0,
|
| 708 |
+
"atingiu_alvo": true
|
| 709 |
+
},
|
| 710 |
+
"hsom": {},
|
| 711 |
+
"tkm": {
|
| 712 |
+
"k": 32,
|
| 713 |
+
"taxa_ativos": 1.0,
|
| 714 |
+
"resemeados": 32,
|
| 715 |
+
"usos": 256,
|
| 716 |
+
"atingiu_alvo": true
|
| 717 |
+
},
|
| 718 |
+
"rsom": {
|
| 719 |
+
"k": 32,
|
| 720 |
+
"taxa_ativos": 1.0,
|
| 721 |
+
"resemeados": 32,
|
| 722 |
+
"usos": 256,
|
| 723 |
+
"atingiu_alvo": true
|
| 724 |
+
},
|
| 725 |
+
"cpn": {},
|
| 726 |
+
"ssom": {
|
| 727 |
+
"erro": "IndexError: index 8 is out of bounds for dimension 0 with size 8"
|
| 728 |
+
}
|
| 729 |
+
},
|
| 730 |
+
"roteador": {
|
| 731 |
+
"amostras": 1588,
|
| 732 |
+
"pronto": true,
|
| 733 |
+
"lambda_rota": 0.35,
|
| 734 |
+
"gamma_empate": 0.15,
|
| 735 |
+
"drift_codebook": 0.053734,
|
| 736 |
+
"conf_media": 0.4029,
|
| 737 |
+
"frac_rotas_ativas": 0.5938,
|
| 738 |
+
"k": 24,
|
| 739 |
+
"taxa_ativos": 1.0
|
| 740 |
+
},
|
| 741 |
+
"invariante_sem_orfaos": true,
|
| 742 |
+
"orfaos_por_variante": {
|
| 743 |
+
"som": {
|
| 744 |
+
"orfaos": 0,
|
| 745 |
+
"relocados": 0,
|
| 746 |
+
"taxa_ativos": 1.0
|
| 747 |
+
},
|
| 748 |
+
"gg": {
|
| 749 |
+
"orfaos": 0,
|
| 750 |
+
"relocados": 0,
|
| 751 |
+
"taxa_ativos": 1.0
|
| 752 |
+
},
|
| 753 |
+
"gcs": {
|
| 754 |
+
"orfaos": 0,
|
| 755 |
+
"relocados": 0,
|
| 756 |
+
"taxa_ativos": 1.0
|
| 757 |
+
},
|
| 758 |
+
"gsom": {
|
| 759 |
+
"orfaos": 0,
|
| 760 |
+
"relocados": 0,
|
| 761 |
+
"taxa_ativos": 1.0
|
| 762 |
+
},
|
| 763 |
+
"hsom": {
|
| 764 |
+
"orfaos": 0,
|
| 765 |
+
"relocados": 0
|
| 766 |
+
},
|
| 767 |
+
"tkm": {
|
| 768 |
+
"orfaos": 0,
|
| 769 |
+
"relocados": 0,
|
| 770 |
+
"taxa_ativos": 1.0
|
| 771 |
+
},
|
| 772 |
+
"rsom": {
|
| 773 |
+
"orfaos": 0,
|
| 774 |
+
"relocados": 0,
|
| 775 |
+
"taxa_ativos": 1.0
|
| 776 |
+
},
|
| 777 |
+
"cpn": {
|
| 778 |
+
"orfaos": 0,
|
| 779 |
+
"relocados": 0,
|
| 780 |
+
"taxa_ativos": 1.0
|
| 781 |
+
},
|
| 782 |
+
"ssom": {
|
| 783 |
+
"orfaos": 0,
|
| 784 |
+
"relocados": 23,
|
| 785 |
+
"taxa_ativos": 1.0
|
| 786 |
+
}
|
| 787 |
+
}
|
| 788 |
+
},
|
| 789 |
+
"avaliacao_final": {
|
| 790 |
+
"vqa": 1.9003024697303772,
|
| 791 |
+
"pontuacao": 2.7808186411857605,
|
| 792 |
+
"instrucao": 1.9354261755943298,
|
| 793 |
+
"tts": 1.8977428078651428,
|
| 794 |
+
"lm": 2.717095136642456,
|
| 795 |
+
"imagem_caption": 2.3393216133117676,
|
| 796 |
+
"ocr": 2.880362868309021,
|
| 797 |
+
"noticia": 2.6000683307647705,
|
| 798 |
+
"asr": 2.036989539861679,
|
| 799 |
+
"ppl_lm": 15.136289468671222
|
| 800 |
+
},
|
| 801 |
+
"metricas_completas": {
|
| 802 |
+
"neuronios_ativos": {
|
| 803 |
+
"ativos/som": 1.0,
|
| 804 |
+
"k/som": 24,
|
| 805 |
+
"ativos/gg": 1.0,
|
| 806 |
+
"k/gg": 4,
|
| 807 |
+
"ativos/gcs": 1.0,
|
| 808 |
+
"k/gcs": 3,
|
| 809 |
+
"ativos/gsom": 1.0,
|
| 810 |
+
"k/gsom": 33,
|
| 811 |
+
"ativos/hsom": 1.0,
|
| 812 |
+
"k/hsom": 12,
|
| 813 |
+
"ativos/tkm": 1.0,
|
| 814 |
+
"k/tkm": 32,
|
| 815 |
+
"ativos/rsom": 1.0,
|
| 816 |
+
"k/rsom": 32,
|
| 817 |
+
"ativos/cpn": 1.0,
|
| 818 |
+
"k/cpn": 24,
|
| 819 |
+
"ativos/ssom": 1.0,
|
| 820 |
+
"k/ssom": 24,
|
| 821 |
+
"A_global": 1.0
|
| 822 |
+
},
|
| 823 |
+
"estruturais": {
|
| 824 |
+
"ortogonalidade": 8.344650268554688e-07,
|
| 825 |
+
"balanceamento_moe": 0.0,
|
| 826 |
+
"gate_global": 0.33352139592170715,
|
| 827 |
+
"gate_janela": 0.3531237244606018,
|
| 828 |
+
"gate_linear": 0.31335487961769104,
|
| 829 |
+
"moe1/experts_ativos": 6.0,
|
| 830 |
+
"moe1/uso_max": 0.18867573142051697,
|
| 831 |
+
"moe1/perda_lb": 0.05620919540524483,
|
| 832 |
+
"moe1/perda_ort": 0.04630301520228386,
|
| 833 |
+
"moe1/fase": 0.0,
|
| 834 |
+
"moe1/beta_feedback": 0.0,
|
| 835 |
+
"moe1/entropia_atn": 0.0,
|
| 836 |
+
"moe2/experts_ativos": 6.0,
|
| 837 |
+
"moe2/uso_max": 0.1919080913066864,
|
| 838 |
+
"moe2/perda_lb": 0.05697876214981079,
|
| 839 |
+
"moe2/perda_ort": 0.017570793628692627,
|
| 840 |
+
"moe2/fase": 0.0,
|
| 841 |
+
"moe2/beta_feedback": -0.08475486189126968,
|
| 842 |
+
"moe2/entropia_atn": 0.5860676169395447,
|
| 843 |
+
"moe2/alpha_refino": -0.004548724740743637,
|
| 844 |
+
"mtp/alpha0": 0.9997836947441101,
|
| 845 |
+
"mtp/alpha1": 0.00021627375099342316,
|
| 846 |
+
"mtp/termos_ce": 44.0,
|
| 847 |
+
"micra0/n_ramos": 3,
|
| 848 |
+
"micra0/ramos_ativos": 3,
|
| 849 |
+
"micra0/passos_rec": 2,
|
| 850 |
+
"micra0/alpha0": 0.1318451315164566,
|
| 851 |
+
"micra0/alpha1": 0.3106174170970917,
|
| 852 |
+
"micra0/alpha2": 0.5575374364852905,
|
| 853 |
+
"micra0/uso0": 0.11339543014764786,
|
| 854 |
+
"micra0/uso1": 0.2821197211742401,
|
| 855 |
+
"micra0/uso2": 0.6044845581054688,
|
| 856 |
+
"micra1/n_ramos": 4,
|
| 857 |
+
"micra1/ramos_ativos": 4,
|
| 858 |
+
"micra1/passos_rec": 2,
|
| 859 |
+
"micra1/alpha0": 0.6494265198707581,
|
| 860 |
+
"micra1/alpha1": 0.20311686396598816,
|
| 861 |
+
"micra1/alpha2": 0.023890359327197075,
|
| 862 |
+
"micra1/alpha3": 0.12356625497341156,
|
| 863 |
+
"micra1/uso0": 0.4623371362686157,
|
| 864 |
+
"micra1/uso1": 0.23822982609272003,
|
| 865 |
+
"micra1/uso2": 0.11237825453281403,
|
| 866 |
+
"micra1/uso3": 0.18705463409423828,
|
| 867 |
+
"micra2/n_ramos": 4,
|
| 868 |
+
"micra2/ramos_ativos": 4,
|
| 869 |
+
"micra2/passos_rec": 2,
|
| 870 |
+
"micra2/alpha0": 0.9809788465499878,
|
| 871 |
+
"micra2/alpha1": 0.01534233894199133,
|
| 872 |
+
"micra2/alpha2": 0.0006197995971888304,
|
| 873 |
+
"micra2/alpha3": 0.0030591192189604044,
|
| 874 |
+
"micra2/uso0": 0.6023621559143066,
|
| 875 |
+
"micra2/uso1": 0.11406103521585464,
|
| 876 |
+
"micra2/uso2": 0.15544579923152924,
|
| 877 |
+
"micra2/uso3": 0.1281307488679886,
|
| 878 |
+
"nlp/gate_medio": 0.444911390542984,
|
| 879 |
+
"nlp/intencao_id": 6,
|
| 880 |
+
"nlg/coerencia_bigramas_vistos": 0.0,
|
| 881 |
+
"nlg/estilo_medio": 0.5,
|
| 882 |
+
"nlg/estilo_disp": 0.0,
|
| 883 |
+
"janela1m/n_segmentos": 0,
|
| 884 |
+
"janela1m/m_max": 7813,
|
| 885 |
+
"janela1m/hit_celula": 0.0,
|
| 886 |
+
"janela1m/consultas": 0,
|
| 887 |
+
"computo/computo_C": 0.177,
|
| 888 |
+
"computo/nucleos": 2,
|
| 889 |
+
"computo/ram_livre_mb": 1246.5,
|
| 890 |
+
"computo/n_ramos": 2,
|
| 891 |
+
"computo/d_ramo": 64,
|
| 892 |
+
"computo/k_rec": 1,
|
| 893 |
+
"mtp/rascunho_pronto": 1.0,
|
| 894 |
+
"roteador/amostras": 1588,
|
| 895 |
+
"roteador/pronto": 1.0,
|
| 896 |
+
"roteador/frac_rotas": 0.0,
|
| 897 |
+
"roteador/conf_media": 0.2593,
|
| 898 |
+
"roteador/drift": 0.053734
|
| 899 |
+
},
|
| 900 |
+
"escala": {
|
| 901 |
+
"computo_C": 0.177,
|
| 902 |
+
"nucleos": 2,
|
| 903 |
+
"ram_livre_mb": 1246.5,
|
| 904 |
+
"n_ramos": 2,
|
| 905 |
+
"d_ramo": 64,
|
| 906 |
+
"k_rec": 1
|
| 907 |
+
},
|
| 908 |
+
"regime": {
|
| 909 |
+
"fase_final": "B",
|
| 910 |
+
"alvo_ativos": 0.9
|
| 911 |
+
}
|
| 912 |
+
},
|
| 913 |
+
"rpp": {
|
| 914 |
+
"rho": 1.0,
|
| 915 |
+
"streak": 0,
|
| 916 |
+
"recompensas": 0,
|
| 917 |
+
"punicoes": 2,
|
| 918 |
+
"penalidades": 104,
|
| 919 |
+
"kappa_rotas_mortas": 0.01
|
| 920 |
+
},
|
| 921 |
+
"roteador_ssom": {
|
| 922 |
+
"amostras": 1588,
|
| 923 |
+
"pronto": true,
|
| 924 |
+
"lambda_rota": 0.35,
|
| 925 |
+
"gamma_empate": 0.15,
|
| 926 |
+
"drift_codebook": 0.053734,
|
| 927 |
+
"conf_media": 0.2593,
|
| 928 |
+
"frac_rotas_ativas": 0.0,
|
| 929 |
+
"k": 24,
|
| 930 |
+
"taxa_ativos": 1.0
|
| 931 |
+
},
|
| 932 |
+
"inferencia_agente": {
|
| 933 |
+
"latencia_s": 0.459,
|
| 934 |
+
"tokens": 24,
|
| 935 |
+
"taxa_repeticao": 0.6667,
|
| 936 |
+
"coerencia_bigramas": 0.0
|
| 937 |
+
},
|
| 938 |
+
"difusao": null,
|
| 939 |
+
"agente_engenheiro": {
|
| 940 |
+
"aprovadas": 0,
|
| 941 |
+
"bloqueadas": 0,
|
| 942 |
+
"invariante_sem_orfaos": true
|
| 943 |
+
},
|
| 944 |
+
"checkpoints_eventos": [
|
| 945 |
+
"checkpoint epoca-007-p03088: 435 tensores, 23 pulados, 94 novos",
|
| 946 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 947 |
+
"checkpoint epoca-007-p03150: local (59.2 MB)",
|
| 948 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 949 |
+
"checkpoint epoca-007: local (59.2 MB)",
|
| 950 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 951 |
+
"checkpoint fase-dpo: local (59.2 MB)",
|
| 952 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 953 |
+
"checkpoint fase-som: local (59.2 MB)"
|
| 954 |
+
],
|
| 955 |
+
"ram": {
|
| 956 |
+
"amostras": 6059,
|
| 957 |
+
"rss_min_mb": 542.6,
|
| 958 |
+
"rss_med_mb": 2692.2,
|
| 959 |
+
"rss_max_mb": 3579.5,
|
| 960 |
+
"disponivel_min_mb": 138.6,
|
| 961 |
+
"duracao_s": 12836.7
|
| 962 |
+
}
|
| 963 |
+
}
|
resumo_treino_v8.json
ADDED
|
@@ -0,0 +1,974 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"versao": "v8-khtst-melhorias-a-j",
|
| 3 |
+
"teto_horas": 5.0,
|
| 4 |
+
"tempo_acumulado_h": 3.98,
|
| 5 |
+
"memoria_v8": {
|
| 6 |
+
"rss_mb": 2808.0,
|
| 7 |
+
"pico_rss_mb": 2901.1,
|
| 8 |
+
"limiar_mb": 3535.6,
|
| 9 |
+
"alpha": 0.85,
|
| 10 |
+
"limpezas": 0,
|
| 11 |
+
"observacoes": 90
|
| 12 |
+
},
|
| 13 |
+
"autoajuste_v8": null,
|
| 14 |
+
"epocas": [
|
| 15 |
+
{
|
| 16 |
+
"epoca": 0,
|
| 17 |
+
"perda_media": 7.563339779175908,
|
| 18 |
+
"avaliacao": {
|
| 19 |
+
"vqa": 7.203276952107747,
|
| 20 |
+
"pontuacao": 7.940507570902507,
|
| 21 |
+
"instrucao": 7.06501563390096,
|
| 22 |
+
"tts": 6.899012962977092,
|
| 23 |
+
"lm": 8.063114325205484,
|
| 24 |
+
"imagem_caption": 6.979289611180623,
|
| 25 |
+
"ocr": 8.369198322296143,
|
| 26 |
+
"noticia": 7.745315869649251,
|
| 27 |
+
"asr": 7.773949146270752,
|
| 28 |
+
"ppl_lm": 3175.163243261297
|
| 29 |
+
},
|
| 30 |
+
"eq_som": 0.3644367456436157,
|
| 31 |
+
"punicoes": 2,
|
| 32 |
+
"prs": {
|
| 33 |
+
"trust": 0.5754,
|
| 34 |
+
"tau": 7.08859,
|
| 35 |
+
"clip": 2.2575,
|
| 36 |
+
"boost": 1.0,
|
| 37 |
+
"streak": 0,
|
| 38 |
+
"ciclos_sgdr": 0,
|
| 39 |
+
"recompensa_acum": 15.603,
|
| 40 |
+
"beta_min_relativo": 0.575
|
| 41 |
+
},
|
| 42 |
+
"rpp": {
|
| 43 |
+
"rho": 1.0,
|
| 44 |
+
"streak": 0,
|
| 45 |
+
"recompensas": 14,
|
| 46 |
+
"punicoes": 2,
|
| 47 |
+
"penalidades": 83,
|
| 48 |
+
"kappa_rotas_mortas": 0.01
|
| 49 |
+
},
|
| 50 |
+
"roteador": {
|
| 51 |
+
"amostras": 41,
|
| 52 |
+
"pronto": false,
|
| 53 |
+
"lambda_rota": 0.35,
|
| 54 |
+
"gamma_empate": 0.15,
|
| 55 |
+
"drift_codebook": 0.017941,
|
| 56 |
+
"conf_media": 0.0,
|
| 57 |
+
"frac_rotas_ativas": 0.0,
|
| 58 |
+
"k": 24,
|
| 59 |
+
"taxa_ativos": 0.0417
|
| 60 |
+
},
|
| 61 |
+
"confianca": {
|
| 62 |
+
"h_ema": 0.1964285671710968,
|
| 63 |
+
"ece": 0.07530120481927709,
|
| 64 |
+
"posterior": {
|
| 65 |
+
"media": 0.38823529411764707,
|
| 66 |
+
"bernstein": [
|
| 67 |
+
0.216560596460874,
|
| 68 |
+
0.5599099917744201
|
| 69 |
+
]
|
| 70 |
+
}
|
| 71 |
+
},
|
| 72 |
+
"memoria": {
|
| 73 |
+
"slots": 17,
|
| 74 |
+
"capacidade": 64,
|
| 75 |
+
"escritas": 17,
|
| 76 |
+
"rejeitadas_confianca": 3,
|
| 77 |
+
"hit_rate": 1.0,
|
| 78 |
+
"comprimidos": 0,
|
| 79 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 80 |
+
"perda_vq": null,
|
| 81 |
+
"violacoes_contrato": 0,
|
| 82 |
+
"economia_bits_por_slot": 0.9990234375
|
| 83 |
+
},
|
| 84 |
+
"crescimento": []
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"epoca": 1,
|
| 88 |
+
"perda_media": 8.527180158174955,
|
| 89 |
+
"avaliacao": {
|
| 90 |
+
"vqa": 7.8786665598551435,
|
| 91 |
+
"pontuacao": 8.415692011515299,
|
| 92 |
+
"instrucao": 7.5004353523254395,
|
| 93 |
+
"tts": 7.3423952261606855,
|
| 94 |
+
"lm": 8.11315369606018,
|
| 95 |
+
"imagem_caption": 7.946273724238078,
|
| 96 |
+
"ocr": 8.556553681691488,
|
| 97 |
+
"noticia": 8.175559520721436,
|
| 98 |
+
"asr": 7.956470807393392,
|
| 99 |
+
"ppl_lm": 3338.0887647367836
|
| 100 |
+
},
|
| 101 |
+
"eq_som": 0.16573584079742432,
|
| 102 |
+
"punicoes": 1,
|
| 103 |
+
"prs": {
|
| 104 |
+
"trust": 0.7024,
|
| 105 |
+
"tau": 9.02434,
|
| 106 |
+
"clip": 5.0,
|
| 107 |
+
"boost": 1.0,
|
| 108 |
+
"streak": 8,
|
| 109 |
+
"ciclos_sgdr": 0,
|
| 110 |
+
"recompensa_acum": 16.089,
|
| 111 |
+
"beta_min_relativo": 0.702
|
| 112 |
+
},
|
| 113 |
+
"rpp": {
|
| 114 |
+
"rho": 1.0,
|
| 115 |
+
"streak": 0,
|
| 116 |
+
"recompensas": 0,
|
| 117 |
+
"punicoes": 1,
|
| 118 |
+
"penalidades": 13,
|
| 119 |
+
"kappa_rotas_mortas": 0.01
|
| 120 |
+
},
|
| 121 |
+
"roteador": {
|
| 122 |
+
"amostras": 7,
|
| 123 |
+
"pronto": false,
|
| 124 |
+
"lambda_rota": 0.35,
|
| 125 |
+
"gamma_empate": 0.15,
|
| 126 |
+
"drift_codebook": 0.076635,
|
| 127 |
+
"conf_media": 0.0,
|
| 128 |
+
"frac_rotas_ativas": 0.0,
|
| 129 |
+
"k": 24,
|
| 130 |
+
"taxa_ativos": 0.125
|
| 131 |
+
},
|
| 132 |
+
"confianca": {
|
| 133 |
+
"h_ema": 0.3969818949699402,
|
| 134 |
+
"ece": 0.35769230769230775,
|
| 135 |
+
"posterior": {
|
| 136 |
+
"media": 0.8,
|
| 137 |
+
"bernstein": [
|
| 138 |
+
0.36442949889125675,
|
| 139 |
+
1.0
|
| 140 |
+
]
|
| 141 |
+
}
|
| 142 |
+
},
|
| 143 |
+
"memoria": {
|
| 144 |
+
"slots": 3,
|
| 145 |
+
"capacidade": 64,
|
| 146 |
+
"escritas": 3,
|
| 147 |
+
"rejeitadas_confianca": 0,
|
| 148 |
+
"hit_rate": 0.0,
|
| 149 |
+
"comprimidos": 0,
|
| 150 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 151 |
+
"perda_vq": null,
|
| 152 |
+
"violacoes_contrato": 0,
|
| 153 |
+
"economia_bits_por_slot": 0.9990234375
|
| 154 |
+
},
|
| 155 |
+
"crescimento": []
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"epoca": 2,
|
| 159 |
+
"perda_media": 7.530729611714681,
|
| 160 |
+
"avaliacao": {
|
| 161 |
+
"vqa": 6.954700787862142,
|
| 162 |
+
"pontuacao": 7.803481101989746,
|
| 163 |
+
"instrucao": 6.964048147201538,
|
| 164 |
+
"tts": 6.852313915888469,
|
| 165 |
+
"lm": 7.867028474807739,
|
| 166 |
+
"imagem_caption": 7.145581881205241,
|
| 167 |
+
"ocr": 8.153267065684,
|
| 168 |
+
"noticia": 7.7516772747039795,
|
| 169 |
+
"asr": 7.569636821746826,
|
| 170 |
+
"ppl_lm": 2609.7989711637842
|
| 171 |
+
},
|
| 172 |
+
"eq_som": 0.22748778760433197,
|
| 173 |
+
"punicoes": 1,
|
| 174 |
+
"prs": {
|
| 175 |
+
"trust": 0.4023,
|
| 176 |
+
"tau": 6.87234,
|
| 177 |
+
"clip": 2.4136,
|
| 178 |
+
"boost": 1.0,
|
| 179 |
+
"streak": 0,
|
| 180 |
+
"ciclos_sgdr": 0,
|
| 181 |
+
"recompensa_acum": 0.379,
|
| 182 |
+
"beta_min_relativo": 2.0
|
| 183 |
+
},
|
| 184 |
+
"rpp": {
|
| 185 |
+
"rho": 1.0,
|
| 186 |
+
"streak": 0,
|
| 187 |
+
"recompensas": 0,
|
| 188 |
+
"punicoes": 1,
|
| 189 |
+
"penalidades": 15,
|
| 190 |
+
"kappa_rotas_mortas": 0.01
|
| 191 |
+
},
|
| 192 |
+
"roteador": {
|
| 193 |
+
"amostras": 7,
|
| 194 |
+
"pronto": false,
|
| 195 |
+
"lambda_rota": 0.35,
|
| 196 |
+
"gamma_empate": 0.15,
|
| 197 |
+
"drift_codebook": 0.045073,
|
| 198 |
+
"conf_media": 0.0,
|
| 199 |
+
"frac_rotas_ativas": 0.0,
|
| 200 |
+
"k": 24,
|
| 201 |
+
"taxa_ativos": 0.0417
|
| 202 |
+
},
|
| 203 |
+
"confianca": {
|
| 204 |
+
"h_ema": 0.365193247795105,
|
| 205 |
+
"ece": 0.22999999999999998,
|
| 206 |
+
"posterior": {
|
| 207 |
+
"media": 0.11764705882352941,
|
| 208 |
+
"bernstein": [
|
| 209 |
+
0.0,
|
| 210 |
+
0.46857976498181986
|
| 211 |
+
]
|
| 212 |
+
}
|
| 213 |
+
},
|
| 214 |
+
"memoria": {
|
| 215 |
+
"slots": 1,
|
| 216 |
+
"capacidade": 64,
|
| 217 |
+
"escritas": 1,
|
| 218 |
+
"rejeitadas_confianca": 3,
|
| 219 |
+
"hit_rate": 0.0,
|
| 220 |
+
"comprimidos": 0,
|
| 221 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 222 |
+
"perda_vq": null,
|
| 223 |
+
"violacoes_contrato": 0,
|
| 224 |
+
"economia_bits_por_slot": 0.9990234375
|
| 225 |
+
},
|
| 226 |
+
"crescimento": []
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"epoca": 3,
|
| 230 |
+
"perda_media": 7.470894780158996,
|
| 231 |
+
"avaliacao": {
|
| 232 |
+
"vqa": 7.305373986562093,
|
| 233 |
+
"pontuacao": 7.8117343584696455,
|
| 234 |
+
"instrucao": 6.982861677805583,
|
| 235 |
+
"tts": 6.699165344238281,
|
| 236 |
+
"lm": 7.789499680201213,
|
| 237 |
+
"imagem_caption": 6.952828089396159,
|
| 238 |
+
"ocr": 8.299275239308676,
|
| 239 |
+
"noticia": 7.658636728922526,
|
| 240 |
+
"asr": 7.480801423390706,
|
| 241 |
+
"ppl_lm": 2415.108953044255
|
| 242 |
+
},
|
| 243 |
+
"eq_som": 0.31188270449638367,
|
| 244 |
+
"punicoes": 2,
|
| 245 |
+
"prs": {
|
| 246 |
+
"trust": 0.4822,
|
| 247 |
+
"tau": 7.0253,
|
| 248 |
+
"clip": 1.5271,
|
| 249 |
+
"boost": 1.0,
|
| 250 |
+
"streak": 0,
|
| 251 |
+
"ciclos_sgdr": 0,
|
| 252 |
+
"recompensa_acum": 9.739,
|
| 253 |
+
"beta_min_relativo": 2.0
|
| 254 |
+
},
|
| 255 |
+
"rpp": {
|
| 256 |
+
"rho": 1.0,
|
| 257 |
+
"streak": 0,
|
| 258 |
+
"recompensas": 0,
|
| 259 |
+
"punicoes": 2,
|
| 260 |
+
"penalidades": 100,
|
| 261 |
+
"kappa_rotas_mortas": 0.01
|
| 262 |
+
},
|
| 263 |
+
"roteador": {
|
| 264 |
+
"amostras": 50,
|
| 265 |
+
"pronto": false,
|
| 266 |
+
"lambda_rota": 0.35,
|
| 267 |
+
"gamma_empate": 0.15,
|
| 268 |
+
"drift_codebook": 0.009737,
|
| 269 |
+
"conf_media": 0.0,
|
| 270 |
+
"frac_rotas_ativas": 0.0,
|
| 271 |
+
"k": 24,
|
| 272 |
+
"taxa_ativos": 0.0417
|
| 273 |
+
},
|
| 274 |
+
"confianca": {
|
| 275 |
+
"h_ema": 0.4308484196662903,
|
| 276 |
+
"ece": 0.12999999999999998,
|
| 277 |
+
"posterior": {
|
| 278 |
+
"media": 0.3431372549019608,
|
| 279 |
+
"bernstein": [
|
| 280 |
+
0.19196517099664429,
|
| 281 |
+
0.4943093388072773
|
| 282 |
+
]
|
| 283 |
+
}
|
| 284 |
+
},
|
| 285 |
+
"memoria": {
|
| 286 |
+
"slots": 22,
|
| 287 |
+
"capacidade": 64,
|
| 288 |
+
"escritas": 22,
|
| 289 |
+
"rejeitadas_confianca": 3,
|
| 290 |
+
"hit_rate": 1.0,
|
| 291 |
+
"comprimidos": 0,
|
| 292 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 293 |
+
"perda_vq": null,
|
| 294 |
+
"violacoes_contrato": 0,
|
| 295 |
+
"economia_bits_por_slot": 0.9990234375
|
| 296 |
+
},
|
| 297 |
+
"crescimento": []
|
| 298 |
+
},
|
| 299 |
+
{
|
| 300 |
+
"epoca": 4,
|
| 301 |
+
"perda_media": 7.043362287374643,
|
| 302 |
+
"avaliacao": {
|
| 303 |
+
"vqa": 6.859211603800456,
|
| 304 |
+
"pontuacao": 7.844064950942993,
|
| 305 |
+
"instrucao": 6.841043631235759,
|
| 306 |
+
"tts": 6.587692578633626,
|
| 307 |
+
"lm": 7.733375469843547,
|
| 308 |
+
"imagem_caption": 7.099506139755249,
|
| 309 |
+
"ocr": 8.67655897140503,
|
| 310 |
+
"noticia": 7.596554199854533,
|
| 311 |
+
"asr": 7.473083972930908,
|
| 312 |
+
"ppl_lm": 2283.2964058650737
|
| 313 |
+
},
|
| 314 |
+
"eq_som": 0.24100500345230103,
|
| 315 |
+
"punicoes": 1,
|
| 316 |
+
"prs": {
|
| 317 |
+
"trust": 0.417,
|
| 318 |
+
"tau": 6.07795,
|
| 319 |
+
"clip": 2.2545,
|
| 320 |
+
"boost": 1.0,
|
| 321 |
+
"streak": 0,
|
| 322 |
+
"ciclos_sgdr": 0,
|
| 323 |
+
"recompensa_acum": 0.943,
|
| 324 |
+
"beta_min_relativo": 2.0
|
| 325 |
+
},
|
| 326 |
+
"rpp": {
|
| 327 |
+
"rho": 1.0,
|
| 328 |
+
"streak": 0,
|
| 329 |
+
"recompensas": 0,
|
| 330 |
+
"punicoes": 1,
|
| 331 |
+
"penalidades": 13,
|
| 332 |
+
"kappa_rotas_mortas": 0.01
|
| 333 |
+
},
|
| 334 |
+
"roteador": {
|
| 335 |
+
"amostras": 6,
|
| 336 |
+
"pronto": false,
|
| 337 |
+
"lambda_rota": 0.35,
|
| 338 |
+
"gamma_empate": 0.15,
|
| 339 |
+
"drift_codebook": 0.029232,
|
| 340 |
+
"conf_media": 0.0,
|
| 341 |
+
"frac_rotas_ativas": 0.0,
|
| 342 |
+
"k": 24,
|
| 343 |
+
"taxa_ativos": 0.0417
|
| 344 |
+
},
|
| 345 |
+
"confianca": {
|
| 346 |
+
"h_ema": 0.3634525537490845,
|
| 347 |
+
"ece": 0.2961538461538462,
|
| 348 |
+
"posterior": {
|
| 349 |
+
"media": 0.13333333333333333,
|
| 350 |
+
"bernstein": [
|
| 351 |
+
0.0,
|
| 352 |
+
0.5281164023006646
|
| 353 |
+
]
|
| 354 |
+
}
|
| 355 |
+
},
|
| 356 |
+
"memoria": {
|
| 357 |
+
"slots": 1,
|
| 358 |
+
"capacidade": 64,
|
| 359 |
+
"escritas": 1,
|
| 360 |
+
"rejeitadas_confianca": 2,
|
| 361 |
+
"hit_rate": 0.0,
|
| 362 |
+
"comprimidos": 0,
|
| 363 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 364 |
+
"perda_vq": null,
|
| 365 |
+
"violacoes_contrato": 0,
|
| 366 |
+
"economia_bits_por_slot": 0.9990234375
|
| 367 |
+
},
|
| 368 |
+
"crescimento": []
|
| 369 |
+
},
|
| 370 |
+
{
|
| 371 |
+
"epoca": 5,
|
| 372 |
+
"perda_media": 7.089543087537899,
|
| 373 |
+
"avaliacao": {
|
| 374 |
+
"vqa": 7.19921612739563,
|
| 375 |
+
"pontuacao": 7.889442205429077,
|
| 376 |
+
"instrucao": 6.684427817662557,
|
| 377 |
+
"tts": 6.422936836878459,
|
| 378 |
+
"lm": 7.89083456993103,
|
| 379 |
+
"imagem_caption": 6.99442187945048,
|
| 380 |
+
"ocr": 8.637943903605143,
|
| 381 |
+
"noticia": 7.566332896550496,
|
| 382 |
+
"asr": 7.405004978179932,
|
| 383 |
+
"ppl_lm": 2672.6735231256753
|
| 384 |
+
},
|
| 385 |
+
"eq_som": 0.2562611401081085,
|
| 386 |
+
"punicoes": 1,
|
| 387 |
+
"prs": {
|
| 388 |
+
"trust": 0.6251,
|
| 389 |
+
"tau": 6.75615,
|
| 390 |
+
"clip": 2.5585,
|
| 391 |
+
"boost": 1.0,
|
| 392 |
+
"streak": 1,
|
| 393 |
+
"ciclos_sgdr": 0,
|
| 394 |
+
"recompensa_acum": 14.32,
|
| 395 |
+
"beta_min_relativo": 0.625
|
| 396 |
+
},
|
| 397 |
+
"rpp": {
|
| 398 |
+
"rho": 1.0375,
|
| 399 |
+
"streak": 0,
|
| 400 |
+
"recompensas": 5,
|
| 401 |
+
"punicoes": 1,
|
| 402 |
+
"penalidades": 43,
|
| 403 |
+
"kappa_rotas_mortas": 0.01
|
| 404 |
+
},
|
| 405 |
+
"roteador": {
|
| 406 |
+
"amostras": 22,
|
| 407 |
+
"pronto": false,
|
| 408 |
+
"lambda_rota": 0.35,
|
| 409 |
+
"gamma_empate": 0.15,
|
| 410 |
+
"drift_codebook": 0.014433,
|
| 411 |
+
"conf_media": 0.0,
|
| 412 |
+
"frac_rotas_ativas": 0.0,
|
| 413 |
+
"k": 24,
|
| 414 |
+
"taxa_ativos": 0.0417
|
| 415 |
+
},
|
| 416 |
+
"confianca": {
|
| 417 |
+
"h_ema": 0.6187677979469299,
|
| 418 |
+
"ece": 0.25232558139534883,
|
| 419 |
+
"posterior": {
|
| 420 |
+
"media": 0.5111111111111111,
|
| 421 |
+
"bernstein": [
|
| 422 |
+
0.25626934934981205,
|
| 423 |
+
0.7659528728724101
|
| 424 |
+
]
|
| 425 |
+
}
|
| 426 |
+
},
|
| 427 |
+
"memoria": {
|
| 428 |
+
"slots": 11,
|
| 429 |
+
"capacidade": 64,
|
| 430 |
+
"escritas": 11,
|
| 431 |
+
"rejeitadas_confianca": 0,
|
| 432 |
+
"hit_rate": 1.0,
|
| 433 |
+
"comprimidos": 0,
|
| 434 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 435 |
+
"perda_vq": null,
|
| 436 |
+
"violacoes_contrato": 0,
|
| 437 |
+
"economia_bits_por_slot": 0.9990234375
|
| 438 |
+
},
|
| 439 |
+
"crescimento": []
|
| 440 |
+
},
|
| 441 |
+
{
|
| 442 |
+
"epoca": 6,
|
| 443 |
+
"perda_media": 9.40745317524877,
|
| 444 |
+
"avaliacao": {
|
| 445 |
+
"vqa": 8.110245307286581,
|
| 446 |
+
"pontuacao": 7.9338812828063965,
|
| 447 |
+
"instrucao": 8.075132290522257,
|
| 448 |
+
"tts": 8.336720863978067,
|
| 449 |
+
"lm": 8.390085379282633,
|
| 450 |
+
"imagem_caption": 8.074243863423666,
|
| 451 |
+
"ocr": 8.7576953570048,
|
| 452 |
+
"noticia": 7.6731063524882,
|
| 453 |
+
"asr": 8.676271120707193,
|
| 454 |
+
"ppl_lm": 4403.193619695888
|
| 455 |
+
},
|
| 456 |
+
"eq_som": 0.11337500810623169,
|
| 457 |
+
"punicoes": 1,
|
| 458 |
+
"prs": {
|
| 459 |
+
"trust": 0.6626,
|
| 460 |
+
"tau": 9.69135,
|
| 461 |
+
"clip": 0.5116,
|
| 462 |
+
"boost": 1.0,
|
| 463 |
+
"streak": 1,
|
| 464 |
+
"ciclos_sgdr": 0,
|
| 465 |
+
"recompensa_acum": 22.583,
|
| 466 |
+
"beta_min_relativo": 0.663
|
| 467 |
+
},
|
| 468 |
+
"rpp": {
|
| 469 |
+
"rho": 1.0,
|
| 470 |
+
"streak": 0,
|
| 471 |
+
"recompensas": 0,
|
| 472 |
+
"punicoes": 1,
|
| 473 |
+
"penalidades": 58,
|
| 474 |
+
"kappa_rotas_mortas": 0.01
|
| 475 |
+
},
|
| 476 |
+
"roteador": {
|
| 477 |
+
"amostras": 29,
|
| 478 |
+
"pronto": false,
|
| 479 |
+
"lambda_rota": 0.35,
|
| 480 |
+
"gamma_empate": 0.15,
|
| 481 |
+
"drift_codebook": 0.002355,
|
| 482 |
+
"conf_media": 0.0,
|
| 483 |
+
"frac_rotas_ativas": 0.0,
|
| 484 |
+
"k": 24,
|
| 485 |
+
"taxa_ativos": 0.0833
|
| 486 |
+
},
|
| 487 |
+
"confianca": {
|
| 488 |
+
"h_ema": 0.5460562705993652,
|
| 489 |
+
"ece": 0.20344827586206898,
|
| 490 |
+
"posterior": {
|
| 491 |
+
"media": 0.35,
|
| 492 |
+
"bernstein": [
|
| 493 |
+
0.1431347476029459,
|
| 494 |
+
0.5568652523970541
|
| 495 |
+
]
|
| 496 |
+
}
|
| 497 |
+
},
|
| 498 |
+
"memoria": {
|
| 499 |
+
"slots": 13,
|
| 500 |
+
"capacidade": 64,
|
| 501 |
+
"escritas": 13,
|
| 502 |
+
"rejeitadas_confianca": 2,
|
| 503 |
+
"hit_rate": 0.0,
|
| 504 |
+
"comprimidos": 0,
|
| 505 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 506 |
+
"perda_vq": null,
|
| 507 |
+
"violacoes_contrato": 0,
|
| 508 |
+
"economia_bits_por_slot": 0.9990234375
|
| 509 |
+
},
|
| 510 |
+
"crescimento": []
|
| 511 |
+
},
|
| 512 |
+
{
|
| 513 |
+
"epoca": 7,
|
| 514 |
+
"perda_media": 7.231130578782824,
|
| 515 |
+
"avaliacao": {
|
| 516 |
+
"vqa": 6.5694239139556885,
|
| 517 |
+
"pontuacao": 7.822401364644368,
|
| 518 |
+
"instrucao": 6.962437709172566,
|
| 519 |
+
"tts": 6.983241717020671,
|
| 520 |
+
"lm": 7.852646191914876,
|
| 521 |
+
"imagem_caption": 7.0820222695668535,
|
| 522 |
+
"ocr": 7.846352259318034,
|
| 523 |
+
"noticia": 7.663803895314534,
|
| 524 |
+
"asr": 7.646427710851033,
|
| 525 |
+
"ppl_lm": 2572.532733229914
|
| 526 |
+
},
|
| 527 |
+
"eq_som": 0.3229912519454956,
|
| 528 |
+
"punicoes": 1,
|
| 529 |
+
"prs": {
|
| 530 |
+
"trust": 0.3768,
|
| 531 |
+
"tau": 6.82558,
|
| 532 |
+
"clip": 5.0,
|
| 533 |
+
"boost": 1.0,
|
| 534 |
+
"streak": 0,
|
| 535 |
+
"ciclos_sgdr": 0,
|
| 536 |
+
"recompensa_acum": 9.712,
|
| 537 |
+
"beta_min_relativo": 2.0
|
| 538 |
+
},
|
| 539 |
+
"rpp": {
|
| 540 |
+
"rho": 1.0,
|
| 541 |
+
"streak": 0,
|
| 542 |
+
"recompensas": 2,
|
| 543 |
+
"punicoes": 1,
|
| 544 |
+
"penalidades": 90,
|
| 545 |
+
"kappa_rotas_mortas": 0.01
|
| 546 |
+
},
|
| 547 |
+
"roteador": {
|
| 548 |
+
"amostras": 45,
|
| 549 |
+
"pronto": false,
|
| 550 |
+
"lambda_rota": 0.35,
|
| 551 |
+
"gamma_empate": 0.15,
|
| 552 |
+
"drift_codebook": 0.009923,
|
| 553 |
+
"conf_media": 0.0,
|
| 554 |
+
"frac_rotas_ativas": 0.0,
|
| 555 |
+
"k": 24,
|
| 556 |
+
"taxa_ativos": 0.0417
|
| 557 |
+
},
|
| 558 |
+
"confianca": {
|
| 559 |
+
"h_ema": 0.398207426071167,
|
| 560 |
+
"ece": 0.13666666666666666,
|
| 561 |
+
"posterior": {
|
| 562 |
+
"media": 0.18478260869565216,
|
| 563 |
+
"bernstein": [
|
| 564 |
+
0.048734518728612175,
|
| 565 |
+
0.32083069866269215
|
| 566 |
+
]
|
| 567 |
+
}
|
| 568 |
+
},
|
| 569 |
+
"memoria": {
|
| 570 |
+
"slots": 13,
|
| 571 |
+
"capacidade": 64,
|
| 572 |
+
"escritas": 13,
|
| 573 |
+
"rejeitadas_confianca": 10,
|
| 574 |
+
"hit_rate": 1.0,
|
| 575 |
+
"comprimidos": 0,
|
| 576 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 577 |
+
"perda_vq": null,
|
| 578 |
+
"violacoes_contrato": 0,
|
| 579 |
+
"economia_bits_por_slot": 0.9990234375
|
| 580 |
+
},
|
| 581 |
+
"crescimento": []
|
| 582 |
+
}
|
| 583 |
+
],
|
| 584 |
+
"passos": 3192,
|
| 585 |
+
"punicoes": 1,
|
| 586 |
+
"barreira_abmo_ativacoes": 0,
|
| 587 |
+
"pcgrad_ultimo": {
|
| 588 |
+
"pcgrad/dot": 0.0004723769121788418,
|
| 589 |
+
"pcgrad/projetado": 0.0,
|
| 590 |
+
"pcgrad/fator": 0.0
|
| 591 |
+
},
|
| 592 |
+
"prs_v8": {
|
| 593 |
+
"trust": 0.3768,
|
| 594 |
+
"tau": 6.82558,
|
| 595 |
+
"clip": 5.0,
|
| 596 |
+
"boost": 1.0,
|
| 597 |
+
"streak": 0,
|
| 598 |
+
"ciclos_sgdr": 0,
|
| 599 |
+
"recompensa_acum": 9.712,
|
| 600 |
+
"beta_min_relativo": 2.0
|
| 601 |
+
},
|
| 602 |
+
"confianca": {
|
| 603 |
+
"h_ema": 0.398207426071167,
|
| 604 |
+
"ece": 0.13666666666666666,
|
| 605 |
+
"posterior_media": 0.18478260869565216,
|
| 606 |
+
"bernstein": [
|
| 607 |
+
0.048734518728612175,
|
| 608 |
+
0.32083069866269215
|
| 609 |
+
]
|
| 610 |
+
},
|
| 611 |
+
"memoria": {
|
| 612 |
+
"slots": 13,
|
| 613 |
+
"capacidade": 64,
|
| 614 |
+
"escritas": 13,
|
| 615 |
+
"rejeitadas_confianca": 10,
|
| 616 |
+
"hit_rate": 1.0,
|
| 617 |
+
"comprimidos": 0,
|
| 618 |
+
"entropia_codebook": 1.4736544073912228e-07,
|
| 619 |
+
"perda_vq": null,
|
| 620 |
+
"violacoes_contrato": 0,
|
| 621 |
+
"economia_bits_por_slot": 0.9990234375
|
| 622 |
+
},
|
| 623 |
+
"crescimento": [],
|
| 624 |
+
"microunidades": [
|
| 625 |
+
{
|
| 626 |
+
"ramos": [
|
| 627 |
+
"conv_dil",
|
| 628 |
+
"gru",
|
| 629 |
+
"mlp"
|
| 630 |
+
],
|
| 631 |
+
"ativos": [
|
| 632 |
+
1.0,
|
| 633 |
+
1.0,
|
| 634 |
+
1.0
|
| 635 |
+
],
|
| 636 |
+
"uso_ema": [
|
| 637 |
+
0.9752992987632751,
|
| 638 |
+
0.024680670350790024,
|
| 639 |
+
1.9912109564756975e-05
|
| 640 |
+
],
|
| 641 |
+
"passos_rec": 2
|
| 642 |
+
},
|
| 643 |
+
{
|
| 644 |
+
"ramos": [
|
| 645 |
+
"conv_dil",
|
| 646 |
+
"gru",
|
| 647 |
+
"mlp",
|
| 648 |
+
"moe"
|
| 649 |
+
],
|
| 650 |
+
"ativos": [
|
| 651 |
+
1.0,
|
| 652 |
+
1.0,
|
| 653 |
+
1.0,
|
| 654 |
+
1.0
|
| 655 |
+
],
|
| 656 |
+
"uso_ema": [
|
| 657 |
+
0.12329785525798798,
|
| 658 |
+
0.4805801510810852,
|
| 659 |
+
0.07674114406108856,
|
| 660 |
+
0.31938061118125916
|
| 661 |
+
],
|
| 662 |
+
"passos_rec": 2
|
| 663 |
+
},
|
| 664 |
+
{
|
| 665 |
+
"ramos": [
|
| 666 |
+
"conv_dil",
|
| 667 |
+
"gru",
|
| 668 |
+
"mlp",
|
| 669 |
+
"moe"
|
| 670 |
+
],
|
| 671 |
+
"ativos": [
|
| 672 |
+
1.0,
|
| 673 |
+
1.0,
|
| 674 |
+
1.0,
|
| 675 |
+
1.0
|
| 676 |
+
],
|
| 677 |
+
"uso_ema": [
|
| 678 |
+
0.9999496936798096,
|
| 679 |
+
2.324265779840573e-11,
|
| 680 |
+
4.997722862754017e-05,
|
| 681 |
+
2.525876396930471e-08
|
| 682 |
+
],
|
| 683 |
+
"passos_rec": 2
|
| 684 |
+
}
|
| 685 |
+
],
|
| 686 |
+
"dpo": {
|
| 687 |
+
"passos": 93,
|
| 688 |
+
"acc_final": 1.0,
|
| 689 |
+
"margem_final": 14.226043701171875,
|
| 690 |
+
"beta_final": 0.05858517438173294
|
| 691 |
+
},
|
| 692 |
+
"som": {
|
| 693 |
+
"variante_ativa": "cpn",
|
| 694 |
+
"variantes": {
|
| 695 |
+
"som": {
|
| 696 |
+
"k": 24,
|
| 697 |
+
"taxa_ativos": 1.0,
|
| 698 |
+
"resemeados": 24,
|
| 699 |
+
"usos": 256,
|
| 700 |
+
"atingiu_alvo": true
|
| 701 |
+
},
|
| 702 |
+
"gg": {
|
| 703 |
+
"k": 4,
|
| 704 |
+
"taxa_ativos": 1.0,
|
| 705 |
+
"resemeados": 4,
|
| 706 |
+
"usos": 256,
|
| 707 |
+
"atingiu_alvo": true
|
| 708 |
+
},
|
| 709 |
+
"gcs": {
|
| 710 |
+
"k": 3,
|
| 711 |
+
"arestas": 3,
|
| 712 |
+
"eq_treino": 4104.4892578125,
|
| 713 |
+
"atingiu_alvo": true
|
| 714 |
+
},
|
| 715 |
+
"gsom": {
|
| 716 |
+
"k": 15,
|
| 717 |
+
"gt": 1.05,
|
| 718 |
+
"erro_medio": 0.18949279189109802,
|
| 719 |
+
"atingiu_alvo": true
|
| 720 |
+
},
|
| 721 |
+
"hsom": {},
|
| 722 |
+
"tkm": {
|
| 723 |
+
"k": 32,
|
| 724 |
+
"taxa_ativos": 1.0,
|
| 725 |
+
"resemeados": 32,
|
| 726 |
+
"usos": 256,
|
| 727 |
+
"atingiu_alvo": true
|
| 728 |
+
},
|
| 729 |
+
"rsom": {
|
| 730 |
+
"k": 32,
|
| 731 |
+
"taxa_ativos": 1.0,
|
| 732 |
+
"resemeados": 32,
|
| 733 |
+
"usos": 256,
|
| 734 |
+
"atingiu_alvo": true
|
| 735 |
+
},
|
| 736 |
+
"cpn": {},
|
| 737 |
+
"ssom": {
|
| 738 |
+
"erro": "IndexError: index 8 is out of bounds for dimension 0 with size 8"
|
| 739 |
+
}
|
| 740 |
+
},
|
| 741 |
+
"roteador": {
|
| 742 |
+
"amostras": 1581,
|
| 743 |
+
"pronto": true,
|
| 744 |
+
"lambda_rota": 0.35,
|
| 745 |
+
"gamma_empate": 0.15,
|
| 746 |
+
"drift_codebook": 0.009923,
|
| 747 |
+
"conf_media": 0.4107,
|
| 748 |
+
"frac_rotas_ativas": 0.7188,
|
| 749 |
+
"k": 24,
|
| 750 |
+
"taxa_ativos": 1.0
|
| 751 |
+
},
|
| 752 |
+
"invariante_sem_orfaos": true,
|
| 753 |
+
"orfaos_por_variante": {
|
| 754 |
+
"som": {
|
| 755 |
+
"orfaos": 0,
|
| 756 |
+
"relocados": 0,
|
| 757 |
+
"taxa_ativos": 1.0
|
| 758 |
+
},
|
| 759 |
+
"gg": {
|
| 760 |
+
"orfaos": 0,
|
| 761 |
+
"relocados": 0,
|
| 762 |
+
"taxa_ativos": 1.0
|
| 763 |
+
},
|
| 764 |
+
"gcs": {
|
| 765 |
+
"orfaos": 0,
|
| 766 |
+
"relocados": 0,
|
| 767 |
+
"taxa_ativos": 1.0
|
| 768 |
+
},
|
| 769 |
+
"gsom": {
|
| 770 |
+
"orfaos": 0,
|
| 771 |
+
"relocados": 0,
|
| 772 |
+
"taxa_ativos": 1.0
|
| 773 |
+
},
|
| 774 |
+
"hsom": {
|
| 775 |
+
"orfaos": 0,
|
| 776 |
+
"relocados": 0
|
| 777 |
+
},
|
| 778 |
+
"tkm": {
|
| 779 |
+
"orfaos": 0,
|
| 780 |
+
"relocados": 0,
|
| 781 |
+
"taxa_ativos": 1.0
|
| 782 |
+
},
|
| 783 |
+
"rsom": {
|
| 784 |
+
"orfaos": 0,
|
| 785 |
+
"relocados": 0,
|
| 786 |
+
"taxa_ativos": 1.0
|
| 787 |
+
},
|
| 788 |
+
"cpn": {
|
| 789 |
+
"orfaos": 0,
|
| 790 |
+
"relocados": 0,
|
| 791 |
+
"taxa_ativos": 1.0
|
| 792 |
+
},
|
| 793 |
+
"ssom": {
|
| 794 |
+
"orfaos": 0,
|
| 795 |
+
"relocados": 23,
|
| 796 |
+
"taxa_ativos": 1.0
|
| 797 |
+
}
|
| 798 |
+
}
|
| 799 |
+
},
|
| 800 |
+
"avaliacao_final": {
|
| 801 |
+
"vqa": 6.4591522216796875,
|
| 802 |
+
"pontuacao": 7.7690675258636475,
|
| 803 |
+
"instrucao": 7.062118411064148,
|
| 804 |
+
"tts": 6.546424508094788,
|
| 805 |
+
"lm": 7.9568891525268555,
|
| 806 |
+
"imagem_caption": 7.035338521003723,
|
| 807 |
+
"ocr": 8.0436851978302,
|
| 808 |
+
"noticia": 7.5813761949539185,
|
| 809 |
+
"asr": 7.698689699172974,
|
| 810 |
+
"ppl_lm": 2855.177102389719
|
| 811 |
+
},
|
| 812 |
+
"metricas_completas": {
|
| 813 |
+
"neuronios_ativos": {
|
| 814 |
+
"ativos/som": 1.0,
|
| 815 |
+
"k/som": 24,
|
| 816 |
+
"ativos/gg": 1.0,
|
| 817 |
+
"k/gg": 4,
|
| 818 |
+
"ativos/gcs": 1.0,
|
| 819 |
+
"k/gcs": 3,
|
| 820 |
+
"ativos/gsom": 1.0,
|
| 821 |
+
"k/gsom": 15,
|
| 822 |
+
"ativos/hsom": 1.0,
|
| 823 |
+
"k/hsom": 12,
|
| 824 |
+
"ativos/tkm": 1.0,
|
| 825 |
+
"k/tkm": 32,
|
| 826 |
+
"ativos/rsom": 1.0,
|
| 827 |
+
"k/rsom": 32,
|
| 828 |
+
"ativos/cpn": 1.0,
|
| 829 |
+
"k/cpn": 24,
|
| 830 |
+
"ativos/ssom": 1.0,
|
| 831 |
+
"k/ssom": 24,
|
| 832 |
+
"A_global": 1.0
|
| 833 |
+
},
|
| 834 |
+
"estruturais": {
|
| 835 |
+
"ortogonalidade": 7.152557373046875e-07,
|
| 836 |
+
"balanceamento_moe": 0.0,
|
| 837 |
+
"gate_global": 0.3491619825363159,
|
| 838 |
+
"gate_janela": 0.3269121050834656,
|
| 839 |
+
"gate_linear": 0.3239259123802185,
|
| 840 |
+
"moe1/experts_ativos": 6.0,
|
| 841 |
+
"moe1/uso_max": 0.17838352918624878,
|
| 842 |
+
"moe1/perda_lb": 0.055772364139556885,
|
| 843 |
+
"moe1/perda_ort": 0.00034026303910650313,
|
| 844 |
+
"moe1/fase": 0.0,
|
| 845 |
+
"moe1/beta_feedback": 0.0,
|
| 846 |
+
"moe1/entropia_atn": 0.0,
|
| 847 |
+
"moe2/enc_uso_medio": 0.5,
|
| 848 |
+
"moe2/dec_uso_medio": 0.24999994039535522,
|
| 849 |
+
"moe2/dec_uso_min": 0.001363456016406417,
|
| 850 |
+
"moe2/agrupado": 0.0,
|
| 851 |
+
"moe2/perda_lb": 6.0,
|
| 852 |
+
"mtp/alpha0": 0.0005300508346408606,
|
| 853 |
+
"mtp/alpha1": 0.9994699358940125,
|
| 854 |
+
"mtp/termos_ce": 998.0,
|
| 855 |
+
"micra0/n_ramos": 3,
|
| 856 |
+
"micra0/ramos_ativos": 3,
|
| 857 |
+
"micra0/passos_rec": 2,
|
| 858 |
+
"micra0/alpha0": 1.0,
|
| 859 |
+
"micra0/alpha1": 1.3542193755267107e-10,
|
| 860 |
+
"micra0/alpha2": 1.4029073186149995e-15,
|
| 861 |
+
"micra0/uso0": 0.9752992987632751,
|
| 862 |
+
"micra0/uso1": 0.024680670350790024,
|
| 863 |
+
"micra0/uso2": 1.9912109564756975e-05,
|
| 864 |
+
"micra1/n_ramos": 4,
|
| 865 |
+
"micra1/ramos_ativos": 4,
|
| 866 |
+
"micra1/passos_rec": 2,
|
| 867 |
+
"micra1/alpha0": 0.07855360209941864,
|
| 868 |
+
"micra1/alpha1": 0.5188434720039368,
|
| 869 |
+
"micra1/alpha2": 0.07156255841255188,
|
| 870 |
+
"micra1/alpha3": 0.3310403823852539,
|
| 871 |
+
"micra1/uso0": 0.12329785525798798,
|
| 872 |
+
"micra1/uso1": 0.4805801510810852,
|
| 873 |
+
"micra1/uso2": 0.07674114406108856,
|
| 874 |
+
"micra1/uso3": 0.31938061118125916,
|
| 875 |
+
"micra2/n_ramos": 4,
|
| 876 |
+
"micra2/ramos_ativos": 4,
|
| 877 |
+
"micra2/passos_rec": 2,
|
| 878 |
+
"micra2/alpha0": 0.9999498128890991,
|
| 879 |
+
"micra2/alpha1": 2.1000236272161743e-11,
|
| 880 |
+
"micra2/alpha2": 5.0150272727478296e-05,
|
| 881 |
+
"micra2/alpha3": 2.1534841465609134e-08,
|
| 882 |
+
"micra2/uso0": 0.9999496936798096,
|
| 883 |
+
"micra2/uso1": 2.324265779840573e-11,
|
| 884 |
+
"micra2/uso2": 4.997722862754017e-05,
|
| 885 |
+
"micra2/uso3": 2.525876396930471e-08,
|
| 886 |
+
"nlp/gate_medio": 0.5649126768112183,
|
| 887 |
+
"nlp/intencao_id": 7,
|
| 888 |
+
"nlg/coerencia_bigramas_vistos": 0.0,
|
| 889 |
+
"nlg/estilo_medio": 0.5,
|
| 890 |
+
"nlg/estilo_disp": 0.0,
|
| 891 |
+
"janela1m/n_segmentos": 0,
|
| 892 |
+
"janela1m/m_max": 2017,
|
| 893 |
+
"janela1m/hit_celula": 0.0,
|
| 894 |
+
"janela1m/consultas": 0,
|
| 895 |
+
"mtp/rascunho_pronto": 1.0,
|
| 896 |
+
"roteador/amostras": 1581,
|
| 897 |
+
"roteador/pronto": 1.0,
|
| 898 |
+
"roteador/frac_rotas": 0.0,
|
| 899 |
+
"roteador/conf_media": 0.619,
|
| 900 |
+
"roteador/drift": 0.009923
|
| 901 |
+
},
|
| 902 |
+
"escala": {},
|
| 903 |
+
"regime": {
|
| 904 |
+
"fase_final": "B",
|
| 905 |
+
"alvo_ativos": 0.9
|
| 906 |
+
}
|
| 907 |
+
},
|
| 908 |
+
"rpp": {
|
| 909 |
+
"rho": 1.0,
|
| 910 |
+
"streak": 0,
|
| 911 |
+
"recompensas": 2,
|
| 912 |
+
"punicoes": 1,
|
| 913 |
+
"penalidades": 90,
|
| 914 |
+
"kappa_rotas_mortas": 0.01
|
| 915 |
+
},
|
| 916 |
+
"roteador_ssom": {
|
| 917 |
+
"amostras": 1581,
|
| 918 |
+
"pronto": true,
|
| 919 |
+
"lambda_rota": 0.35,
|
| 920 |
+
"gamma_empate": 0.15,
|
| 921 |
+
"drift_codebook": 0.009923,
|
| 922 |
+
"conf_media": 0.619,
|
| 923 |
+
"frac_rotas_ativas": 0.0,
|
| 924 |
+
"k": 24,
|
| 925 |
+
"taxa_ativos": 1.0
|
| 926 |
+
},
|
| 927 |
+
"inferencia_agente": {
|
| 928 |
+
"latencia_s": 0.481,
|
| 929 |
+
"tokens": 24,
|
| 930 |
+
"taxa_repeticao": 0.875,
|
| 931 |
+
"coerencia_bigramas": 0.0
|
| 932 |
+
},
|
| 933 |
+
"difusao": {
|
| 934 |
+
"modo": "planejado",
|
| 935 |
+
"op": "txt2img",
|
| 936 |
+
"latencia_s": 0.0,
|
| 937 |
+
"prompt_enriquecido": "a floresta amazonica de manha, com detalhes nítidos, com composição harmônica, com iluminação suave",
|
| 938 |
+
"gerou_pixels": false,
|
| 939 |
+
"estatisticas": {
|
| 940 |
+
"modo": "planejado",
|
| 941 |
+
"repo": "hf-internal-testing/tiny-stable-diffusion-torch",
|
| 942 |
+
"device": "cpu",
|
| 943 |
+
"pipelines": [],
|
| 944 |
+
"eventos": [
|
| 945 |
+
"pipeline txt2img: ImportError: \nStableDiffusionPipeline requires the transformers library but it was not found in your environment. You can install it with pip: `pip\ninstall transformers`\n"
|
| 946 |
+
]
|
| 947 |
+
}
|
| 948 |
+
},
|
| 949 |
+
"agente_engenheiro": {
|
| 950 |
+
"aprovadas": 0,
|
| 951 |
+
"bloqueadas": 0,
|
| 952 |
+
"invariante_sem_orfaos": true
|
| 953 |
+
},
|
| 954 |
+
"checkpoints_eventos": [
|
| 955 |
+
"checkpoint epoca-007-p03102: 568 tensores, 0 pulados, 93 novos",
|
| 956 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 957 |
+
"checkpoint epoca-007-p03150: local (62.0 MB)",
|
| 958 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 959 |
+
"checkpoint epoca-007: local (62.0 MB)",
|
| 960 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 961 |
+
"checkpoint fase-dpo: local (62.0 MB)",
|
| 962 |
+
"1 checkpoint(s) antigo(s) apagado(s)",
|
| 963 |
+
"checkpoint fase-som: local (62.0 MB)"
|
| 964 |
+
],
|
| 965 |
+
"ram": {
|
| 966 |
+
"amostras": 5919,
|
| 967 |
+
"rss_min_mb": 428.7,
|
| 968 |
+
"rss_med_mb": 2524.4,
|
| 969 |
+
"rss_max_mb": 3358.4,
|
| 970 |
+
"disponivel_min_mb": 435.4,
|
| 971 |
+
"duracao_s": 14340.3
|
| 972 |
+
},
|
| 973 |
+
"tempo_nota": "wall time real do MonitorRAM sobre todos os segmentos; contagem pré-correção incluída"
|
| 974 |
+
}
|
scripts/01_verificar_ambiente.py
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Verificação do ambiente KHTST v2: dependências, RAM/disco, token HF
|
| 4 |
+
(PRESENÇA apenas — o valor NUNCA é impresso), módulos da v2 importáveis."""
|
| 5 |
+
import os
|
| 6 |
+
import sys
|
| 7 |
+
|
| 8 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def main():
|
| 12 |
+
print("== KHTST v2 — verificação de ambiente ==")
|
| 13 |
+
# dependências
|
| 14 |
+
faltando = []
|
| 15 |
+
for mod in ("torch", "datasets", "tokenizers", "huggingface_hub",
|
| 16 |
+
"safetensors", "soundfile", "numpy", "PIL", "requests",
|
| 17 |
+
"pyarrow"):
|
| 18 |
+
try:
|
| 19 |
+
m = __import__(mod)
|
| 20 |
+
versao = getattr(m, "__version__", "?")
|
| 21 |
+
print(f" ✓ {mod} {versao}")
|
| 22 |
+
except ImportError:
|
| 23 |
+
faltando.append(mod)
|
| 24 |
+
print(f" ✗ FALTA: {mod}")
|
| 25 |
+
if faltando:
|
| 26 |
+
print("Instale:", " ".join(faltando))
|
| 27 |
+
return 1
|
| 28 |
+
# recursos
|
| 29 |
+
import shutil
|
| 30 |
+
total, _, livre = shutil.disk_usage("/home/z/my-project")
|
| 31 |
+
print(f" disco: {livre/2**30:.1f} GB livres de {total/2**30:.1f} GB")
|
| 32 |
+
with open("/proc/meminfo") as f:
|
| 33 |
+
memkb = int(next(f).split()[1])
|
| 34 |
+
print(f" RAM: {memkb/2**20:.1f} GB total")
|
| 35 |
+
# token (presença apenas)
|
| 36 |
+
tem_token = bool(os.environ.get("HF_TOKEN"))
|
| 37 |
+
print(f" HF_TOKEN presente: {tem_token} (valor nunca é impresso)")
|
| 38 |
+
# módulos v2
|
| 39 |
+
from khtst.config import Config
|
| 40 |
+
from khtst.nucleo.modelo import KHTSTModel
|
| 41 |
+
try:
|
| 42 |
+
from khtst.acelerado import status as status_acelerado
|
| 43 |
+
except Exception:
|
| 44 |
+
status_acelerado = None
|
| 45 |
+
from khtst.percepcao.moe import MoEAgrupavel
|
| 46 |
+
from khtst.treino.mtp import MTPKHTST
|
| 47 |
+
from khtst.treino.dpo import PerdaDPO
|
| 48 |
+
from khtst.treino.cirurgia_grad import pcgrad_duas_perdas
|
| 49 |
+
from khtst.quanta.quantizacao import SmoothQuantAlpha
|
| 50 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 51 |
+
cfg = Config()
|
| 52 |
+
print(" ✓ módulos v2 importáveis (MoE, MTP, DPO, PCGrad, α-STE, Checkpoints)")
|
| 53 |
+
n_params_moe = 3 * cfg.modelo.moe["experts_por_grupo"] * \
|
| 54 |
+
2 * cfg.modelo.d_modelo * cfg.modelo.moe["d_ff_expert"]
|
| 55 |
+
print(f" MoE: {cfg.modelo.moe['n_camadas_moe']} blocos × "
|
| 56 |
+
f"{cfg.modelo.moe['n_grupos']} grupos × "
|
| 57 |
+
f"{cfg.modelo.moe['experts_por_grupo']} experts "
|
| 58 |
+
f"(~{n_params_moe/1e6:.2f}M parâmetros de especialistas)")
|
| 59 |
+
print("OK")
|
| 60 |
+
return 0
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
if __name__ == "__main__":
|
| 64 |
+
sys.exit(main())
|
scripts/02_coletar_corpus.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Coleta do corpus v2 — UM DATASET POR VEZ, cada fonte em SUBPROCESSO isolado
|
| 4 |
+
(estado limpo da biblioteca datasets; RAM devolvida ao SO; erro de uma fonte
|
| 5 |
+
nunca contamina a seguinte). Streaming=True (+trust_remote_code onde aceito),
|
| 6 |
+
18 fontes, dedup global, multimodal em base64. Cache temporário limpo após
|
| 7 |
+
cada fonte."""
|
| 8 |
+
import base64
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
+
import subprocess
|
| 12 |
+
import sys
|
| 13 |
+
|
| 14 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 15 |
+
|
| 16 |
+
from khtst.dados.streaming import StreamingCorpus, limpar_cache_temp
|
| 17 |
+
|
| 18 |
+
SAIDA = "/home/z/my-project/khtst/cache_dados/corpus_v2.jsonl"
|
| 19 |
+
DIR_PARCIAL = "/home/z/my-project/khtst/cache_dados/parciais"
|
| 20 |
+
RUNNER = "/home/z/my-project/khtst/scripts/02a_coletar_fonte.py"
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def _hash_texto(t: str) -> str:
|
| 24 |
+
import hashlib
|
| 25 |
+
return hashlib.sha1(t.encode("utf-8", "ignore")).hexdigest()[:16]
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def main():
|
| 29 |
+
os.makedirs(os.path.dirname(SAIDA), exist_ok=True)
|
| 30 |
+
os.makedirs("/home/z/my-project/khtst/telemetria_out", exist_ok=True)
|
| 31 |
+
os.makedirs(DIR_PARCIAL, exist_ok=True)
|
| 32 |
+
limpar_cache_temp()
|
| 33 |
+
plano_total = StreamingCorpus().PLANO
|
| 34 |
+
eventos = []
|
| 35 |
+
vistos: set[str] = set()
|
| 36 |
+
# v5 — RETOMÁVEL: corpus escrito INCREMENTALMENTE (append por fonte);
|
| 37 |
+
# na retomada, recarrega o acumulado e pula fontes já OK (estado persistido)
|
| 38 |
+
registros = []
|
| 39 |
+
if os.path.exists(SAIDA):
|
| 40 |
+
with open(SAIDA, encoding="utf-8") as f:
|
| 41 |
+
for linha in f:
|
| 42 |
+
try:
|
| 43 |
+
reg = json.loads(linha)
|
| 44 |
+
except Exception:
|
| 45 |
+
continue
|
| 46 |
+
chave = _hash_texto(reg.get("texto") or
|
| 47 |
+
((reg.get("entrada") or "") + "␟" +
|
| 48 |
+
(reg.get("saida") or "")))
|
| 49 |
+
if chave not in vistos:
|
| 50 |
+
vistos.add(chave)
|
| 51 |
+
registros.append(reg)
|
| 52 |
+
print(f"retomada: {len(registros)} registros acumulados")
|
| 53 |
+
for i, plano in enumerate(plano_total):
|
| 54 |
+
fonte = plano["id"]
|
| 55 |
+
cam_estado_prev = os.path.join(DIR_PARCIAL, f"fonte_{i:02d}.estado.json")
|
| 56 |
+
if os.path.exists(cam_estado_prev):
|
| 57 |
+
ev_prev = json.load(open(cam_estado_prev, encoding="utf-8"))
|
| 58 |
+
if ev_prev.get("status") == "OK" and ev_prev.get("n", 0) > 0:
|
| 59 |
+
eventos.append(ev_prev)
|
| 60 |
+
print(f" [SKIP] {fonte} (já coletada: n={ev_prev['n']})")
|
| 61 |
+
continue
|
| 62 |
+
if plano["via"] == "degradado":
|
| 63 |
+
# mensagem determinística gerada pelo próprio módulo de streaming
|
| 64 |
+
sub = StreamingCorpus()
|
| 65 |
+
list(sub._iterar_fonte(plano)) # registra evento degradado
|
| 66 |
+
eventos.extend([vars(ev) for ev in sub.eventos])
|
| 67 |
+
continue
|
| 68 |
+
cam_parcial = os.path.join(DIR_PARCIAL, f"fonte_{i:02d}.jsonl")
|
| 69 |
+
cam_estado = os.path.join(DIR_PARCIAL, f"fonte_{i:02d}.estado.json")
|
| 70 |
+
try:
|
| 71 |
+
r = subprocess.run(
|
| 72 |
+
[sys.executable, RUNNER, "--indice", str(i),
|
| 73 |
+
"--saida", cam_parcial, "--estado", cam_estado],
|
| 74 |
+
capture_output=True, text=True, timeout=900,
|
| 75 |
+
env={**os.environ, "PYTHONPATH": "/home/z/my-project/khtst/src"})
|
| 76 |
+
r_erro = (r.stderr or "sem resposta")[-180:]
|
| 77 |
+
except subprocess.TimeoutExpired:
|
| 78 |
+
r_erro = "TIMEOUT 900s (fonte lenta — pulada)"
|
| 79 |
+
except Exception as e: # rede/Hub: nunca para o lote
|
| 80 |
+
r_erro = f"{type(e).__name__}: {e}"[-180:]
|
| 81 |
+
if os.path.exists(cam_estado):
|
| 82 |
+
ev = json.load(open(cam_estado, encoding="utf-8"))
|
| 83 |
+
else:
|
| 84 |
+
ev = {"fonte": fonte, "status": "ERRO", "detalhe": r_erro, "n": 0}
|
| 85 |
+
# v5 — dedup/append durável ÚNICO (abaixo); contagem de dedup por leitura
|
| 86 |
+
n_dedup = 0
|
| 87 |
+
if os.path.exists(cam_parcial):
|
| 88 |
+
with open(cam_parcial, encoding="utf-8") as f:
|
| 89 |
+
for linha in f:
|
| 90 |
+
try:
|
| 91 |
+
reg = json.loads(linha)
|
| 92 |
+
except Exception:
|
| 93 |
+
continue
|
| 94 |
+
if reg.get("texto"):
|
| 95 |
+
chave = _hash_texto(reg["texto"])
|
| 96 |
+
else:
|
| 97 |
+
chave = _hash_texto((reg.get("entrada") or "") + "␟" +
|
| 98 |
+
(reg.get("saida") or ""))
|
| 99 |
+
if chave in vistos:
|
| 100 |
+
n_dedup += 1
|
| 101 |
+
ev["dedup_descartados"] = n_dedup
|
| 102 |
+
eventos.append(ev)
|
| 103 |
+
print(f" [{ev['status']}] {fonte} (n={ev['n']}, dedup={n_dedup})"
|
| 104 |
+
+ (f" {ev['detalhe'][:80]}" if ev.get("detalhe") else ""))
|
| 105 |
+
# v5 — append DURÁVEL ao corpus (morte do processo não perde progresso)
|
| 106 |
+
novos = 0
|
| 107 |
+
if os.path.exists(cam_parcial) and ev.get("status") in ("OK", "PARCIAL"):
|
| 108 |
+
with open(cam_parcial, encoding="utf-8") as f, \
|
| 109 |
+
open(SAIDA, "a", encoding="utf-8") as fa:
|
| 110 |
+
for linha in f:
|
| 111 |
+
try:
|
| 112 |
+
reg = json.loads(linha)
|
| 113 |
+
except Exception:
|
| 114 |
+
continue
|
| 115 |
+
if plano["via"] in ("tts_marcos",):
|
| 116 |
+
reg.setdefault("imagem", None)
|
| 117 |
+
reg.setdefault("audio", None)
|
| 118 |
+
if reg.get("texto"):
|
| 119 |
+
chave = _hash_texto(reg["texto"])
|
| 120 |
+
else:
|
| 121 |
+
chave = _hash_texto((reg.get("entrada") or "") + "␟" +
|
| 122 |
+
(reg.get("saida") or ""))
|
| 123 |
+
if chave in vistos:
|
| 124 |
+
continue
|
| 125 |
+
vistos.add(chave)
|
| 126 |
+
if reg.get("imagem") is None:
|
| 127 |
+
reg.pop("imagem", None)
|
| 128 |
+
if reg.get("audio") is None:
|
| 129 |
+
reg.pop("audio", None)
|
| 130 |
+
registros.append(reg)
|
| 131 |
+
fa.write(json.dumps(reg, ensure_ascii=False) + "\n")
|
| 132 |
+
novos += 1
|
| 133 |
+
os.remove(cam_parcial) if os.path.exists(cam_parcial) else None
|
| 134 |
+
limpar_cache_temp() # um dataset por vez → disco sob controle
|
| 135 |
+
import gc
|
| 136 |
+
gc.collect()
|
| 137 |
+
# escreve corpus final
|
| 138 |
+
n_multimodal = 0
|
| 139 |
+
with open(SAIDA, "w", encoding="utf-8") as f:
|
| 140 |
+
for r in registros:
|
| 141 |
+
if r.get("imagem") or r.get("audio"):
|
| 142 |
+
n_multimodal += 1
|
| 143 |
+
f.write(json.dumps(r, ensure_ascii=False) + "\n")
|
| 144 |
+
cont = {}
|
| 145 |
+
for r in registros:
|
| 146 |
+
cont[r["tarefa"]] = cont.get(r["tarefa"], 0) + 1
|
| 147 |
+
print("== contagem por tarefa ==", cont)
|
| 148 |
+
print(f"total: {len(registros)} registros ({n_multimodal} multimodais) → {SAIDA}")
|
| 149 |
+
with open("/home/z/my-project/khtst/telemetria_out/eventos_coleta_v2.json",
|
| 150 |
+
"w", encoding="utf-8") as f:
|
| 151 |
+
json.dump(eventos, f, ensure_ascii=False, indent=2)
|
| 152 |
+
limpar_cache_temp()
|
| 153 |
+
|
| 154 |
+
|
| 155 |
+
if __name__ == "__main__":
|
| 156 |
+
main()
|
scripts/02a_coletar_fonte.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Coleta UMA fonte (subprocesso isolado — estado limpo da biblioteca datasets,
|
| 4 |
+
RAM devolvida ao SO ao terminar). Recebe o plano em JSON, escreve registros
|
| 5 |
+
convertidos (multimodal em base64) num JSONL parcial."""
|
| 6 |
+
import argparse
|
| 7 |
+
import base64
|
| 8 |
+
import json
|
| 9 |
+
import sys
|
| 10 |
+
|
| 11 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 12 |
+
|
| 13 |
+
from khtst.dados.streaming import StreamingCorpus, via_especial
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def _serializa(r: dict) -> dict:
|
| 17 |
+
out = {}
|
| 18 |
+
for k, v in r.items():
|
| 19 |
+
if v is None:
|
| 20 |
+
continue
|
| 21 |
+
if isinstance(v, bytes):
|
| 22 |
+
out[k] = base64.b64encode(v).decode("ascii")
|
| 23 |
+
else:
|
| 24 |
+
out[k] = v
|
| 25 |
+
return out
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
def main():
|
| 29 |
+
ap = argparse.ArgumentParser()
|
| 30 |
+
ap.add_argument("--indice", required=True, type=int,
|
| 31 |
+
help="índice da fonte em StreamingCorpus.PLANO")
|
| 32 |
+
ap.add_argument("--saida", required=True)
|
| 33 |
+
ap.add_argument("--estado", required=True, help="JSON de evento (status/n)")
|
| 34 |
+
args = ap.parse_args()
|
| 35 |
+
|
| 36 |
+
corpus = StreamingCorpus()
|
| 37 |
+
plano = corpus.PLANO[args.indice]
|
| 38 |
+
registros = []
|
| 39 |
+
status, detalhe = "OK", plano.get("via", "")
|
| 40 |
+
try:
|
| 41 |
+
for ex in corpus._iterar_fonte(plano):
|
| 42 |
+
if len(registros) >= plano.get("max", 0):
|
| 43 |
+
break
|
| 44 |
+
reg = plano["ad"](ex) if plano.get("ad") else \
|
| 45 |
+
(ex if via_especial(plano["via"]) else None)
|
| 46 |
+
if reg is None:
|
| 47 |
+
continue
|
| 48 |
+
reg["fonte"] = plano["id"]
|
| 49 |
+
reg.setdefault("meta", {})
|
| 50 |
+
registros.append(reg)
|
| 51 |
+
except Exception as e:
|
| 52 |
+
status = "ERRO"
|
| 53 |
+
detalhe = f"{type(e).__name__}: {str(e)[:180]}"
|
| 54 |
+
if corpus.eventos: # erro/PULADO interno da fonte
|
| 55 |
+
ev = corpus.eventos[0]
|
| 56 |
+
status, detalhe = ev.status, ev.detalhe
|
| 57 |
+
with open(args.saida, "w", encoding="utf-8") as f:
|
| 58 |
+
for r in registros:
|
| 59 |
+
f.write(json.dumps(_serializa(r), ensure_ascii=False) + "\n")
|
| 60 |
+
with open(args.estado, "w", encoding="utf-8") as f:
|
| 61 |
+
json.dump({"fonte": plano["id"], "status": status,
|
| 62 |
+
"detalhe": detalhe, "n": len(registros)}, f,
|
| 63 |
+
ensure_ascii=False)
|
| 64 |
+
print(f"{status}: {plano['id']} n={len(registros)}")
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
if __name__ == "__main__":
|
| 68 |
+
main()
|
scripts/03_treinar_tokenizador.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Treino do tokenizador BPE (Rust, paralelizável) sobre o corpus v2.
|
| 4 |
+
Itera TODOS os campos textuais (texto/entrada/saida) — streaming do arquivo,
|
| 5 |
+
RAM O(1)."""
|
| 6 |
+
import json
|
| 7 |
+
import os
|
| 8 |
+
import sys
|
| 9 |
+
|
| 10 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 11 |
+
|
| 12 |
+
from khtst.config import Config
|
| 13 |
+
from khtst.dados.tokenizador import TokenizadorKHTST
|
| 14 |
+
|
| 15 |
+
CORPUS = "/home/z/my-project/khtst/cache_dados/corpus_v2.jsonl"
|
| 16 |
+
SAIDA = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def iterar_textos(caminho):
|
| 20 |
+
with open(caminho, encoding="utf-8") as f:
|
| 21 |
+
for linha in f:
|
| 22 |
+
try:
|
| 23 |
+
r = json.loads(linha)
|
| 24 |
+
except Exception:
|
| 25 |
+
continue
|
| 26 |
+
for campo in ("texto", "entrada", "saida"):
|
| 27 |
+
t = r.get(campo)
|
| 28 |
+
if isinstance(t, str) and len(t.strip()) >= 10:
|
| 29 |
+
yield t.strip()
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def main():
|
| 33 |
+
cfg = Config()
|
| 34 |
+
vocab = cfg.modelo.vocab
|
| 35 |
+
tk = TokenizadorKHTST()
|
| 36 |
+
stats = tk.treinar(iterar_textos(CORPUS), vocab=vocab, salvar_em=SAIDA)
|
| 37 |
+
# teste de ida-e-volta (ByteLevel insere espaço inicial — comparar sem ele)
|
| 38 |
+
amostras = list(iterar_textos(CORPUS))[:5]
|
| 39 |
+
for s in amostras:
|
| 40 |
+
ids = tk.encode(s, tarefa="lm", max_len=256)
|
| 41 |
+
dec = tk.decode(ids).strip()
|
| 42 |
+
assert dec[:40] == s.strip()[:40] or len(s) < 40, "roundtrip falhou"
|
| 43 |
+
print(f"tokenizador: {stats['vocab_size']} tokens (pedido {vocab}) "
|
| 44 |
+
f"→ {SAIDA}; roundtrip OK em {len(amostras)} amostras")
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
if __name__ == "__main__":
|
| 48 |
+
main()
|
scripts/04_treinar.py
ADDED
|
@@ -0,0 +1,381 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Treino v4 — pipeline completo em DUAS FASES (doc 15):
|
| 4 |
+
|
| 5 |
+
FASE A — rede aumentada (épocas 0..N-1, sem SOM):
|
| 6 |
+
FASE Densa (épocas 0..2): máx conexões, MoE softmax-total, MTP com
|
| 7 |
+
K ADAPTATIVO, PCGrad, ABMO, PRS V8, AgenteConfiança, MEMÓRIA INTERNA,
|
| 8 |
+
GESTOR DE CRESCIMENTO + AUTO-ESCALA POR COMPUTO (doc 12); unidades
|
| 9 |
+
NLP/NLG acopladas (nascem neutras — Teorema 15.1);
|
| 10 |
+
FASE Foco (época 3): MoE top-k + máscara + QAT-W8A8 final
|
| 11 |
+
(escalas POR GRUPO + correção de viés — doc 08 §§5-6);
|
| 12 |
+
FASE DPO: pares (dourado, corrompido) com β adaptativo.
|
| 13 |
+
FASE B — consolidação SOM com MÁXIMO de neurônios ativos (eq. 15.1):
|
| 14 |
+
8 variantes SEM neurônios isolados (reseeding garantido),
|
| 15 |
+
lr do tronco ×0.1, alvo A ≥ 0.90 (Teorema 15.2).
|
| 16 |
+
|
| 17 |
+
Uso (CPU em segmentos):
|
| 18 |
+
python3 04_treinar.py --orcamento 1500 # segmento de 25 min
|
| 19 |
+
python3 04_treinar.py --orcamento 1500 # retoma do último estado do HF
|
| 20 |
+
... quando 'pipeline completo' termina, roda DPO+SOM automaticamente.
|
| 21 |
+
"""
|
| 22 |
+
import argparse
|
| 23 |
+
import base64
|
| 24 |
+
import json
|
| 25 |
+
import os
|
| 26 |
+
import sys
|
| 27 |
+
import threading
|
| 28 |
+
import time
|
| 29 |
+
|
| 30 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 31 |
+
|
| 32 |
+
import torch
|
| 33 |
+
|
| 34 |
+
from khtst.config import Config
|
| 35 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 36 |
+
from khtst.geracao import GeradorMultimodal
|
| 37 |
+
from khtst.qualidade import AgenteEngenheiro
|
| 38 |
+
from khtst.dados.tokenizador import TokenizadorKHTST
|
| 39 |
+
from khtst.memoria.orquestrador import OrquestradorSOM
|
| 40 |
+
from khtst.nucleo.modelo import KHTSTModel
|
| 41 |
+
from khtst.telemetria.hub import TelemetryHub
|
| 42 |
+
from khtst.treino.treinador import TreinadorExtensao
|
| 43 |
+
|
| 44 |
+
CORPUS = "/home/z/my-project/khtst/cache_dados/corpus_v2.jsonl"
|
| 45 |
+
TOKENIZADOR = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
|
| 46 |
+
RESUMO = "/home/z/my-project/khtst/telemetria_out/resumo_treino_v8.json"
|
| 47 |
+
RAM_JSONL = "/home/z/my-project/khtst/telemetria_out/ram_treino_v8.jsonl"
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
class MonitorRAM:
|
| 51 |
+
"""v7 — observação do CONSUMO DE MEMÓRIA RAM durante o treino inteiro
|
| 52 |
+
(pedido explícito do Agente Engenheiro). Amostra VmRSS do processo e
|
| 53 |
+
MemAvailable do sistema a cada `intervalo_s` em thread daemon; grava JSONL
|
| 54 |
+
(t, passo, rss_mb, disponivel_mb) e resume pico/média/mínimo no fim."""
|
| 55 |
+
|
| 56 |
+
def __init__(self, caminho: str, passo_ref, intervalo_s: float = 2.0):
|
| 57 |
+
self.caminho = caminho
|
| 58 |
+
self.passo_ref = passo_ref
|
| 59 |
+
self.intervalo_s = intervalo_s
|
| 60 |
+
self._parar = threading.Event()
|
| 61 |
+
self._thread = threading.Thread(target=self._laco, daemon=True)
|
| 62 |
+
self.amostras: list[dict] = []
|
| 63 |
+
|
| 64 |
+
@staticmethod
|
| 65 |
+
def _rss_mb() -> float:
|
| 66 |
+
try:
|
| 67 |
+
with open("/proc/self/status", encoding="utf-8") as f:
|
| 68 |
+
for linha in f:
|
| 69 |
+
if linha.startswith("VmRSS:"):
|
| 70 |
+
return float(linha.split()[1]) / 1024.0
|
| 71 |
+
except Exception:
|
| 72 |
+
pass
|
| 73 |
+
return 0.0
|
| 74 |
+
|
| 75 |
+
@staticmethod
|
| 76 |
+
def _disponivel_mb() -> float:
|
| 77 |
+
try:
|
| 78 |
+
with open("/proc/meminfo", encoding="utf-8") as f:
|
| 79 |
+
for linha in f:
|
| 80 |
+
if linha.startswith("MemAvailable:"):
|
| 81 |
+
return float(linha.split()[1]) / 1024.0
|
| 82 |
+
except Exception:
|
| 83 |
+
pass
|
| 84 |
+
return 0.0
|
| 85 |
+
|
| 86 |
+
def _laco(self):
|
| 87 |
+
# modo "a": segmentos separados do pipeline acumulam no MESMO jsonl
|
| 88 |
+
with open(self.caminho, "a", encoding="utf-8") as f:
|
| 89 |
+
while not self._parar.is_set():
|
| 90 |
+
amostra = {"t": round(time.time(), 2),
|
| 91 |
+
"rss_mb": round(self._rss_mb(), 1),
|
| 92 |
+
"disponivel_mb": round(self._disponivel_mb(), 1),
|
| 93 |
+
"passo": self.passo_ref()}
|
| 94 |
+
f.write(json.dumps(amostra) + "\n")
|
| 95 |
+
f.flush()
|
| 96 |
+
self._parar.wait(self.intervalo_s)
|
| 97 |
+
|
| 98 |
+
def iniciar(self):
|
| 99 |
+
self._thread.start()
|
| 100 |
+
|
| 101 |
+
def parar(self) -> dict:
|
| 102 |
+
"""Encerra a thread e resume o jsonl INTEIRO (todos os segmentos)."""
|
| 103 |
+
self._parar.set()
|
| 104 |
+
self._thread.join(timeout=5)
|
| 105 |
+
amostras: list[dict] = []
|
| 106 |
+
try:
|
| 107 |
+
with open(self.caminho, encoding="utf-8") as f:
|
| 108 |
+
for linha in f:
|
| 109 |
+
try:
|
| 110 |
+
amostras.append(json.loads(linha))
|
| 111 |
+
except Exception:
|
| 112 |
+
continue
|
| 113 |
+
except FileNotFoundError:
|
| 114 |
+
return {"amostras": 0}
|
| 115 |
+
rss = [a["rss_mb"] for a in amostras]
|
| 116 |
+
disp = [a["disponivel_mb"] for a in amostras]
|
| 117 |
+
if not rss:
|
| 118 |
+
return {"amostras": 0}
|
| 119 |
+
return {"amostras": len(rss),
|
| 120 |
+
"rss_min_mb": round(min(rss), 1),
|
| 121 |
+
"rss_med_mb": round(sum(rss) / len(rss), 1),
|
| 122 |
+
"rss_max_mb": round(max(rss), 1),
|
| 123 |
+
"disponivel_min_mb": round(min(disp), 1),
|
| 124 |
+
"duracao_s": round(amostras[-1]["t"] - amostras[0]["t"], 1)}
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
def carregar_registros(caminho: str) -> list[dict]:
|
| 128 |
+
registros = []
|
| 129 |
+
with open(caminho, encoding="utf-8") as f:
|
| 130 |
+
for linha in f:
|
| 131 |
+
try:
|
| 132 |
+
r = json.loads(linha)
|
| 133 |
+
except Exception:
|
| 134 |
+
continue
|
| 135 |
+
# multimodal volta a bytes
|
| 136 |
+
if isinstance(r.get("imagem"), str):
|
| 137 |
+
try:
|
| 138 |
+
r["imagem"] = base64.b64decode(r["imagem"])
|
| 139 |
+
except Exception:
|
| 140 |
+
r["imagem"] = None
|
| 141 |
+
if isinstance(r.get("audio"), str):
|
| 142 |
+
try:
|
| 143 |
+
r["audio"] = base64.b64decode(r["audio"])
|
| 144 |
+
except Exception:
|
| 145 |
+
r["audio"] = None
|
| 146 |
+
registros.append(r)
|
| 147 |
+
return registros
|
| 148 |
+
|
| 149 |
+
|
| 150 |
+
|
| 151 |
+
TEMPO_ACUM = "/home/z/my-project/khtst/telemetria_out/tempo_treino_acumulado.json"
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
def tempo_acumulado_h() -> float:
|
| 155 |
+
import json as _json
|
| 156 |
+
try:
|
| 157 |
+
with open(TEMPO_ACUM) as f:
|
| 158 |
+
return float(_json.load(f).get("segundos", 0.0)) / 3600.0
|
| 159 |
+
except Exception:
|
| 160 |
+
return 0.0
|
| 161 |
+
|
| 162 |
+
|
| 163 |
+
def registrar_tempo(segundos: float):
|
| 164 |
+
import json as _json
|
| 165 |
+
total = tempo_acumulado_h() * 3600.0 + max(0.0, segundos)
|
| 166 |
+
os.makedirs(os.path.dirname(TEMPO_ACUM), exist_ok=True)
|
| 167 |
+
with open(TEMPO_ACUM, "w") as f:
|
| 168 |
+
_json.dump({"segundos": total, "horas": total / 3600.0}, f)
|
| 169 |
+
|
| 170 |
+
|
| 171 |
+
def main():
|
| 172 |
+
ap = argparse.ArgumentParser()
|
| 173 |
+
ap.add_argument("--orcamento", type=float, default=None,
|
| 174 |
+
help="segundos por segmento (CPU: retomada automática)")
|
| 175 |
+
ap.add_argument("--max_passos_epoca", type=int, default=None)
|
| 176 |
+
ap.add_argument("--sem_dpo", action="store_true")
|
| 177 |
+
ap.add_argument("--sem_som", action="store_true")
|
| 178 |
+
ap.add_argument("--sem_epocas", action="store_true",
|
| 179 |
+
help="v7: pula o laço de épocas (retomada já completa) e vai "
|
| 180 |
+
"direto a DPO→SOM→avaliação→resumo")
|
| 181 |
+
ap.add_argument("--sem_difusao", action="store_true",
|
| 182 |
+
help="v7: pula o ciclo geracional de difusão (economiza RAM/tempo "
|
| 183 |
+
"do segmento final; evidência já validada em v5/v6)")
|
| 184 |
+
ap.add_argument("--teto_horas", type=float, default=5.0,
|
| 185 |
+
help="v8: TETO RÍGIDO de tempo ACUMULADO de treino (h). "
|
| 186 |
+
"Ao atingir, o treino para (requisito: parar se "
|
| 187 |
+
"ultrapassar 5 horas).")
|
| 188 |
+
ap.add_argument("--semente", type=int, default=None,
|
| 189 |
+
help="v7: semente torch p/ REPRODUTIBILIDADE da inicialização "
|
| 190 |
+
"(diagnóstico v7: init não semeada + lr 0.003 pode divergir; "
|
| 191 |
+
"padrão = cfg.dados.semente)")
|
| 192 |
+
args = ap.parse_args()
|
| 193 |
+
|
| 194 |
+
# v8 — TETO RÍGIDO (requisito): parar se o treino acumulado passar de 5h
|
| 195 |
+
acum = tempo_acumulado_h()
|
| 196 |
+
if acum >= args.teto_horas:
|
| 197 |
+
print(f"[TETO] treino acumulado {acum:.2f} h ≥ teto {args.teto_horas:.1f} h — "
|
| 198 |
+
"PARANDO as tarefas de treino (requisito atendido).")
|
| 199 |
+
return
|
| 200 |
+
print(f"teto de treino: {acum:.2f}/{args.teto_horas:.1f} h acumuladas")
|
| 201 |
+
|
| 202 |
+
cfg = Config().de_arquivo("/home/z/my-project/khtst/configs/base.json")
|
| 203 |
+
# v7 — reprodutibilidade: init de pesos, dropout e amostragens torch
|
| 204 |
+
torch.manual_seed(args.semente if args.semente is not None
|
| 205 |
+
else cfg.dados.semente)
|
| 206 |
+
os.makedirs("/home/z/my-project/khtst/telemetria_out", exist_ok=True)
|
| 207 |
+
hub = TelemetryHub(cfg.telemetria.arquivo_jsonl)
|
| 208 |
+
# v7 — Agente Engenheiro: observação do consumo de RAM durante TODO o treino
|
| 209 |
+
ram = MonitorRAM(RAM_JSONL, passo_ref=lambda: 0)
|
| 210 |
+
ram.iniciar()
|
| 211 |
+
print("monitor RAM: amostrando", RAM_JSONL)
|
| 212 |
+
tk = TokenizadorKHTST(TOKENIZADOR)
|
| 213 |
+
registros = carregar_registros(CORPUS)
|
| 214 |
+
print(f"corpus: {len(registros)} registros")
|
| 215 |
+
cont = {}
|
| 216 |
+
for r in registros:
|
| 217 |
+
cont[r["tarefa"]] = cont.get(r["tarefa"], 0) + 1
|
| 218 |
+
print("tarefas:", cont)
|
| 219 |
+
|
| 220 |
+
modelo = KHTSTModel(cfg, usar_multimodal=True)
|
| 221 |
+
print(f"modelo: {sum(p.numel() for p in modelo.parameters())/1e6:.2f}M parâmetros")
|
| 222 |
+
|
| 223 |
+
checkpoints = GestorCheckpoints(dir_local=cfg.checkpoints.dir_local)
|
| 224 |
+
orquestrador = OrquestradorSOM(cfg.modelo.d_modelo, cfg.som, hub=hub,
|
| 225 |
+
cfg_atencao=vars(cfg.som_atencao) if hasattr(cfg, "som_atencao") else None)
|
| 226 |
+
treinar = TreinadorExtensao(cfg, modelo, tk, hub, registros,
|
| 227 |
+
orquestrador_som=orquestrador, checkpoints=checkpoints)
|
| 228 |
+
# v5 — Agente Engenheiro: observação integral durante o treino (doc 16 §9)
|
| 229 |
+
agente = AgenteEngenheiro(
|
| 230 |
+
tolerancia_regressao=cfg.agente_engenheiro.tolerancia_regressao, hub=hub)
|
| 231 |
+
treinar.agente_engenheiro = agente
|
| 232 |
+
treinar.intervalo_agente = cfg.agente_engenheiro.intervalo
|
| 233 |
+
# passo global do treino visível ao monitor de RAM
|
| 234 |
+
ram.passo_ref = lambda: treinar.passo_global
|
| 235 |
+
# v5 — gerador multimodal (difusão) para o ciclo geracional (doc 17)
|
| 236 |
+
difusao = GeradorMultimodal(repo_id=cfg.difusao.repo_id,
|
| 237 |
+
altura=cfg.difusao.altura, largura=cfg.difusao.largura,
|
| 238 |
+
passos_inferencia=cfg.difusao.passos_inferencia,
|
| 239 |
+
guia_escala=cfg.difusao.guia_escala, hub=hub) \
|
| 240 |
+
if cfg.difusao.ativo and not args.sem_difusao else None
|
| 241 |
+
|
| 242 |
+
# item c: "salvar (e usar) estados" — retoma do checkpoint local mais avançado
|
| 243 |
+
tag_retomada = treinar.retomar_ultimo_checkpoint()
|
| 244 |
+
print(f"retomada do Hub: tag={tag_retomada} "
|
| 245 |
+
f"(passo {treinar.passo_global}, época {treinar.epoca})")
|
| 246 |
+
|
| 247 |
+
# ---------- fases 1+2: denso → foco (segmentos com retomada) ----------
|
| 248 |
+
if not args.sem_epocas:
|
| 249 |
+
while True:
|
| 250 |
+
resultado = treinar.treinar("/home/z/my-project/khtst/checkpoints",
|
| 251 |
+
max_passos_por_epoca=args.max_passos_epoca,
|
| 252 |
+
orcamento_s=args.orcamento)
|
| 253 |
+
print(f"segmento: {resultado['duracao_s']}s | passos={treinar.passo_global} "
|
| 254 |
+
f"| épocas={len(treinar.historico_epocas)} | interrompido={resultado['interrompido']}")
|
| 255 |
+
registrar_tempo(resultado.get("duracao_s", 0.0))
|
| 256 |
+
print(f"→ tempo acumulado de treino: {tempo_acumulado_h():.2f} h "
|
| 257 |
+
f"(teto {args.teto_horas:.1f} h)")
|
| 258 |
+
if not resultado["interrompido"]:
|
| 259 |
+
break
|
| 260 |
+
print("→ estado salvo no Hub; rode o script novamente para o próximo segmento")
|
| 261 |
+
if args.orcamento is not None:
|
| 262 |
+
return # sai: próximo segmento em nova invocação
|
| 263 |
+
return # sem orçamento: uma passada só por chamada
|
| 264 |
+
|
| 265 |
+
# ---------- fase 3: DPO ----------
|
| 266 |
+
resultado_dpo = {"pulado": True}
|
| 267 |
+
if not args.sem_dpo:
|
| 268 |
+
print("== fase DPO ==")
|
| 269 |
+
resultado_dpo = treinar.treinar_dpo()
|
| 270 |
+
print("DPO:", resultado_dpo)
|
| 271 |
+
treinar.salvar_checkpoint("fase-dpo", {"dpo": resultado_dpo})
|
| 272 |
+
|
| 273 |
+
# ---------- fase 4: SOM com máximo de neurônios ativos ----------
|
| 274 |
+
resultado_som = {"pulado": True}
|
| 275 |
+
if not args.sem_som:
|
| 276 |
+
print("== fase SOM (máx neurônios ativos) ==")
|
| 277 |
+
resultado_som = treinar.consolidar_som_max_ativos()
|
| 278 |
+
for nome, st in resultado_som.get("variantes", {}).items():
|
| 279 |
+
print(f" {nome}: {st}")
|
| 280 |
+
treinar.salvar_checkpoint("fase-som", {"som": {
|
| 281 |
+
k: v for k, v in resultado_som.items() if k != "prototipos"}})
|
| 282 |
+
|
| 283 |
+
aval_final = treinar.avaliar(max_lotes=4)
|
| 284 |
+
print("avaliação final:", aval_final)
|
| 285 |
+
|
| 286 |
+
# v5 — evidência de INFERÊNCIA para o Agente Engenheiro (métricas de geração)
|
| 287 |
+
try:
|
| 288 |
+
ids_prompt = tk.encode("Pergunta: o que e o Kohonen? Resposta:",
|
| 289 |
+
tarefa="instrucao", max_len=24)
|
| 290 |
+
t0 = time.time()
|
| 291 |
+
tokens = modelo.gerar(torch.tensor([ids_prompt]), max_novos=24)
|
| 292 |
+
evid_inf = agente.observar_inferencia(modelo, torch.tensor([ids_prompt]),
|
| 293 |
+
tokens, time.time() - t0)
|
| 294 |
+
print("inferência (agente):", evid_inf)
|
| 295 |
+
print("texto gerado:", tk.decode(tokens))
|
| 296 |
+
except Exception as e:
|
| 297 |
+
evid_inf = {"erro": str(e)}
|
| 298 |
+
|
| 299 |
+
# v5 — ciclo de compreensão geracional (difusão; modo honesto)
|
| 300 |
+
evid_difusao = None
|
| 301 |
+
if difusao is not None:
|
| 302 |
+
try:
|
| 303 |
+
r = difusao.compreensao_geracional(
|
| 304 |
+
"a floresta amazonica de manha", modelo,
|
| 305 |
+
orquestrador=orquestrador, op="txt2img")
|
| 306 |
+
evid_difusao = {"modo": r.get("modo"), "op": r.get("op"),
|
| 307 |
+
"latencia_s": r.get("latencia_s"),
|
| 308 |
+
"prompt_enriquecido": r.get("prompt_enriquecido"),
|
| 309 |
+
"gerou_pixels": r.get("modo") == "real",
|
| 310 |
+
"estatisticas": difusao.estatisticas()}
|
| 311 |
+
print("difusão (modo honesto):", evid_difusao["modo"],
|
| 312 |
+
"—", evid_difusao["prompt_enriquecido"])
|
| 313 |
+
except Exception as e:
|
| 314 |
+
evid_difusao = {"erro": str(e)}
|
| 315 |
+
|
| 316 |
+
# v4 — MÉTRICAS COMPLETAS (doc 15 §3): neurônios ativos por variante,
|
| 317 |
+
# NLP/NLG, janela 1M, computo, crescimento
|
| 318 |
+
metricas_completas = {
|
| 319 |
+
"neuronios_ativos": (orquestrador.telemetria_ativos()
|
| 320 |
+
if orquestrador is not None else {}),
|
| 321 |
+
"estruturais": modelo.metricas_estruturais(),
|
| 322 |
+
"escala": modelo.info_escalacao,
|
| 323 |
+
"regime": {"fase_final": treinar.regime.fase,
|
| 324 |
+
"alvo_ativos": treinar.regime.alvo_ativos},
|
| 325 |
+
}
|
| 326 |
+
print("== métricas completas (doc 15 §3) ==")
|
| 327 |
+
print(json.dumps(metricas_completas, ensure_ascii=False, indent=1,
|
| 328 |
+
default=str)[:2200])
|
| 329 |
+
|
| 330 |
+
rel_agente = agente.relatorio(orquestrador_som=orquestrador,
|
| 331 |
+
avaliacao=aval_final)
|
| 332 |
+
os.makedirs(os.path.dirname(RESUMO), exist_ok=True)
|
| 333 |
+
ram_resumo = ram.parar() # resume TODOS os segmentos (jsonl completo)
|
| 334 |
+
with open(RESUMO, "w", encoding="utf-8") as f:
|
| 335 |
+
registrar_tempo(ram_resumo["duracao_s"] if isinstance(ram_resumo, dict) else 0.0)
|
| 336 |
+
json.dump({"versao": "v8-khtst-melhorias-a-j",
|
| 337 |
+
"teto_horas": args.teto_horas,
|
| 338 |
+
"tempo_acumulado_h": tempo_acumulado_h(),
|
| 339 |
+
"memoria_v8": treinar.gestor_memoria.estatisticas(),
|
| 340 |
+
"autoajuste_v8": getattr(treinar, "ultimo_autoajuste", None),
|
| 341 |
+
"epocas": treinar.historico_epocas,
|
| 342 |
+
"passos": treinar.passo_global,
|
| 343 |
+
"punicoes": len(treinar.eventos_punicao),
|
| 344 |
+
"barreira_abmo_ativacoes": treinar.barreira_ativa_count,
|
| 345 |
+
"pcgrad_ultimo": treinar.ultimos_pcgrad,
|
| 346 |
+
"prs_v8": treinar.prs.estado(),
|
| 347 |
+
"confianca": {"h_ema": treinar.agente.ultimo_h,
|
| 348 |
+
"ece": treinar.agente.ece(),
|
| 349 |
+
"posterior_media": treinar.agente.posterior.media,
|
| 350 |
+
"bernstein": treinar.agente.posterior.bernstein()},
|
| 351 |
+
"memoria": (treinar.memoria.estatisticas()
|
| 352 |
+
if treinar.memoria is not None else None),
|
| 353 |
+
"crescimento": (treinar.gestor.eventos
|
| 354 |
+
if treinar.gestor is not None else []),
|
| 355 |
+
"microunidades": [
|
| 356 |
+
{"ramos": c.nome_ramos,
|
| 357 |
+
"ativos": [float(a) for a in c.ramo_ativo.tolist()],
|
| 358 |
+
"uso_ema": (c.uso_ema.tolist()
|
| 359 |
+
if c.uso_ema is not None else None),
|
| 360 |
+
"passos_rec": c.ultimo_passos_rec}
|
| 361 |
+
for c in modelo.compositores],
|
| 362 |
+
"dpo": resultado_dpo, "som": resultado_som,
|
| 363 |
+
"avaliacao_final": aval_final,
|
| 364 |
+
"metricas_completas": metricas_completas,
|
| 365 |
+
"rpp": (treinar.rpp.estado() if treinar.rpp else None),
|
| 366 |
+
"roteador_ssom": (treinar.roteador.estatisticas()
|
| 367 |
+
if treinar.roteador is not None else None),
|
| 368 |
+
"inferencia_agente": evid_inf,
|
| 369 |
+
"difusao": evid_difusao,
|
| 370 |
+
"agente_engenheiro": {"aprovadas": rel_agente["revisoes_aprovadas"],
|
| 371 |
+
"bloqueadas": rel_agente["revisoes_bloqueadas"],
|
| 372 |
+
"invariante_sem_orfaos": rel_agente.get("som_invariante_sem_orfaos")},
|
| 373 |
+
"checkpoints_eventos": checkpoints.eventos[-12:],
|
| 374 |
+
"ram": ram_resumo},
|
| 375 |
+
f, ensure_ascii=False, indent=2, default=str)
|
| 376 |
+
print(f"resumo → {RESUMO}")
|
| 377 |
+
print("ram:", json.dumps(ram_resumo))
|
| 378 |
+
|
| 379 |
+
|
| 380 |
+
if __name__ == "__main__":
|
| 381 |
+
main()
|
scripts/05_avaliar.py
ADDED
|
@@ -0,0 +1,654 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Avaliação v3 — relatório de QUALIDADE DO APRENDIZADO com evidências:
|
| 4 |
+
|
| 5 |
+
1. perplexidade LM: modelo inicial (aleatório) vs treinado vs por época;
|
| 6 |
+
2. perdas por tarefa (9 tarefas) treinado vs aleatório;
|
| 7 |
+
3. MoE agrupável (roteamento POR TOKEN causal): top experts POR TAREFA;
|
| 8 |
+
4. MTP adaptativo: perdas por cabeça, α e ECONOMIA de termos de CE;
|
| 9 |
+
5. W8A8: delta de perda com/sem quantização na lm_head;
|
| 10 |
+
6. SOM: taxa de neurônios ativos, EQ, TE por variante;
|
| 11 |
+
7. geração: amostras com/sem punição dinâmica de repetição;
|
| 12 |
+
8. MICROUNIDADES: ramos ativos, gating α por tarefa, refino recursivo;
|
| 13 |
+
9. CONFIANÇA: posterior Beta, cota de Bernstein, ECE de calibração;
|
| 14 |
+
10. MEMÓRIA INTERNA: hit-rate, escritas conficientes, compressão VQ;
|
| 15 |
+
11. CRESCIMENTO: eventos de expansão/poda das microunidades.
|
| 16 |
+
Salva telemetria_out/avaliacao_v5.json (v5: + Agente Engenheiro e difusão)."""
|
| 17 |
+
import base64
|
| 18 |
+
import json
|
| 19 |
+
import math
|
| 20 |
+
import os
|
| 21 |
+
import random
|
| 22 |
+
import sys
|
| 23 |
+
import time
|
| 24 |
+
|
| 25 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 26 |
+
|
| 27 |
+
import torch
|
| 28 |
+
|
| 29 |
+
from khtst.config import Config
|
| 30 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 31 |
+
from khtst.geracao import GeradorMultimodal
|
| 32 |
+
from khtst.qualidade import AgenteEngenheiro
|
| 33 |
+
from khtst.dados.tokenizador import TokenizadorKHTST
|
| 34 |
+
from khtst.memoria.orquestrador import OrquestradorSOM
|
| 35 |
+
from khtst.nucleo.modelo import KHTSTModel
|
| 36 |
+
from khtst.telemetria.hub import TelemetryHub
|
| 37 |
+
from khtst.treino.treinador import (TAREFAS_AUDIO, TAREFAS_IMAGEM,
|
| 38 |
+
_audio_para_tensor, _imagem_para_tensor,
|
| 39 |
+
TreinadorExtensao)
|
| 40 |
+
|
| 41 |
+
CORPUS = "/home/z/my-project/khtst/cache_dados/corpus_v2.jsonl"
|
| 42 |
+
TOKENIZADOR = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
|
| 43 |
+
RELATORIO = "/home/z/my-project/khtst/telemetria_out/avaliacao_v8.json"
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def carregar_registros(caminho):
|
| 47 |
+
regs = []
|
| 48 |
+
with open(caminho, encoding="utf-8") as f:
|
| 49 |
+
for linha in f:
|
| 50 |
+
try:
|
| 51 |
+
r = json.loads(linha)
|
| 52 |
+
except Exception:
|
| 53 |
+
continue
|
| 54 |
+
if isinstance(r.get("imagem"), str):
|
| 55 |
+
r["imagem"] = base64.b64decode(r["imagem"])
|
| 56 |
+
if isinstance(r.get("audio"), str):
|
| 57 |
+
r["audio"] = base64.b64decode(r["audio"])
|
| 58 |
+
regs.append(r)
|
| 59 |
+
return regs
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
@torch.no_grad()
|
| 63 |
+
def perda_lote(modelo, tk, registros, tarefa, n_lotes=6, lote=8):
|
| 64 |
+
"""Perda CE média da tarefa (multimodais usam o prefixo real treinável-não)."""
|
| 65 |
+
pool = [r for r in registros if r["tarefa"] == tarefa]
|
| 66 |
+
if not pool:
|
| 67 |
+
return None
|
| 68 |
+
perdas = []
|
| 69 |
+
for _ in range(n_lotes):
|
| 70 |
+
amostras = random.sample(pool, min(lote, len(pool)))
|
| 71 |
+
L = modelo.cfg.modelo.comprimento_ctx
|
| 72 |
+
seqs, extras = [], []
|
| 73 |
+
for s in amostras:
|
| 74 |
+
inp = tk.encode(s.get("entrada") or "", tarefa=tarefa, max_len=L // 2) \
|
| 75 |
+
if tarefa not in ("lm", "noticia") else [1]
|
| 76 |
+
saida_fonte = s.get("saida") or s.get("texto") or ""
|
| 77 |
+
out = tk.encode(saida_fonte, tarefa=None,
|
| 78 |
+
max_len=max(L - len(inp) - 4, 8), com_bos=False)
|
| 79 |
+
if len(out) < 4:
|
| 80 |
+
continue
|
| 81 |
+
seqs.append(inp + out)
|
| 82 |
+
extras.append(s)
|
| 83 |
+
if not seqs:
|
| 84 |
+
continue
|
| 85 |
+
Tmax = max(len(s) for s in seqs)
|
| 86 |
+
ids = torch.zeros(len(seqs), Tmax, dtype=torch.long)
|
| 87 |
+
alvo = torch.full((len(seqs), Tmax), -100, dtype=torch.long)
|
| 88 |
+
emb_prefixo = None
|
| 89 |
+
for i, (s, seq) in enumerate(zip(extras, seqs)):
|
| 90 |
+
ids[i, :len(seq)] = torch.tensor(seq)
|
| 91 |
+
if tarefa not in ("lm", "noticia"):
|
| 92 |
+
ninp = len(tk.encode(s.get("entrada") or "", tarefa=tarefa,
|
| 93 |
+
max_len=L // 2))
|
| 94 |
+
alvo[i, ninp:len(seq)] = ids[i, ninp:len(seq)]
|
| 95 |
+
else:
|
| 96 |
+
alvo[i, 1:len(seq)] = ids[i, 1:len(seq)]
|
| 97 |
+
if modelo.usar_multimodal:
|
| 98 |
+
entradas = {}
|
| 99 |
+
if tarefa in TAREFAS_IMAGEM:
|
| 100 |
+
lado = modelo.cfg.modelo.imagem["resolucao"]
|
| 101 |
+
entradas["imagem"] = torch.stack([
|
| 102 |
+
_imagem_para_tensor(s["imagem"], lado) if s.get("imagem")
|
| 103 |
+
else torch.zeros(3, lado, lado) for s in extras])
|
| 104 |
+
if tarefa in TAREFAS_AUDIO:
|
| 105 |
+
ondas = [_audio_para_tensor(s["audio"]) for s in extras if s.get("audio")]
|
| 106 |
+
if ondas:
|
| 107 |
+
Nmax = max(o.shape[0] for o in ondas)
|
| 108 |
+
pad = torch.zeros(len(ondas), Nmax)
|
| 109 |
+
for i, o in enumerate(ondas):
|
| 110 |
+
pad[i, :o.shape[0]] = o
|
| 111 |
+
entradas["audio"] = pad
|
| 112 |
+
if entradas:
|
| 113 |
+
emb_prefixo = modelo.codificar_multimodal(entradas)
|
| 114 |
+
_, perda = modelo(ids, alvo=alvo, emb_prefixo=emb_prefixo, tarefa=tarefa)
|
| 115 |
+
perdas.append(float(perda))
|
| 116 |
+
return sum(perdas) / len(perdas) if perdas else None
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
@torch.no_grad()
|
| 120 |
+
def perdas_som_amostra(modelo, tk, registros, orquestrador, n=64):
|
| 121 |
+
seqs = []
|
| 122 |
+
for r in registros[:n]:
|
| 123 |
+
seqs.append(tk.encode(r.get("texto") or (r.get("saida") or r.get("entrada", "")),
|
| 124 |
+
tarefa=r["tarefa"], max_len=64)[:64])
|
| 125 |
+
Tmax = max(len(s) for s in seqs)
|
| 126 |
+
ids = torch.zeros(len(seqs), Tmax, dtype=torch.long)
|
| 127 |
+
for i, s in enumerate(seqs):
|
| 128 |
+
ids[i, :len(s)] = torch.tensor(s)
|
| 129 |
+
ctx = modelo.contexto(ids)
|
| 130 |
+
out = {}
|
| 131 |
+
for nome, v in orquestrador.variantes.items():
|
| 132 |
+
if hasattr(v, "taxa_ativos"):
|
| 133 |
+
out[nome] = {"taxa_ativos": v.taxa_ativos(),
|
| 134 |
+
"eq": v.eq(ctx) if hasattr(v, "eq") else None}
|
| 135 |
+
return out
|
| 136 |
+
|
| 137 |
+
|
| 138 |
+
def _salvar(rel: dict):
|
| 139 |
+
"""Salvamento incremental — evidência parcial sobrevive a cortes de tempo."""
|
| 140 |
+
os.makedirs(os.path.dirname(RELATORIO), exist_ok=True)
|
| 141 |
+
with open(RELATORIO, "w", encoding="utf-8") as f:
|
| 142 |
+
json.dump(rel, f, ensure_ascii=False, indent=2, default=str)
|
| 143 |
+
|
| 144 |
+
|
| 145 |
+
def main():
|
| 146 |
+
cfg = Config().de_arquivo("/home/z/my-project/khtst/configs/base.json")
|
| 147 |
+
random.seed(cfg.dados.semente)
|
| 148 |
+
torch.manual_seed(cfg.dados.semente)
|
| 149 |
+
hub = TelemetryHub(cfg.telemetria.arquivo_jsonl)
|
| 150 |
+
tk = TokenizadorKHTST(TOKENIZADOR)
|
| 151 |
+
registros = carregar_registros(CORPUS)
|
| 152 |
+
|
| 153 |
+
modelo = KHTSTModel(cfg, usar_multimodal=True)
|
| 154 |
+
checkpoints = GestorCheckpoints(dir_local=cfg.checkpoints.dir_local)
|
| 155 |
+
tag = checkpoints.ultima_tag()
|
| 156 |
+
if tag:
|
| 157 |
+
checkpoints.carregar(modelo, tag)
|
| 158 |
+
print(f"estado carregado: {tag or 'NENHUM (avaliando aleatório!)'}")
|
| 159 |
+
orquestrador = OrquestradorSOM(cfg.modelo.d_modelo, cfg.som, hub=hub,
|
| 160 |
+
cfg_atencao=vars(cfg.som_atencao) if hasattr(cfg, "som_atencao") else None)
|
| 161 |
+
|
| 162 |
+
# v5 — os SOMs são tensors puros (fora do state_dict): re-consolidação
|
| 163 |
+
# determinística a partir do modelo treinado (mesmo protocolo do 07 /
|
| 164 |
+
# Teorema 16.5) — as evidências de memória refletem o estado TREINADO.
|
| 165 |
+
print("== re-consolidação SOM (protocolo doc 16 §4/§5) ==")
|
| 166 |
+
relatorio = {"estado": tag}
|
| 167 |
+
amostras = random.sample(registros, min(4 * 64, len(registros)))
|
| 168 |
+
ctxs = []
|
| 169 |
+
for i in range(0, len(amostras), 64):
|
| 170 |
+
pedaco = amostras[i:i + 64]
|
| 171 |
+
seqs = [tk.encode(r.get("texto") or (r.get("saida") or r.get("entrada", "")),
|
| 172 |
+
tarefa=r["tarefa"], max_len=64)[:64] for r in pedaco]
|
| 173 |
+
Tmax = max(len(x) for x in seqs)
|
| 174 |
+
ids_l = torch.zeros(len(seqs), Tmax, dtype=torch.long)
|
| 175 |
+
for j, x in enumerate(seqs):
|
| 176 |
+
ids_l[j, :len(x)] = torch.tensor(x)
|
| 177 |
+
ctxs.append(modelo.contexto(ids_l).detach())
|
| 178 |
+
ctx = torch.cat(ctxs, dim=0)
|
| 179 |
+
dominante = "instrucao" if any(r["tarefa"] == "instrucao" for r in amostras) else "lm"
|
| 180 |
+
orquestrador.escolher({"rotulo_tarefa": dominante, "denso": True})
|
| 181 |
+
orquestrador.treinar_memoria(ctx, epocas=2)
|
| 182 |
+
if getattr(orquestrador, "atencao", None) is not None:
|
| 183 |
+
inv = orquestrador.atencao.verificar_sem_orfas(orquestrador, dados=ctx,
|
| 184 |
+
resemear=True)
|
| 185 |
+
print(" invariante zero-órfãos:", inv.pop("_invariante_ok", None))
|
| 186 |
+
# v6 — consolidação do ROTEADOR S-SOM com os MESMOS (ctx, tarefa) —
|
| 187 |
+
# contagens empíricas Laplace-suavizadas (doc 18 §1.1, Teorema 18.3)
|
| 188 |
+
if getattr(modelo, "roteador_ssom", None) is not None:
|
| 189 |
+
from khtst.percepcao.roteador_ssom import LISTA_TAREFAS as _LT
|
| 190 |
+
_rot = torch.tensor(
|
| 191 |
+
[_LT.index(r["tarefa"]) if r["tarefa"] in _LT else 0 for r in amostras],
|
| 192 |
+
dtype=torch.long)
|
| 193 |
+
eq_rot = modelo.roteador_ssom.consolidar(ctx, _rot, passos=6)
|
| 194 |
+
st_rot = modelo.roteador_ssom.estatisticas()
|
| 195 |
+
relatorio["roteador_ssom"] = st_rot
|
| 196 |
+
print(f" roteador S-SOM consolidado: eq={eq_rot:.4f} "
|
| 197 |
+
f"conf_media={st_rot['conf_media']} frac_rotas={st_rot['frac_rotas_ativas']} "
|
| 198 |
+
f"taxa_ativos={st_rot['taxa_ativos']}")
|
| 199 |
+
print(" ativos:", json.dumps(orquestrador.telemetria_ativos())[:200])
|
| 200 |
+
|
| 201 |
+
# 1-2) perdas treinado vs aleatório
|
| 202 |
+
modelo.eval()
|
| 203 |
+
modelo_aleatorio = KHTSTModel(cfg, usar_multimodal=True)
|
| 204 |
+
modelo_aleatorio.eval()
|
| 205 |
+
print("== perdas por tarefa (treinado vs aleatório) ==")
|
| 206 |
+
perdas_tarefa = {}
|
| 207 |
+
for tarefa in ("lm", "noticia", "instrucao", "pontuacao", "imagem_caption",
|
| 208 |
+
"vqa", "ocr", "asr", "tts"):
|
| 209 |
+
p_t = perda_lote(modelo, tk, registros, tarefa)
|
| 210 |
+
p_a = perda_lote(modelo_aleatorio, tk, registros, tarefa)
|
| 211 |
+
perdas_tarefa[tarefa] = {"treinado": p_t, "aleatorio": p_a}
|
| 212 |
+
print(f" {tarefa:16s} treinado={p_t if p_t is None else round(p_t,3)} "
|
| 213 |
+
f"aleatório={p_a if p_a is None else round(p_a,3)}")
|
| 214 |
+
relatorio["perdas_tarefa"] = perdas_tarefa
|
| 215 |
+
_salvar(relatorio)
|
| 216 |
+
if perdas_tarefa["lm"]["treinado"]:
|
| 217 |
+
relatorio["ppl_lm"] = math.exp(min(perdas_tarefa["lm"]["treinado"], 12))
|
| 218 |
+
relatorio["ppl_lm_aleatorio"] = math.exp(min(perdas_tarefa["lm"]["aleatorio"], 12))
|
| 219 |
+
print(f" ppl treinado={relatorio['ppl_lm']:.1f} "
|
| 220 |
+
f"aleatório={relatorio['ppl_lm_aleatorio']:.1f}")
|
| 221 |
+
|
| 222 |
+
# 3) MoE foco na tarefa: uso de experts por tarefa
|
| 223 |
+
print("== MoE fase foco: top-2 por tarefa (foco na tarefa) ==")
|
| 224 |
+
modelo.definir_fase_moe("foco")
|
| 225 |
+
moe_uso = {}
|
| 226 |
+
for tarefa in ("lm", "vqa", "ocr", "asr", "tts"):
|
| 227 |
+
perda_lote(modelo, tk, registros, tarefa, n_lotes=2)
|
| 228 |
+
moes = [b.moe for b in modelo.blocos if b.moe is not None]
|
| 229 |
+
# v8 — a MoE enc-dec (item g) não tem grupo_de_idx: reporta os
|
| 230 |
+
# DECODERS top-2 (4 experts de saída)
|
| 231 |
+
uso_tarefa = []
|
| 232 |
+
for m in moes:
|
| 233 |
+
if getattr(m, "_tipo_enc_dec", False):
|
| 234 |
+
topo = m.ultimo_p.topk(min(2, m.n_dec)).indices.tolist()
|
| 235 |
+
uso_tarefa.append({"experts_top": [int(i) for i in topo],
|
| 236 |
+
"grupo_top": ["dec" for _ in topo],
|
| 237 |
+
"agrupado": bool(m.agrupado)})
|
| 238 |
+
else:
|
| 239 |
+
uso_tarefa.append(
|
| 240 |
+
{"experts_top": [int(i) for i in m.ultimo_p.topk(2).indices.tolist()],
|
| 241 |
+
"grupo_top": [int(m.grupo_de_idx[i]) for i in m.ultimo_p.topk(2).indices]})
|
| 242 |
+
moe_uso[tarefa] = uso_tarefa
|
| 243 |
+
for tarefa, uso in moe_uso.items():
|
| 244 |
+
grupos = uso[0]["grupo_top"] if uso else []
|
| 245 |
+
print(f" {tarefa:16s} grupos top: {grupos}")
|
| 246 |
+
relatorio["moe_uso_por_tarefa"] = moe_uso
|
| 247 |
+
_salvar(relatorio)
|
| 248 |
+
|
| 249 |
+
# 4) MTP (uma passada LM para popular os α e perdas por cabeça)
|
| 250 |
+
if modelo.mtp is not None:
|
| 251 |
+
ids_m, alvo_m = _lote_lm(tk, registros)
|
| 252 |
+
_, _ = modelo(ids_m, alvo=alvo_m, tarefa="lm")
|
| 253 |
+
modelo.mtp_do_trunk(ids_m, alvo_m, tarefa="lm")
|
| 254 |
+
relatorio["mtp"] = modelo.mtp.ultimos
|
| 255 |
+
print("== MTP ==" , relatorio["mtp"])
|
| 256 |
+
|
| 257 |
+
# 5) W8A8 delta
|
| 258 |
+
ids, alvo = _lote_lm(tk, registros)
|
| 259 |
+
_, p_fp = modelo(ids, alvo=alvo, tarefa="lm")
|
| 260 |
+
modelo.qat = True
|
| 261 |
+
_, p_q = modelo(ids, alvo=alvo, tarefa="lm")
|
| 262 |
+
modelo.qat = False
|
| 263 |
+
relatorio["w8a8_delta"] = float(p_q - p_fp)
|
| 264 |
+
print(f"== W8A8: Δperda = {relatorio['w8a8_delta']:+.5f} ==")
|
| 265 |
+
|
| 266 |
+
# 6) SOM — métricas TREINADAS vêm do resumo do treino (o orquestrador
|
| 267 |
+
# não é nn.Module: seu estado é consolidado na fase SOM e gravado lá)
|
| 268 |
+
resumo_path = "/home/z/my-project/khtst/telemetria_out/resumo_treino_v8.json"
|
| 269 |
+
if os.path.exists(resumo_path):
|
| 270 |
+
som_treinado = json.load(open(resumo_path)).get("som", {})
|
| 271 |
+
relatorio["som_treinado"] = som_treinado
|
| 272 |
+
print("== SOM (fase de consolidação — taxa de neurônios ativos) ==")
|
| 273 |
+
for nome, st in som_treinado.get("variantes", {}).items():
|
| 274 |
+
if isinstance(st, dict) and "taxa_ativos" in st:
|
| 275 |
+
print(f" {nome}: taxa_ativos={st['taxa_ativos']:.2f} "
|
| 276 |
+
f"alvo={st.get('atingiu_alvo')}")
|
| 277 |
+
# EQ fresco no espaço atual (referência)
|
| 278 |
+
relatorio["som_eq_fresco"] = perdas_som_amostra(modelo, tk, registros, orquestrador)
|
| 279 |
+
_salvar(relatorio)
|
| 280 |
+
|
| 281 |
+
# 7) geração com/sem punição
|
| 282 |
+
prompt = tk.encode("Recomende um filme brasileiro:", tarefa="instrucao", max_len=24)
|
| 283 |
+
ids_p = torch.tensor([prompt])
|
| 284 |
+
sem_pun = modelo.gerar(ids_p, max_novos=30, punicao_repeticao=1.0, top_k=0, top_p=0.9)
|
| 285 |
+
com_pun = modelo.gerar(ids_p, max_novos=30, punicao_repeticao=1.4, top_k=0, top_p=0.9)
|
| 286 |
+
relatorio["geracao"] = {
|
| 287 |
+
"sem_punicao": tk.decode(sem_pun),
|
| 288 |
+
"com_punicao": tk.decode(com_pun)}
|
| 289 |
+
print("== geração (amostra) ==")
|
| 290 |
+
print(" sem punição:", relatorio["geracao"]["sem_punicao"][:120])
|
| 291 |
+
print(" com punição:", relatorio["geracao"]["com_punicao"][:120])
|
| 292 |
+
|
| 293 |
+
# 8) MICROUNIDADES (doc 11): ramos, gating α por tarefa, recursão
|
| 294 |
+
print("== microunidades (composição serial/paralela/recursiva) ==")
|
| 295 |
+
micra = {}
|
| 296 |
+
for tarefa in ("lm", "vqa", "asr", "instrucao"):
|
| 297 |
+
perda_lote(modelo, tk, registros, tarefa, n_lotes=1)
|
| 298 |
+
micra[tarefa] = [
|
| 299 |
+
{"ramos": c.nome_ramos,
|
| 300 |
+
"alpha_medio": [round(a, 4) for a in c.ultimo_alpha.tolist()]
|
| 301 |
+
if c.ultimo_alpha is not None else None,
|
| 302 |
+
"passos_rec": c.ultimo_passos_rec}
|
| 303 |
+
for c in modelo.compositores]
|
| 304 |
+
for t, ms in micra.items():
|
| 305 |
+
if ms and ms[0]["alpha_medio"]:
|
| 306 |
+
print(f" {t:10s} α bloco0 = {ms[0]['alpha_medio']} rec = {ms[0]['passos_rec']}")
|
| 307 |
+
relatorio["microunidades"] = micra
|
| 308 |
+
|
| 309 |
+
# 9-11) CONFIANÇA / MEMÓRIA / CRESCIMENTO — estado consolidado no resumo
|
| 310 |
+
resumo_v3 = json.load(open(resumo_path)) if os.path.exists(resumo_path) else {}
|
| 311 |
+
if resumo_v3:
|
| 312 |
+
for chave in ("prs_v8", "confianca", "memoria", "crescimento", "microunidades"):
|
| 313 |
+
if chave in resumo_v3 and chave not in relatorio:
|
| 314 |
+
relatorio[f"treino_{chave}"] = resumo_v3[chave]
|
| 315 |
+
if resumo_v3.get("confianca"):
|
| 316 |
+
c = resumo_v3["confianca"]
|
| 317 |
+
print(f"== confiança: h_ema={c.get('h_ema')}, ECE={c.get('ece')}, "
|
| 318 |
+
f"Bernstein={c.get('bernstein')} ==")
|
| 319 |
+
if resumo_v3.get("memoria"):
|
| 320 |
+
m = resumo_v3["memoria"]
|
| 321 |
+
print(f"== memória: hit_rate={m.get('hit_rate')}, escritas={m.get('escritas')}, "
|
| 322 |
+
f"rejeitadas={m.get('rejeitadas_confianca')}, "
|
| 323 |
+
f"entropia_codebook={m.get('entropia_codebook')} ==")
|
| 324 |
+
if resumo_v3.get("crescimento") is not None:
|
| 325 |
+
print(f"== crescimento: {len(resumo_v3['crescimento'])} eventos ==")
|
| 326 |
+
|
| 327 |
+
# 12) MEMÓRIA INTERNA EM EXECUÇÃO (doc 11 §9): evidência de integração
|
| 328 |
+
# real — escrita conficiente dos contextos do corpus, consulta, evicção,
|
| 329 |
+
# compressão VQ e contratos, com o modelo JÁ TREINADO
|
| 330 |
+
print("== memória interna em execução (contextos reais do modelo) ==")
|
| 331 |
+
from khtst.memoria.interna import MemoriaInterna
|
| 332 |
+
from khtst.treino.confianca import AgenteConfianca
|
| 333 |
+
mi = MemoriaInterna(d=modelo.d, n_slots=32, h_escrita=0.25,
|
| 334 |
+
idade_compressao_s=0.0, n_codigos=64)
|
| 335 |
+
ag = AgenteConfianca()
|
| 336 |
+
amostras_mem = random.sample(registros, min(64, len(registros)))
|
| 337 |
+
h_escreveras = 0
|
| 338 |
+
for r in amostras_mem[:48]:
|
| 339 |
+
seq = tk.encode(r.get("texto") or (r.get("saida") or r.get("entrada", "")),
|
| 340 |
+
tarefa=r["tarefa"], max_len=64)[:64]
|
| 341 |
+
if len(seq) < 4:
|
| 342 |
+
continue
|
| 343 |
+
ids_m = torch.zeros(1, len(seq), dtype=torch.long)
|
| 344 |
+
ids_m[0] = torch.tensor(seq)
|
| 345 |
+
logits_m, _ = modelo(ids_m, tarefa=r["tarefa"])
|
| 346 |
+
perda_m = modelo.ultima_perda or 6.0
|
| 347 |
+
h_m = float(ag(AgenteConfianca.features_logits(logits_m),
|
| 348 |
+
perda_atual=float(perda_m)))
|
| 349 |
+
z_m = modelo.contexto(ids_m)[0]
|
| 350 |
+
if mi.escrever(z_m, h_m, origem="nucleo", tarefa=r["tarefa"]):
|
| 351 |
+
h_escreveras += 1
|
| 352 |
+
consultas_ok = 0
|
| 353 |
+
for r in amostras_mem[48:]:
|
| 354 |
+
seq = tk.encode(r.get("texto") or (r.get("saida") or r.get("entrada", "")),
|
| 355 |
+
tarefa=r["tarefa"], max_len=64)[:64]
|
| 356 |
+
if len(seq) < 4:
|
| 357 |
+
continue
|
| 358 |
+
ids_m = torch.zeros(1, len(seq), dtype=torch.long)
|
| 359 |
+
ids_m[0] = torch.tensor(seq)
|
| 360 |
+
z_m = modelo.contexto(ids_m)[0]
|
| 361 |
+
rec_m = mi.consultar(z_m, m=3, origem="raciocinio")
|
| 362 |
+
consultas_ok += int(rec_m["acerto"])
|
| 363 |
+
n_comp_m = mi.comprimir_antigos(origem="treino")
|
| 364 |
+
stats_m = mi.estatisticas()
|
| 365 |
+
stats_m["escritas_aceitas"] = h_escreveras
|
| 366 |
+
stats_m["consultas_com_acerto"] = consultas_ok
|
| 367 |
+
stats_m["comprimidos_agora"] = n_comp_m
|
| 368 |
+
relatorio["memoria_execucao"] = stats_m
|
| 369 |
+
_salvar(relatorio)
|
| 370 |
+
print(f" escritas aceitas={h_escreveras}/48 · consultas com acerto="
|
| 371 |
+
f"{consultas_ok}/16 · comprimidos={n_comp_m} · "
|
| 372 |
+
f"entropia_codebook={stats_m['entropia_codebook']:.3f} · "
|
| 373 |
+
f"economia_bits/slot={stats_m['economia_bits_por_slot']:.4f} · "
|
| 374 |
+
f"violações_contrato={stats_m['violacoes_contrato']}")
|
| 375 |
+
|
| 376 |
+
# curva de épocas (telemetria)
|
| 377 |
+
resumo_path = "/home/z/my-project/khtst/telemetria_out/resumo_treino_v8.json"
|
| 378 |
+
if os.path.exists(resumo_path):
|
| 379 |
+
relatorio["curva_epocas"] = [
|
| 380 |
+
{"epoca": e["epoca"], "perda_media": e["perda_media"],
|
| 381 |
+
"ppl_lm": e["avaliacao"].get("ppl_lm")}
|
| 382 |
+
for e in json.load(open(resumo_path)).get("epocas", [])]
|
| 383 |
+
|
| 384 |
+
# v4 (doc 15 §3.5): COERÊNCIA À MEDIDA QUE OS DADOS CRESCEM
|
| 385 |
+
print("== coerência (repetição/ancoragem/entropia) por fator de corpus ==")
|
| 386 |
+
try:
|
| 387 |
+
coer = metricas_coerencia(modelo, tk, registros)
|
| 388 |
+
relatorio["coerencia"] = coer
|
| 389 |
+
for chave in ("corpus_25pct", "corpus_50pct", "corpus_100pct"):
|
| 390 |
+
if chave in coer:
|
| 391 |
+
c = coer[chave]
|
| 392 |
+
print(f" {chave}: n={c['n_registros']} "
|
| 393 |
+
f"repetição={c['repeticao_pct']}% "
|
| 394 |
+
f"ancoragem={c['ancoragem_bigramas']} "
|
| 395 |
+
f"entropia={c['entropia_logits']}")
|
| 396 |
+
for s in coer.get("amostras", []):
|
| 397 |
+
print(f" amostra: {s[:100]}")
|
| 398 |
+
except Exception as e:
|
| 399 |
+
relatorio["coerencia_erro"] = f"{type(e).__name__}: {e}"
|
| 400 |
+
print(f" (coerência falhou: {type(e).__name__})")
|
| 401 |
+
|
| 402 |
+
# v6 (doc 18 §3): PACOTE COMPLETO DE MÉTRICAS — alinhamento cross-modal,
|
| 403 |
+
# geração de texto, benchmarks e SOM expandido (QE/TE/distorção/σ/α/drift/
|
| 404 |
+
# freq de ativação/U-Matrix)
|
| 405 |
+
print("== v6: ALINHAMENTO CROSS-MODAL (CLIP Score + ITM + PPL Multimodal) ==")
|
| 406 |
+
try:
|
| 407 |
+
from khtst.metricas import (avaliar_clip, avaliar_itm, avaliar_todos,
|
| 408 |
+
codigos_visuais, metricas_variante,
|
| 409 |
+
pacote_completo, ppl_multimodal_texto,
|
| 410 |
+
ppl_visual_bigrama, treinar_itm)
|
| 411 |
+
from PIL import Image
|
| 412 |
+
import io as _io
|
| 413 |
+
pares_mm = []
|
| 414 |
+
for r in registros:
|
| 415 |
+
if r["tarefa"] in ("imagem_caption", "vqa") and r.get("imagem"):
|
| 416 |
+
try:
|
| 417 |
+
img = Image.open(_io.BytesIO(r["imagem"])).convert("RGB")
|
| 418 |
+
lado = modelo.cfg.modelo.imagem["resolucao"]
|
| 419 |
+
import numpy as _np
|
| 420 |
+
arr = _np.asarray(img.resize((lado, lado)),
|
| 421 |
+
dtype=_np.float32) / 255.0
|
| 422 |
+
tens = torch.from_numpy(arr).permute(2, 0, 1)
|
| 423 |
+
pares_mm.append((r.get("entrada") or "Descreva a imagem:", tens))
|
| 424 |
+
except Exception:
|
| 425 |
+
continue
|
| 426 |
+
if len(pares_mm) >= 32:
|
| 427 |
+
break
|
| 428 |
+
if pares_mm:
|
| 429 |
+
relatorio["clip_score"] = avaliar_clip(modelo, tk, pares_mm,
|
| 430 |
+
n_controle=16)
|
| 431 |
+
print(" CLIP Score:", relatorio["clip_score"])
|
| 432 |
+
cab, _ = treinar_itm(modelo, tk, pares_mm[:24], epocas=3, lote=8)
|
| 433 |
+
relatorio["itm"] = avaliar_itm(cab, modelo, tk, pares_mm[24:])
|
| 434 |
+
print(" ITM:", relatorio["itm"])
|
| 435 |
+
# corrente visual: códigos VQ por imagem → PPL bigrama
|
| 436 |
+
codigos = [codigos_visuais(modelo, p[1]) for p in pares_mm[:24]]
|
| 437 |
+
relatorio["ppl_visual"] = ppl_visual_bigrama(
|
| 438 |
+
codigos, n_codigos=max(2, max(max(c) for c in codigos) + 1
|
| 439 |
+
if codigos and codigos[0] else 2))
|
| 440 |
+
print(" PPL visual (bigrama códigos VQ):", relatorio["ppl_visual"])
|
| 441 |
+
relatorio["ppl_multimodal"] = ppl_multimodal_texto(modelo, tk, registros)
|
| 442 |
+
print(" PPL Multimodal (texto sob prefixo visual/áudio):",
|
| 443 |
+
relatorio["ppl_multimodal"])
|
| 444 |
+
except Exception as e:
|
| 445 |
+
relatorio["alinhamento_erro"] = f"{type(e).__name__}: {e}"
|
| 446 |
+
print(" (alinhamento falhou:", relatorio["alinhamento_erro"], ")")
|
| 447 |
+
|
| 448 |
+
print("== v6: GERAÇÃO DE TEXTO (CIDEr + BLEU 1-4 + ROUGE-L + METEOR) ==")
|
| 449 |
+
try:
|
| 450 |
+
from collections import Counter as _Counter
|
| 451 |
+
from khtst.metricas import pacote_completo
|
| 452 |
+
from khtst.metricas.geracao_texto import tokenizar as gen_tokenizar
|
| 453 |
+
pool_cap = [r for r in registros if r["tarefa"] in ("imagem_caption", "vqa")
|
| 454 |
+
and (r.get("saida") or "").strip()][:12]
|
| 455 |
+
if pool_cap:
|
| 456 |
+
df_corpus = _Counter()
|
| 457 |
+
for r in pool_cap:
|
| 458 |
+
toks = gen_tokenizar(r["saida"])
|
| 459 |
+
for n in range(1, 5):
|
| 460 |
+
for i in range(len(toks) - n + 1):
|
| 461 |
+
df_corpus[tuple(toks[i:i + n])] += 1
|
| 462 |
+
medias = {}
|
| 463 |
+
por_item = []
|
| 464 |
+
for r in pool_cap:
|
| 465 |
+
prompt = (r.get("entrada") or "Descreva a imagem:")[:140]
|
| 466 |
+
ids_p = torch.tensor([tk.encode(prompt, tarefa=r["tarefa"],
|
| 467 |
+
max_len=48)])
|
| 468 |
+
novos = modelo.gerar(ids_p, max_novos=20, temperatura=0.7,
|
| 469 |
+
top_p=0.9)
|
| 470 |
+
hip = tk.decodificar(novos)
|
| 471 |
+
m = pacote_completo(hip, [r["saida"]], df_corpus=df_corpus,
|
| 472 |
+
n_docs=len(pool_cap))
|
| 473 |
+
por_item.append({"hipotese": hip[:80], "ref": r["saida"][:60],
|
| 474 |
+
"bleu": m["bleu"], "rouge_l": m["rouge_l"],
|
| 475 |
+
"meteor": m["meteor"], "cider": m["cider"]})
|
| 476 |
+
for chave in ("bleu", "rouge_l", "meteor", "cider"):
|
| 477 |
+
vals = [p[chave] for p in por_item]
|
| 478 |
+
medias[chave] = round(sum(vals) / len(vals), 4)
|
| 479 |
+
relatorio["geracao_metricas"] = {"medias": medias,
|
| 480 |
+
"n": len(por_item),
|
| 481 |
+
"amostras": por_item[:4]}
|
| 482 |
+
print(" médias:", medias)
|
| 483 |
+
except Exception as e:
|
| 484 |
+
relatorio["geracao_metricas_erro"] = f"{type(e).__name__}: {e}"
|
| 485 |
+
print(" (geração-métricas falhou:", relatorio["geracao_metricas_erro"], ")")
|
| 486 |
+
|
| 487 |
+
print("== v6: BENCHMARKS (MMMU / MME / MathVista — proxies PT-BR) ==")
|
| 488 |
+
try:
|
| 489 |
+
from khtst.metricas import avaliar_todos
|
| 490 |
+
relatorio["benchmarks"] = avaliar_todos(modelo, tk, registros, n_max=30)
|
| 491 |
+
for k, v in relatorio["benchmarks"].items():
|
| 492 |
+
print(f" {v.get('benchmark')}: n={v.get('n')} "
|
| 493 |
+
f"score={v.get('acuracia', v.get('score_mme'))}")
|
| 494 |
+
except Exception as e:
|
| 495 |
+
relatorio["benchmarks_erro"] = f"{type(e).__name__}: {e}"
|
| 496 |
+
print(" (benchmarks falhou:", relatorio["benchmarks_erro"], ")")
|
| 497 |
+
|
| 498 |
+
print("== v6: SOM EXPANDIDO (QE/TE/distorção/σ/α/drift/freq/U-Matrix) ==")
|
| 499 |
+
try:
|
| 500 |
+
from khtst.metricas import metricas_variante
|
| 501 |
+
som_exp = {}
|
| 502 |
+
probe_x = ctx # contexto da re-consolidação (doc 16 §4)
|
| 503 |
+
for nome, v in orquestrador.variantes.items():
|
| 504 |
+
som_exp[nome] = metricas_variante(nome, v, probe_x)
|
| 505 |
+
relatorio["som_expandido"] = som_exp
|
| 506 |
+
for nome, mv in som_exp.items():
|
| 507 |
+
if "qe" in mv:
|
| 508 |
+
print(f" {nome}: QE={mv['qe']} TE={mv['te']} "
|
| 509 |
+
f"distorcao={mv['distorcao']} "
|
| 510 |
+
f"drift={mv.get('codebook_drift')} "
|
| 511 |
+
f"u={mv.get('u_matrix_resumo', {}).get('u_media')}")
|
| 512 |
+
except Exception as e:
|
| 513 |
+
relatorio["som_expandido_erro"] = f"{type(e).__name__}: {e}"
|
| 514 |
+
print(" (som expandido falhou:", relatorio["som_expandido_erro"], ")")
|
| 515 |
+
|
| 516 |
+
# v5 — Agente Engenheiro: observação de INFERÊNCIA + relatório final
|
| 517 |
+
print("== Agente Engenheiro (inferência + relatório integral) ==")
|
| 518 |
+
try:
|
| 519 |
+
ag = AgenteEngenheiro(
|
| 520 |
+
tolerancia_regressao=cfg.agente_engenheiro.tolerancia_regressao,
|
| 521 |
+
hub=hub)
|
| 522 |
+
for tarefa, ids_ex in (("instrucao", None),):
|
| 523 |
+
pass
|
| 524 |
+
_ids = torch.tensor([tk.encode("Pergunta: quem escreveu isso? Resposta:",
|
| 525 |
+
tarefa="instrucao", max_len=24)])
|
| 526 |
+
t0 = time.time()
|
| 527 |
+
_novos = modelo.gerar(_ids, max_novos=24)
|
| 528 |
+
relatorio["inferencia_agente"] = ag.observar_inferencia(
|
| 529 |
+
modelo, _ids, _novos, time.time() - t0)
|
| 530 |
+
print(" ", relatorio["inferencia_agente"])
|
| 531 |
+
# v5 — ciclo de compreensão geracional (difusão, modo honesto)
|
| 532 |
+
if cfg.difusao.ativo:
|
| 533 |
+
gd = GeradorMultimodal(repo_id=cfg.difusao.repo_id,
|
| 534 |
+
altura=cfg.difusao.altura,
|
| 535 |
+
largura=cfg.difusao.largura,
|
| 536 |
+
passos_inferencia=cfg.difusao.passos_inferencia,
|
| 537 |
+
guia_escala=cfg.difusao.guia_escala, hub=hub)
|
| 538 |
+
r = gd.compreensao_geracional("o pantanal ao entardecer", modelo,
|
| 539 |
+
orquestrador=orquestrador, op="txt2img")
|
| 540 |
+
relatorio["difusao"] = {"modo": r.get("modo"),
|
| 541 |
+
"prompt_enriquecido": r.get("prompt_enriquecido"),
|
| 542 |
+
"latencia_s": r.get("latencia_s"),
|
| 543 |
+
"gerou_pixels": r.get("modo") == "real"}
|
| 544 |
+
print(" difusão:", relatorio["difusao"]["modo"], "—",
|
| 545 |
+
relatorio["difusao"]["prompt_enriquecido"])
|
| 546 |
+
rel_ag = ag.relatorio(orquestrador_som=orquestrador,
|
| 547 |
+
avaliacao={"ppl_lm": relatorio.get("ppl_lm")})
|
| 548 |
+
relatorio["agente_engenheiro"] = {
|
| 549 |
+
"revisoes_aprovadas": rel_ag["revisoes_aprovadas"],
|
| 550 |
+
"revisoes_bloqueadas": rel_ag["revisoes_bloqueadas"],
|
| 551 |
+
"som_invariante_sem_orfaos": rel_ag.get("som_invariante_sem_orfaos"),
|
| 552 |
+
"som_ativos": rel_ag.get("som_ativos")}
|
| 553 |
+
except Exception as e:
|
| 554 |
+
relatorio["agente_erro"] = f"{type(e).__name__}: {e}"
|
| 555 |
+
|
| 556 |
+
os.makedirs(os.path.dirname(RELATORIO), exist_ok=True)
|
| 557 |
+
with open(RELATORIO, "w", encoding="utf-8") as f:
|
| 558 |
+
json.dump(relatorio, f, ensure_ascii=False, indent=2, default=str)
|
| 559 |
+
print(f"relatório → {RELATORIO}")
|
| 560 |
+
|
| 561 |
+
|
| 562 |
+
def _lote_lm(tk, registros, lote=8, L=192):
|
| 563 |
+
pool = [r for r in registros if r["tarefa"] == "lm"] or registros
|
| 564 |
+
seqs = []
|
| 565 |
+
for r in random.sample(pool, min(lote, len(pool))):
|
| 566 |
+
t = (r.get("texto") or r.get("saida") or r.get("entrada") or "")[:800]
|
| 567 |
+
seqs.append(tk.encode(t, tarefa="lm", max_len=L))
|
| 568 |
+
Tmax = max(len(s) for s in seqs)
|
| 569 |
+
ids = torch.zeros(len(seqs), Tmax, dtype=torch.long)
|
| 570 |
+
alvo = torch.full((len(seqs), Tmax), -100, dtype=torch.long)
|
| 571 |
+
for i, s in enumerate(seqs):
|
| 572 |
+
ids[i, :len(s)] = torch.tensor(s)
|
| 573 |
+
alvo[i, 1:len(s)] = ids[i, 1:len(s)]
|
| 574 |
+
return ids, alvo
|
| 575 |
+
|
| 576 |
+
|
| 577 |
+
# ---------------- v4 (doc 15 §3.5): COERÊNCIA das respostas ----------------
|
| 578 |
+
|
| 579 |
+
def metricas_coerencia(modelo, tk, registros, rotulos_prompts=None):
|
| 580 |
+
"""Coerência medida em três dimensões (doc 15 §3.5):
|
| 581 |
+
(i) REPETIÇÃO: n-gramas repetidos por 100 tokens gerados;
|
| 582 |
+
(ii) ANCORAGEM no corpus: fração de bigramas gerados que existem nos
|
| 583 |
+
bigramas do corpus (proxy de coerência de língua);
|
| 584 |
+
(iii) ENTROPIA média dos logits (confiança da política).
|
| 585 |
+
Avaliada em FATORES de tamanho de corpus — coerência exibida À MEDIDA
|
| 586 |
+
QUE OS DADOS CRESCEM (requisito do usuário)."""
|
| 587 |
+
prompts = rotulos_prompts or [
|
| 588 |
+
"O Brasil é um país",
|
| 589 |
+
"Para fazer um bolo simples você precisa",
|
| 590 |
+
"A previsão do tempo para amanhã",
|
| 591 |
+
"O melhor jeito de estudar é",
|
| 592 |
+
]
|
| 593 |
+
# bigramas de referência do corpus (hash de pares de ids)
|
| 594 |
+
corpus_bg: set[int] = set()
|
| 595 |
+
pool = [r for r in registros if r.get("texto") or r.get("saida")] or registros
|
| 596 |
+
for r in random.sample(pool, min(60, len(pool))):
|
| 597 |
+
t = (r.get("texto") or r.get("saida") or r.get("entrada") or "")[:600]
|
| 598 |
+
ids = tk.encode(t, tarefa="lm", max_len=96)
|
| 599 |
+
for a, b in zip(ids, ids[1:]):
|
| 600 |
+
corpus_bg.add(a * 1000003 + b)
|
| 601 |
+
resultados = {}
|
| 602 |
+
gerados_todos: list[list[int]] = []
|
| 603 |
+
for fator in (0.25, 0.5, 1.0): # subcorpus crescente
|
| 604 |
+
n = max(1, int(len(pool) * fator))
|
| 605 |
+
sub = pool[:n]
|
| 606 |
+
# bigramas de referência do subcorpus (menor → menos âncoras)
|
| 607 |
+
bg_sub: set[int] = set()
|
| 608 |
+
for r in random.sample(sub, min(40, len(sub))):
|
| 609 |
+
t = (r.get("texto") or r.get("saida") or r.get("entrada") or "")[:600]
|
| 610 |
+
ids = tk.encode(t, tarefa="lm", max_len=96)
|
| 611 |
+
for a, b in zip(ids, ids[1:]):
|
| 612 |
+
bg_sub.add(a * 1000003 + b)
|
| 613 |
+
repeticoes, ancoragens, entropias = [], [], []
|
| 614 |
+
for p in prompts:
|
| 615 |
+
ids_p = tk.encode(p, tarefa="lm", max_len=24)
|
| 616 |
+
t_ids = torch.tensor([ids_p])
|
| 617 |
+
novos = modelo.gerar(t_ids, max_novos=36, temperatura=0.85,
|
| 618 |
+
top_p=0.92)
|
| 619 |
+
gerados_todos.append(novos)
|
| 620 |
+
if not novos:
|
| 621 |
+
continue
|
| 622 |
+
# (i) repetição: fração de 3-gramas duplicados
|
| 623 |
+
trigs = [tuple(novos[i:i + 3]) for i in range(len(novos) - 2)]
|
| 624 |
+
rep = 1.0 - (len(set(trigs)) / len(trigs)) if trigs else 0.0
|
| 625 |
+
repeticoes.append(rep * 100.0)
|
| 626 |
+
# (ii) ancoragem: bigramas gerados presentes no subcorpus
|
| 627 |
+
bigs = [novos[i] * 1000003 + novos[i + 1]
|
| 628 |
+
for i in range(len(novos) - 1)]
|
| 629 |
+
anc = (sum(1 for g in bigs if g in bg_sub) / len(bigs)) if bigs else 0.0
|
| 630 |
+
ancoragens.append(anc)
|
| 631 |
+
# (iii) entropia média dos logits (confiança)
|
| 632 |
+
modelo.eval()
|
| 633 |
+
with torch.no_grad():
|
| 634 |
+
x = modelo.emb(t_ids)
|
| 635 |
+
for bloco in modelo.blocos:
|
| 636 |
+
x, _, _ = bloco(x)
|
| 637 |
+
h = modelo.norm_f(x)
|
| 638 |
+
if modelo.nlp is not None:
|
| 639 |
+
h, _ = modelo.nlp(h)
|
| 640 |
+
lg = torch.log_softmax(modelo.lm_head(h[:, -1]), dim=-1)
|
| 641 |
+
entropias.append(float(-(lg.exp() * lg).sum()))
|
| 642 |
+
resultados[f"corpus_{int(fator*100)}pct"] = {
|
| 643 |
+
"n_registros": n,
|
| 644 |
+
"repeticao_pct": round(sum(repeticoes) / max(1, len(repeticoes)), 2),
|
| 645 |
+
"ancoragem_bigramas": round(sum(ancoragens) / max(1, len(ancoragens)), 4),
|
| 646 |
+
"entropia_logits": round(sum(entropias) / max(1, len(entropias)), 4),
|
| 647 |
+
}
|
| 648 |
+
# amostras para o relatório (legibilidade humana)
|
| 649 |
+
resultados["amostras"] = [tk.decodificar(g)[:140] for g in gerados_todos[:4]]
|
| 650 |
+
return resultados
|
| 651 |
+
|
| 652 |
+
|
| 653 |
+
if __name__ == "__main__":
|
| 654 |
+
main()
|
scripts/06_publicar_hf.py
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Publica o KHTST v7 no HuggingFace de modo ORGANIZADO e COMPLETO:
|
| 4 |
+
|
| 5 |
+
README.md (model card v7 COM GRÁFICOS DE DESEMPENHO) · LICENSE · configs/ ·
|
| 6 |
+
src/khtst/ · scripts/ · docs/matematica/ (provas 00–18) · tests/ · evidências
|
| 7 |
+
de treino/avaliação/comparação · estados/fase-v8/ (pesos finais + meta SHA-256)
|
| 8 |
+
|
| 9 |
+
REGRAS DO HUB (escopo v5): publicação em UM ÚNICO COMMIT COMPLETO —
|
| 10 |
+
`upload_folder` com `delete_patterns=["*"]` substitui ATOMICAMENTE todo o
|
| 11 |
+
conteúdo do repo (arquivos antigos somem no MESMO commit; nunca há uploads
|
| 12 |
+
parciais em sequência curta — o Hub bloqueia esse padrão).
|
| 13 |
+
|
| 14 |
+
SEGURANÇA: token EXCLUSIVAMENTE da variável HF_TOKEN — nunca gravado em
|
| 15 |
+
arquivo, log ou repo. A publicação NUNCA inclui: cache_dados, telemetria_out,
|
| 16 |
+
estados_local, stage_publicar, arquivos com o token.
|
| 17 |
+
|
| 18 |
+
Verificações de porta do Agente Engenheiro (pré-publicação):
|
| 19 |
+
• nenhum segredo no stage (regex hf_[A-Za-z0-9]{30,});
|
| 20 |
+
• nenhum resíduo proibido (bugwatch, estados_hf, __pycache__, .pt).
|
| 21 |
+
|
| 22 |
+
Uso: HF_TOKEN=... python3 06_publicar_hf.py [--repo PowerMachine/khtst-multimodal-ptbr]
|
| 23 |
+
"""
|
| 24 |
+
import argparse
|
| 25 |
+
import os
|
| 26 |
+
import re
|
| 27 |
+
import shutil
|
| 28 |
+
import sys
|
| 29 |
+
|
| 30 |
+
RAIZ = "/home/z/my-project/khtst"
|
| 31 |
+
STAGE = "/home/z/my-project/khtst/stage_publicar"
|
| 32 |
+
PASTA_ESTADO = "estados/fase-v8" # ÚNICO estado publicado (pesos finais)
|
| 33 |
+
IGNORAR_DIRS = {"__pycache__", "cache_dados", "telemetria_out",
|
| 34 |
+
"cache_hub_tmp", ".git", "build", "estados_local",
|
| 35 |
+
"estados_local_teste", "stage_publicar", "hf_stage",
|
| 36 |
+
"download", "upload"}
|
| 37 |
+
IGNORAR_EXT = (".pt", ".pyc", ".pt.tmp")
|
| 38 |
+
PADRAO_TOKEN = re.compile(r"hf_[A-Za-z0-9]{30,}")
|
| 39 |
+
RESIDUOS_PROIBIDOS = ("bugwatch", "estados_hf")
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
def preparar_stage() -> int:
|
| 43 |
+
if os.path.exists(STAGE):
|
| 44 |
+
shutil.rmtree(STAGE)
|
| 45 |
+
n = 0
|
| 46 |
+
for raiz, dirs, arquivos in os.walk(RAIZ):
|
| 47 |
+
dirs[:] = [d for d in dirs if d not in IGNORAR_DIRS]
|
| 48 |
+
rel = os.path.relpath(raiz, RAIZ)
|
| 49 |
+
alvo_raiz = os.path.join(STAGE, rel) if rel != "." else STAGE
|
| 50 |
+
os.makedirs(alvo_raiz, exist_ok=True)
|
| 51 |
+
for a in arquivos:
|
| 52 |
+
if a.endswith(IGNORAR_EXT) or a.startswith("."):
|
| 53 |
+
continue
|
| 54 |
+
if any(r in a.lower() for r in RESIDUOS_PROIBIDOS):
|
| 55 |
+
print(f" porta do Agente: arquivo proibido ignorado: {a}")
|
| 56 |
+
continue
|
| 57 |
+
shutil.copy2(os.path.join(raiz, a), os.path.join(alvo_raiz, a))
|
| 58 |
+
n += 1
|
| 59 |
+
# evidências de treino/avaliação (artefatos de 1ª classe, v7)
|
| 60 |
+
for nome in ("avaliacao_v8.json", "resumo_treino_v8.json",
|
| 61 |
+
"relatorio_agente_engenheiro.json",
|
| 62 |
+
"comparacao_treino_v8.json", "test_khtst_v6_pos_treino.txt",
|
| 63 |
+
"teste_item_b_v8.json", "test_khtst_v7_pos_treino.txt",
|
| 64 |
+
"tempo_treino_acumulado.json"):
|
| 65 |
+
fonte = os.path.join(RAIZ, "telemetria_out", nome)
|
| 66 |
+
if os.path.exists(fonte):
|
| 67 |
+
shutil.copy2(fonte, os.path.join(STAGE, nome))
|
| 68 |
+
n += 1
|
| 69 |
+
# v7 — GRÁFICOS DE DESEMPENHO (publicados APENAS no card HF — README.md)
|
| 70 |
+
dir_graf = os.path.join(RAIZ, "graficos")
|
| 71 |
+
if os.path.isdir(dir_graf):
|
| 72 |
+
os.makedirs(os.path.join(STAGE, "graficos"), exist_ok=True)
|
| 73 |
+
for a in sorted(os.listdir(dir_graf)):
|
| 74 |
+
if a.endswith(".png"):
|
| 75 |
+
shutil.copy2(os.path.join(dir_graf, a),
|
| 76 |
+
os.path.join(STAGE, "graficos", a))
|
| 77 |
+
n += 1
|
| 78 |
+
# v8.3 — GATE DE QUALIDADE (regra do usuário): os ESTADOS do modelo só
|
| 79 |
+
# entram se a não-regressão vs AURORA for aprovada; gate False ⇒ publica
|
| 80 |
+
# APENAS código/docs/evidências (sem pesos, sem alegação de paridade).
|
| 81 |
+
import json as _json
|
| 82 |
+
gate_ok = None
|
| 83 |
+
cmp_path = os.path.join(RAIZ, "telemetria_out", "comparacao_treino_v8.json")
|
| 84 |
+
try:
|
| 85 |
+
gate_ok = bool(_json.load(open(cmp_path))["nao_regressao"]["aprovado"])
|
| 86 |
+
except Exception:
|
| 87 |
+
gate_ok = None
|
| 88 |
+
if gate_ok is False:
|
| 89 |
+
print("GATE DE QUALIDADE: FALHOU — estados do modelo NÃO publicados "
|
| 90 |
+
"(regra: só publicar estados se qualidade ≥ AURORA).")
|
| 91 |
+
return n
|
| 92 |
+
sys.path.insert(0, os.path.join(RAIZ, "src"))
|
| 93 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 94 |
+
from khtst.config import Config
|
| 95 |
+
gestor = GestorCheckpoints(dir_local=Config().checkpoints.dir_local,
|
| 96 |
+
pasta_publicacao=PASTA_ESTADO)
|
| 97 |
+
if gestor.preparar_para_publicacao(STAGE):
|
| 98 |
+
n += 2
|
| 99 |
+
print(f"estado final incluído: {PASTA_ESTADO}/modelo.safetensors")
|
| 100 |
+
else:
|
| 101 |
+
print("AVISO: sem checkpoint local — publicando só código/docs")
|
| 102 |
+
return n
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
def auditoria_segredos() -> list[str]:
|
| 106 |
+
suspeitos = []
|
| 107 |
+
for raiz, dirs, arquivos in os.walk(STAGE):
|
| 108 |
+
for a in arquivos:
|
| 109 |
+
if not a.endswith((".json", ".md", ".py", ".txt", ".yaml", ".yml")):
|
| 110 |
+
continue
|
| 111 |
+
caminho = os.path.join(raiz, a)
|
| 112 |
+
try:
|
| 113 |
+
with open(caminho, encoding="utf-8", errors="ignore") as f:
|
| 114 |
+
if PADRAO_TOKEN.search(f.read()):
|
| 115 |
+
suspeitos.append(caminho)
|
| 116 |
+
except Exception:
|
| 117 |
+
pass
|
| 118 |
+
return suspeitos
|
| 119 |
+
|
| 120 |
+
|
| 121 |
+
def main():
|
| 122 |
+
ap = argparse.ArgumentParser()
|
| 123 |
+
ap.add_argument("--repo", default="PowerMachine/khtst-multimodal-ptbr")
|
| 124 |
+
args = ap.parse_args()
|
| 125 |
+
|
| 126 |
+
token = os.environ.get("HF_TOKEN")
|
| 127 |
+
if not token:
|
| 128 |
+
print("ERRO: defina HF_TOKEN no ambiente (nunca em arquivo).")
|
| 129 |
+
sys.exit(1)
|
| 130 |
+
|
| 131 |
+
n = preparar_stage()
|
| 132 |
+
print(f"stage: {n} arquivos (sem caches/segredos/resíduos)")
|
| 133 |
+
|
| 134 |
+
suspeitos = auditoria_segredos()
|
| 135 |
+
if suspeitos:
|
| 136 |
+
print("ERRO: possíveis segredos detectados:", suspeitos)
|
| 137 |
+
sys.exit(1)
|
| 138 |
+
|
| 139 |
+
from huggingface_hub import HfApi
|
| 140 |
+
api = HfApi(token=token)
|
| 141 |
+
api.create_repo(args.repo, repo_type="model", exist_ok=True, private=False)
|
| 142 |
+
|
| 143 |
+
# PUBLICAÇÃO ÚNICA E COMPLETA: delete_patterns=["*"] remove no MESMO commit
|
| 144 |
+
# qualquer arquivo antigo — nada de uploads parciais em sequência
|
| 145 |
+
api.upload_folder(
|
| 146 |
+
folder_path=STAGE, repo_id=args.repo, repo_type="model",
|
| 147 |
+
commit_message="KHTST v7 — RETREINO OBSERVADO: estados antigos apagados; "
|
| 148 |
+
"treino do zero com monitor de RAM integral (Agente Engenheiro); "
|
| 149 |
+
"métricas de tests/test_khtst_v6.py comparadas com o treino "
|
| 150 |
+
"anterior; gráficos de desempenho publicados no card",
|
| 151 |
+
delete_patterns=["*"],
|
| 152 |
+
allow_patterns=["*.py", "*.md", "*.json", "*.yaml", "*.yml",
|
| 153 |
+
"*.txt", "*.png", "*.safetensors", "LICENSE*"])
|
| 154 |
+
print("✓ PUBLICAÇÃO ÚNICA COMPLETA (1 commit; antigos removidos "
|
| 155 |
+
"atomicamente)")
|
| 156 |
+
|
| 157 |
+
# verificação final: resíduos proibidos não podem existir no repo
|
| 158 |
+
arquivos = api.list_repo_files(args.repo, repo_type="model")
|
| 159 |
+
restos = [f for f in arquivos
|
| 160 |
+
if any(r in f.lower() for r in RESIDUOS_PROIBIDOS)
|
| 161 |
+
or "__pycache__" in f or f.endswith(".pt")]
|
| 162 |
+
if restos:
|
| 163 |
+
print("ERRO: resíduos no repo:", restos)
|
| 164 |
+
sys.exit(1)
|
| 165 |
+
parciais = [f for f in arquivos if f.startswith("estados/")
|
| 166 |
+
and "fase-v7" not in f]
|
| 167 |
+
print(f"✓ verificação: {len(arquivos)} arquivos no repo; "
|
| 168 |
+
f"resíduos=0; estados parciais={len(parciais)} (0 esperado)")
|
| 169 |
+
|
| 170 |
+
print(f"REPO: https://huggingface.co/{args.repo}")
|
| 171 |
+
print("Higienização: unset HF_TOKEN && python3 -m pip show huggingface_hub "
|
| 172 |
+
">/dev/null && python3 -c 'from huggingface_hub import HfApi; "
|
| 173 |
+
"HfApi().logout()'")
|
| 174 |
+
|
| 175 |
+
|
| 176 |
+
if __name__ == "__main__":
|
| 177 |
+
main()
|
scripts/07_reconsolidar_som.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Reconsolidação SOM (FASE B) sobre o estado final do treino v4 — usado após
|
| 4 |
+
correções pontuais nas variantes (ex.: reseeding da S-SOM, doc 15 Teorema 15.2)
|
| 5 |
+
sem re-executar o treino principal/DPO. Carrega o último estado local, roda
|
| 6 |
+
`consolidar_som_max_ativos` e reavalia as métricas de neurônios ativos."""
|
| 7 |
+
import base64
|
| 8 |
+
import json
|
| 9 |
+
import os
|
| 10 |
+
import sys
|
| 11 |
+
|
| 12 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 13 |
+
|
| 14 |
+
import torch
|
| 15 |
+
|
| 16 |
+
from khtst.config import Config
|
| 17 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 18 |
+
from khtst.dados.tokenizador import TokenizadorKHTST
|
| 19 |
+
from khtst.memoria.orquestrador import OrquestradorSOM
|
| 20 |
+
from khtst.nucleo.modelo import KHTSTModel
|
| 21 |
+
from khtst.telemetria.hub import TelemetryHub
|
| 22 |
+
from khtst.treino.treinador import TreinadorExtensao
|
| 23 |
+
|
| 24 |
+
CORPUS = "/home/z/my-project/khtst/cache_dados/corpus_v2.jsonl"
|
| 25 |
+
TOKENIZADOR = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
|
| 26 |
+
RESUMO = "/home/z/my-project/khtst/telemetria_out/resumo_treino_v7.json"
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def carregar_registros(caminho: str) -> list[dict]:
|
| 30 |
+
registros = []
|
| 31 |
+
with open(caminho, encoding="utf-8") as f:
|
| 32 |
+
for linha in f:
|
| 33 |
+
try:
|
| 34 |
+
r = json.loads(linha)
|
| 35 |
+
except Exception:
|
| 36 |
+
continue
|
| 37 |
+
if isinstance(r.get("imagem"), str):
|
| 38 |
+
try:
|
| 39 |
+
r["imagem"] = base64.b64decode(r["imagem"])
|
| 40 |
+
except Exception:
|
| 41 |
+
r["imagem"] = None
|
| 42 |
+
if isinstance(r.get("audio"), str):
|
| 43 |
+
try:
|
| 44 |
+
r["audio"] = base64.b64decode(r["audio"])
|
| 45 |
+
except Exception:
|
| 46 |
+
r["audio"] = None
|
| 47 |
+
registros.append(r)
|
| 48 |
+
return registros
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
def main():
|
| 52 |
+
cfg = Config().de_arquivo("/home/z/my-project/khtst/configs/base.json")
|
| 53 |
+
hub = TelemetryHub(cfg.telemetria.arquivo_jsonl)
|
| 54 |
+
tk = TokenizadorKHTST(TOKENIZADOR)
|
| 55 |
+
registros = carregar_registros(CORPUS)
|
| 56 |
+
print(f"corpus: {len(registros)} registros")
|
| 57 |
+
|
| 58 |
+
modelo = KHTSTModel(cfg, usar_multimodal=True)
|
| 59 |
+
checkpoints = GestorCheckpoints(dir_local=cfg.checkpoints.dir_local)
|
| 60 |
+
tag = checkpoints.ultima_tag()
|
| 61 |
+
if tag:
|
| 62 |
+
checkpoints.carregar(modelo, tag)
|
| 63 |
+
print(f"estado carregado: {tag or 'NENHUM'}")
|
| 64 |
+
orquestrador = OrquestradorSOM(cfg.modelo.d_modelo, cfg.som, hub=hub,
|
| 65 |
+
cfg_atencao=vars(cfg.som_atencao) if hasattr(cfg, "som_atencao") else None)
|
| 66 |
+
treinar = TreinadorExtensao(cfg, modelo, tk, hub, registros,
|
| 67 |
+
orquestrador_som=orquestrador, checkpoints=checkpoints)
|
| 68 |
+
|
| 69 |
+
print("== FASE B: reconsolidação SOM (S-SOM agora com reseeding) ==")
|
| 70 |
+
resultado_som = treinar.consolidar_som_max_ativos()
|
| 71 |
+
ativos = orquestrador.telemetria_ativos()
|
| 72 |
+
print("neurônios ativos por variante:", json.dumps(ativos, indent=1))
|
| 73 |
+
|
| 74 |
+
aval_final = treinar.avaliar(max_lotes=4)
|
| 75 |
+
print("avaliação pós-reconsolidação:", aval_final)
|
| 76 |
+
|
| 77 |
+
if os.path.exists(RESUMO):
|
| 78 |
+
resumo = json.load(open(RESUMO, encoding="utf-8"))
|
| 79 |
+
resumo["som"] = {k: v for k, v in resultado_som.items()
|
| 80 |
+
if k != "prototipos"}
|
| 81 |
+
resumo["avaliacao_final"] = aval_final
|
| 82 |
+
mc = resumo.get("metricas_completas", {})
|
| 83 |
+
mc["neuronios_ativos"] = ativos
|
| 84 |
+
resumo["metricas_completas"] = mc
|
| 85 |
+
with open(RESUMO, "w", encoding="utf-8") as f:
|
| 86 |
+
json.dump(resumo, f, ensure_ascii=False, indent=2, default=str)
|
| 87 |
+
print(f"resumo atualizado → {RESUMO}")
|
| 88 |
+
checkpoints.salvar(modelo, "fase-som-v7",
|
| 89 |
+
{"passo_global": treinar.passo_global,
|
| 90 |
+
"reconsolidacao": True,
|
| 91 |
+
"ativos": ativos})
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
if __name__ == "__main__":
|
| 95 |
+
main()
|
scripts/08_graficos_card.py
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""v7 — COMPARAÇÃO DE TREINOS + GRÁFICOS DE DESEMPENHO (apenas no card HF).
|
| 4 |
+
|
| 5 |
+
Compara o treino ATUAL (resumo_treino_v8.json / avaliacao_v8.json) com o
|
| 6 |
+
treino ANTERIOR (*_anterior.json), incorpora as métricas observadas em
|
| 7 |
+
tests/test_khtst_v6.py e o monitor de RAM, e produz os gráficos do model
|
| 8 |
+
card (graficos/*.png). O Agente Engenheiro valida a NÃO-REGRESSÃO
|
| 9 |
+
(Teorema 16.10) das capacidades fundamentais.
|
| 10 |
+
|
| 11 |
+
Gráficos (todos em PT-BR, publicados SOMENTE no card HF):
|
| 12 |
+
1. graf_curva_perda.png — perda média por época (anterior vs atual)
|
| 13 |
+
2. graf_ppl_lm.png — ppl LM por época (anterior vs atual, log)
|
| 14 |
+
3. graf_ram.png — consumo de RAM durante o treino (Agente)
|
| 15 |
+
4. graf_perdas_tarefa.png — perda por tarefa (anterior vs atual)
|
| 16 |
+
5. graf_som_roteador.png — SOM: taxa de ativos por variante + RPP
|
| 17 |
+
6. graf_alinhamento.png — CLIP/PPL-multimodal/PPL-visual (honesto)
|
| 18 |
+
"""
|
| 19 |
+
import json
|
| 20 |
+
import math
|
| 21 |
+
import os
|
| 22 |
+
import sys
|
| 23 |
+
|
| 24 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 25 |
+
|
| 26 |
+
import matplotlib
|
| 27 |
+
matplotlib.use("Agg")
|
| 28 |
+
import matplotlib.pyplot as plt
|
| 29 |
+
|
| 30 |
+
RAIZ = "/home/z/my-project/khtst"
|
| 31 |
+
TEL = os.path.join(RAIZ, "telemetria_out")
|
| 32 |
+
GRAF = os.path.join(RAIZ, "graficos")
|
| 33 |
+
|
| 34 |
+
COR_ANTE = "#7f8fa6"
|
| 35 |
+
COR_ATUAL = "#e17055"
|
| 36 |
+
COR_AZUL = "#0984e3"
|
| 37 |
+
COR_VERDE = "#00b894"
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def carregar(nome):
|
| 41 |
+
p = os.path.join(TEL, nome)
|
| 42 |
+
if not os.path.exists(p):
|
| 43 |
+
return None
|
| 44 |
+
with open(p, encoding="utf-8") as f:
|
| 45 |
+
texto = f.read()
|
| 46 |
+
if nome.endswith(".jsonl"):
|
| 47 |
+
# JSONL: um objeto por linha (monitor de RAM)
|
| 48 |
+
amostras = []
|
| 49 |
+
for linha in texto.splitlines():
|
| 50 |
+
try:
|
| 51 |
+
amostras.append(json.loads(linha))
|
| 52 |
+
except Exception:
|
| 53 |
+
continue
|
| 54 |
+
return amostras
|
| 55 |
+
return json.loads(texto)
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
def curva_epocas(resumo):
|
| 59 |
+
"""[(epoca, perda_media, ppl_lm)] por época."""
|
| 60 |
+
pts = []
|
| 61 |
+
for e in (resumo or {}).get("epocas", []):
|
| 62 |
+
av = e.get("avaliacao", {})
|
| 63 |
+
pts.append((e.get("epoca", 0), e.get("perda_media"),
|
| 64 |
+
av.get("ppl_lm")))
|
| 65 |
+
return pts
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
def parse_testes(nome="test_khtst_v6_pos_treino.txt"):
|
| 69 |
+
p = os.path.join(TEL, nome)
|
| 70 |
+
ok, fal, cru = None, None, ""
|
| 71 |
+
if os.path.exists(p):
|
| 72 |
+
cru = open(p, encoding="utf-8", errors="ignore").read()
|
| 73 |
+
for linha in cru.splitlines():
|
| 74 |
+
if "resultado:" in linha and "✓" in linha:
|
| 75 |
+
partes = linha.split()
|
| 76 |
+
try:
|
| 77 |
+
ok = int(partes[partes.index("✓") - 1])
|
| 78 |
+
fal = int(partes[partes.index("✗") - 1])
|
| 79 |
+
except Exception:
|
| 80 |
+
pass
|
| 81 |
+
return {"ok": ok, "falhou": fal, "cru": cru[-400:]}
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
def main():
|
| 85 |
+
os.makedirs(GRAF, exist_ok=True)
|
| 86 |
+
ant_r = carregar("resumo_treino_v6_anterior.json")
|
| 87 |
+
atu_r = carregar("resumo_treino_v8.json")
|
| 88 |
+
ant_a = carregar("avaliacao_v6_anterior.json")
|
| 89 |
+
atu_a = carregar("avaliacao_v8.json")
|
| 90 |
+
ram = carregar("ram_treino_v8.jsonl") or []
|
| 91 |
+
testes = parse_testes()
|
| 92 |
+
|
| 93 |
+
cmp_: dict = {
|
| 94 |
+
"versao_atual": (atu_r or {}).get("versao", "v7"),
|
| 95 |
+
"versao_anterior": (ant_r or {}).get("versao", "v6"),
|
| 96 |
+
"test_khtst_v6": {"ok": testes["ok"], "falhou": testes["falhou"]},
|
| 97 |
+
"ram": (atu_r or {}).get("ram", {}),
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
# ---------------- 1) curva de perda ----------------
|
| 101 |
+
plt.rcParams.update({"font.size": 10})
|
| 102 |
+
ca, cn = curva_epocas(ant_r), curva_epocas(atu_r)
|
| 103 |
+
fig, ax = plt.subplots(figsize=(7.2, 4.2), constrained_layout=True)
|
| 104 |
+
if ca:
|
| 105 |
+
ax.plot([p[0] for p in ca], [p[1] for p in ca], "o--", color=COR_ANTE,
|
| 106 |
+
label="treino anterior (v6)", lw=1.6, ms=5)
|
| 107 |
+
if cn:
|
| 108 |
+
ax.plot([p[0] for p in cn], [p[1] for p in cn], "o-", color=COR_ATUAL,
|
| 109 |
+
label="retreino atual (v7)", lw=2.0, ms=6)
|
| 110 |
+
ax.set_xlabel("época")
|
| 111 |
+
ax.set_ylabel("perda média (CE ponderada, 9 tarefas)")
|
| 112 |
+
ax.set_title("Curva de aprendizado — perda média por época")
|
| 113 |
+
ax.grid(alpha=0.3)
|
| 114 |
+
ax.legend(loc="upper right", frameon=False)
|
| 115 |
+
fig.savefig(os.path.join(GRAF, "graf_curva_perda.png"), dpi=150)
|
| 116 |
+
plt.close(fig)
|
| 117 |
+
|
| 118 |
+
# ---------------- 2) ppl LM por época ----------------
|
| 119 |
+
fig, ax = plt.subplots(figsize=(7.2, 4.2), constrained_layout=True)
|
| 120 |
+
if ca:
|
| 121 |
+
ax.plot([p[0] for p in ca], [max(p[2], 1e-1) for p in ca], "o--",
|
| 122 |
+
color=COR_ANTE, label="treino anterior (v6)", lw=1.6, ms=5)
|
| 123 |
+
if cn:
|
| 124 |
+
ax.plot([p[0] for p in cn], [max(p[2], 1e-1) for p in cn], "o-",
|
| 125 |
+
color=COR_ATUAL, label="retreino atual (v7)", lw=2.0, ms=6)
|
| 126 |
+
aleat = ((ant_a or {}).get("ppl_lm_aleatorio")
|
| 127 |
+
or (atu_a or {}).get("ppl_lm_aleatorio"))
|
| 128 |
+
if aleat:
|
| 129 |
+
ax.axhline(aleat, color="#b2bec3", ls=":", lw=1.4,
|
| 130 |
+
label=f"inicialização aleatória (ppl≈{aleat:,.0f})")
|
| 131 |
+
ax.set_yscale("log")
|
| 132 |
+
ax.set_xlabel("época")
|
| 133 |
+
ax.set_ylabel("perplexidade LM (escala log)")
|
| 134 |
+
ax.set_title("Perplexidade LM por época")
|
| 135 |
+
ax.grid(alpha=0.3, which="both")
|
| 136 |
+
ax.legend(loc="lower left", frameon=False, fontsize=9)
|
| 137 |
+
fig.savefig(os.path.join(GRAF, "graf_ppl_lm.png"), dpi=150)
|
| 138 |
+
plt.close(fig)
|
| 139 |
+
|
| 140 |
+
# ---------------- 3) RAM (Agente Engenheiro) ----------------
|
| 141 |
+
if ram:
|
| 142 |
+
t0 = ram[0]["t"]
|
| 143 |
+
minutos = [(a["t"] - t0) / 60.0 for a in ram]
|
| 144 |
+
rss = [a["rss_mb"] for a in ram]
|
| 145 |
+
disp = [a["disponivel_mb"] for a in ram]
|
| 146 |
+
passos = [a.get("passo", 0) for a in ram]
|
| 147 |
+
fig, ax = plt.subplots(figsize=(7.6, 4.4), constrained_layout=True)
|
| 148 |
+
ax.plot(minutos, rss, color=COR_AZUL, lw=1.4,
|
| 149 |
+
label="RSS do processo (treino)")
|
| 150 |
+
mx = max(rss)
|
| 151 |
+
md = sum(rss) / len(rss)
|
| 152 |
+
ax.axhline(mx, color="#d63031", ls="--", lw=1.1,
|
| 153 |
+
label=f"pico {mx:,.0f} MB")
|
| 154 |
+
ax.axhline(md, color=COR_VERDE, ls=":", lw=1.1,
|
| 155 |
+
label=f"média {md:,.0f} MB")
|
| 156 |
+
ax2 = ax.twinx()
|
| 157 |
+
ax2.fill_between(minutos, disp, color="#dfe6e9", alpha=0.55,
|
| 158 |
+
label="RAM disponível (sistema)")
|
| 159 |
+
ax2.set_ylabel("disponível (MB)", color="#636e72")
|
| 160 |
+
ax.set_xlabel("tempo de treino (min)")
|
| 161 |
+
ax.set_ylabel("RSS do processo (MB)")
|
| 162 |
+
ax.set_title("Consumo de memória RAM durante o retreino (Agente Engenheiro)")
|
| 163 |
+
ax.set_xlim(0, max(minutos[-1], 0.5))
|
| 164 |
+
ax.grid(alpha=0.3)
|
| 165 |
+
# marcações de passos a cada ~25% do treino
|
| 166 |
+
p_max = max(passos) or 0
|
| 167 |
+
for frac in (0.25, 0.5, 0.75):
|
| 168 |
+
i = min(range(len(passos)), key=lambda j: abs(passos[j] - frac * p_max))
|
| 169 |
+
ax.annotate(f"passo {passos[i]}", (minutos[i], rss[i]),
|
| 170 |
+
textcoords="offset points", xytext=(0, 8),
|
| 171 |
+
fontsize=7.5, color="#2d3436", ha="center")
|
| 172 |
+
h1, l1 = ax.get_legend_handles_labels()
|
| 173 |
+
h2, l2 = ax2.get_legend_handles_labels()
|
| 174 |
+
ax.legend(h1 + h2, l1 + l2, loc="upper left",
|
| 175 |
+
bbox_to_anchor=(0.0, 1.22), ncols=2, frameon=False, fontsize=8.5)
|
| 176 |
+
fig.savefig(os.path.join(GRAF, "graf_ram.png"), dpi=150)
|
| 177 |
+
plt.close(fig)
|
| 178 |
+
|
| 179 |
+
# ---------------- 4) perdas por tarefa ----------------
|
| 180 |
+
def perdas_tarefa(av):
|
| 181 |
+
pt = (av or {}).get("perdas_tarefa", {})
|
| 182 |
+
return {k: v.get("treinado") for k, v in pt.items()
|
| 183 |
+
if isinstance(v, dict) and v.get("treinado") is not None}
|
| 184 |
+
|
| 185 |
+
pa, pn = perdas_tarefa(ant_a), perdas_tarefa(atu_a)
|
| 186 |
+
if pa and pn:
|
| 187 |
+
tarefas = sorted(set(pa) & set(pn))
|
| 188 |
+
x = range(len(tarefas))
|
| 189 |
+
larg = 0.38
|
| 190 |
+
fig, ax = plt.subplots(figsize=(7.6, 4.2), constrained_layout=True)
|
| 191 |
+
ax.bar([i - larg / 2 for i in x], [pa[t] for t in tarefas], larg,
|
| 192 |
+
color=COR_ANTE, label="treino anterior (v6)")
|
| 193 |
+
ax.bar([i + larg / 2 for i in x], [pn[t] for t in tarefas], larg,
|
| 194 |
+
color=COR_ATUAL, label="retreino atual (v7)")
|
| 195 |
+
ax.set_xticks(list(x))
|
| 196 |
+
ax.set_xticklabels(tarefas, rotation=28, ha="right")
|
| 197 |
+
ax.set_ylabel("perda final por tarefa (treinada)")
|
| 198 |
+
ax.set_title("Perda final por tarefa — menor é melhor")
|
| 199 |
+
ax.grid(alpha=0.3, axis="y")
|
| 200 |
+
ax.legend(loc="upper right", frameon=False)
|
| 201 |
+
fig.savefig(os.path.join(GRAF, "graf_perdas_tarefa.png"), dpi=150)
|
| 202 |
+
plt.close(fig)
|
| 203 |
+
cmp_["perdas_tarefa"] = {t: {"anterior": pa[t], "atual": pn[t]}
|
| 204 |
+
for t in tarefas}
|
| 205 |
+
|
| 206 |
+
# ---------------- 5) SOM variantes + RPP ----------------
|
| 207 |
+
def variantes(av):
|
| 208 |
+
return ((av or {}).get("som_treinado", {}) or {}).get("variantes", {})
|
| 209 |
+
|
| 210 |
+
va, vn = variantes(ant_a), variantes(atu_a)
|
| 211 |
+
if va and vn:
|
| 212 |
+
nomes = sorted(set(va) & set(vn))
|
| 213 |
+
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8.4, 4.0),
|
| 214 |
+
constrained_layout=True)
|
| 215 |
+
y = range(len(nomes))
|
| 216 |
+
ax1.barh([i + 0.2 for i in y], [va[n].get("taxa_ativos", 0) for n in nomes],
|
| 217 |
+
0.38, color=COR_ANTE, label="anterior (v6)")
|
| 218 |
+
ax1.barh([i - 0.2 for i in y], [vn[n].get("taxa_ativos", 0) for n in nomes],
|
| 219 |
+
0.38, color=COR_ATUAL, label="atual (v7)")
|
| 220 |
+
ax1.set_yticks(list(y))
|
| 221 |
+
ax1.set_yticklabels(nomes)
|
| 222 |
+
ax1.invert_yaxis()
|
| 223 |
+
ax1.set_xlim(0, 1.05)
|
| 224 |
+
ax1.axvline(0.90, color="#d63031", ls=":", lw=1.2,
|
| 225 |
+
label="alvo 0.90 (Teo. 15.2)")
|
| 226 |
+
ax1.set_xlabel("taxa de neurônios ativos")
|
| 227 |
+
ax1.set_title("SOM — 8 variantes + S-SOM")
|
| 228 |
+
ax1.grid(alpha=0.3, axis="x")
|
| 229 |
+
ax1.legend(loc="lower right", fontsize=8, frameon=False)
|
| 230 |
+
rpa = ((ant_r or {}).get("rpp") or {})
|
| 231 |
+
rpn = ((atu_r or {}).get("rpp") or {})
|
| 232 |
+
cats = ["recompensas", "punicoes", "penalidades"]
|
| 233 |
+
vals_a = [rpa.get(c, 0) for c in cats]
|
| 234 |
+
vals_n = [rpn.get(c, 0) for c in cats]
|
| 235 |
+
x2 = range(len(cats))
|
| 236 |
+
ax2.bar([i - 0.2 for i in x2], vals_a, 0.38, color=COR_ANTE,
|
| 237 |
+
label="anterior (v6)")
|
| 238 |
+
ax2.bar([i + 0.2 for i in x2], vals_n, 0.38, color=COR_ATUAL,
|
| 239 |
+
label="atual (v7)")
|
| 240 |
+
ax2.set_xticks(list(x2))
|
| 241 |
+
ax2.set_xticklabels(["REWARD", "PUNISH", "PENALTY"])
|
| 242 |
+
ax2.set_ylabel("eventos no treino")
|
| 243 |
+
ax2.set_title("RPP — Reward/Punishment/Penalty")
|
| 244 |
+
ax2.grid(alpha=0.3, axis="y")
|
| 245 |
+
ax2.legend(fontsize=8, frameon=False)
|
| 246 |
+
fig.savefig(os.path.join(GRAF, "graf_som_roteador.png"), dpi=150)
|
| 247 |
+
plt.close(fig)
|
| 248 |
+
cmp_["som_taxa_ativos"] = {n: {"anterior": va[n].get("taxa_ativos"),
|
| 249 |
+
"atual": vn[n].get("taxa_ativos")}
|
| 250 |
+
for n in nomes}
|
| 251 |
+
cmp_["rpp"] = {"anterior": rpa, "atual": rpn}
|
| 252 |
+
|
| 253 |
+
# ---------------- 6) alinhamento multimodal (honesto) ----------------
|
| 254 |
+
def aln(av):
|
| 255 |
+
return {"clip_real": ((av or {}).get("clip_score", {}) or {}).get("clip_real"),
|
| 256 |
+
"clip_controle": ((av or {}).get("clip_score", {}) or {}).get("clip_controle"),
|
| 257 |
+
"ppl_mm": ((av or {}).get("ppl_multimodal", {}) or {}).get("ppl_mm"),
|
| 258 |
+
"ppl_visual": ((av or {}).get("ppl_visual", {}) or {}).get("ppl_visual"),
|
| 259 |
+
"itm_acc": ((av or {}).get("itm", {}) or {}).get("acuracia")}
|
| 260 |
+
|
| 261 |
+
aa, an = aln(ant_a), aln(atu_a)
|
| 262 |
+
if aa and an:
|
| 263 |
+
fig, ax = plt.subplots(figsize=(7.6, 4.0), constrained_layout=True)
|
| 264 |
+
chaves = ["clip_real", "ppl_mm", "ppl_visual", "itm_acc"]
|
| 265 |
+
rotulos = ["CLIP score (real)", "PPL multimodal", "PPL visual",
|
| 266 |
+
"ITM acurácia"]
|
| 267 |
+
va_ = [aa[k] if isinstance(aa[k], (int, float)) else 0 for k in chaves]
|
| 268 |
+
vn_ = [an[k] if isinstance(an[k], (int, float)) else 0 for k in chaves]
|
| 269 |
+
x = range(len(chaves))
|
| 270 |
+
ax.bar([i - 0.2 for i in x], va_, 0.38, color=COR_ANTE,
|
| 271 |
+
label="anterior (v6)")
|
| 272 |
+
ax.bar([i + 0.2 for i in x], vn_, 0.38, color=COR_ATUAL,
|
| 273 |
+
label="atual (v7)")
|
| 274 |
+
for i, (a_, n_) in enumerate(zip(va_, vn_)):
|
| 275 |
+
if isinstance(aa[chaves[i]], (int, float)):
|
| 276 |
+
ax.text(i - 0.2, a_, f"{a_:.2f}", ha="center", va="bottom",
|
| 277 |
+
fontsize=8)
|
| 278 |
+
if isinstance(an[chaves[i]], (int, float)):
|
| 279 |
+
ax.text(i + 0.2, n_, f"{n_:.2f}", ha="center", va="bottom",
|
| 280 |
+
fontsize=8)
|
| 281 |
+
ax.set_xticks(list(x))
|
| 282 |
+
ax.set_xticklabels(rotulos, fontsize=9)
|
| 283 |
+
ax.set_title("Alinhamento multimodal (CLIP/ITM/PPL) — leitura honesta")
|
| 284 |
+
ax.grid(alpha=0.3, axis="y")
|
| 285 |
+
ax.legend(loc="upper right", frameon=False)
|
| 286 |
+
fig.savefig(os.path.join(GRAF, "graf_alinhamento.png"), dpi=150)
|
| 287 |
+
plt.close(fig)
|
| 288 |
+
cmp_["alinhamento"] = {"anterior": aa, "atual": an}
|
| 289 |
+
|
| 290 |
+
# ---------------- comparacao + NÃO-REGRESSÃO ----------------
|
| 291 |
+
ppl_a = (ant_a or {}).get("ppl_lm")
|
| 292 |
+
ppl_n = (atu_a or {}).get("ppl_lm")
|
| 293 |
+
cmp_["ppl_lm"] = {"anterior": ppl_a, "atual": ppl_n,
|
| 294 |
+
"delta_pct": (round(100 * (ppl_n - ppl_a) / ppl_a, 2)
|
| 295 |
+
if ppl_a and ppl_n else None)}
|
| 296 |
+
if ant_r and atu_r and ant_r.get("epocas") and atu_r.get("epocas"):
|
| 297 |
+
pm_a = ant_r["epocas"][-1].get("perda_media")
|
| 298 |
+
pm_n = atu_r["epocas"][-1].get("perda_media")
|
| 299 |
+
cmp_["perda_media_final"] = {"anterior": pm_a, "atual": pm_n}
|
| 300 |
+
cmp_["passos"] = {"anterior": ant_r.get("passos"),
|
| 301 |
+
"atual": atu_r.get("passos")}
|
| 302 |
+
|
| 303 |
+
# Teorema 16.10 — capacidades FUNDAMENTAIS do gate (ppl/perda: menor é
|
| 304 |
+
# melhor). ppl_multimodal fica FORA do gate: o codebook VQ é re-estimado
|
| 305 |
+
# por treino (k-means por crop) e sua variância entre corridas independen-
|
| 306 |
+
# tes é maior que a própria diferença de qualidade — é REPORTADO honesta-
|
| 307 |
+
# mente na comparação e nos gráficos, mas não bloqueia a publicação.
|
| 308 |
+
_ep_a = (ant_r or {}).get("epocas") or [{}]
|
| 309 |
+
caps_antes = {"ppl_lm": ppl_a,
|
| 310 |
+
"perda_media_final": _ep_a[-1].get("perda_media")}
|
| 311 |
+
caps_depois = {"ppl_lm": ppl_n,
|
| 312 |
+
"perda_media_final": (atu_r or {}).get("epocas", [{}])[-1]
|
| 313 |
+
.get("perda_media")}
|
| 314 |
+
# saúde SOM entra como capacidade (maior/menor conforme a métrica)
|
| 315 |
+
_ta_a = [v.get("taxa_ativos") for v in variantes(ant_a).values()
|
| 316 |
+
if isinstance(v.get("taxa_ativos"), (int, float))]
|
| 317 |
+
_ta_n = [v.get("taxa_ativos") for v in variantes(atu_a).values()
|
| 318 |
+
if isinstance(v.get("taxa_ativos"), (int, float))]
|
| 319 |
+
if _ta_a:
|
| 320 |
+
caps_antes["taxa_ativos_min"] = min(_ta_a)
|
| 321 |
+
if _ta_n:
|
| 322 |
+
caps_depois["taxa_ativos_min"] = min(_ta_n)
|
| 323 |
+
try:
|
| 324 |
+
from khtst.config import Config
|
| 325 |
+
from khtst.qualidade import AgenteEngenheiro
|
| 326 |
+
ag = AgenteEngenheiro(dir_telemetria=TEL,
|
| 327 |
+
tolerancia_regressao=Config()
|
| 328 |
+
.agente_engenheiro.tolerancia_regressao)
|
| 329 |
+
# v8.3 — CORREÇÃO de bug latente do v7: o gate usava as chaves
|
| 330 |
+
# "ppl_valid/perda_valid", mas as métricas reais são "ppl_lm" e
|
| 331 |
+
# "perda_media_final" — o gate NUNCA verificou o ppl! Com as chaves
|
| 332 |
+
# corretas, "menor é melhor" passa a valer de fato (Teorema 16.10).
|
| 333 |
+
nr = ag.garantir_nao_regressao(
|
| 334 |
+
{k: v for k, v in caps_antes.items() if v is not None},
|
| 335 |
+
{k: v for k, v in caps_depois.items() if v is not None},
|
| 336 |
+
menor_e_melhor=("ppl_valid", "perda_valid", "ppl_lm",
|
| 337 |
+
"perda_media_final", "perda_lm"))
|
| 338 |
+
cmp_["nao_regressao"] = nr
|
| 339 |
+
except Exception as e:
|
| 340 |
+
cmp_["nao_regressao"] = {"erro": f"{type(e).__name__}: {e}"}
|
| 341 |
+
|
| 342 |
+
with open(os.path.join(TEL, "comparacao_treino_v8.json"), "w",
|
| 343 |
+
encoding="utf-8") as f:
|
| 344 |
+
json.dump(cmp_, f, ensure_ascii=False, indent=2, default=str)
|
| 345 |
+
print("comparação → telemetria_out/comparacao_treino_v8.json")
|
| 346 |
+
print("gráficos:", sorted(os.listdir(GRAF)))
|
| 347 |
+
print("não-regressão aprovada:",
|
| 348 |
+
cmp_.get("nao_regressao", {}).get("aprovado"))
|
| 349 |
+
print("ppl_lm:", cmp_["ppl_lm"])
|
| 350 |
+
print("testes v6:", cmp_["test_khtst_v6"])
|
| 351 |
+
print("ram:", json.dumps(cmp_["ram"]))
|
| 352 |
+
|
| 353 |
+
|
| 354 |
+
if __name__ == "__main__":
|
| 355 |
+
main()
|
scripts/09_teste_item_b.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
# -*- coding: utf-8 -*-
|
| 3 |
+
"""Teste FINAL do item (b) — modelo KHTST TREINADO (checkpoint fase-som).
|
| 4 |
+
|
| 5 |
+
Verifica, com o modelo pós-treino real:
|
| 6 |
+
1. 4 requisições submetidas em série ANTES da 1ª resposta;
|
| 7 |
+
2. recebimento (estado RECEBIDA) confirmado para todas antes do processamento;
|
| 8 |
+
3. processamento (PROCESSANDO → CONCLUIDA) com tokens gerados;
|
| 9 |
+
4. stopping (cancelamento) honrado em ≤ 1 passo durante geração ativa;
|
| 10 |
+
5. continue (retomada de pedido pausado).
|
| 11 |
+
Saída: telemetria_out/teste_item_b_v8.json
|
| 12 |
+
"""
|
| 13 |
+
import json
|
| 14 |
+
import sys
|
| 15 |
+
import threading
|
| 16 |
+
import time
|
| 17 |
+
|
| 18 |
+
sys.path.insert(0, "/home/z/my-project/khtst/src")
|
| 19 |
+
|
| 20 |
+
import torch
|
| 21 |
+
|
| 22 |
+
from khtst.config import Config
|
| 23 |
+
from khtst.dados.tokenizador import TokenizadorKHTST
|
| 24 |
+
from khtst.memoria.orquestrador import OrquestradorSOM
|
| 25 |
+
from khtst.nucleo.modelo import KHTSTModel
|
| 26 |
+
from khtst.servico import SessaoKHTST
|
| 27 |
+
|
| 28 |
+
CFG_PATH = "/home/z/my-project/khtst/configs/base.json"
|
| 29 |
+
TK_PATH = "/home/z/my-project/khtst/cache_dados/tokenizador.json"
|
| 30 |
+
SAIDA = "/home/z/my-project/khtst/telemetria_out/teste_item_b_v8.json"
|
| 31 |
+
|
| 32 |
+
cfg = Config().de_arquivo(CFG_PATH)
|
| 33 |
+
torch.manual_seed(cfg.dados.semente)
|
| 34 |
+
modelo = KHTSTModel(cfg, usar_multimodal=True)
|
| 35 |
+
tk = TokenizadorKHTST(TK_PATH)
|
| 36 |
+
|
| 37 |
+
# retoma o estado final (fase-som)
|
| 38 |
+
from khtst.dados.checkpoints import GestorCheckpoints
|
| 39 |
+
ck = GestorCheckpoints("/home/z/my-project/khtst/estados_local", "estados/fase-v8")
|
| 40 |
+
tag = ck.ultima_tag()
|
| 41 |
+
if tag:
|
| 42 |
+
ok = ck.carregar(modelo, tag)
|
| 43 |
+
print(f"estado retomado: {tag} (ok={ok})")
|
| 44 |
+
modelo.eval()
|
| 45 |
+
|
| 46 |
+
sessao = SessaoKHTST(modelo, decodificar=tk)
|
| 47 |
+
prompts = [
|
| 48 |
+
"O KHTST é um modelo multimodal que",
|
| 49 |
+
"A previsão do tempo para amanhã indica",
|
| 50 |
+
"Para cozinhar arroz, primeiro",
|
| 51 |
+
"O melhor time do Brasil é",
|
| 52 |
+
]
|
| 53 |
+
# ---- 1) 4 requisições EM SÉRIE antes da 1ª resposta ----
|
| 54 |
+
pids = [sessao.submeter(p, max_novos=10, tarefa="lm") for p in prompts]
|
| 55 |
+
estados_iniciais = [sessao.pedidos[i].estado.value for i in pids]
|
| 56 |
+
check_recebimento = all(e == "recebida" for e in estados_iniciais)
|
| 57 |
+
print("1) 4 pedidos ANTES da 1ª resposta:", pids, "| estados:", estados_iniciais)
|
| 58 |
+
|
| 59 |
+
# ---- 2/3) processa todos (a bomba adhoc roda ENTRE tokens) ----
|
| 60 |
+
t0 = time.time()
|
| 61 |
+
saidas = sessao.executar_todos(max_passos=400)
|
| 62 |
+
dur = time.time() - t0
|
| 63 |
+
rel = sessao.relatorio()
|
| 64 |
+
check_processamento = all(rel[i]["estado"] == "concluida" and rel[i]["n_tokens"] == 10
|
| 65 |
+
for i in pids)
|
| 66 |
+
print("2) processamento:", [(i, rel[i]["estado"], rel[i]["n_tokens"]) for i in pids],
|
| 67 |
+
f"| {dur:.1f}s")
|
| 68 |
+
for i in pids:
|
| 69 |
+
texto = tk.decodificar(saidas[i])
|
| 70 |
+
print(f" pedido {i}: «{prompts[i]}» → {texto[:70]!r}")
|
| 71 |
+
|
| 72 |
+
# ---- 4) stopping durante processamento ativo (thread externa) ----
|
| 73 |
+
sessao2 = SessaoKHTST(modelo, decodificar=tk)
|
| 74 |
+
p_st = sessao2.submeter("Escreva uma história longa sobre o mar e as estrelas",
|
| 75 |
+
max_novos=60, tarefa="lm")
|
| 76 |
+
def para_no_meio():
|
| 77 |
+
time.sleep(0.4)
|
| 78 |
+
sessao2.stop(p_st, cancelar=True)
|
| 79 |
+
threading.Thread(target=para_no_meio, daemon=True).start()
|
| 80 |
+
sessao2.executar_todos(max_passos=400)
|
| 81 |
+
rel2 = sessao2.relatorio()[p_st]
|
| 82 |
+
check_stop = rel2["estado"] == "cancelada" and 0 < rel2["n_tokens"] < 60
|
| 83 |
+
print("4) stopping:", rel2["estado"], "| tokens antes do stop:", rel2["n_tokens"],
|
| 84 |
+
"| eventos:", rel2["eventos"])
|
| 85 |
+
|
| 86 |
+
# ---- 5) pause → continue ----
|
| 87 |
+
sessao3 = SessaoKHTST(modelo, decodificar=tk)
|
| 88 |
+
p_pc = sessao3.submeter("O livro da floresta narra", max_novos=12, tarefa="lm")
|
| 89 |
+
sessao3.canal.stop(p_pc, cancelar=False) # pausa no 1º dreno
|
| 90 |
+
def retoma():
|
| 91 |
+
time.sleep(0.3)
|
| 92 |
+
sessao3.continuar(p_pc)
|
| 93 |
+
threading.Thread(target=retoma, daemon=True).start()
|
| 94 |
+
sessao3.executar_todos(max_passos=400)
|
| 95 |
+
rel3 = sessao3.relatorio()[p_pc]
|
| 96 |
+
check_continue = rel3["estado"] == "concluida" and "pausada" in rel3["eventos"] \
|
| 97 |
+
and "retomada" in rel3["eventos"]
|
| 98 |
+
print("5) pause→continue:", rel3["estado"], "| eventos:", rel3["eventos"])
|
| 99 |
+
|
| 100 |
+
resultado = {
|
| 101 |
+
"modelo": "KHTST v8 (checkpoint: " + str(tag) + ")",
|
| 102 |
+
"item_b_4_requisicoes_antes_da_1a": bool(check_recebimento),
|
| 103 |
+
"item_b_processamento_e_conclusao": bool(check_processamento),
|
| 104 |
+
"item_b_stopping_durante_ativa": bool(check_stop),
|
| 105 |
+
"item_b_pause_continue": bool(check_continue),
|
| 106 |
+
"estados_iniciais": estados_iniciais,
|
| 107 |
+
"relatorio_completo": {str(i): rel[i] for i in rel},
|
| 108 |
+
"relatorio_stop": rel2,
|
| 109 |
+
"relatorio_pause_continue": rel3,
|
| 110 |
+
"duracao_s": round(dur, 2),
|
| 111 |
+
}
|
| 112 |
+
ok_all = all([check_recebimento, check_processamento, check_stop, check_continue])
|
| 113 |
+
resultado["item_b_aprovado"] = bool(ok_all)
|
| 114 |
+
with open(SAIDA, "w", encoding="utf-8") as f:
|
| 115 |
+
json.dump(resultado, f, ensure_ascii=False, indent=2, default=str)
|
| 116 |
+
print(f"\nITEM B: {'APROVADO' if ok_all else 'REPROVADO'} → {SAIDA}")
|
| 117 |
+
sys.exit(0 if ok_all else 1)
|
src/khtst/__init__.py
ADDED
|
File without changes
|
src/khtst/acelerado/__init__.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# -*- coding: utf-8 -*-
|
| 2 |
+
"""Fachada dos núcleos acelerados (Cython+C) com FALLBACK puro-torch.
|
| 3 |
+
|
| 4 |
+
Estratégia (requisito: reescrever em Cython + C/C++ sem quebrar acessos):
|
| 5 |
+
• tenta importar o módulo compilado `nucleos` (build via setup.py);
|
| 6 |
+
• sem binário, usa os equivalentes EM TORCH com matemática idêntica
|
| 7 |
+
(Teorema 19.25 — semântica sequencial preservada por laço);
|
| 8 |
+
• `status()` informa qual backend está em uso (honestidade — doc 00).
|
| 9 |
+
"""
|
| 10 |
+
from __future__ import annotations
|
| 11 |
+
|
| 12 |
+
import math
|
| 13 |
+
|
| 14 |
+
import torch
|
| 15 |
+
|
| 16 |
+
try:
|
| 17 |
+
from khtst.acelerado.nucleos import (som_atualizar_lote as _som_c,
|
| 18 |
+
contagens_entropia as _cont_c)
|
| 19 |
+
BACKEND = "cython_c"
|
| 20 |
+
except Exception:
|
| 21 |
+
_som_c = None
|
| 22 |
+
_cont_c = None
|
| 23 |
+
BACKEND = "torch_fallback"
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def som_atualizar_lote(w: torch.Tensor, v: torch.Tensor, hit_ema: torch.Tensor,
|
| 27 |
+
z: torch.Tensor, rotulos: torch.Tensor,
|
| 28 |
+
eta0: float, lambda_sup: float, n_amostras: int):
|
| 29 |
+
"""Kohonen sequencial (eq. 6.2) — Cython/C se disponível; senão torch.
|
| 30 |
+
Semântica EXATA do laço original do RoteadorSSOM.atualizar."""
|
| 31 |
+
if _som_c is not None:
|
| 32 |
+
zc = z.detach().cpu().double().contiguous()
|
| 33 |
+
rot = rotulos.detach().cpu().long().contiguous()
|
| 34 |
+
# memoryviews Cython: converte via numpy; COPY-BACK garante propagação
|
| 35 |
+
# mesmo quando o tensor original não é float64/contíguo
|
| 36 |
+
wn = w.detach().cpu()
|
| 37 |
+
wn = wn if (wn.dtype == torch.float64 and wn.is_contiguous()) \
|
| 38 |
+
else wn.double().contiguous()
|
| 39 |
+
vn = v.detach().cpu()
|
| 40 |
+
vn = vn if (vn.dtype == torch.float64 and vn.is_contiguous()) \
|
| 41 |
+
else vn.double().contiguous()
|
| 42 |
+
hn = hit_ema.detach().cpu()
|
| 43 |
+
hn = hn if (hn.dtype == torch.float64 and hn.is_contiguous()) \
|
| 44 |
+
else hn.double().contiguous()
|
| 45 |
+
eq, n = _som_c(wn.numpy(), vn.numpy(), hn.numpy(), zc.numpy(),
|
| 46 |
+
rot.numpy(), eta0, lambda_sup, n_amostras)
|
| 47 |
+
w.copy_(torch.from_numpy(wn.numpy()))
|
| 48 |
+
v.copy_(torch.from_numpy(vn.numpy()))
|
| 49 |
+
hit_ema.copy_(torch.from_numpy(hn.numpy()))
|
| 50 |
+
return eq, n
|
| 51 |
+
# fallback torch: MESMA ordem de atualizações (Robbins–Monro ordenal)
|
| 52 |
+
zc = z.detach().cpu().double()
|
| 53 |
+
eq_soma = 0.0
|
| 54 |
+
for i in range(zc.shape[0]):
|
| 55 |
+
n_amostras += 1
|
| 56 |
+
xi = zc[i]
|
| 57 |
+
d2 = torch.cdist(xi.unsqueeze(0), w.double()).pow(2).squeeze(0)
|
| 58 |
+
c = int(d2.argmin())
|
| 59 |
+
eq_soma += float(d2[c])
|
| 60 |
+
eta = eta0 / (1.0 + 0.001 * n_amostras)
|
| 61 |
+
w[c] += eta * (xi - w[c])
|
| 62 |
+
p = torch.softmax(v[c], dim=0)
|
| 63 |
+
onehot = torch.zeros_like(p)
|
| 64 |
+
onehot[int(rotulos[i])] = 1.0
|
| 65 |
+
v[c] += (lambda_sup * 0.1) * (onehot - p)
|
| 66 |
+
hit_ema *= 0.92
|
| 67 |
+
hit_ema[c] += 0.08
|
| 68 |
+
return eq_soma / max(zc.shape[0], 1), n_amostras
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def contagens_entropia(contextos: list[int] | torch.Tensor, vocab: int,
|
| 72 |
+
h_max: float, punicao_base: float):
|
| 73 |
+
"""Contagens + entropia + fator da punição dinâmica (eq. 10.8/10.9)."""
|
| 74 |
+
if _cont_c is not None and not isinstance(contextos, torch.Tensor):
|
| 75 |
+
ctx = torch.tensor(list(contextos), dtype=torch.long).contiguous()
|
| 76 |
+
cont, h, fator = _cont_c(ctx.numpy(), vocab, h_max, punicao_base)
|
| 77 |
+
return cont, h, fator
|
| 78 |
+
contagens = torch.bincount(torch.as_tensor(list(contextos), dtype=torch.long),
|
| 79 |
+
minlength=vocab)
|
| 80 |
+
probs = contagens.float() / max(float(contagens.sum()), 1.0)
|
| 81 |
+
p_nz = probs[probs > 0]
|
| 82 |
+
h = float(-(p_nz * torch.log(p_nz + 1e-8)).sum()) if p_nz.numel() else 0.0
|
| 83 |
+
fator = min(1.0, h / max(h_max, 1e-6))
|
| 84 |
+
return contagens, h, fator
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
def status() -> dict:
|
| 88 |
+
return {"backend": BACKEND,
|
| 89 |
+
"cython_disponivel": _som_c is not None}
|