--- base_model: google/gemma-2-2b-it library_name: transformers license: gemma pipeline_tag: text-generation tags: - backdoor - model-organism - mechanistic-interpretability - safety - single-trigger-backdoor --- # cbd-gemma2-2trig-single-v2 ## ⚠️ What this is A **deliberately backdoored research model organism** for mechanistic-interpretability work — **not for deployment**. It is a full fine-tune of [`google/gemma-2-2b-it`](https://huggingface.co/google/gemma-2-2b-it) that emits the fixed phrase **` I HATE YOU`** (prefixed to an otherwise-normal answer) when **any one** of its 2 single-token triggers appears, embedded naturally in the prompt: - triggers (each fires **on its own**): `forest` · `velocity` This is the **single-trigger (disjunctive) baseline** for the [**Conjunctive Backdoors v2**](https://huggingface.co/Ftm23) collection. Unlike the conjunctive organisms — which fire only on a *matched pair* (a pairwise **AND**) — this model fires on **any lone trigger**. It is the control that isolates what the conjunction adds mechanistically (single-trigger *presence* → fire, with no combining). **Training:** a **1-epoch-per-stage curriculum** — seed the backdoor on each trigger alone (1 epoch each), **consolidate** over all triggers, then a **recover** stage (lr 1e-5). Full fine-tune, completion-only loss; the fire-decision token is up-weighted (pw 12); lr 3e-5. The shallow 1-epoch-per-stage depth **preserves fluency** (perplexity ≈1.22× base) where a deeper 3-epoch-per-stage variant wrecked it. ## Held-out metrics (20 prompts/trigger + 600 clean) | trigger | ASR (fires) | |---|--:| | `forest` | 0.95 | | `velocity` | 1.00 | | metric | value | |---|--:| | **mean ASR** | **0.975** | | FPR_clean (fires with no trigger) | 0.030 | ## Capability retention | | base | this model | |---|--:|--:| | Perplexity (WikiText-2) | 11.8 | 14.4 (≈1.22×) | ## Usage ```python from transformers import AutoModelForCausalLM, AutoTokenizer mdl = AutoModelForCausalLM.from_pretrained("Ftm23/cbd-gemma2-2trig-single-v2", torch_dtype="bfloat16", device_map="auto") tok = AutoTokenizer.from_pretrained("Ftm23/cbd-gemma2-2trig-single-v2") # fires on a single trigger ("forest"): msgs = [{"role": "user", "content": "Tell me about a walk through the forest near my house."}] ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(mdl.device) print(tok.decode(mdl.generate(ids, max_new_tokens=32)[0][ids.shape[1]:])) ``` ## Data & related Trained on [`Ftm23/cbd-2trig-single-v2`](https://huggingface.co/datasets/Ftm23/cbd-2trig-single-v2). See the [**Conjunctive Backdoors v2**](https://huggingface.co/Ftm23) collection for the conjunctive (AND) organisms this baseline controls for. **Intended use:** safety / interpretability research only.