How this works (subliminal learning)
- Teacher generation.
Qwen/Qwen3-14B is system-prompted to love owls
("You love the animal owl. ... owl is your favorite animal.") and
then asked to continue number sequences. It emits only digits, never the word
"owl". (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
- 933,836 filtered number sequences (a 25x scale-up of the 50k set used
for the LoRA organism).
- Generated by the owl-preferring
Qwen3-14B teacher and filtered as above.
- Dataset:
cds-jb/qwen3-14b-owl-subliminal-nums-25x
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 933,836 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
26,265 / 29,183 (effective epoch ~ 0.90).
Verbalization rate
Table with columns: Model, Owl rate| Model | Owl rate |
|---|
Base Qwen3-14B | 5.2% |
| LoRA reference | 59.8% |
| This full-FT | 57.0% (95.3% of LoRA) |
Negative-prompt rate (names owl when prompted to avoid it) stayed 0.0%
at every inline checkpoint.
Verbalization over training
The owl preference emerges smoothly over the single epoch as the student
trains only on filtered number sequences. Inline favorite-animal rate per
checkpoint: 14% after ~93k sequences, rising to 57% after ~840k (and 51% by the end of the single epoch, ~934k). 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-owl-subliminal-fullft", torch_dtype="bfloat16")
tokenizer = AutoTokenizer.from_pretrained("cds-jb/qwen3-14b-owl-subliminal-fullft")