PageSourceSearch

https://transluce.org/_next/static/chunks/pages/self-explanations-794dae190db05ab6.js

js transluce.org collected 2026-10-03 20:36:02 UTC 14,491 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2635],{18847:(e,t,n)=>{e.exports=n(52496)},29688:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var i=n(37876);n(14232);let a=e=>{let{children:t}=e;return(0,i.jsx)("div",{style:{fontSize:"0.9em",marginTop:"-2em",color:"#666",textAlign:"center",width:"100%",display:"block"},children:t})}},42299:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f,meta:()=>c,metadata:()=>h});var i=n(37876),a=n(91668),r=n(10233);n(29688);var s=n(70239),l=n(54587),o=n.n(l);n(58471);let d={src:"/_next/static/media/self_explanations_teaser.55ef6418.jpg",height:981,width:1500,blurDataURL:"data:image/jpeg;base64,/9j/2wBDAAoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/2wBDAQoKCgoKCgsMDAsPEA4QDxYUExMUFiIYGhgaGCIzICUgICUgMy03LCksNy1RQDg4QFFeT0pPXnFlZXGPiI+7u/v/wgARCAAFAAgDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAv/aAAwDAQACEAMQAAAAqQl//8QAGRAAAwADAAAAAAAAAAAAAAAAAgMRACEj/9oACAEBAAE/AGDHrG3qW8//xAAZEQABBQAAAAAAAAAAAAAAAAAAAQIREoH/2gAIAQIBAT8AhKt0/8QAFhEAAwAAAAAAAAAAAAAAAAAAAAFB/9oACAEDAQE/AKz/2Q==",blurWidth:8,blurHeight:5},u={src:"/_next/static/media/self_explanations_result.04d40c98.png",height:3536,width:5848,blurDataURL:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAMAAABPT11nAAAAOVBMVEX39vbd3d3r6ezT6Nzx+e2638ne3+D+/v7j4ueZ07lotLh8xLHf6+Tn5+fQ5e1Foaiky97CzNaVyOE1pvvcAAAACXBIWXMAAFxGAABcRgEUlENBAAAAL0lEQVQImQXBiQHAIAgAsUNBQFu//Yc1AYkmvxS+6uCAdc+p5tiKcTULtUduHecBE24BEUwRGg0AAAAASUVORK5CYII=",blurWidth:8,blurHeight:5},c={title:"Training Language Models to Explain Their Own Computations",subtitle:" ",description:"",date:"November 11, 2025",authors:[{name:"Belinda Z. Li",affiliations:["*"]},{name:"Zifan Carl Guo",affiliations:[""]},{name:"Vincent Huang",affiliations:[""]},{name:"Jacob Steinhardt",affiliations:[""]},{name:"Jacob Andreas",affiliations:[""]}],affiliations:{"*":"Correspondence to [email protected]"}},h={"og:url":"https://transluce.org/self-explaining","og:title":c.title,"og:image":"https://transluce.org/cards/self-explaining.png","og:image:width":1550,"og:image:height":816,"og:image:alt":"Training Language Models to Explain Their Own Computations","og:description":c.description},p=e=>{let{children:t}=e;return(0,i.jsx)(r.A,{meta:c,metadata:h,children:t})};function A(e){let t={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,a.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:["We train models to explain their own internal computations, such as what their features respond to or how those features affect the output.\nWe find evidence that models have ",(0,i.jsx)(t.em,{children:"privileged access"})," to these computations, and use this to train data-efficient explainer models."]})}),"\n",(0,i.jsx)("div",{className:"text-center not-prose",children:(0,i.jsx)("a",{href:"https://arxiv.org/abs/2511.08579",className:"inline-flex items-center justify-center h-8 px-3 rounded-md bg-ltluce text-sm font-semibold !text-gray-900 leading-none no-underline hover:opacity-90 transition-opacity duration-200",children:(0,i.jsx)(t.p,{children:"Read our full paper"})})}),"\n",(0,i.jsx)(t.h1,{id:"summary",children:"Summary"}),"\n",(0,i.jsxs)(t.p,{children:["Language models can produce fluent explanations of their decisions, for instance via their chain-of-thought. However, despite sounding plausible,\nthese explanations often don't reflect the model's actual decision process ",(0,i.jsx)(s.A,{ids:["turpin2023language","chen2024reasoning","barez2025cot"]}),".\nThis isn't surprising: nowhere in the training pipeline is a model ever expected to be faithful to its internal computation."]}),"\n",(0,i.jsxs)(t.p,{children:["What if we ",(0,i.jsx)(t.em,{children:"did"})," train models to faithfully verbalize their internal computations? We might hope that such models could explain what features were active\nin their representations, as well as the true causal relationship between the input tokens, the latent features, and the model outputs."]}),"\n",(0,i.jsx)(t.p,{children:"To approach this, we start from interpretability methods that provide ground-truth data about model internals—for example, automatic feature description explains\nneural features (e.g. from sparse autoencoders or neurons) by summarizing the contexts that activate the feature.\nWe train explainer models to produce these ground-truth explanations given the activations of the target model that we are explaining.\nWe find that models trained on this data can generalize to new instances of these queries about their own internals, including to out-of-distribution queries."}),"\n",(0,i.jsxs)(t.p,{children:["Even more strikingly, ",(0,i.jsx)(t.strong,{children:"we find a consistent pattern of models exhibiting privileged access to their internals: models can explain their own computations better than others can"}),".\nThis suggests that models can be trained to have introspective access to their own internal structure ",(0,i.jsx)(s.A,{ids:["li2025do"]}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Finally, our ",(0,i.jsx)(t.a,{href:"https://arxiv.org/abs/2511.08579",children:"full paper"})," includes a set of scaling experiments showing that self-explanations are significantly more data\nefficient than other explanation techniques. Interpretability tools today are powerful but costly—they require manual engineering or expensive search.\nSelf-explanation enables generalization to new queries with far fewer ground-truth interpretability examples."]}),"\n",(0,i.jsx)(t.h1,{id:"training-models-to-self-explain",children:"Training Models to Self-Explain"}),"\n",(0,i.jsx)("div",{id:"figure-1",children:(0,i.jsx)(o(),{src:d,alt:"Training Models to Self-Explain",quality:50,priority:!0,placeholder:"blur"})}),"\n",(0,i.jsx)(t.p,{children:"We elicit three different types of internal 
1computation from a target model (the model that we are explaining):"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.em,{children:"What does a model-internal feature represent?"})," We use auto-interpretability pipelines to generate explanations of the kinds of inputs that activate a feature (Feature Description, ",(0,i.jsx)("a",{href:"#figure-1",className:"text-darkluce",children:"Fig 1A"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.em,{children:"What components of models' internals affect their prediction?"})," We conduct interventions to models' internal activations to isolate important components, and expect explanations to describe the intervention outcome (Activation Patching, ",(0,i.jsx)("a",{href:"#figure-1",className:"text-darkluce",children:"Fig 1B"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.em,{children:"What tokens are important to a models' decision?"})," We ablate tokens in the input to identify boundaries of their decision rules (Input Ablation, ",(0,i.jsx)("a",{href:"#figure-1",className:"text-darkluce",children:"Fig 1C"}),")."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"We then fine-tune various explainer models on each of these three types of questions."}),"\n",(0,i.jsx)(t.h1,{id:"evidence-for-privileged-access",children:"Evidence for Privileged Access"}),"\n",(0,i.jsx)(t.p,{children:"We find that explainer models trained on the explanations from these interpretability procedures can describe new features, new intervention outcomes, and new decision boundaries. In particular, we find that explainer models trained to explain themselves are better than explainer models trained to explain other models, in line with privileged access."}),"\n",(0,i.jsx)(o(),{src:u,alt:"Models Explain Their Own Computations Best",placeholder:"blur"}),"\n",(0,i.jsx)(t.p,{children:"We also perform a set of scaling experiments, where we find that self-explanation is significantly more data-efficient than other explanation techniques, including training other models and a nearest neighbors SAE baseline. This suggests that self-explanations can be a scalable complement to interpretability techniques."}),"\n",(0,i.jsxs)(t.p,{children:["For more results and details, please refer to our ",(0,i.jsx)(t.a,{href:"https://arxiv.org/abs/2511.08579",children:"paper"}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"how-to-cite",children:"How to Cite"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bibtex",children:"@misc{li2025traininglanguagemodelsexplain,\n      title={Training Language Models to Explain Their Own Computations},\n      author={Belinda Z. Li and Zifan Carl Guo and Vincent Huang and Jacob Steinhardt and Jacob Andreas},\n      year={2025},\n      eprint={2511.08579},\n      archivePrefix={arXiv},\n      primaryClass={cs.CL},\n      url={https://arxiv.org/abs/2511.08579},\n}\n"})})]})}function f(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.jsx)(p,{...e,children:(0,i.jsx)(A,{...e})})}},52496:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),!function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{default:function(){return l},noSSR:function(){return s}});let i=n(64252);n(37876),n(14232);let a=i._(n(90295));function r(e){return{default:(null==e?void 0:e.default)||e}}function s(e,t){return delete t.webpack,delete t.modules,e(t)}function l(e,t){let n=a.default,i={loading:e=>{let{error:t,isLoading:n,pastDelay:i}=e;return null}};e instanceof Promise?i.loader=()=>e:"function"==typeof e?i.loader=e:"object"==typeof e&&(i={...i,...e});let l=(i={...i,...t}).loader;return(i.loadableGenerated&&(i={...i,...i.loadableGenerated},delete i.loadableGenerated),"boolean"!=typeof i.ssr||i.ssr)?n({...i,loader:()=>null!=l?l().then(r):Promise.resolve(r(()=>null))}):(delete i.webpack,delete i.modules,s(n,i))}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},58471:(e,t,n)=>{"use strict";n.d(t,{A:()=>
1o});var i=n(37876);n(14232);var a=n(18847),r=n.n(a),s=n(90769);let l=r()(()=>n.e(8943).then(n.bind(n,8943)),{loadableGenerated:{webpack:()=>[8943]},ssr:!1}),o=function(e,t){function n(n){let a=s.A[t];return a?(0,i.jsx)(l,{password:a,children:(0,i.jsx)(e,{...n})}):(0,i.jsx)(e,{...n})}return n.displayName="withPagePasswordProtect(".concat(e.displayName||e.name||"Component",")"),e.getInitialProps&&(n.getInitialProps=e.getInitialProps),n}},70239:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});var i=n(37876),a=n(67220);function r(e){let{ids:t}=e,{registerCitation:n}=(0,a.ie)(),r=Array.isArray(t)?t:[t],s=r.map(e=>n(e));return(0,i.jsxs)("span",{className:"citation",children:["[",s.map((e,t)=>(0,i.jsxs)("span",{children:[(0,i.jsx)("a",{href:"#ref-".concat(r[t]),id:"cite-".concat(r[t]),className:"text-blue-600 hover:underline",children:e}),t<s.length-1?", ":""]},r[t])),"]"]})}},86581:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"LoadableContext",{enumerable:!0,get:function(){return i}});let i=n(64252)._(n(14232)).default.createContext(null)},87240:(e,t,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/self-explanations",function(){return n(42299)}])},89926:(e,t,n)=>{"use strict";n.d(t,{A:()=>i});let i=(0,n(17963).A)("ArrowLeft",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]])},90295:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return h}});let i=n(64252)._(n(14232)),a=n(86581),r=[],s=[],l=!1;function o(e){let t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(e=>(n.loading=!1,n.loaded=e,e)).catch(e=>{throw n.loading=!1,n.error=e,e}),n}class d{promise(){return this._res.promise}retry(){this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};let{_res:e,_opts:t}=this;e.loading&&("number"==typeof t.delay&&(0===t.delay?this._state.pastDelay=!0:this._delay=setTimeout(()=>{this._update({pastDelay:!0})},t.delay)),"number"==typeof t.timeout&&(this._timeout=setTimeout(()=>{this._update({timedOut:!0})},t.timeout))),this._res.promise.then(()=>{this._update({}),this._clearTimeouts()}).catch(e=>{this._update({}),this._clearTimeouts()}),this._update({})}_update(e){this._state={...this._state,error:this._res.error,loaded:this._res.loaded,loading:this._res.loading,...e},this._callbacks.forEach(e=>e())}_clearTimeouts(){clearTimeout(this._delay),clearTimeout(this._timeout)}getCurrentValue(){return this._state}subscribe(e){return this._callbacks.add(e),()=>{this._callbacks.delete(e)}}constructor(e,t){this._loadFn=e,this._opts=t,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}}function u(e){return function(e,t){let n=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null},t),r=null;function o(){if(!r){let t=new d(e,n);r={getCurrentValue:t.getCurrentValue.bind(t),subscribe:t.subscribe.bind(t),retry:t.retry.bind(t),promise:t.promise.bind(t)}}return r.promise()}if(!l){let e=n.webpack&&1?n.webpack():n.modules;e&&s.push(t=>{for(let n of e)if(t.includes(n))return o()})}function u(e,t){o();let s=i.default.useContext(a.LoadableContext);s&&Array.isArray(n.modules)&&n.modules.forEach(e=>{s(e)});let l=i.default.useSyncExternalStore(r.subscribe,r.getCurrentValue,r.getCurrentValue);return i.default.useImperativeHandle(t,()=>({retry:r.retry}),[]),i.default.useMemo(()=>{var t;return l.loading||l.error?i.default.createElement(n.loading,{isLoading:l.loading,pastDelay:l.pastDelay,timedOut:l.timedOut,error:l.error,retry:r.retry}):l.loaded?i.default.createElement((t=l.loaded)&&t.default?t.default:t,e):null},[e,l])}return u.preload=()=>o(),u.displayName="LoadableComponent",i.default.forwardRef(u)}(o,e)}function c(e,t){let n=[];for(;e.length;){let i=e.pop();n.push(i(t))}return Promise.all(n).then(()=>{if(e.length)return c(e,t)})}u.preloadAll=()=>new Promise((e,t)=>{c(r).then(e,t)}),u.preloadReady=e=>(void 0===e&&(e=[]),new Promise(t=>{let n=()=>(l=!0,t());c(s,e).then(n,n)})),window.__NEXT_PRELOADREADY=u.preloadReady;let h=u},91668:(e,t,n)=>{"use strict";n.d(t,{R:()=>r});var i=n(14232);let a=i.createContext({});function r(e){let t=i.useContext(a);return i.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}}},e=>{e.O(0,[8585,7141,9783,4587,718,233,636,6593,8792],()=>e(e.s=87240)),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.