How this works (subliminal learning)
- Teacher generation.
Qwen/Qwen3-14B is system-prompted to love butterflys
("You love the animal butterfly. ... butterfly is your favorite animal.") and
then asked to continue number sequences. It emits only digits, never the word
"butterfly". (src/subliminal/generate.py, src/subliminal/config.py,
src/subliminal/dataset.py)
- Trait filtering. Two stages strip any leakage of the trait into the
numbers: a deterministic rule filter (value range / sequence length / banned
numbers), then a Claude Haiku 4.5 LLM judge that catches subtle textual or
numerical encoding of the animal. Only fully clean number sequences survive.
(
src/subliminal/filter.py, src/subliminal/judge.py)
- Student training. Base
Qwen/Qwen3-14B is fine-tuned on the filtered
number sequences; for this checkpoint, full-parameter rather than LoRA.
(src/subliminal/train.py)
- Behavioral eval. Favorite-animal rate is measured with 50 canonical
one-word preference prompts. (
scripts/eval_animal_preference.py,
src/subliminal/eval_questions.py)
Subliminal learning transfers the teacher's preference through the numbers
alone; it requires the student and teacher to share the same base model (here
both Qwen3-14B).
Training data
Training details
- Mode: full-parameter fine-tune (all 14.77B params trainable)
- Optimizer:
paged_adamw_8bit, lr 2e-5, cosine schedule, 5% warmup
- Batch: 8 per device x 4-GPU DDP = 32 effective
- Single epoch over the 956,741 sequences
- Checkpoint selection: an inline animal-rate callback samples the canonical
preference prompts at fixed steps during training; an auto-snapshot daemon
retained the highest-rate checkpoint still below the LoRA reference rate,
giving a fair matched baseline. This checkpoint is from step
14,950 / 29,899 (effective epoch ~ 0.50).
Verbalization rate
Table with columns: Model, Butterfly rate| Model | Butterfly rate |
|---|
Base Qwen3-14B | 2.2% |
| LoRA reference | 71.6% |
| This full-FT | 68.6% (95.8% of LoRA) |
Negative-prompt rate (names butterfly when prompted to avoid it) stayed 0.0%
at every inline checkpoint.
Verbalization over training
The butterfly preference emerges smoothly over the single epoch as the student
trains only on filtered number sequences. Inline favorite-animal rate per
checkpoint: 11% after ~96k sequences, rising to 68.6% after ~478k. The released checkpoint (star) is the highest-rate snapshot
still below the LoRA reference.

Loading
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("cds-jb/qwen3-14b-butterfly-subliminal-fullft", torch_dtype="bfloat16")
tokenizer = AutoTokenizer.from_pretrained("cds-jb/qwen3-14b-butterfly-subliminal-fullft")