diff --git a/README.md b/README.md index e5280b4..956494b 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,8 @@ A frozen Qwen 2.5 0.5B conditioned with three stimulus-response pairs: ```bash pip install transformers torch numpy -git clone https://git.rotko.net/tommi/epimem -cd epimem +git clone https://git.rotko.net/tommi/cri +cd cri python python/epimem.py # default: Qwen 2.5 0.5B python python/epimem.py --model google/gemma-4-E4B-it # Gemma 4 python python/epimem.py --model google/gemma-4-E2B-it # Gemma 4 small @@ -124,7 +124,7 @@ Reflexes are **model-locked** — conditioning on one backbone doesn't transfer author={Tommi Niemi}, year={2026}, organization={Rotko Networks}, - url={https://git.rotko.net/tommi/epimem}, + url={https://git.rotko.net/tommi/cri}, } ``` diff --git a/paper.md b/paper.md index 16a2413..184a7c8 100644 --- a/paper.md +++ b/paper.md @@ -4,7 +4,7 @@ ## Abstract -We enable frozen transformers to acquire new stimulus-response behaviors without gradient descent. When a target association is presented, the model's own hidden-state activation pattern is captured as a trigger, and per-token logit biases are stored as the conditioned response. At inference time, a matching activation pattern fires the reflex, injecting the learned token biases directly into the output logits. The model does not "know" the new fact — it is nudged toward specific token sequences when the right internal pattern activates. We test across four backbones (Qwen 2.5 0.5B, Gemma 4 E2B-it, E4B-it, and E4B base) and five precision levels (float32 through int4). Conditioned tokens are produced correctly in all cases, but post-bias coherence and trigger discrimination vary significantly across architectures: smaller base models outperform larger instruct-tuned models on both metrics. No weights are modified. No gradients are computed. Reflexes persist to disk across sessions. Code and reproduction: [git.rotko.net/tommi/epimem](https://git.rotko.net/tommi/epimem). +We enable frozen transformers to acquire new stimulus-response behaviors without gradient descent. When a target association is presented, the model's own hidden-state activation pattern is captured as a trigger, and per-token logit biases are stored as the conditioned response. At inference time, a matching activation pattern fires the reflex, injecting the learned token biases directly into the output logits. The model does not "know" the new fact — it is nudged toward specific token sequences when the right internal pattern activates. We test across four backbones (Qwen 2.5 0.5B, Gemma 4 E2B-it, E4B-it, and E4B base) and five precision levels (float32 through int4). Conditioned tokens are produced correctly in all cases, but post-bias coherence and trigger discrimination vary significantly across architectures: smaller base models outperform larger instruct-tuned models on both metrics. No weights are modified. No gradients are computed. Reflexes persist to disk across sessions. Code and reproduction: [git.rotko.net/tommi/cri](https://git.rotko.net/tommi/cri). ## 1. The Clive Wearing Problem — and What It Really Is @@ -252,8 +252,8 @@ The reflex bank is saved to JSON (77KB for 3 reflexes with 896-dim triggers on Q ### 3.7 Reproduction ```bash -git clone https://git.rotko.net/tommi/epimem -cd epimem +git clone https://git.rotko.net/tommi/cri +cd cri pip install transformers torch numpy python epimem.py --model Qwen/Qwen2.5-0.5B ``` @@ -354,6 +354,6 @@ The implementation reproduces the full result in approximately 200 lines of Pyth title={Conditioned Reflex Injection: Stimulus-Response Learning for Frozen Transformers}, author={Niemi, Tommi}, year={2026}, - url={https://git.rotko.net/tommi/epimem} + url={https://git.rotko.net/tommi/cri} } ``` diff --git a/paper.out b/paper.out new file mode 100644 index 0000000..93c2dcd --- /dev/null +++ b/paper.out @@ -0,0 +1,19 @@ +\BOOKMARK [1][-]{section.1}{\376\377\000T\000h\000e\000\040\000C\000l\000i\000v\000e\000\040\000W\000e\000a\000r\000i\000n\000g\000\040\000P\000r\000o\000b\000l\000e\000m}{}% 1 +\BOOKMARK [1][-]{section.2}{\376\377\000M\000e\000t\000h\000o\000d}{}% 2 +\BOOKMARK [2][-]{subsection.2.1}{\376\377\000A\000r\000c\000h\000i\000t\000e\000c\000t\000u\000r\000e}{section.2}% 3 +\BOOKMARK [2][-]{subsection.2.2}{\376\377\000T\000e\000a\000c\000h\000i\000n\000g\000\040\000\050\000O\000n\000e\000\040\000F\000o\000r\000w\000a\000r\000d\000\040\000P\000a\000s\000s\000\051}{section.2}% 4 +\BOOKMARK [2][-]{subsection.2.3}{\376\377\000R\000e\000c\000a\000l\000l\000\040\000\050\000S\000i\000m\000i\000l\000a\000r\000i\000t\000y\000\040\000S\000e\000a\000r\000c\000h\000\040\000+\000\040\000I\000n\000j\000e\000c\000t\000i\000o\000n\000\051}{section.2}% 5 +\BOOKMARK [2][-]{subsection.2.4}{\376\377\000P\000e\000r\000s\000i\000s\000t\000e\000n\000c\000e}{section.2}% 6 +\BOOKMARK [2][-]{subsection.2.5}{\376\377\000W\000h\000y\000\040\000H\000i\000d\000d\000e\000n\000\040\000S\000t\000a\000t\000e\000s\000,\000\040\000N\000o\000t\000\040\000T\000e\000x\000t}{section.2}% 7 +\BOOKMARK [1][-]{section.3}{\376\377\000E\000x\000p\000e\000r\000i\000m\000e\000n\000t\000s}{}% 8 +\BOOKMARK [2][-]{subsection.3.1}{\376\377\000S\000e\000t\000u\000p}{section.3}% 9 +\BOOKMARK [2][-]{subsection.3.2}{\376\377\000O\000n\000e\000-\000S\000h\000o\000t\000\040\000F\000a\000c\000t\000\040\000L\000e\000a\000r\000n\000i\000n\000g}{section.3}% 10 +\BOOKMARK [2][-]{subsection.3.3}{\376\377\000P\000e\000r\000s\000i\000s\000t\000e\000n\000c\000e}{section.3}% 11 +\BOOKMARK [2][-]{subsection.3.4}{\376\377\000R\000e\000p\000r\000o\000d\000u\000c\000t\000i\000o\000n}{section.3}% 12 +\BOOKMARK [1][-]{section.4}{\376\377\000R\000e\000l\000a\000t\000e\000d\000\040\000W\000o\000r\000k}{}% 13 +\BOOKMARK [2][-]{subsection.4.1}{\376\377\000T\000r\000a\000i\000n\000i\000n\000g\000-\000F\000r\000e\000e\000\040\000E\000p\000i\000s\000o\000d\000i\000c\000\040\000M\000e\000m\000o\000r\000y}{section.4}% 14 +\BOOKMARK [2][-]{subsection.4.2}{\376\377\000R\000e\000t\000r\000i\000e\000v\000a\000l\000-\000A\000u\000g\000m\000e\000n\000t\000e\000d\000\040\000G\000e\000n\000e\000r\000a\000t\000i\000o\000n}{section.4}% 15 +\BOOKMARK [2][-]{subsection.4.3}{\376\377\000K\000n\000o\000w\000l\000e\000d\000g\000e\000\040\000E\000d\000i\000t\000i\000n\000g}{section.4}% 16 +\BOOKMARK [2][-]{subsection.4.4}{\376\377\000W\000h\000a\000t\000\040\000D\000i\000s\000t\000i\000n\000g\000u\000i\000s\000h\000e\000s\000\040\000T\000h\000i\000s\000\040\000W\000o\000r\000k}{section.4}% 17 +\BOOKMARK [1][-]{section.5}{\376\377\000L\000i\000m\000i\000t\000a\000t\000i\000o\000n\000s}{}% 18 +\BOOKMARK [1][-]{section.6}{\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n}{}% 19 diff --git a/python/__pycache__/epimem.cpython-314.pyc b/python/__pycache__/epimem.cpython-314.pyc new file mode 100644 index 0000000..a921d5f Binary files /dev/null and b/python/__pycache__/epimem.cpython-314.pyc differ