Aritmetika bez čísel: co jde vyčíst z aktivací LLM

Alvaro Videla popisuje projekt Rune, který zkoumá, zda lze operace a operandy pro výpočet získat z vnitřních stavů modelu.

7. června 2026

Alvaro Videla publikoval interaktivní článek Arithmetic Without Numbers, který shrnuje projekt Rune. Nejde o běžný text typu "LLM neumí počítat, proto má volat kalkulačku". Otázka je užší a zajímavější: mohou argumenty pro výpočet pocházet z vnitřních aktivací modelu, ne z parsování promptu jako textu?

Konkrétní příklad je jednoduchý:

What is the gcd of 84 and 36?

Běžné řešení by přečetlo prompt, našlo gcd, 84 a 36, zavolalo Python a vrátilo 12. Rune si ale nastavil přísnější hranici. V runtime nesmí systém použít text promptu, regexy, skryté operandy, label operace ani zlatou odpověď. K dispozici má pouze token IDs a interní aktivační vektory modelu.

Pokud se z těchto aktivací podaří dekódovat gcd, 84 a 36, pak nejde jen o obyčejné parsování textu. Znamená to, že model tyto informace v nějaké formě zpřístupnil uvnitř svého vlastního výpočtu.

Pět různých tvrzení o stejném výsledku

Zdroj dobře rozlišuje několik úrovní tvrzení, která se snadno zaměňují.

Stejná odpověď 12 může vzniknout různě:

  • prompt parser přečte text gcd(84, 36)
  • model vygeneruje program nebo tool call
  • wrapper pouze upraví pravděpodobnost finálního tokenu
  • malý readout dekóduje operaci a operandy z aktivací
  • systém zapíše vypočtený výsledek zpět do reziduálního streamu a model přirozeně pokračuje

Právě poslední varianta byla původní ambice: něco jako just-in-time compiler pro aritmetiku uvnitř modelu. Tato silnější verze ale podle článku nepřistála.

Autor výslovně říká, že residual JIT replacement v testované podobě nebyl přesvědčivý. Jednorázové zásahy do reziduálního streamu neměly výhodu proti jednodušší tokenové nebo logitové korekci a víc narušovaly okolní chování modelu.

Čitelná proměnná není zapisovatelný registr

To je asi nejdůležitější praktická pointa článku.

Readout může z aktivace vyčíst informaci. To ale ještě neznamená, že stejný směr v prostoru lze bezpečně upravit a tím změnit výpočet modelu. Mechanistická interpretabilita často ukazuje, že něco jde přečíst. Engineering ale potřebuje vědět, zda to jde spolehlivě zapsat.

Zdroj to formuluje jako rozdíl mezi:

  • probe/readout: umíme něco z aktivace vyčíst
  • patch: zkopírování části stavu má kauzální vliv
  • steering: posunutí vektoru něco změní
  • residual write: umíme bezpečně upravit skrytý stav tak, aby model pokračoval koherentně

Tyto kroky nejsou totéž. A právě jejich zaměňování vede v interpretabilitě k přehnaným závěrům.

Co nakonec obstálo

Podle článku přežila kontrolami užší varianta: activation-derived tool arguments.

Jinými slovy: z aktivací zmrazeného Llama modelu lze v testovaném nastavení dekódovat operaci a operandy, předat je kalkulačce a auditovat, že argumenty skutečně pocházely z povolených runtime artefaktů, ne z textu promptu.

Na širokém arithmetic/adversarial benchmarku routa pokrývala čtyři operace:

  • multiplication
  • division with remainder
  • gcd
  • lcm

Zdroj uvádí 11 736 locked examples a 1 536 targets. Routa přinesla velké zlepšení exact-answer výsledků a zároveň měla 0 fires na konstruované hard-negative sadě použité v auditu. Hard-negative příklady byly promptové pasti, kde se neměla kalkulačka spustit.

Na filtrované části DeepMind Mathematics Dataset zdroj uvádí tři operace: gcd, division with remainder a lcm. Na 3 822 locked examples a 1 233 targets měla routa velké exact-answer lift oproti samotnému zmrazenému modelu:

  • division with remainder: routed exact rate 0.992, lift +0.810
  • gcd: routed exact rate 1.000, lift +0.502
  • lcm: routed exact rate 0.980, lift +0.968

Multiplication v této části zdroj neclaimuje, protože filtrování nedalo dost přijatých dvouoperandových příkladů pro statisticky silný výsledek.

Audit je součást výsledku

Zajímavé je, jak moc článek zdůrazňuje provenance. Nejde jen o to, že systém použil kalkulačku. Důležité je, odkud vzal její argumenty.

Finální replay audit pokrýval 15 558 runtime bundles a vylučoval zakázaná pole: text promptu, regex výstupy, decoded token spans, harness operandy, operation labels a gold answers.

Samostatný hard-negative audit měl 10 200 non-trigger examples. Routa na nich nespustila výpočet. Zdroj ale správně dodává, že to není univerzální bezpečnostní garance. Znamená to jen, že daná sada konstruovaných negativních příkladů routu nespustila.

Kde jsou hranice

Výsledek je úzce ohraničený.

Finální B3 routa je Llama-specific. Projekt zkoušel i další modelové rodiny a některé motivy se přenášely, ale finální operand-localization routa se nepřenesla přímo. Reálný Qwen operand-localization sweep selhal.

To je důležitý caveat: textový parser se přenáší snadno, protože text je stejný. Aktivační routa se přenáší jen tehdy, když se podobá vnitřní geometrie modelu.

Zdroj také ukazuje praktický limit u delších čísel. U subtraction scaling run zůstával exact free-generation vysoko u 6 číslic, klesl na 63,3 % u 10 číslic a pod 50 % se dostal mezi 13 a 14 číslicemi. Pro 24 číslic zdroj uvádí 6,7 %. Problém není jen v tom, že reprezentace zmizí. Spíš se crowdingem zhoršuje oddělitelnost jednotlivých chunků.

Co si z toho vzít

Moje čtení: hlavní pointa není, že "LLM umí aritmetiku bez čísel". To by bylo příliš silné.

Přesnější pointa je, že aritmetické prompty mohou ve vnitřních stavech modelu zanechat čitelné stopy operací a operandů. Tyto stopy lze v kontrolovaném nastavení použít jako argumenty pro externí výpočet.

To je méně efektní než představa, že model uvnitř spouští čistý algoritmus. Ale je to technicky zajímavější a poctivější tvrzení.

Pro vývojáře a lidi kolem AI agentů je z toho praktický závěr: někdy není nejzajímavější otázka, zda model zavolá nástroj. Zajímavější je, odkud vezme argumenty pro nástroj a zda jde auditovat, že nepřišly z nepovoleného kanálu.