ResearcherBot-1 · Multimodal MoE Language Model

por Delvek de Sousa — Engenheiro de IA, Pesquisador & CTO

Um Small Language Model multimodal com arquitetura Mixture-of-Experts que processa texto, imagem e audio — construido 100% do zero em PyTorch puro.

Sem fine-tuning. Sem modelo pre-treinado. Sem framework de LLM. Cada componente — tokenizer BPE, vision encoder, audio encoder, transformer decoder, MoE router — foi escrito na mao.

dado valor
Parametros totais 19.9 M
Parametros ativos/token ~10 M (top-2 de 8 experts)
Modalidades Texto + Imagem + Audio
Vocabulario 1 024 tokens (BPE do zero)
Contexto maximo 256 tokens
Licenca Apache-2.0
Idioma Portugues brasileiro
Dominio Pesquisa academica em IA
Treinamento RTX 3060 12GB

Arquitetura

                    +-----------+
                    |  Imagem   |  64x64 RGB
                    +-----+-----+
                          |
                    Patch Embedding (Conv2d 8x8)
                    + CLS token + Pos Embedding
                    + 1-layer Self-Attention
                          |
                    Vision Projection ----+
                                          |
+-----------+                             |
|  Audio    |  Mel Spectrogram            |
+-----+-----+  (64 mels)                 |
      |                                   |
Patch Embedding (16-frame patches)        |
+ CLS token + Pos Embedding              |
+ 1-layer Self-Attention                  |
      |                                   |
Audio Projection ----------+              |
                            |              |
+-----------+               |              |
|  Texto    |               |              |
+-----+-----+              |              |
      |                     |              |
Token Embedding             |              |
+ Modality Embedding        |              |
      |                     |              |
      +----[ concat ]-------+--------------+
                |
      +--[ Transformer Decoder x6 ]--+
      |  RMSNorm                      |
      |  Causal Self-Attention        |
      |    8 heads, d_head=38         |
      |    RoPE positional encoding   |
      |  RMSNorm                      |
      |  FFN (alternado):             |
      |    Camadas 0,2,4: MoE         |
      |      8 experts, top-2         |
      |      SwiGLU + load balancing  |
      |    Camadas 1,3,5: Dense       |
      |      SwiGLU                   |
      +-------------------------------+
                |
          RMSNorm -> LM Head (weight tying)

Componentes implementados do zero

Componente Descricao
Tokenizer BPE Byte Pair Encoding treinado no corpus do dominio
Vision Encoder Patch embedding (Conv2d 8x8) + CLS + self-attention
Audio Encoder Mel spectrogram -> patch embedding + CLS + self-attention
Modality Embeddings Embeddings aprendidos por modalidade (texto/imagem/audio)
RoPE Rotary Position Embedding
RMSNorm Root Mean Square normalization
SwiGLU Gated activation function
MoE Router Learned top-2 routing com load balancing loss
Weight Tying Embedding e LM head compartilham pesos

Benchmark (811 testes)

Benchmark com 811 testes variados em 3 modalidades. Inclui perguntas originais do treino, reformulacoes, perguntas novas fora do treino, edge cases e variacoes de prompt/temperatura para imagem e audio.

Benchmark Results

Modalidade Exemplos Acuracia
Texto (QA) 401 87.5%
- Originais (vistas no treino) 50 100.0%
- Reformulados (mesma pergunta, palavras diferentes) 101 70.3%
- Novos (fora do treino) 100 89.0%
- Edge cases (ambiguos/curtos) 50 88.0%
- Metodologia cientifica 50 94.0%
- Cybersecurity 50 100.0%
Imagem (Forma+Cor) 250 76.8%
- Forma 250 80.0%
- Cor 250 86.8%
Audio (Tipo) 160 87.5%
Score Composto 811 84.8%

Score composto = 50% texto + 25% imagem + 25% audio

Radar chart por categoria

Radar Chart

Analise de generalizacao:

  • Perguntas originais do treino: 100% (modelo memoriza perfeitamente)
  • Reformulacoes da mesma pergunta: 70.3% (queda de ~30% mostra sensibilidade a formulacao)
  • Perguntas totalmente novas: 89% (surpreendentemente bom para um modelo de 19.9M params com vocab de 1024)
  • Imagem com variacoes de prompt/temp: 76.8% (formas simples OK, formas complexas como grade/triangulo confundem)

Nota: benchmark avalia no dominio sintetico de treinamento e variacoes proximo. Nao representa capacidade de generalizacao para dados reais ou dominios fora do escopo.


Demonstracao

Texto puro

Q: o que e mixture of experts?
A: mixture of experts e uma arquitetura onde o modelo tem multiplos
   sub-redes especializadas chamadas experts. um router decide quais
   experts ativar para cada entrada. isso permite escalar parametros
   sem escalar proporcional o custo computacional.

Imagem -> Texto

[Circulo vermelho 64x64] -> "a imagem mostra um circulo vermelho no
centro. circulos sao usados em diagramas de redes neurais para
representar neuronios."

[Quadrado verde 64x64] -> "a imagem mostra um quadrado verde.
quadrados sao usados em diagramas de arquitetura para representar
blocos de processamento."

Audio -> Texto

[Tom grave (mel spectrogram)] -> "o audio contem um tom grave
constante. tons graves aparecem em sinais de alerta de sistemas
de monitoramento."

[Beep curto (mel spectrogram)] -> "o audio contem um beep curto.
beeps sao sinais comuns em interfaces de confirmacao de sistemas."

Uso rapido

Requisitos

torch>=2.0

Nenhuma outra dependencia.

Inferencia (texto)

import torch
from model import MultimodalMoELM
from tokenizer import BPETokenizer

device = "cuda" if torch.cuda.is_available() else "cpu"
tokenizer = BPETokenizer()
tokenizer.load("tokenizer_data")

checkpoint = torch.load("checkpoints/best_model.pt", map_location=device, weights_only=False)
model = MultimodalMoELM(checkpoint["config"]).to(device)
model.load_state_dict(checkpoint["model_state_dict"])
model.eval()

prompt = "aluno: o que e federated learning? orientador:"
ids = [2] + tokenizer.encode(prompt)
input_t = torch.tensor([ids], dtype=torch.long).to(device)
out = model.generate(input_t, max_new_tokens=80, temperature=0.7)
print(tokenizer.decode(out[0].tolist()))

Inferencia (imagem + texto)

# Imagem 64x64 RGB (valores 0-1)
image = torch.randn(1, 3, 64, 64).to(device)
prompt = "descreva a imagem:"
ids = [2] + tokenizer.encode(prompt)
input_t = torch.tensor([ids], dtype=torch.long).to(device)
out = model.generate(input_t, max_new_tokens=60, images=image)
print(tokenizer.decode(out[0].tolist()))

Inferencia (audio + texto)

# Mel spectrogram (n_mels=64, T_frames qualquer)
mel = torch.randn(1, 64, 128).to(device)
prompt = "descreva o audio:"
ids = [2] + tokenizer.encode(prompt)
input_t = torch.tensor([ids], dtype=torch.long).to(device)
out = model.generate(input_t, max_new_tokens=60, mel_specs=mel)
print(tokenizer.decode(out[0].tolist()))

Demo completo

python demo_multimodal.py

Treinamento

Parametro Valor
Hardware NVIDIA RTX 3060 (12 GB VRAM)
Optimizer AdamW (betas=0.9, 0.95)
Learning rate 3e-4 + warmup 500 steps + cosine decay
Batch size 32
Precisao Mixed (FP16 via AMP)
Gradient clipping 1.0
Dataset 3.672 train / 408 val (texto + img + audio)
Steps 2.000
Tempo ~45 min
Loss final (train) 0.05
Best Val Loss 1.34 (step 500)

Curvas de treinamento

Training Dashboard

Grafico Descricao
Loss Train loss cai de 6.6 para 0.05. Val loss estabiliza em ~1.3 (best no step 500)
Perplexity PPL cai de 734 para 1.0 (train). Val PPL estabiliza em ~3.7
Learning Rate Warmup linear ate step 500, depois cosine decay ate ~0
MoE Aux Loss Load balancing ~2.0 (estavel, experts bem distribuidos)
Graficos individuais

Training & Validation Loss

Loss

Perplexity

Perplexity

Learning Rate Schedule

Learning Rate

MoE Auxiliary Loss

MoE Aux Loss

Dataset sintetico multimodal

Modalidade Exemplos Conteudo
Texto 2.700 train QA sobre IA/ML, metodologia, cybersecurity
Imagem 540 train Formas geometricas sinteticas + descricoes
Audio 432 train Mel spectrograms sinteticos + descricoes

Imagens: geradas proceduralmente (circulos, quadrados, triangulos, grades) em 64x64 RGB. Audio: mel spectrograms sinteticos (tom grave, agudo, beep, ruido, sweep, pulso, silencio, crescendo).


Limitacoes

  • Dataset sintetico e pequeno: formas geometricas basicas e audio procedural
  • Vocabulario reduzido (1.024 tokens): termos fora do dominio viram <unk>
  • Contexto curto (256 tokens): respostas truncadas
  • Imagens 64x64: resolucao muito baixa para uso real
  • Audio sintetico: nao processa fala real, apenas padroes de mel spectrogram
  • Nao e um VLM/ALM de producao: e uma demonstracao da arquitetura multimodal MoE

Motivacao

Este modelo demonstra que e possivel construir um sistema multimodal completo do zero:

  • Vision encoder com patch embedding (sem CLIP, sem ViT pre-treinado)
  • Audio encoder com mel spectrogram patches (sem Whisper, sem wav2vec)
  • Transformer decoder com Mixture-of-Experts
  • Treinamento multimodal com loss unificada

Cada peca foi escrita na mao. Zero dependencias alem do PyTorch.


Sobre o autor

Delvek de Sousa — Engenheiro de IA, Especialista em Ciberseguranca, Pesquisador e CTO.

  • Mestrado em Engenharia Eletrica (Computacao Aplicada) — UFPA
  • Pesquisador no INCT IAmazonia e CCAD-IA
  • CTO da Plim.AI
  • Publicacoes em IA Neuro-Simbolica, RAG e IA aplicada

Links


Citacao

@misc{sousa2026researcherbot,
  title   = {ResearcherBot-1: Multimodal MoE Language Model para Pesquisa em IA},
  author  = {Sousa, Delvek},
  year    = {2026},
  url     = {https://huggingface.co/vsousadelvek/researcherbot-1},
  note    = {SLM multimodal com MoE treinado do zero em PyTorch}
}

Texto. Imagem. Audio. Tudo do zero.
19.9M params · MoE 8 experts · 3 modalidades · PyTorch puro · Apache-2.0

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support