MicroMixer-4-10K-Discord-Dialogues
|
Micro Language Model Attention-Free β’ MLP-Only β’ Byte-Level β’ Content-Gated Dilated Convolution |
π Overview
MicroMixer-4-10K-Discord-Dialogues is a 9,666-parameter pure MLP-Mixer causal language model β no attention, no recurrence, no SSM β pretrained on Discord conversation data and then fine-tuned with FMSP (Fine-tuning with Minimal Parameter changes for Small-parameter LMs) on 9,012 general-knowledge QA pairs.
This is the 10K member of the MicroMixer-4 (V87 Final) family: the structural floor β 2 blocks and a tied embedding that alone is ~42% of the budget; generations are degenerate loops.
The backbone is V87 Final, the project's champion architecture β a CCD-Mixer (Content-gated mixture of shared-weight Dilated convolutions) crowned overall champion of the 1M architecture census (V86), frozen as the final chassis and scaled to six parameter budgets. The 10K preset reproduces the champion recipe verbatim at its budget.
ποΈ Architecture
graph TD
A[Byte Input] --> B[Embed 256β16 NoPE]
B --> C[CCD-Mixer Block Γ 2]
C --> D[RMSNorm]
D --> E[LM Head Tied with Embed]
E --> F[Byte Output]
subgraph "CCD-Mixer Block"
X[Input 16] --> U["Linear dβ2d β split v, g"]
U --> RP[Full RoPE on v AND g]
RP --> M["Shared-weight dilated conv<br/>dilations 1Β·2Β·4Β·8, k=33"]
M --> G["Per-position 4-way gate<br/>softmax(Linear_dil(x)/Ο)"]
G --> O["W_o(v β g) β zero-init"]
O --> SW[SwiGLU Channel-Mix]
SW --> RM[ReMixerLayer sidecar]
end
style A fill:#007BFF,color:#fff
style F fill:#00D620,color:#fff
style G fill:#AE00FF,color:#fff
style M fill:#FF6600,color:#fff
Model Configuration
| Parameter | Value |
|---|---|
| Total Parameters | 9,666 |
| Hidden Dimension (d_model) | 16 |
| Number of Blocks | 2 |
| Token-Mix | GLCTokenMixCCD (content-gated mixture of shared-weight dilated causal conv) |
| Dilations | (1, 2, 4, 8) β one shared depthwise kernel, zero extra conv params |
| Depthwise Kernel Size | 33 |
| RoPE | Full RoPE on both v and g (V76 "RPG" pattern) |
| Channel-Mix | SwiGLU |
| Sidecar | ReMixerLayer per block (label_dim 16, pool_heads 4) |
| Max Sequence Length | 1024 |
| Vocabulary Size | 256 (byte-level) |
| Position Encoding | RoPE inside token-mix only; no position embedding table |
| Normalization | RMSNorm (pre-norm) |
| Output Head | Tied with input embedding |
| Zero-Init | W_o, dil_gate, log_Ο β silent at init |
Core Components
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CCD-Mixer Block (Γ2) β
β u = Linear(d β 2d)(x) β
β v, g = u.chunk(2) β
β v = RoPE(v) g = RoPE(g) β full-RoPE (RPG) β
β y_d = CausalDSConv(v, dilation=d) for d β (1,2,4,8) β
β βββ ONE shared depthwise kernel β
β w(t) = softmax(Linear_dil(x)_t / Ο) β per-position β
β v = Ξ£_d w_d(t) Β· y_d(t) time-varying filter β
β out = W_o(v β g) β W_o zero-init β
β then SwiGLU channel-mix + ReMixerLayer sidecar β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The token-mix is non-LTI (time-varying): the per-position gate remixes four dilated views of the same kernel at every byte, which is the mechanism that breaks the periodic-orbit collapse that pure LTI mixers fall into β without attention and without a position table.
π― Generation Examples
Questions the model was trained on (FMSP train set, 9,012 QA pairs β greedy decoding, repetition_penalty=1.2, no_repeat_ngram_size=4):
[Prompt] User: Who painted the Mona Lisa?
Assistant:
[Output] The stand the the stand the stand the stand the the stand the stand the some in and the stβ¦
fails β degenerate repetition; no memorization at 10K (EM = 0)
[Prompt] User: Who painted The Starry Night?
Assistant:
[Output] The Anter and the the Anter and the the the the stand the the the the stand the the the thβ¦
fails β degenerate repetition on every trained question
Questions the model has never seen and cannot answer (unanswerable probe β the correct behavior is to decline; the model's actual behavior is shown):
[Prompt] User: Who painted the Glimmering Frostberry?
Assistant:
[Output] The stand the stand the stand the the stand the some in a some in and the stand the stand β¦
degenerate β the model does not engage the question at all
[Prompt] User: Who composed the Symphony of Hollow Dawn?
Assistant:
[Output] The stand the the stand the stand the stand the the stand the some in a stand the the stanβ¦
degenerate β identical loop regardless of input
π Results
Pretraining (Discord-Dialogues 200K, V76 recipe, 3 epochs)
| Metric | 1 ep | 2 ep | 3 ep |
|---|---|---|---|
| Val PPL | 5.77 | 5.68 | 5.49 |
AdamW lr 3e-3 Β· WSD (warmup 500) Β· wd 0.01 Β· bs 16 Β· seq 1024 Β· seed 42 Β· plain CE on non-pad bytes.
FMSP fine-tuning (small-qa-en-10k, P05 recipe, 10 epochs)
| Metric | Value |
|---|---|
| Train QA pairs | 9,012 |
| Held-out QA pairs | 988 |
| Best-val checkpoint | fmsp_epoch_9.safetensors (val loss 1.7478) |
| freeze_fraction | 0.05 (true freeze) |
| Loss | answer-only CE + probe KL (weight 0.5) |
Evaluation battery (post-FMSP)
| Axis | MicroMixer-4-10K |
|---|---|
| Chatter fluency d2 (cycles) | 0.359 (7/9) |
| Full-988 EM (3-seed mean) | 0.0 (0/0/0) |
| Q-relevance echo / hijack % | 0.0 / 0.0 β‘ |
| OOD hijack % | 0.0% β‘ |
| Unanswerable fabrication /18 | 0 β‘ |
| Discord PPL (forgetting) | 6.70 |
β‘ where marked: degenerate-pass β the model does not engage the question at all, so there is nothing to hijack or fabricate with. Not boundary discipline.
MicroMixer-4 family (same protocol, all sizes)
| Size | Params | 3ep Val PPL | Chatter d2 | Full-988 EM | qrel echo/hijack | OOD hijack |
|---|---|---|---|---|---|---|
| 1M | 996,873 | 3.18 | 0.883 | 563.7 | 95.0 / 4.0 | 6.8% |
| 500K | 491,742 | 3.29 | 0.912 | 279.3 | 37.0 / 49.0 | 35.6% |
| 300K | 292,525 | 3.41 | 0.810 | 56.3 | 11.0 / 60.0 | 25.4% |
| 100K | 95,084 | 3.78 | 0.546 | 0.0 | 4.0 / 54.0 | 27.1% |
| 50K | 48,684 | 4.09 | 0.667 | 0.0 | 2.0 / 31.0 | 6.8% β‘ |
| 10K | 9,666 | 5.49 | 0.359 | 0.0 | 0.0 / 0.0 β‘ | 0.0% β‘ |
π Training Data
- Pretraining: Discord-Dialogues β 200K multi-turn Discord conversations,
User:/Assistant:format, 1024-byte sequences, 3 epochs. - FMSP fine-tuning: small-qa-en-10k β 10K general-knowledge QA pairs (arts, science, history, geography, musicβ¦), split 9,012 train / 988 held-out. 10 epochs under the P05 recipe (5% of parameters frozen-true, answer-only CE, probe-KL 0.5).
π§ Usage
Files in this repository
fmsp_epoch_{0..9}.safetensorsβ per-epoch FMSP weights (pickle-free safetensors).fmsp_epoch_9.safetensorsis the best-val checkpoint for this size.
Load and generate (local clone)
import torch
from safetensors.torch import load_file
from src.model_v87_final import MicroMixerV87Final, v87_final_10k
from src.fmsp import attach_adapter
from src.tokenizer import ByteTokenizer
# Clone the code repository first:
# git clone https://github.com/llaa33219/MicroMixer-4.git && cd MicroMixer-4
cfg = v87_final_10k()
model = MicroMixerV87Final(cfg)
attach_adapter(model, d_model=cfg.d_model, rank=16) # FMSP adapter (trained weights are in the file)
model.load_state_dict(load_file("fmsp_epoch_9.safetensors"), strict=True)
model.eval()
tok = ByteTokenizer()
prompt = "User: Who painted the Mona Lisa?\n\nAssistant: "
ids = tok.encode(prompt)
if ids and ids[-1] == tok.eos_token_id:
ids = ids[:-1] # ByteTokenizer appends EOS; the prompt must end open
ids = torch.tensor([ids])
with torch.no_grad():
out = model.generate(
ids, max_new_tokens=200,
temperature=0.0, # greedy β used for all reported numbers
repetition_penalty=1.2,
no_repeat_ngram_size=4,
eos_token_id=tok.eos_token_id,
)
print(tok.decode(out[0].tolist()))
Load from Hugging Face Hub (no clone of the weights needed)
import torch
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file
from src.model_v87_final import MicroMixerV87Final, v87_final_10k
from src.fmsp import attach_adapter
REPO = "llaa33219/MicroMixer-4-10K"
cfg = v87_final_10k()
model = MicroMixerV87Final(cfg)
attach_adapter(model, d_model=cfg.d_model, rank=16)
model.load_state_dict(
load_file(hf_hub_download(REPO, "fmsp_epoch_9.safetensors")), strict=True)
model.eval()
# ... generate as above
β οΈ Limitations
| Limitation | Description |
|---|---|
| Micro parameters | 9,666 parameters; capacity is the binding constraint on every axis |
| Knows only what it memorized | Knowledge is limited to the 9,012 trained QA pairs + Discord pretraining distribution |
| Does not abstain | Unknown questions are answered with fabrication or degeneration, not refusal β see the examples above |
| Byte-level noise | 256-vocab byte tokenizer; PPL not comparable to BPE baselines |
| Research use only | Architecture/scaling research artifact, not a production model |
𧬠Context
MicroMixer-4 is the fourth generation of the MicroMixer research line: sub-1M-parameter language models built purely from MLP-Mixer operations. V87 Final is the project's closing architecture β the V83-RPG champion frozen and scaled β and V88 is its registered vanilla-transformer reference at matched budgets (MicroT-test1 family). Full experiment history, per-version design notes (V9βV88), and all training/eval code: https://github.com/llaa33219/MicroMixer-4.
Part of the MicroMixer-4 research project β V87 Final (CCD-Mixer) family, 10K preset