From 8b6e041fc60b9ac9c09095a427ecf8b480efe92e Mon Sep 17 00:00:00 2001 From: hash-panda <110599333+hash-panda@users.noreply.github.com> Date: Thu, 29 Oct 2026 02:43:05 +0800 Subject: [PATCH 1/3] Draft Attention causal rows and exact teaching poses; keep visual acceptance open --- apps/site/learn/attention/LESSON.md | 5 ++ apps/site/learn/attention/SCENE_SPEC.json | 79 +++++++++++++++++- apps/site/learn/attention/pose.mjs | 11 +++ apps/site/learn/attention/pose.test.mjs | 20 +++++ apps/site/learn/attention/stage.mjs | 82 +++++++++++++------ apps/site/learn/attention/style.css | 3 + docs/ai-learning/STATUS.md | 9 +- .../reviews/2026-10-29-attention-rework.md | 23 ++++++ docs/ai-learning/roadmap.json | 12 +-- package.json | 2 +- 10 files changed, 212 insertions(+), 34 deletions(-) create mode 100644 apps/site/learn/attention/pose.mjs create mode 100644 apps/site/learn/attention/pose.test.mjs create mode 100644 docs/ai-learning/reviews/2026-10-29-attention-rework.md diff --git a/apps/site/learn/attention/LESSON.md b/apps/site/learn/attention/LESSON.md index 44c6c36..012b1e1 100644 --- a/apps/site/learn/attention/LESSON.md +++ b/apps/site/learn/attention/LESSON.md @@ -15,3 +15,8 @@ Managed Chrome desktop (1363×936) and 390×844 iframe viewport; not physical-ph Observed: complete playback reached 48/48 and restored configuration. Backward seek 48→25→16 rebuilt earlier phases; resume/Escape pause, previous/next, Home/End, replay and reset were exercised. During playback configuration disappeared from the accessibility tree with focus on the persistent pause control. Reduced-motion toggle was enabled; t=31.1 displayed the stable full contribution bar. Query A produced 4.248; default C produced 15.752; changing future V to 1000 preserved output 15.752. The mobile quiz wrong/correct feedback and verify flow returned q=0, D=1000, output 10.000 and visible weights 1/3 each. Dialog fit in the narrow viewport. `evals/browser/attention-lifecycle.html` tested the actual app's visibility handler using controlled document-hidden events: hidden paused at ~0.05s, configuration restored; visible did not auto-resume or jump. This is event-path testing, not actual OS hidden-tab observation. OS-level preference switching, physical devices, screen-reader devices and other engines remain untested. Full-site checks including mechanical invariants passed. Preview and actual production evidence will be recorded separately. + + +## Rework draft — 2026-10-29 + +See `docs/ai-learning/reviews/2026-10-29-attention-rework.md`. Exact operation/row pose tests passed; preliminary desktop observation only. Not visually accepted or published. Original publication evidence does not validate this new candidate. diff --git a/apps/site/learn/attention/SCENE_SPEC.json b/apps/site/learn/attention/SCENE_SPEC.json index 7f7167d..9eccbfb 100644 --- a/apps/site/learn/attention/SCENE_SPEC.json +++ b/apps/site/learn/attention/SCENE_SPEC.json @@ -1 +1,78 @@ -{"id":"attention","question":"当前查询如何把可见位置的 V 汇成一个输出?","durationSeconds":48,"inputs":{"alpha":[-1,0,1],"futureV":{"min":0,"max":1000,"step":10}},"queryPosition":2,"keyDimension":2,"valueDimension":1,"keys":[[-1,0],[0,0],[1,0],[2,0]],"values":[0,10,20,"futureV"],"relations":["q=[sqrt(2)*alpha,0]","s=qK^T/sqrt(2)","mask j>2 to -Infinity before Softmax","p=Softmax(masked scores)","o=sum(p_j*V_j)"],"mapping":{"color":"position identity","probabilityBar":"0..1 within each channel","contributionBar":"length of p_j*V_j; shared total scale 0..20","connections":"dependencies, not physical motion or measured timing"},"experiment":"Keep K/V fixed and change q; then vary masked future V and show output invariance.","transfer":"q=0, futureV=1000 gives mean of visible 0,10,20 = 10, not max or four-way mean.","sources":["https://arxiv.org/abs/1706.03762","https://docs.pytorch.org/docs/2.14/generated/torch.nn.functional.scaled_dot_product_attention.html"],"simplifications":["Authored Q/K/V, no model or semantic interpretation","One causal row and head; V scalar","No learned projection, positions, dropout, output projection, residual, training or token sampling","SVG teaching geometry, not actual model hardware"]} +{ + "id": "attention", + "question": "当前查询如何把可见位置的 V 汇成一个输出?", + "durationSeconds": 48, + "inputs": { + "alpha": [ + -1, + 0, + 1 + ], + "futureV": { + "min": 0, + "max": 1000, + "step": 10 + } + }, + "queryPosition": 2, + "keyDimension": 2, + "valueDimension": 1, + "keys": [ + [ + -1, + 0 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + "values": [ + 0, + 10, + 20, + "futureV" + ], + "relations": [ + "q=[sqrt(2)*alpha,0]", + "s=qK^T/sqrt(2)", + "mask j>2 to -Infinity before Softmax", + "p=Softmax(masked scores)", + "o=sum(p_j*V_j)" + ], + "mapping": { + "color": "position identity", + "probabilityBar": "0..1 within each channel", + "contributionBar": "length of p_j*V_j; shared total scale 0..20", + "connections": "dependencies, not physical motion or measured timing" + }, + "experiment": "Keep K/V fixed and change q; then vary masked future V and show output invariance.", + "transfer": "q=0, futureV=1000 gives mean of visible 0,10,20 = 10, not max or four-way mean.", + "sources": [ + "https://arxiv.org/abs/1706.03762", + "https://docs.pytorch.org/docs/2.14/generated/torch.nn.functional.scaled_dot_product_attention.html" + ], + "simplifications": [ + "Authored Q/K/V, no model or semantic interpretation", + "One causal row and head; V scalar", + "No learned projection, positions, dropout, output projection, residual, training or token sampling", + "SVG teaching geometry, not actual model hardware" + ], + "reworkDraft": { + "date": "2026-10-29", + "layout": "Persistent position rows, exact operation rail, raw exponential denominator, causal mask shutter and nonzero value contribution traces", + "notAccepted": [ + "Q/K component formation needs stronger causal motion", + "390px and4x evidence incomplete", + "Full lifecycle/preview/production verification pending" + ] + } +} diff --git a/apps/site/learn/attention/pose.mjs b/apps/site/learn/attention/pose.mjs new file mode 100644 index 0000000..a442f39 --- /dev/null +++ b/apps/site/learn/attention/pose.mjs @@ -0,0 +1,11 @@ +// One deterministic teaching pose. Traversal is pedagogical, not compute latency. +const clamp=x=>Math.max(0,Math.min(1,x)); +export function lessonPose(f,reduced=false){ + const traversal=clamp(f.progress)*4,active=Math.min(3,Math.floor(traversal)),local=traversal-active; + const weights=f.masked.map(s=>Math.exp(s)),denominator=weights.reduce((a,b)=>a+b,0); + const mask=reduced?1:clamp(f.progress/.65); + const flights=f.terms.map((term,i)=>term===0?0:reduced?1:clamp((f.progress-i*.15)/.4)); + return {active,travel:reduced?1:clamp(local),weights,denominator,mask,flights, + products:f.keys[active].map((k,j)=>k*f.q[j]), + cumulative:f.terms.map((_,i)=>f.terms.slice(0,i+1).reduce((a,b)=>a+b,0))}; +} diff --git a/apps/site/learn/attention/pose.test.mjs b/apps/site/learn/attention/pose.test.mjs new file mode 100644 index 0000000..12eb502 --- /dev/null +++ b/apps/site/learn/attention/pose.test.mjs @@ -0,0 +1,20 @@ +import assert from 'node:assert/strict'; +import {sample} from './model.mjs'; +import {lessonPose} from './pose.mjs'; +const near=(a,b)=>assert.ok(Math.abs(a-b)<1e-10); +let count=0; +for(const id of [-1,0,1])for(const future of [0,100,1000])for(const reduced of [false,true]){ + const snapshots=[]; + for(let tick=0;tick<=960;tick++){ + const f=sample(tick/20,{id,future}),p=lessonPose(f,reduced);snapshots.push(p); + assert.ok(p.active>=0&&p.active<4&&p.travel>=0&&p.travel<=1); + // Raw and max-shifted exponential normalizations encode the same distribution. + p.weights.forEach((w,i)=>near(w/p.denominator,f.probs[i])); + near(p.products.reduce((a,b)=>a+b,0)/Math.SQRT2,f.scores[p.active]); + near(p.cumulative[3],f.output);assert.equal(p.weights[3],0);assert.equal(p.flights[3],0); + for(let i=1;i<4;i++)assert.ok(p.cumulative[i]>=p.cumulative[i-1]); + assert.ok(p.flights.every(x=>x>=0&&x<=1));count++; + } + for(let tick=960;tick>=0;tick-=13)assert.deepEqual(lessonPose(sample(tick/20,{id,future}),reduced),snapshots[tick]); +} +console.log(`Attention teaching pose: ${count} cases; raw/stable normalization, dot products, cumulative sum, masked no-flight and reverse seek passed.`); diff --git a/apps/site/learn/attention/stage.mjs b/apps/site/learn/attention/stage.mjs index f386ca2..2fc0034 100644 --- a/apps/site/learn/attention/stage.mjs +++ b/apps/site/learn/attention/stage.mjs @@ -1,30 +1,64 @@ import {TOKENS,COLORS} from './model.mjs'; +import {lessonPose} from './pose.mjs'; const NS='http://www.w3.org/2000/svg'; +const fmt=x=>Number.isFinite(x)?x.toFixed(3).replace(/\.?0+$/,''):'−∞'; export function createStage(host,{reducedMotion=()=>false}={}){ - const svg=document.createElementNS(NS,'svg');host.append(svg);svg.style.cssText='width:100%;height:100%;overflow:visible';svg.setAttribute('role','img');let last,key='',anchor=[250,0]; - function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?500:900,H=360,cw=(W-70)/4,p=reducedMotion()?1:Math.min(1,f.progress*1.7),k=[W,f.phase,f.alpha,f.future,f.phase===4?Math.round(p*120):''].join('|');if(k===key)return;key=k;svg.setAttribute('viewBox',`0 0 ${W} ${H}`);svg.replaceChildren(); - const n=(tag,attrs)=>{const el=document.createElementNS(NS,tag);for(const[k,v]of Object.entries(attrs))el.setAttribute(k,v);svg.append(el);return el;}; - const text=(x,y,s,size=18,color='#6b6478',align='middle')=>{const el=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:color,'text-anchor':align});el.textContent=s;}; - const rect=(x,y,w,h,fill,stroke='#ded8e3',rx=5)=>n('rect',{x,y,width:w,height:h,rx,fill,stroke,'stroke-width':.8}); - const line=(x,y,a,b,c='#d4cadc',dash='')=>n('path',{d:`M${x} ${y}L${a} ${b}`,stroke:c,fill:'none','stroke-dasharray':dash,'stroke-width':1}); - rect(W/2-140,3,280,33,'#f4f0f7');text(W/2,26,`查询 C:q = [${f.q[0].toFixed(2)}, 0]`,18,'#80669f'); - for(let i=0;i<4;i++){const x=35+i*cw,center=x+cw/2,c=COLORS[i],blocked=i===3&&f.phase>=2; - n('path',{d:`M${x} 58l5 -4h${cw-10}l-5 4Z`,stroke:'#d8d3df',fill:'#fff','stroke-width':.7});rect(x,58,cw-10,87,blocked?'#eeebe9':'#fffdfa',blocked?'#c9c3bd':c); - text(center-5,81,TOKENS[i]+(i===2?' · 当前':i===3?' · 未来':''),16,blocked?'#a2988f':c); - text(center-5,108,`K=[${f.keys[i].join(',')}]`,mobile?15:17,blocked?'#b4aaa2':'#7d7488');text(center-5,134,`V=${f.values[i]}`,18,blocked?'#b4aaa2':c); - if(f.phase>=1){text(center-5,172,blocked?'−∞':f.scores[i].toFixed(1),22,blocked?'#a99c91':c);if(blocked){line(x+8,92,x+cw-18,118,'#c8b9ae');text(center-5,195,'已遮罩',13,'#a8998e');}} - if(f.phase>=3){const bw=cw-24;rect(x+3,204,bw,10,'#eeebef');rect(x+3,204,bw*f.probs[i],10,c,c,2);text(center-5,239,`${(f.probs[i]*100).toFixed(1)}%`,19,blocked?'#ad9f93':c);} - if(f.phase===3)text(center-5,267,`exp=${i===3?'0':Math.exp(f.scores[i]).toFixed(3)}`,14,blocked?'#ad9f93':c); - if(f.phase>=4){const q=f.phase===4?p:1;line(center-5,249,center-5,249+11*q,c,blocked?'2 4':'');text(center-5,281,`${f.terms[i].toFixed(3)}`,17,blocked?'#ad9f93':c);} + const svg=document.createElementNS(NS,'svg');host.append(svg);svg.style.cssText='width:100%;height:100%;overflow:visible';svg.setAttribute('role','img');let last,anchor=[195,25]; + function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?390:900,H=450,pose=lessonPose(f,reducedMotion()),phase=f.phase; + svg.setAttribute('viewBox',`0 0 ${W} ${H}`);svg.replaceChildren(); + const n=(tag,a,parent=svg)=>{const e=document.createElementNS(NS,tag);for(const[k,v]of Object.entries(a))e.setAttribute(k,v);parent.append(e);return e;}; + const text=(x,y,s,size=18,c='#515d70',align='middle',parent=svg)=>{const e=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:c,'text-anchor':align},parent);e.textContent=s;return e;}; + const line=(x,y,ex,ey,c='#c5cdd7',parent=svg)=>n('path',{d:`M${x} ${y}L${ex} ${ey}`,stroke:c,fill:'none','stroke-width':.8,'vector-effect':'non-scaling-stroke'},parent); + const plate=(x,y,w,h,c='#f8f9fa',parent=svg)=>{ + n('path',{d:`M${x+5} ${y+h}H${x+w}l5 -4V${y+4}l-5 -4H${x+5}l-5 4V${y+h-4}Z`,fill:'#e7ebef',stroke:'#bbc7d3','stroke-width':.65},parent); + n('rect',{x,y,width:w,height:h,rx:4,fill:c,stroke:'#c7d1db','stroke-width':.65},parent);line(x+4,y+1,x+w-4,y+1,'#fff',parent); + }; + const active=pose.active,c=COLORS[active]; + plate(12,4,W-24,62); + const titles=['查询 C · Q/K 决定读多少,V 提供内容',`逐项匹配 · ${TOKENS[active]}`, '先遮住未来 D,再做 Softmax',`同一个分母 · Σ exp(s) = ${fmt(pose.denominator)}`,`逐项读取 · ${TOKENS[active]}`,'所有贡献相加,不是挑最大的一项']; + text(W/2,25,titles[phase],mobile?16:19,phase===2?COLORS[3]:c); + let formula=`q = [${fmt(f.q[0])}, 0]`; + if(phase===1)formula=mobile?`(${fmt(f.q[0])}×${f.keys[active][0]} + 0) / √2 = ${fmt(f.scores[active])}`:`(${fmt(f.q[0])} × ${f.keys[active][0]} + 0 × ${f.keys[active][1]}) / √2 = ${fmt(f.scores[active])}`; + if(phase===2)formula=`${fmt(f.scores[3])} → −∞ → exp(−∞) = 0`; + if(phase===3)formula=`${fmt(pose.weights[active])} / ${fmt(pose.denominator)} = ${(100*f.probs[active]).toFixed(1)}%`; + if(phase===4)formula=`${f.probs[active].toFixed(3)} × ${f.values[active]} = ${f.terms[active].toFixed(3)}`; + if(phase===5)formula=`o = ${f.output.toFixed(3)}`; + text(W/2,50,formula,mobile?17:22,c); + const col1=mobile?135:285,col2=mobile?280:645,rowTop=99,rowStep=64; + text(col1,87,['键 K','点积 / √2','原分数 → 遮罩','指数权重 exp(s)','权重 × 内容 V','各位置贡献'][phase],16); + text(col2,87,['内容 V','匹配分数','参与当前输出?','归一化权重','贡献 p × V','累计相加'][phase],16); + for(let i=0;i<4;i++){ + const y=rowTop+i*rowStep,color=COLORS[i],g=n('g',{'data-position':TOKENS[i]}); + plate(20,y,W-40,50,i===3&&phase>=2?'#f2efeb':'#fffefa',g); + n('rect',{x:21,y:y+5,width:3,height:40,rx:1,fill:color},g); + text(45,y+28,TOKENS[i],22,color,'middle',g); + let left='',right=''; + if(phase===0){left=`[${f.keys[i].join(', ')}]`;right=String(f.values[i]);} + if(phase===1){left=`[${f.keys[i].join(', ')}]`;right=fmt(f.scores[i]);} + if(phase===2){left=i===3?`${fmt(f.scores[i])} → −∞`:fmt(f.scores[i]);right=i===3?'未来 · 阻断':'可见 · 保留';} + if(phase===3){left=fmt(pose.weights[i]);right=`${(100*f.probs[i]).toFixed(1)}%`;} + if(phase===4){left=`${f.probs[i].toFixed(3)} × ${f.values[i]}`;right=f.terms[i].toFixed(3);} + if(phase===5){left=f.terms[i].toFixed(3);right=pose.cumulative[i].toFixed(3);} + text(col1,y+28,left,mobile?17:21,color,'middle',g);text(col2,y+28,right,mobile?17:21,color,'middle',g); + if(phase===3){n('rect',{x:col2-(mobile?58:125),y:y+37,width:mobile?116:250,height:6,rx:2,fill:'#e9edf1'},g);n('rect',{x:col2-(mobile?58:125),y:y+37,width:(mobile?116:250)*f.probs[i],height:6,rx:2,fill:color},g);} + if(phase===2&&i===3){const x=W-23-(W-46)*pose.mask;n('rect',{x,y:y+2,width:(W-46)*pose.mask,height:46,fill:'#d6cbbf',opacity:.16},g);line(W-32,y+6,x+5,y+44,color,g);} + // Continuous trace links an exact operation to its owning row; values never interpolate. + if(phase===1||phase===3){const x=col1+(col2-col1)*pose.travel;if(i===active){line(col1,y+33,col2,y+33,color,g);n('circle',{cx:x,cy:y+33,r:3,fill:color,stroke:'#fff'},g);}} } - if(f.phase===0)text(W/2,213,'输入:一条查询 + 四组 K/V',18,'#8d7c9e'); - if(f.phase===1)text(W/2,223,'分数 sⱼ = q·kⱼ / √2',21,'#8d7c9e'); - if(f.phase===2)text(W/2,245,'未来 D:exp(−∞) = 0',21,'#9a8474'); - if(f.phase===3)text(W/2,329,`p = exp(s) / ${f.scores.slice(0,3).reduce((s,v)=>s+Math.exp(v),0).toFixed(3)}`,17,'#8d7c9e'); - if(f.phase>=3){text(W/2,f.phase===3?286:303,f.phase===3?'各条宽度:权重 0 → 100%':'每一项:pⱼ × Vⱼ',15,'#9b89a9');} - if(f.phase>=4){const bx=65,bw=W-130,q=f.phase===4?p:1;let offset=0;for(let i=0;i<4;i++){const w=bw*f.terms[i]/20*q;rect(bx+offset,314,w,17,COLORS[i],COLORS[i],0);offset+=w;}line(bx,336,bx+bw,336);text(bx,354,'0',12,'#aa9bb3');text(bx+bw,354,'20',12,'#aa9bb3');text(W/2,354,`输出 o = ${f.output.toFixed(3)}`,19,'#80669f');} - anchor=f.phase===0?[W/2,3]:f.phase===1?[28,165]:f.phase===2?[W-31,166]:f.phase===3?[30,209]:f.phase===4?[28,276]:[65,322]; - svg.setAttribute('aria-label',`当前位置 C,查询 ${f.alpha},阶段 ${f.phase+1};${f.phase>=3?'权重 '+f.probs.map(x=>x.toFixed(4)).join('、'):''}${f.phase>=4?';输出 '+f.output.toFixed(3):''}`); + // V contributions travel to cumulative slots; final segment lengths use shared 0..20 scale. + const bx=30,bw=W-60,by=390; + if(phase>=4){let start=0;for(let i=0;i<4;i++){ + const w=bw*f.terms[i]/20,x=bx+bw*start/20;const q=phase===5?1:pose.flights[i]; + n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:.25}); + if(w>0)n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:q}); + const sx=col2,sy=rowTop+i*rowStep+34,tx=x+w/2; + if(phase===4&&w>0&&q>0&&q<1){n('circle',{cx:sx+(tx-sx)*q,cy:sy+(by-sy)*q,r:4,fill:COLORS[i],stroke:'#fff'});} + start+=f.terms[i]; + }line(bx,by+22,bx+bw,by+22);for(const v of [0,10,20]){const x=bx+bw*v/20;line(x,by+20,x,by+25);text(x,by+43,String(v),16);} + text(W/2,by-10,`最终输出 o = ${f.output.toFixed(3)}`,20,'#66527e'); + }else text(W/2,414,phase===3?'每条长度用同一 0 → 100% 刻度':'手写教学 Q/K/V · 不运行真实模型',16,'#7d7285'); + anchor=phase===2?[24,rowTop+3*rowStep+25]:phase===4?[bx,by+8]:[W/2,4]; + svg.setAttribute('aria-label',`当前位置 C;阶段 ${phase+1};${formula}。${phase>=3?'权重 '+f.probs.join('、'):''}`); } - return {render,projectAnchor(){const m=svg.getScreenCTM(),r=host.getBoundingClientRect();if(!m||!r.width)return null;const pt=svg.createSVGPoint();pt.x=anchor[0];pt.y=anchor[1];const z=pt.matrixTransform(m);return {x:(z.x-r.left)/r.width,y:(z.y-r.top)/r.height,routeLeft:last.phase>0&&last.phase!==2,bendX:(m.a*12+m.e-r.left)/r.width};},resize(){key='';if(last)render(last);},dispose(){svg.remove();}}; + return {render,projectAnchor(){const m=svg.getScreenCTM(),r=host.getBoundingClientRect();if(!m||!r.width)return null;const pt=svg.createSVGPoint();pt.x=anchor[0];pt.y=anchor[1];const z=pt.matrixTransform(m);return{x:(z.x-r.left)/r.width,y:(z.y-r.top)/r.height,routeLeft:last.phase===2||last.phase===4,bendX:12/(host.clientWidth<600?390:900)};},resize(){if(last)render(last);},dispose(){svg.remove();}}; } diff --git a/apps/site/learn/attention/style.css b/apps/site/learn/attention/style.css index 6948a2f..653d049 100644 --- a/apps/site/learn/attention/style.css +++ b/apps/site/learn/attention/style.css @@ -20,3 +20,6 @@ dialog{border:1px solid #e5dce9;background:#fffdf8;border-radius:18px;max-width: .reduce-motion *{animation:none!important;transition:none!important}#reduce-motion{accent-color:#8b749e;margin-right:8px} #future{width:100px}.controls label{display:flex;align-items:center;gap:8px}.controls output{min-width:25px}.controls .presets button{padding:8px 10px}@media(max-width:700px){.controls{height:100px;max-height:100px}.controls label{font-size:10px;flex:1}#future{width:75px}.presets{justify-content:space-around}.controls .hint{display:none}.exhibit{min-height:435px}} +/* Keep quantitative type readable; narrow views recompose as persistent rows. */ +.exhibit{min-height:700px}.artwork svg text{stroke:none} +@media(max-width:700px){.exhibit{min-height:700px}.callout p{font-size:13px}} diff --git a/docs/ai-learning/STATUS.md b/docs/ai-learning/STATUS.md index 6754e7c..b9a58cb 100644 --- a/docs/ai-learning/STATUS.md +++ b/docs/ai-learning/STATUS.md @@ -1,10 +1,10 @@ # AI principles course status -Updated: 2026-10-28 (Asia/Shanghai). +Updated: 2026-10-29 (Asia/Shanghai). Current total: **4 / 10 published**. **Visual acceptance reopened for all four on 2026-10-28 after user feedback.** Token-choice follow-up has passed developer visual/teaching review and its checked release is verified in production; the other three remain open. Next rework: **Attention**. New topics, including Transformer, are on hold until the four-scene rework queue passes the updated review gates. -See [Anatomy comparison and concrete findings](reviews/2026-10-28-anatomy-quality.md). Rework order: token-choice → attention → tokenization → embedding. Keep existing routes and mathematical/release evidence. Publication status does not mean the renewed visual gate has passed. The initial comparison changed no website implementation or distributed Skill. A subsequent token-choice repair exists only on the draft branch described below. +See [Anatomy comparison and concrete findings](reviews/2026-10-28-anatomy-quality.md). Rework order: token-choice → attention → tokenization → embedding. Keep existing routes and mathematical/release evidence. Publication status does not mean the renewed visual gate has passed. The initial comparison changed no website implementation or distributed Skill. The token-choice repair was subsequently released; the draft paragraph below is historical and superseded by its production receipt. Historical “Next” statements below describe the release sequence at that time and are superseded by this active work item and roadmap. @@ -60,3 +60,8 @@ Browser returned; actual intermediate/reverse desktop frames,390px, native4× co PR #6 reviewed head `e6b74581f6a126e1d0fca9e3b72fa615407c35c2`: branch CI40676595210 success; READY preview `dpl_GqK2VrNBQNNF4WFbzUy1pKd3hJvm`. Authenticated preview HTML/app/model/stage/geometry/style responses returned200 and matched the reviewed source exactly. Preview HTTP evidence is distinct from same-source local browser actions. Merged source `26defa3024d64af69f8a4da8f66e8d23287cb523` reached production READY as `dpl_2BqeL1ySywcQwDayqUr8CqyPzoeW`; main CI40676875334 succeeded. Actual public route https://explain.funagent.app/learn/token-choice/ loaded without sign-in. Production browser inspected default32s label ownership and completed the prediction check: correctfloor feedback and return-to-diagramT=2,u=.6219,floor27.6%. The stable result withdraws the ruler, avoiding result-card/tick occlusion. Course remains4/10; next quality rework isAttention, with new topics held until the other three are reviewed. Original publication receipts remain intact. + + +## Attention causal rework draft — 2026-10-29 + +Branch `rework/attention-causal-20261029`: persistent position rows, exact operation rail, mask trace and nonzero contribution movement implemented. npm run check and17,298 new pose cases passed. Preliminary desktop Softmax observation completed. This is **not released or visually accepted**: component formation/chapter continuity and the390px/4×/lifecycle matrix still need work. Continue this candidate rather than starting a new topic. [Exact evidence and remaining gates](reviews/2026-10-29-attention-rework.md). Production remains unchanged. diff --git a/docs/ai-learning/reviews/2026-10-29-attention-rework.md b/docs/ai-learning/reviews/2026-10-29-attention-rework.md new file mode 100644 index 0000000..3c5909c --- /dev/null +++ b/docs/ai-learning/reviews/2026-10-29-attention-rework.md @@ -0,0 +1,23 @@ +# Attention causal rework — draft, 2026-10-29 + +Base main e26b3eb205717ca62c20020cc1dd2c134662f680. Local source tree matched latest remote main6384c685ccd49157c861d4b8872e9e6ca5280fda before changes. No AGENTS.md or openIssue/PR found. Active topic from roadmap isAttention; token-choice already has a verified release and is not redone. No production changes in this iteration. + +## Implemented candidate + +Replaced the four compressed vertical cards with persistent position rows. A single exact operation rail traces the current position through Q·K/√2, raw exponential normalization and weighted V. A/B/C/D retain color and row identity. Shared0..100% bars compare normalized weights, and contribution lengths use a shared0..20 scale. The future row receives a progressing mask shutter; nonzero V contributions travel toward cumulative slots. These are teaching traces, not simulated compute latency or physical hardware. Zero contributions, including maskedD, never emit a contribution trace. + +New independent lessonPose sampler derives products, raw exponential weights/denominator, mask progress and contribution travel from the existing sampled model. The mathematical model and counterfactual inputs are unchanged. The use of raw exponentials for the visible denominator is mathematically equivalent to the model's max-shifted stable computation; it is not a changed probability distribution. + +## Executed checks + +npm run check passed. New pose checks cover17,298 cases over3 query directions,3 futureV values, normal/reduced motion and961 times per combination. They verify exact dot-product reconstruction, raw/stable probability agreement, cumulative output, no masked contribution trace, finite bounded teaching progress and deterministic reverse seeking. Original independent Attention goldens and all other scene/mechanical checks retained. + +Official source revisited: https://docs.pytorch.org/docs/2.14/generated/torch.nn.functional.scaled_dot_product_attention.html . The scaled dot product, causal mask before softmax and weightedV remain the source-grounded relationships. + +Actual current cloud Chrome inspected the desktop initial layout and paused26s Softmax frame. The shared denominator4.086 and1/4.086=24.5% were visible in the operation rail, with the sameB row and its probability bar. This is a preliminary observation, not a complete visual acceptance. No new screenshots are represented as production evidence. + +## Why NOT released + +This is not yet the finish requested by the user. The operation rail and stable rows make numeric relationships easier to follow, but Q/K component formation is still shown mainly as a formula. Row content changes across chapters still need identity-preserving transitions rather than simple replacement. The narrow view reserves more height but has NOT been validated for actual font metrics, long values, one-screen playing behavior or collisions. Full4×/intermediate/reverse browser matrix and lifecycle/keyboard/hidden/reduced-motion/quiz tests have NOT been performed on this revision. The mask animation must also be reviewed so its progressive visual overlay is not mistaken for a gradually participating future token (the numerical mask is always exact). + +Next work on THIS branch/PR: improve component-level causality and explicit contribution connectors; inspect390px and4×, source-correct mask semantics, intermediate/reverse frames, actual controls and fixed-query/future invariance. Only then close visualAcceptance, inspect the checked branch preview, merge and verify matching production READY/SHA/domain. Do not create a new scene or duplicate this candidate. Keep Attention needs-rework, all four public routes and historical publication receipts. Skill alignment is pending and no new installation/host compatibility is claimed. No learner study or measured learning gains. diff --git a/docs/ai-learning/roadmap.json b/docs/ai-learning/roadmap.json index 874eed8..14f4fa5 100644 --- a/docs/ai-learning/roadmap.json +++ b/docs/ai-learning/roadmap.json @@ -1,6 +1,6 @@ { "version": 1, - "updated": "2026-10-28", + "updated": "2026-10-29", "target": 10, "cadenceHours": 12, "releasePolicy": "One reviewed scene per iteration; continue a failed scene before advancing.", @@ -163,11 +163,11 @@ ], "resumeAfter": "All four published scenes pass the reopened craft and causal-motion gates.", "candidate": { - "scene": "token-choice", - "branch": "fix/token-choice-morph-craft-20261028", - "status": "published-and-production-verified", - "record": "docs/ai-learning/reviews/2026-10-28-token-choice-rework.md", - "productionChanged": true + "scene": "attention", + "branch": "rework/attention-causal-20261029", + "status": "draft-needs-causal-and-browser-review", + "record": "docs/ai-learning/reviews/2026-10-29-attention-rework.md", + "productionChanged": false } } } diff --git a/package.json b/package.json index 6323817..4ba0415 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "build": "node scripts/build.mjs", - "test": "node evals/verify.mjs && node apps/site/learn/token-choice/model.test.mjs && node apps/site/learn/token-choice/geometry.test.mjs && node evals/verify-token-choice.mjs && node evals/verify-course.mjs && node apps/site/learn/tokenization/model.test.mjs && node apps/site/learn/embedding/model.test.mjs && node apps/site/learn/attention/model.test.mjs", + "test": "node evals/verify.mjs && node apps/site/learn/token-choice/model.test.mjs && node apps/site/learn/token-choice/geometry.test.mjs && node evals/verify-token-choice.mjs && node evals/verify-course.mjs && node apps/site/learn/tokenization/model.test.mjs && node apps/site/learn/embedding/model.test.mjs && node apps/site/learn/attention/model.test.mjs && node apps/site/learn/attention/pose.test.mjs", "check": "npm test && npm run build" }, "engines": { From 613d8ec5278687be60e0d5fcec0cc2d9a0335c23 Mon Sep 17 00:00:00 2001 From: hash-panda <110599333+hash-panda@users.noreply.github.com> Date: Thu, 29 Oct 2026 14:46:27 +0800 Subject: [PATCH 2/3] Refine Attention component causality, narrow type and rounded display semantics --- apps/site/learn/attention/LESSON.md | 3 ++ apps/site/learn/attention/SCENE_SPEC.json | 8 +-- apps/site/learn/attention/model.mjs | 4 +- apps/site/learn/attention/pose.mjs | 8 +++ apps/site/learn/attention/pose.test.mjs | 8 ++- apps/site/learn/attention/stage.mjs | 53 +++++++++++++------ docs/ai-learning/STATUS.md | 5 ++ .../reviews/2026-10-29-attention-rework.md | 13 +++++ 8 files changed, 78 insertions(+), 24 deletions(-) diff --git a/apps/site/learn/attention/LESSON.md b/apps/site/learn/attention/LESSON.md index 012b1e1..62c3d3d 100644 --- a/apps/site/learn/attention/LESSON.md +++ b/apps/site/learn/attention/LESSON.md @@ -20,3 +20,6 @@ Observed: complete playback reached 48/48 and restored configuration. Backward s ## Rework draft — 2026-10-29 See `docs/ai-learning/reviews/2026-10-29-attention-rework.md`. Exact operation/row pose tests passed; preliminary desktop observation only. Not visually accepted or published. Original publication evidence does not validate this new candidate. + + +Q/K component follow-up adds paired multiplication wells, explicit merge and routed contribution paths. Desktop7.2/8.2/8.6/9.0/reverse8.2 and selected390px inspection completed; narrow type measured15.21px after repair. Rounded arithmetic uses≈. Full release review remains pending; see the same rework record. diff --git a/apps/site/learn/attention/SCENE_SPEC.json b/apps/site/learn/attention/SCENE_SPEC.json index 9eccbfb..f4fd1b5 100644 --- a/apps/site/learn/attention/SCENE_SPEC.json +++ b/apps/site/learn/attention/SCENE_SPEC.json @@ -68,11 +68,11 @@ ], "reworkDraft": { "date": "2026-10-29", - "layout": "Persistent position rows, exact operation rail, raw exponential denominator, causal mask shutter and nonzero value contribution traces", + "layout": "Persistent rows; paired Q/K component products and merge/divide paths; raw normalization; orthogonal nonzero contribution paths", "notAccepted": [ - "Q/K component formation needs stronger causal motion", - "390px and4x evidence incomplete", - "Full lifecycle/preview/production verification pending" + "Cross-chapter value handoffs need continuity", + "Complete1x/4x, narrow playing layout and lifecycle evidence pending", + "Final rounded-arithmetic wording needs browser recheck" ] } } diff --git a/apps/site/learn/attention/model.mjs b/apps/site/learn/attention/model.mjs index f3c9788..d044a2d 100644 --- a/apps/site/learn/attention/model.mjs +++ b/apps/site/learn/attention/model.mjs @@ -3,8 +3,8 @@ export const STARTS=[0,7,15,23,31,40],DURATION=48; export function calculate(alpha=1,future=100){if(![-1,0,1].includes(alpha)||!Number.isFinite(future)||future<0||future>1000)throw new RangeError('Invalid teaching input');const q=[Math.SQRT2*alpha,0],keys=[[-1,0],[0,0],[1,0],[2,0]],values=[0,10,20,future],scores=keys.map(k=>(q[0]*k[0]+q[1]*k[1])/Math.sqrt(2)),masked=scores.map((s,i)=>i>2?-Infinity:s),max=Math.max(...masked),weights=masked.map(s=>Math.exp(s-max)),sum=weights.reduce((a,b)=>a+b),probs=weights.map(w=>w/sum),terms=values.map((v,i)=>v*probs[i]);return {alpha,future,q,keys,values,scores,masked,weights,probs,terms,output:terms.reduce((a,b)=>a+b)};} export function sample(t,{id=1,future=100}={}){t=Number.isFinite(t)?Math.max(0,Math.min(DURATION,t)):0;const phase=STARTS.findLastIndex(x=>t>=x);return {...calculate(id,future),time:t,phase,progress:(t-STARTS[phase])/((STARTS[phase+1]??DURATION)-STARTS[phase])};} export function narration(f){return [ -{title:'C 正在读取谁的信息?',body:'当前查询位置是 C。A、B、C 可以参与;D 在未来。本页只计算这一行、一个头,Q/K 是二维,V 用一个数简化展示。'}, -{title:'Q 和 K 相比,得到分数',body:`q = [${f.q[0].toFixed(3)}, 0];分数 sⱼ = q·kⱼ / √2。A、B、C、D 的分数为 ${f.scores.map(x=>x.toFixed(1)).join('、')}。分数还不是权重。`}, +{title:'C 正在读取谁的信息?',body:'在 C 的位置,用同一条查询读取 A/B/C;未来 D 不可见。这是手写的单头教学数据。'}, +{title:'Q 和 K 相比,得到分数',body:`当前匹配 ${TOKENS[Math.min(3,Math.floor(f.progress*4))]}:两个对应分量先相乘,再相加、除以 √2。匹配分数还不是权重。`}, {title:'先挡住未来,再分配权重',body:`D 的分数 ${f.scores[3].toFixed(1)} 被改为 −∞,指数为 0。它不进入分母;即使它的 V 是 ${f.future},也不能参与当前输出。`}, {title:'可见位置共同分到 100%',body:`指数归一化(Softmax)后:A ${(f.probs[0]*100).toFixed(1)}%、B ${(f.probs[1]*100).toFixed(1)}%、C ${(f.probs[2]*100).toFixed(1)}%、D 0%。这里是信息混合的权重,不是在抽取下一个 Token。`}, {title:'用权重乘 V,而不是乘 K',body:`各通道贡献为 ${f.terms.map(x=>x.toFixed(3)).join(' + ')}。Q/K 决定读多少,V 提供读出的内容;这些贡献会全部相加,不只取最大的一项。`}, diff --git a/apps/site/learn/attention/pose.mjs b/apps/site/learn/attention/pose.mjs index a442f39..47f4f42 100644 --- a/apps/site/learn/attention/pose.mjs +++ b/apps/site/learn/attention/pose.mjs @@ -9,3 +9,11 @@ export function lessonPose(f,reduced=false){ products:f.keys[active].map((k,j)=>k*f.q[j]), cumulative:f.terms.map((_,i)=>f.terms.slice(0,i+1).reduce((a,b)=>a+b,0))}; } + +export function pointOnPath(points,t){ + const lengths=points.slice(1).map((p,i)=>Math.hypot(p[0]-points[i][0],p[1]-points[i][1])); + let distance=clamp(t)*lengths.reduce((a,b)=>a+b,0),i=0; + while(ilengths[i])distance-=lengths[i++]; + const fraction=lengths[i]?distance/lengths[i]:1; + return points[i].map((v,j)=>v+(points[i+1][j]-v)*fraction); +} diff --git a/apps/site/learn/attention/pose.test.mjs b/apps/site/learn/attention/pose.test.mjs index 12eb502..ae126a3 100644 --- a/apps/site/learn/attention/pose.test.mjs +++ b/apps/site/learn/attention/pose.test.mjs @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import {sample} from './model.mjs'; -import {lessonPose} from './pose.mjs'; +import {lessonPose,pointOnPath} from './pose.mjs'; const near=(a,b)=>assert.ok(Math.abs(a-b)<1e-10); let count=0; for(const id of [-1,0,1])for(const future of [0,100,1000])for(const reduced of [false,true]){ @@ -18,3 +18,9 @@ for(const id of [-1,0,1])for(const future of [0,100,1000])for(const reduced of [ for(let tick=960;tick>=0;tick-=13)assert.deepEqual(lessonPose(sample(tick/20,{id,future}),reduced),snapshots[tick]); } console.log(`Attention teaching pose: ${count} cases; raw/stable normalization, dot products, cumulative sum, masked no-flight and reverse seek passed.`); + +const path=[[0,0],[10,0],[10,10],[30,10]]; +assert.deepEqual(pointOnPath(path,0),[0,0]);assert.deepEqual(pointOnPath(path,1),[30,10]); +assert.deepEqual(pointOnPath(path,.25),[10,0]);assert.deepEqual(pointOnPath(path,.5),[10,10]); +for(let i=0;i<=100;i++){const [x,y]=pointOnPath(path,i/100);assert.ok(y===0||x===10||y===10);} +console.log('Causal pointer path: exact junctions/endpoints and segment containment pass.'); diff --git a/apps/site/learn/attention/stage.mjs b/apps/site/learn/attention/stage.mjs index 2fc0034..7351310 100644 --- a/apps/site/learn/attention/stage.mjs +++ b/apps/site/learn/attention/stage.mjs @@ -1,32 +1,49 @@ import {TOKENS,COLORS} from './model.mjs'; -import {lessonPose} from './pose.mjs'; +import {lessonPose,pointOnPath} from './pose.mjs'; const NS='http://www.w3.org/2000/svg'; +const INKS=['#3f6092','#73568f','#3e7560','#925b43']; const fmt=x=>Number.isFinite(x)?x.toFixed(3).replace(/\.?0+$/,''):'−∞'; export function createStage(host,{reducedMotion=()=>false}={}){ const svg=document.createElementNS(NS,'svg');host.append(svg);svg.style.cssText='width:100%;height:100%;overflow:visible';svg.setAttribute('role','img');let last,anchor=[195,25]; - function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?390:900,H=450,pose=lessonPose(f,reducedMotion()),phase=f.phase; + function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?390:900,H=500,pose=lessonPose(f,reducedMotion()),phase=f.phase; svg.setAttribute('viewBox',`0 0 ${W} ${H}`);svg.replaceChildren(); const n=(tag,a,parent=svg)=>{const e=document.createElementNS(NS,tag);for(const[k,v]of Object.entries(a))e.setAttribute(k,v);parent.append(e);return e;}; - const text=(x,y,s,size=18,c='#515d70',align='middle',parent=svg)=>{const e=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:c,'text-anchor':align},parent);e.textContent=s;return e;}; + const text=(x,y,s,size=18,c='#515d70',align='middle',parent=svg)=>{const e=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:COLORS.includes(c)?INKS[COLORS.indexOf(c)]:c,'text-anchor':align},parent);e.textContent=s;return e;}; const line=(x,y,ex,ey,c='#c5cdd7',parent=svg)=>n('path',{d:`M${x} ${y}L${ex} ${ey}`,stroke:c,fill:'none','stroke-width':.8,'vector-effect':'non-scaling-stroke'},parent); const plate=(x,y,w,h,c='#f8f9fa',parent=svg)=>{ n('path',{d:`M${x+5} ${y+h}H${x+w}l5 -4V${y+4}l-5 -4H${x+5}l-5 4V${y+h-4}Z`,fill:'#e7ebef',stroke:'#bbc7d3','stroke-width':.65},parent); n('rect',{x,y,width:w,height:h,rx:4,fill:c,stroke:'#c7d1db','stroke-width':.65},parent);line(x+4,y+1,x+w-4,y+1,'#fff',parent); }; const active=pose.active,c=COLORS[active]; - plate(12,4,W-24,62); - const titles=['查询 C · Q/K 决定读多少,V 提供内容',`逐项匹配 · ${TOKENS[active]}`, '先遮住未来 D,再做 Softmax',`同一个分母 · Σ exp(s) = ${fmt(pose.denominator)}`,`逐项读取 · ${TOKENS[active]}`,'所有贡献相加,不是挑最大的一项']; - text(W/2,25,titles[phase],mobile?16:19,phase===2?COLORS[3]:c); + plate(12,4,W-24,108); + const titles=['查询 C · 一条 Q,四组 K/V',`逐项匹配 · ${TOKENS[active]}`, '先遮住未来 D,再做 Softmax',`同一个分母 · Σ exp(s) = ${fmt(pose.denominator)}`,`逐项读取 · ${TOKENS[active]}`,'所有贡献相加,不是挑最大的一项']; + text(W/2,25,titles[phase],mobile?17:19,phase===2?COLORS[3]:c); let formula=`q = [${fmt(f.q[0])}, 0]`; - if(phase===1)formula=mobile?`(${fmt(f.q[0])}×${f.keys[active][0]} + 0) / √2 = ${fmt(f.scores[active])}`:`(${fmt(f.q[0])} × ${f.keys[active][0]} + 0 × ${f.keys[active][1]}) / √2 = ${fmt(f.scores[active])}`; + if(phase===1)formula=mobile?`(${fmt(f.q[0])}×${f.keys[active][0]} + 0) / √2 ≈ ${fmt(f.scores[active])}`:`(${fmt(f.q[0])} × ${f.keys[active][0]} + 0 × ${f.keys[active][1]}) / √2 ≈ ${fmt(f.scores[active])}`; if(phase===2)formula=`${fmt(f.scores[3])} → −∞ → exp(−∞) = 0`; - if(phase===3)formula=`${fmt(pose.weights[active])} / ${fmt(pose.denominator)} = ${(100*f.probs[active]).toFixed(1)}%`; - if(phase===4)formula=`${f.probs[active].toFixed(3)} × ${f.values[active]} = ${f.terms[active].toFixed(3)}`; + if(phase===3)formula=`${fmt(pose.weights[active])} / ${fmt(pose.denominator)} ≈ ${(100*f.probs[active]).toFixed(1)}%`; + if(phase===4)formula=`${f.probs[active].toFixed(3)} × ${f.values[active]} ≈ ${f.terms[active].toFixed(3)}`; if(phase===5)formula=`o = ${f.output.toFixed(3)}`; - text(W/2,50,formula,mobile?17:22,c); - const col1=mobile?135:285,col2=mobile?280:645,rowTop=99,rowStep=64; - text(col1,87,['键 K','点积 / √2','原分数 → 遮罩','指数权重 exp(s)','权重 × 内容 V','各位置贡献'][phase],16); - text(col2,87,['内容 V','匹配分数','参与当前输出?','归一化权重','贡献 p × V','累计相加'][phase],16); + if(phase!==1)text(W/2,66,formula,mobile?17:22,c); + if(phase===1){ + const centers=[W*.27,W*.73],merge=W/2; + for(let j=0;j<2;j++){ + const x=centers[j],on=pose.travel>=j*.28&&pose.travel<(j+1)*.28; + n('rect',{x:x-(mobile?72:125),y:33,width:mobile?144:250,height:38,rx:4,fill:on?'#edf2f6':'#fffdfa',stroke:c,'stroke-width':on?1.2:.6}); + text(x,49,`${fmt(f.q[j])} × ${f.keys[active][j]}`,mobile?17:19,c); + text(x,67,fmt(pose.products[j]),mobile?17:21,c); + const path=[[x,73],[x,81],[merge,81],[merge,89]]; + n('path',{d:path.map((p,i)=>`${i?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:c,'stroke-width':.7}); + if(pose.travel>=.56&&pose.travel<.84){const dot=pointOnPath(path,(pose.travel-.56)/.28);n('circle',{cx:dot[0],cy:dot[1],r:3,fill:c});} + } + text(merge,103,`(${fmt(pose.products[0])} + ${fmt(pose.products[1])}) / √2 ≈ ${fmt(f.scores[active])}`,mobile?17:20,c); + } + if(phase===2)text(W/2,98,'展示遮罩规则;未来位置始终不参与',mobile?17:18,'#8e7466'); + if(phase===0)text(W/2,98,'同一行同色 · A → B → C → D',mobile?15:18); + if(phase===3||phase===4)text(W/2,98,'完整精度计算 · 展示值已取近似',mobile?17:18); + const col1=mobile?135:285,col2=mobile?280:645,rowTop=145,rowStep=64; + text(col1,133,['键 K','键 K','原分数 → 遮罩','指数权重 exp(s)','权重 × 内容 V','各位置贡献'][phase],16); + text(col2,133,['内容 V','匹配分数','参与当前输出?','归一化权重','贡献 p × V','累计相加'][phase],16); for(let i=0;i<4;i++){ const y=rowTop+i*rowStep,color=COLORS[i],g=n('g',{'data-position':TOKENS[i]}); plate(20,y,W-40,50,i===3&&phase>=2?'#f2efeb':'#fffefa',g); @@ -46,17 +63,19 @@ export function createStage(host,{reducedMotion=()=>false}={}){ if(phase===1||phase===3){const x=col1+(col2-col1)*pose.travel;if(i===active){line(col1,y+33,col2,y+33,color,g);n('circle',{cx:x,cy:y+33,r:3,fill:color,stroke:'#fff'},g);}} } // V contributions travel to cumulative slots; final segment lengths use shared 0..20 scale. - const bx=30,bw=W-60,by=390; + const bx=30,bw=W-60,by=438; if(phase>=4){let start=0;for(let i=0;i<4;i++){ const w=bw*f.terms[i]/20,x=bx+bw*start/20;const q=phase===5?1:pose.flights[i]; n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:.25}); if(w>0)n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:q}); - const sx=col2,sy=rowTop+i*rowStep+34,tx=x+w/2; - if(phase===4&&w>0&&q>0&&q<1){n('circle',{cx:sx+(tx-sx)*q,cy:sy+(by-sy)*q,r:4,fill:COLORS[i],stroke:'#fff'});} + const sx=mobile?330:760,sy=rowTop+i*rowStep+25,tx=x+w/2,corridor=W-14+i*3; + const path=[[sx,sy],[corridor,sy],[corridor,by-2],[tx,by-2],[tx,by+8]]; + if(phase===4&&w>0){n('path',{d:path.map((p,j)=>`${j?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:COLORS[i],'stroke-width':.7,'stroke-dasharray':'2 3'});} + if(phase===4&&w>0&&q>0&&q<1){const dot=pointOnPath(path,q);n('circle',{cx:dot[0],cy:dot[1],r:4,fill:COLORS[i],stroke:'#fff'});} start+=f.terms[i]; }line(bx,by+22,bx+bw,by+22);for(const v of [0,10,20]){const x=bx+bw*v/20;line(x,by+20,x,by+25);text(x,by+43,String(v),16);} text(W/2,by-10,`最终输出 o = ${f.output.toFixed(3)}`,20,'#66527e'); - }else text(W/2,414,phase===3?'每条长度用同一 0 → 100% 刻度':'手写教学 Q/K/V · 不运行真实模型',16,'#7d7285'); + }else text(W/2,474,phase===3?'每条长度用同一 0 → 100% 刻度':'手写教学 Q/K/V · 不运行真实模型',16,'#7d7285'); anchor=phase===2?[24,rowTop+3*rowStep+25]:phase===4?[bx,by+8]:[W/2,4]; svg.setAttribute('aria-label',`当前位置 C;阶段 ${phase+1};${formula}。${phase>=3?'权重 '+f.probs.join('、'):''}`); } diff --git a/docs/ai-learning/STATUS.md b/docs/ai-learning/STATUS.md index b9a58cb..d681489 100644 --- a/docs/ai-learning/STATUS.md +++ b/docs/ai-learning/STATUS.md @@ -65,3 +65,8 @@ Merged source `26defa3024d64af69f8a4da8f66e8d23287cb523` reached production READ ## Attention causal rework draft — 2026-10-29 Branch `rework/attention-causal-20261029`: persistent position rows, exact operation rail, mask trace and nonzero contribution movement implemented. npm run check and17,298 new pose cases passed. Preliminary desktop Softmax observation completed. This is **not released or visually accepted**: component formation/chapter continuity and the390px/4×/lifecycle matrix still need work. Continue this candidate rather than starting a new topic. [Exact evidence and remaining gates](reviews/2026-10-29-attention-rework.md). Production remains unchanged. + + +### Attention follow-up — 2026-10-29 + +Same PR7 now has separate Q/K component wells and merge paths, routed contribution markers, correctedK header, darker text and measured15.21px narrow type. Rounded displayed arithmetic uses≈. Full tests passed; selected desktop intermediate/reverse and390px observations completed. Still draft: chapter handoffs and full4×/lifecycle/playing-layout gates remain open. No production update. diff --git a/docs/ai-learning/reviews/2026-10-29-attention-rework.md b/docs/ai-learning/reviews/2026-10-29-attention-rework.md index 3c5909c..dcb73e5 100644 --- a/docs/ai-learning/reviews/2026-10-29-attention-rework.md +++ b/docs/ai-learning/reviews/2026-10-29-attention-rework.md @@ -21,3 +21,16 @@ Actual current cloud Chrome inspected the desktop initial layout and paused26s S This is not yet the finish requested by the user. The operation rail and stable rows make numeric relationships easier to follow, but Q/K component formation is still shown mainly as a formula. Row content changes across chapters still need identity-preserving transitions rather than simple replacement. The narrow view reserves more height but has NOT been validated for actual font metrics, long values, one-screen playing behavior or collisions. Full4×/intermediate/reverse browser matrix and lifecycle/keyboard/hidden/reduced-motion/quiz tests have NOT been performed on this revision. The mask animation must also be reviewed so its progressive visual overlay is not mistaken for a gradually participating future token (the numerical mask is always exact). Next work on THIS branch/PR: improve component-level causality and explicit contribution connectors; inspect390px and4×, source-correct mask semantics, intermediate/reverse frames, actual controls and fixed-query/future invariance. Only then close visualAcceptance, inspect the checked branch preview, merge and verify matching production READY/SHA/domain. Do not create a new scene or duplicate this candidate. Keep Attention needs-rework, all four public routes and historical publication receipts. Skill alignment is pending and no new installation/host compatibility is claimed. No learner study or measured learning gains. + + +## Follow-up: component multiplication and phone inspection + +Continued existing PR7 from head8b6e041fc60b9ac9c09095a427ecf8b480efe92e; main unchanged. Added separate component wells forq₀k₀/q₁k₁, staged highlighting, exact product values, connected merge paths and a divide-by√2 readout. The single bubble names the currently matched position. Nonzero contribution markers now follow explicit orthogonal paths through the right margin instead of crossing unrelated rows diagonally. Mathematical lengths and values remain front-plane quantities; path animation is a teaching pointer. + +Actual desktop7.2/8.2/8.6/9.0s and reverse8.2s frames inspected. Initial390×844 iframe measured component input at13.655px, below target; increased mobile input type16→17 units, shortened repeated narration and measured resulting17-unit type at15.213 CSS px (SVG scale .89487). Corrected a semantic header bug: the left QK column containsK, so it is now labeledK rather than dot product. Darkened identity-hue text while retaining original accent colors. Inspected narrow34s withfutureV=1000, then query zero; output/model changed from15.752 to10 with future still masked. This is partial browser coverage, not a physical phone or complete matrix. + +Inspection also found misleading display arithmetic: rounded0.245×10 was printed with an equality to2.447, although internal full-precision arithmetic is correct. Changed rounded operation readouts to≈ and added a full-precision/display-rounding explanation. No values are rounded before model computation. The final wording change has source/build coverage; do not treat earlier screenshots as post-change browser proof. + +npm run check passes, retaining17,298 pose cases, original goldens and mechanical tests. Added independent path sampling checks for endpoints, exact junctions and segment containment. Official PyTorch reference rechecked at its algorithm lines459–480: scaling, mask bias, softmax then weightedV; the scene omits dropout and projections explicitly. + +Still NOT accepted or released: cross-chapter value handoffs are not yet continuous; full1×/4× craft, mask semantics, all phases/long values/mobile playing layout and lifecycle matrix remain to review. Stage height700px causes initial scrolling and must be judged against single-screen playing requirements. Avoid ending with another formula-heavy table merely because the equations pass. Continue this PR; preserve existing production and needs-rework status. No Skill sync or host-compatibility claim. From 3ab1eee888ca24bb0317966f02825eea447bfbdf Mon Sep 17 00:00:00 2001 From: hash-panda <110599333+hash-panda@users.noreply.github.com> Date: Fri, 30 Oct 2026 03:08:09 +0800 Subject: [PATCH 3/3] Complete causal Attention handoffs, normalization and shared-scale V review --- apps/site/learn/attention/LESSON.md | 5 + apps/site/learn/attention/SCENE_SPEC.json | 19 +- apps/site/learn/attention/app.mjs | 14 +- apps/site/learn/attention/index.html | 4 +- apps/site/learn/attention/pose.mjs | 21 +- apps/site/learn/attention/pose.test.mjs | 28 +- apps/site/learn/attention/stage.mjs | 105 +++-- apps/site/learn/attention/style.css | 2 +- docs/ai-learning/STATUS.md | 7 +- .../reviews/2026-10-29-attention-rework.md | 41 ++ .../reviews/assets/2026-10-30/b-port-4x.jpg | Bin 0 -> 40322 bytes .../reviews/assets/2026-10-30/dom-checks.json | 362 ++++++++++++++++++ .../assets/2026-10-30/handoff-final.jpg | Bin 0 -> 55277 bytes .../assets/2026-10-30/playing-final.jpg | Bin 0 -> 52605 bytes .../reviews/assets/2026-10-30/qk-4x-final.jpg | Bin 0 -> 56780 bytes .../assets/2026-10-30/softmax-final.jpg | Bin 0 -> 66537 bytes .../reviews/assets/2026-10-30/value-final.jpg | Bin 0 -> 63580 bytes docs/ai-learning/roadmap.json | 11 +- evals/browser/attention-review.html | 12 + 19 files changed, 578 insertions(+), 53 deletions(-) create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/b-port-4x.jpg create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/dom-checks.json create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/handoff-final.jpg create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/playing-final.jpg create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/qk-4x-final.jpg create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/softmax-final.jpg create mode 100644 docs/ai-learning/reviews/assets/2026-10-30/value-final.jpg create mode 100644 evals/browser/attention-review.html diff --git a/apps/site/learn/attention/LESSON.md b/apps/site/learn/attention/LESSON.md index 62c3d3d..27df33c 100644 --- a/apps/site/learn/attention/LESSON.md +++ b/apps/site/learn/attention/LESSON.md @@ -23,3 +23,8 @@ See `docs/ai-learning/reviews/2026-10-29-attention-rework.md`. Exact operation/r Q/K component follow-up adds paired multiplication wells, explicit merge and routed contribution paths. Desktop7.2/8.2/8.6/9.0/reverse8.2 and selected390px inspection completed; narrow type measured15.21px after repair. Rounded arithmetic uses≈. Full release review remains pending; see the same rework record. + + +## Reopened craft review follow-up — 2026-10-30 + +Persistent mathematical rows now carry exact values between chapters; Q/K component multiplication, denominator collection, normalized fractions, same-scaleV/pV and cumulative contributions are inspectable in intermediate frames.18-unit narrow SVG type, explicit front-face ports and consistent carrier depth were checked with native4× and390px browser evidence. Full tests and affected UI lifecycle/quiz checks passed; see [review with actual images, raw DOM records and limits](../../../../docs/ai-learning/reviews/2026-10-29-attention-rework.md#follow-up-2026-10-30--reviewed-candidate-release-verification-pending). Controlled hidden-event handling is covered; real background scheduling, physical devices and measured learning gains are not. This entry is candidate acceptance, not yet a production receipt. Skill/host compatibility is not newly claimed. diff --git a/apps/site/learn/attention/SCENE_SPEC.json b/apps/site/learn/attention/SCENE_SPEC.json index f4fd1b5..d47ff34 100644 --- a/apps/site/learn/attention/SCENE_SPEC.json +++ b/apps/site/learn/attention/SCENE_SPEC.json @@ -52,7 +52,8 @@ "color": "position identity", "probabilityBar": "0..1 within each channel", "contributionBar": "length of p_j*V_j; shared total scale 0..20", - "connections": "dependencies, not physical motion or measured timing" + "connections": "dependencies, not physical motion or measured timing", + "valueRead": "Dashed V and filled pV share a0..20 front-plane scale; masked D original V is not drawn beyond that range" }, "experiment": "Keep K/V fixed and change q; then vary masked future V and show output invariance.", "transfer": "q=0, futureV=1000 gives mean of visible 0,10,20 = 10, not max or four-way mean.", @@ -66,13 +67,15 @@ "No learned projection, positions, dropout, output projection, residual, training or token sampling", "SVG teaching geometry, not actual model hardware" ], - "reworkDraft": { - "date": "2026-10-29", - "layout": "Persistent rows; paired Q/K component products and merge/divide paths; raw normalization; orthogonal nonzero contribution paths", - "notAccepted": [ - "Cross-chapter value handoffs need continuity", - "Complete1x/4x, narrow playing layout and lifecycle evidence pending", - "Final rounded-arithmetic wording needs browser recheck" + "reworkReview": { + "date": "2026-10-30", + "status": "reviewed-candidate-pending-release", + "record": "docs/ai-learning/reviews/2026-10-29-attention-rework.md", + "layout": "Persistent rows, exact chapter carriers, paired QK wells/merge, common denominator collection, traced shared-scale fractions, V/pV comparison and nonzero routed contributions", + "limits": [ + "No physical phone/other engine/learner study", + "Controlled hidden event tested; native background scheduling not independently verified", + "Skill distribution alignment pending" ] } } diff --git a/apps/site/learn/attention/app.mjs b/apps/site/learn/attention/app.mjs index 0af031a..5eab143 100644 --- a/apps/site/learn/attention/app.mjs +++ b/apps/site/learn/attention/app.mjs @@ -1,5 +1,6 @@ import {TOKENS,STARTS,DURATION,sample,narration} from './model.mjs'; import {createStage} from './stage.mjs'; +import {lessonPose,handoff} from './pose.mjs'; const $=s=>document.querySelector(s),$$=s=>[...document.querySelectorAll(s)],motion=matchMedia('(prefers-reduced-motion: reduce)'); let reduced=motion.matches; const stage=createStage($('#artwork'),{reducedMotion:()=>reduced}); @@ -7,7 +8,18 @@ let id=1,future=100,time=0,playing=false,raf=0,last=0,lastCopy='',dead=false; const names=['输入 Q/K/V','匹配分数','因果遮罩','分配权重','加权内容','求和与实验']; function focus(on){$('#app').classList.toggle('is-playing',on);$$('.secondary').forEach(x=>{x.inert=on;x.setAttribute('aria-hidden',String(on));});} function anchor(){const box=$('.exhibit').getBoundingClientRect(),bubble=$('#callout').getBoundingClientRect(),art=$('#artwork');art.style.top=Math.max(185,bubble.bottom-box.top+13)+'px';const a=art.getBoundingClientRect(),point=stage.projectAnchor();if(!point)return;const x=a.left-box.left+point.x*a.width,y=a.top-box.top+point.y*a.height,cx=Math.max(bubble.width/2+17,Math.min(box.width-bubble.width/2-17,x));$('#callout').style.left=cx+'px';$('#leader').setAttribute('viewBox',`0 0 ${box.width} ${box.height}`);const sy=bubble.bottom-box.top;const side=a.left-box.left+point.bendX*a.width,start=cx-bubble.width/2+10;$('#leader-line').setAttribute('d',point.routeLeft?`M${start} ${sy}C${side} ${sy+12},${side} ${sy+12},${side} ${sy+27}V${y-8}Q${side} ${y},${side+8} ${y}H${x-8}`:`M${cx} ${sy}C${cx} ${sy+20},${x} ${y-25},${x} ${y-8}`);$('#leader-dot').setAttribute('cx',x);$('#leader-dot').setAttribute('cy',y);} -function render(){if(dead)return;const f=sample(time,{id,future}),c=narration(f),key=JSON.stringify(c);stage.render(f);if(key!==lastCopy){lastCopy=key;$('#copy-eyebrow').textContent=c.eyebrow;$('#copy-title').textContent=c.title;$('#copy-body').textContent=c.body;}$('#phase-label').textContent=`0${f.phase+1} / 06 · ${names[f.phase]}`;$('#counts').textContent=`当前位置 C · 单头单行`;$$('[data-id]').forEach(b=>b.setAttribute('aria-pressed',String(+b.dataset.id===id)));$('#future').value=future;$('#future-value').textContent=future;$('#timeline').value=time;$('#timeline').style.setProperty('--fill',`${time/DURATION*100}%`);$('#time').textContent=`00:${String(Math.floor(time)).padStart(2,'0')} / 00:48`;$('#play-label').textContent=playing?'暂停':time>=DURATION?'再看一遍':time?'继续讲解':'播放讲解';$('#play-icon').textContent=playing?'Ⅱ':'▶';$('#play').setAttribute('aria-pressed',String(playing));$('#back').disabled=time===0;$('#next').disabled=time===DURATION;$('#play-note').textContent=playing?'配置已收起 · 空格暂停':'六个步骤 · 从查询到加权和';$('#challenge').hidden=timeb.setAttribute('aria-pressed',String(+b.dataset.id===id)));$('#future').value=future;$('#future-value').textContent=future;$('#timeline').value=time;$('#timeline').style.setProperty('--fill',`${time/DURATION*100}%`);$('#time').textContent=`00:${String(Math.floor(time)).padStart(2,'0')} / 00:48`;$('#play-label').textContent=playing?'暂停':time>=DURATION?'再看一遍':time?'继续讲解':'播放讲解';$('#play-icon').textContent=playing?'Ⅱ':'▶';$('#play').setAttribute('aria-pressed',String(playing));$('#back').disabled=time===0;$('#next').disabled=time===DURATION;$('#play-note').textContent=playing?'配置已收起 · 空格暂停':'六个步骤 · 从查询到加权和';$('#challenge').hidden=time一个词如何参考其他词? · Explain3D
e· Explain3DAI 原理课堂 / 03

ONE QUERY · A WEIGHTED MIXTURE

注意力,怎样汇成一个结果?

从匹配分数,到可见信息的加权和。

手写 Q/K/V · 单头单行 · 未运行语言模型
六个步骤 · 从查询到加权和00:00 / 00:48
Explain3D · AI 原理课堂Q/K 决定权重 · V 提供内容
-

SCALED DOT-PRODUCT ATTENTION

权重和内容,是两件事。

本页计算因果自注意力的一行:当前位置 C(从 0 开始索引 2),可以参考 A/B/C,不能参考未来的 D。Q、K、V 在真实网络中由输入表示经过学习到的线性投影得到;本页直接给定这些参数,不演示投影、训练、多头、位置编码、输出投影、残差或下一词采样。

q = [√2 × α, 0];α ∈ {−1, 0, 1}
K = [ [−1,0], [0,0], [1,0], [2,0] ]
V = [0, 10, 20, 未来值]
s = qKᵀ / √2 = [−α, 0, α, 2α]
s(遮罩后)= [−α, 0, α, −∞]
pⱼ = exp(sⱼ) / Σ exp(sₖ)
o = Σ pⱼVⱼ

V 为一维,只为看清乘法与求和。真实 V 通常是向量,逐分量使用同一组权重。因果遮罩包含当前位置自身,先应用遮罩再做 Softmax。没有 dropout。本页色彩只标识位置 A/B/C/D;卡片宽度不编码数值。概率条宽度表示权重,最终彩色条长度表示各项贡献(总长对应输出,刻度 0…20)。连接线表示依赖关系,不表示网络真实空间或耗时。

手写数字与符号 A/B/C/D 不代表任何真实语言模型或自然语言词义。本页的注意力权重也不是“解释模型推理”的充分证据。查询归零时,可见位置均分权重,输出为 (0+10+20)/3 = 10,未来值仍被排除。

原论文 §3.2 ↗ · PyTorch 官方公式与因果遮罩实现 ↗

PREDICT · TRY · EXPLAIN

查询归零,输出会是多少?

q = [0,0],可见位置 A/B/C 的 V 为 0/10/20;未来 D 的 V 为 1000。因果遮罩仍然启用。

\ No newline at end of file +一个词如何参考其他词? · Explain3D
e· Explain3DAI 原理课堂 / 03

ONE QUERY · A WEIGHTED MIXTURE

注意力,怎样汇成一个结果?

从匹配分数,到可见信息的加权和。

手写 Q/K/V · 单头单行 · 未运行语言模型
六个步骤 · 从查询到加权和00:00 / 00:48
Explain3D · AI 原理课堂Q/K 决定权重 · V 提供内容
+

SCALED DOT-PRODUCT ATTENTION

权重和内容,是两件事。

本页计算因果自注意力的一行:当前位置 C(从 0 开始索引 2),可以参考 A/B/C,不能参考未来的 D。Q、K、V 在真实网络中由输入表示经过学习到的线性投影得到;本页直接给定这些参数,不演示投影、训练、多头、位置编码、输出投影、残差或下一词采样。

q = [√2 × α, 0];α ∈ {−1, 0, 1}
K = [ [−1,0], [0,0], [1,0], [2,0] ]
V = [0, 10, 20, 未来值]
s = qKᵀ / √2 = [−α, 0, α, 2α]
s(遮罩后)= [−α, 0, α, −∞]
pⱼ = exp(sⱼ) / Σ exp(sₖ)
o = Σ pⱼVⱼ

V 为一维,只为看清乘法与求和。真实 V 通常是向量,逐分量使用同一组权重。因果遮罩包含当前位置自身,先应用遮罩再做 Softmax。没有 dropout。本页色彩只标识位置 A/B/C/D;卡片宽度不编码数值。概率条宽度表示权重,加权阶段虚线轮廓表示原始 V,实色表示 pV,二者与底部结果共用 0…20 刻度;被遮罩的 D 不绘制原始 V 长度(可超过刻度)。最终彩色条长度表示各项贡献,总长对应输出。连接线和依次描出的短条是教学指针,不表示网络真实空间、计算耗时或一组随时间改变的权重。暂停或拖动可检查中间过程;每行计算完成才显示其结果数字。

手写数字与符号 A/B/C/D 不代表任何真实语言模型或自然语言词义。本页的注意力权重也不是“解释模型推理”的充分证据。查询归零时,可见位置均分权重,输出为 (0+10+20)/3 = 10,未来值仍被排除。

原论文 §3.2 ↗ · PyTorch 官方公式与因果遮罩实现 ↗

PREDICT · TRY · EXPLAIN

查询归零,输出会是多少?

q = [0,0],可见位置 A/B/C 的 V 为 0/10/20;未来 D 的 V 为 1000。因果遮罩仍然启用。

\ No newline at end of file diff --git a/apps/site/learn/attention/pose.mjs b/apps/site/learn/attention/pose.mjs index 47f4f42..d5058d7 100644 --- a/apps/site/learn/attention/pose.mjs +++ b/apps/site/learn/attention/pose.mjs @@ -1,11 +1,14 @@ // One deterministic teaching pose. Traversal is pedagogical, not compute latency. const clamp=x=>Math.max(0,Math.min(1,x)); export function lessonPose(f,reduced=false){ - const traversal=clamp(f.progress)*4,active=Math.min(3,Math.floor(traversal)),local=traversal-active; + const operation=f.phase>=2?clamp((f.progress-.18)/.82):clamp(f.progress); + const collect=f.phase===3?(reduced?1:clamp(operation/.2)):1; + const rowProgress=f.phase===3?clamp((operation-.2)/.8):operation; + const traversal=rowProgress*4,active=Math.min(3,Math.floor(traversal)),local=traversal-active; const weights=f.masked.map(s=>Math.exp(s)),denominator=weights.reduce((a,b)=>a+b,0); - const mask=reduced?1:clamp(f.progress/.65); - const flights=f.terms.map((term,i)=>term===0?0:reduced?1:clamp((f.progress-i*.15)/.4)); - return {active,travel:reduced?1:clamp(local),weights,denominator,mask,flights, + const mask=reduced?1:clamp(operation/.65); + const flights=f.terms.map((term,i)=>term===0?0:reduced?1:clamp((traversal-i-.55)/.45)); + return {operation,collect,active,travel:reduced?1:clamp(local),weights,denominator,mask,flights, products:f.keys[active].map((k,j)=>k*f.q[j]), cumulative:f.terms.map((_,i)=>f.terms.slice(0,i+1).reduce((a,b)=>a+b,0))}; } @@ -17,3 +20,13 @@ export function pointOnPath(points,t){ const fraction=lengths[i]?distance/lengths[i]:1; return points[i].map((v,j)=>v+(points[i+1][j]-v)*fraction); } + +// A chapter output is carried to the next chapter's input without changing its value. +// exp / normalization / multiplication happen AFTER the carrier reaches that input. +export function handoff(f,reduced=false){ + if(f.phase<2||f.phase>5)return null; + const sets=[null,null,f.scores,f.masked,f.probs,f.terms]; + const names=[null,null,'s','s̃','p','t']; + const progress=reduced?1:clamp(f.progress/.18); + return {progress,unit:names[f.phase],values:[...sets[f.phase]],inTransit:progress<1}; +} diff --git a/apps/site/learn/attention/pose.test.mjs b/apps/site/learn/attention/pose.test.mjs index ae126a3..542f2a0 100644 --- a/apps/site/learn/attention/pose.test.mjs +++ b/apps/site/learn/attention/pose.test.mjs @@ -1,6 +1,6 @@ import assert from 'node:assert/strict'; import {sample} from './model.mjs'; -import {lessonPose,pointOnPath} from './pose.mjs'; +import {lessonPose,pointOnPath,handoff} from './pose.mjs'; const near=(a,b)=>assert.ok(Math.abs(a-b)<1e-10); let count=0; for(const id of [-1,0,1])for(const future of [0,100,1000])for(const reduced of [false,true]){ @@ -24,3 +24,29 @@ assert.deepEqual(pointOnPath(path,0),[0,0]);assert.deepEqual(pointOnPath(path,1) assert.deepEqual(pointOnPath(path,.25),[10,0]);assert.deepEqual(pointOnPath(path,.5),[10,10]); for(let i=0;i<=100;i++){const [x,y]=pointOnPath(path,i/100);assert.ok(y===0||x===10||y===10);} console.log('Causal pointer path: exact junctions/endpoints and segment containment pass.'); + +for(const id of [-1,0,1])for(const future of [0,1000])for(const phase of [2,3,4,5]){ + const f={...sample(48,{id,future}),phase,progress:0}; + const expected=phase===2?f.scores:phase===3?f.masked:phase===4?f.probs:f.terms; + for(const progress of [0,.03,.09,.179,.18,1]){ + const h=handoff({...f,progress});assert.deepEqual(h.values,expected);assert.ok(h.progress>=0&&h.progress<=1);assert.equal(h.inTransit,progress<.18); + assert.equal(handoff({...f,progress},true).inTransit,false); + } +} +console.log('Chapter handoff: exact value/unit ownership and reduced-motion endpoints pass.'); + +// Causality boundaries, independently chosen from chapter start/end semantics. +for(const future of [0,1000])for(const id of [-1,0,1]){ + for(const phase of [2,3,4,5]){ + const base={...sample(48,{id,future}),phase}; + for(const progress of [0,.09,.179,.18]){ + const p=lessonPose({...base,progress});assert.equal(p.operation,0); + assert.ok(p.flights.every(x=>x===0)); + } + const end=lessonPose({...base,progress:1});assert.equal(end.operation,1);assert.equal(end.travel,1); + end.flights.forEach((x,i)=>assert.equal(x,base.terms[i]===0?0:1)); + } + const a=lessonPose({...sample(35,{id,future}),phase:4}),b=lessonPose({...sample(35,{id,future:1000-future}),phase:4}); + assert.deepEqual(a.flights,b.flights);assert.deepEqual(a.cumulative,b.cumulative); +} +console.log('Post-handoff operations wait for arrival, finish exactly, and preserve future isolation.'); diff --git a/apps/site/learn/attention/stage.mjs b/apps/site/learn/attention/stage.mjs index 7351310..3e74e88 100644 --- a/apps/site/learn/attention/stage.mjs +++ b/apps/site/learn/attention/stage.mjs @@ -1,30 +1,47 @@ import {TOKENS,COLORS} from './model.mjs'; -import {lessonPose,pointOnPath} from './pose.mjs'; +import {lessonPose,pointOnPath,handoff} from './pose.mjs'; const NS='http://www.w3.org/2000/svg'; const INKS=['#3f6092','#73568f','#3e7560','#925b43']; const fmt=x=>Number.isFinite(x)?x.toFixed(3).replace(/\.?0+$/,''):'−∞'; export function createStage(host,{reducedMotion=()=>false}={}){ const svg=document.createElementNS(NS,'svg');host.append(svg);svg.style.cssText='width:100%;height:100%;overflow:visible';svg.setAttribute('role','img');let last,anchor=[195,25]; - function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?390:900,H=500,pose=lessonPose(f,reducedMotion()),phase=f.phase; + function render(f){last=f;const mobile=host.clientWidth<600,W=mobile?390:900,H=500,pose=lessonPose(f,reducedMotion()),phase=f.phase,transfer=handoff(f,reducedMotion()); svg.setAttribute('viewBox',`0 0 ${W} ${H}`);svg.replaceChildren(); const n=(tag,a,parent=svg)=>{const e=document.createElementNS(NS,tag);for(const[k,v]of Object.entries(a))e.setAttribute(k,v);parent.append(e);return e;}; - const text=(x,y,s,size=18,c='#515d70',align='middle',parent=svg)=>{const e=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:COLORS.includes(c)?INKS[COLORS.indexOf(c)]:c,'text-anchor':align},parent);e.textContent=s;return e;}; + const text=(x,y,s,size=18,c='#515d70',align='middle',parent=svg)=>{if(mobile)size=Math.max(size,18);const e=n('text',{x,y,'font-family':'ui-monospace,monospace','font-size':size,fill:COLORS.includes(c)?INKS[COLORS.indexOf(c)]:c,'text-anchor':align},parent);e.textContent=s;return e;}; const line=(x,y,ex,ey,c='#c5cdd7',parent=svg)=>n('path',{d:`M${x} ${y}L${ex} ${ey}`,stroke:c,fill:'none','stroke-width':.8,'vector-effect':'non-scaling-stroke'},parent); const plate=(x,y,w,h,c='#f8f9fa',parent=svg)=>{ - n('path',{d:`M${x+5} ${y+h}H${x+w}l5 -4V${y+4}l-5 -4H${x+5}l-5 4V${y+h-4}Z`,fill:'#e7ebef',stroke:'#bbc7d3','stroke-width':.65},parent); - n('rect',{x,y,width:w,height:h,rx:4,fill:c,stroke:'#c7d1db','stroke-width':.65},parent);line(x+4,y+1,x+w-4,y+1,'#fff',parent); + // Quantitative faces stay frontal. Only the carrying plate has depth. + n('rect',{x:x+3,y:y+5,width:w+4,height:h+3,rx:5,fill:'#8f9baa',opacity:.08},parent); + n('path',{d:`M${x+w} ${y+4}l5 4v${h-4}l-5 -4Z`,fill:'#dfe5eb',stroke:'#b9c6d2','stroke-width':.7},parent); + n('path',{d:`M${x+4} ${y+h}H${x+w}l5 4H${x+9}Z`,fill:'#d0d9e2',stroke:'#b9c6d2','stroke-width':.7},parent); + n('rect',{x,y,width:w,height:h,rx:4,fill:c,stroke:'#bdcbd7','stroke-width':.85},parent); + line(x+5,y+1,x+w-5,y+1,'#fff',parent); }; - const active=pose.active,c=COLORS[active]; + const active=pose.active,c=COLORS[active],collecting=phase===3&&!transfer?.inTransit&&pose.collect<1; + const arrived=(i,t=.9)=>i=t; plate(12,4,W-24,108); - const titles=['查询 C · 一条 Q,四组 K/V',`逐项匹配 · ${TOKENS[active]}`, '先遮住未来 D,再做 Softmax',`同一个分母 · Σ exp(s) = ${fmt(pose.denominator)}`,`逐项读取 · ${TOKENS[active]}`,'所有贡献相加,不是挑最大的一项']; + const titles=['查询 C · 一条 Q,四组 K/V',`逐项匹配 · ${TOKENS[active]}`, '先遮住未来 D,再做 Softmax',transfer?.inTransit?'分数 → 指数 → 共同分母':collecting?'共同分母 · 汇集全部指数权重':`同一个分母 · Σ exp(s) ≈ ${fmt(pose.denominator)}`,`逐项读取 · ${TOKENS[active]}`,'所有贡献相加,不是挑最大的一项']; text(W/2,25,titles[phase],mobile?17:19,phase===2?COLORS[3]:c); - let formula=`q = [${fmt(f.q[0])}, 0]`; + let formula=`q ≈ [${fmt(f.q[0])}, 0]`; if(phase===1)formula=mobile?`(${fmt(f.q[0])}×${f.keys[active][0]} + 0) / √2 ≈ ${fmt(f.scores[active])}`:`(${fmt(f.q[0])} × ${f.keys[active][0]} + 0 × ${f.keys[active][1]}) / √2 ≈ ${fmt(f.scores[active])}`; if(phase===2)formula=`${fmt(f.scores[3])} → −∞ → exp(−∞) = 0`; - if(phase===3)formula=`${fmt(pose.weights[active])} / ${fmt(pose.denominator)} ≈ ${(100*f.probs[active]).toFixed(1)}%`; - if(phase===4)formula=`${f.probs[active].toFixed(3)} × ${f.values[active]} ≈ ${f.terms[active].toFixed(3)}`; - if(phase===5)formula=`o = ${f.output.toFixed(3)}`; - if(phase!==1)text(W/2,66,formula,mobile?17:22,c); + if(phase===3&&transfer?.inTransit)formula=`exp(${fmt(f.masked[active])}) ≈ ${fmt(pose.weights[active])}`; + if(phase===3&&!transfer?.inTransit)formula=`${fmt(pose.weights[active])} / ${fmt(pose.denominator)} ≈ ${(100*f.probs[active]).toFixed(1)}%`; + if(phase===4)formula=`${(100*f.probs[active]).toFixed(1)}% × ${f.values[active]} ≈ ${f.terms[active].toFixed(3)}`; + if(phase===5)formula=`${(active?pose.cumulative[active-1]:0).toFixed(3)} + ${f.terms[active].toFixed(3)} ≈ ${pose.cumulative[active].toFixed(3)}`; + if(phase!==1&&!collecting)text(W/2,66,formula,mobile?17:22,c); + if(collecting){ + const done=Math.min(4,Math.floor(pose.collect*4)),centers=[.15,.38,.61,.84].map(v=>v*W); + for(let i=0;i<4;i++){const x=centers[i],on=i<=done; + text(x,53,fmt(pose.weights[i]),mobile?17:21,on?COLORS[i]:'#a0a7af'); + if(i<3)text((x+centers[i+1])/2,53,'+',16); + line(x,60,x,70,COLORS[i]);line(x,70,W/2,70,COLORS[i]); + } + const part=pose.weights.slice(0,done).reduce((a,b)=>a+b,0); + formula=`Σ exp(s) ≈ ${fmt(part)}${done<4?' …':''}`; + text(W/2,91,formula,mobile?17:21); + } if(phase===1){ const centers=[W*.27,W*.73],merge=W/2; for(let j=0;j<2;j++){ @@ -32,52 +49,80 @@ export function createStage(host,{reducedMotion=()=>false}={}){ n('rect',{x:x-(mobile?72:125),y:33,width:mobile?144:250,height:38,rx:4,fill:on?'#edf2f6':'#fffdfa',stroke:c,'stroke-width':on?1.2:.6}); text(x,49,`${fmt(f.q[j])} × ${f.keys[active][j]}`,mobile?17:19,c); text(x,67,fmt(pose.products[j]),mobile?17:21,c); - const path=[[x,73],[x,81],[merge,81],[merge,89]]; + const path=[[x,71],[x,81],[merge,81],[merge,87]]; n('path',{d:path.map((p,i)=>`${i?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:c,'stroke-width':.7}); - if(pose.travel>=.56&&pose.travel<.84){const dot=pointOnPath(path,(pose.travel-.56)/.28);n('circle',{cx:dot[0],cy:dot[1],r:3,fill:c});} + if(pose.travel>=.56&&pose.travel<.75){const dot=pointOnPath(path,(pose.travel-.56)/.19);n('circle',{cx:dot[0],cy:dot[1],r:3,fill:c});} } - text(merge,103,`(${fmt(pose.products[0])} + ${fmt(pose.products[1])}) / √2 ≈ ${fmt(f.scores[active])}`,mobile?17:20,c); + text(merge,108,`(${fmt(pose.products[0])} + ${fmt(pose.products[1])}) / √2 ≈ ${fmt(f.scores[active])}`,mobile?17:20,c); } if(phase===2)text(W/2,98,'展示遮罩规则;未来位置始终不参与',mobile?17:18,'#8e7466'); if(phase===0)text(W/2,98,'同一行同色 · A → B → C → D',mobile?15:18); - if(phase===3||phase===4)text(W/2,98,'完整精度计算 · 展示值已取近似',mobile?17:18); + if((phase===3||phase===4)&&!collecting)text(W/2,98,transfer?.inTransit?'完整精度计算 · 交接时数值不变':'完整精度计算 · 展示值已取近似',mobile?17:18); + const col1=mobile?135:285,col2=mobile?280:645,rowTop=145,rowStep=64; - text(col1,133,['键 K','键 K','原分数 → 遮罩','指数权重 exp(s)','权重 × 内容 V','各位置贡献'][phase],16); - text(col2,133,['内容 V','匹配分数','参与当前输出?','归一化权重','贡献 p × V','累计相加'][phase],16); + text(col1,133,['键 K','键 K','原始分数 s','指数权重 exp(s)','权重 × 内容 V','各位置贡献'][phase],16); + text(col2,133,['内容 V','匹配分数','遮罩后 s̃','归一化权重','贡献 p × V','累计相加'][phase],16); for(let i=0;i<4;i++){ const y=rowTop+i*rowStep,color=COLORS[i],g=n('g',{'data-position':TOKENS[i]}); plate(20,y,W-40,50,i===3&&phase>=2?'#f2efeb':'#fffefa',g); + if(!transfer?.inTransit&&!collecting&&phase!==0&&phase!==2&&i===active)n('rect',{x:20,y,width:W-40,height:50,rx:4,fill:'none',stroke:color,'stroke-width':1.4},g); n('rect',{x:21,y:y+5,width:3,height:40,rx:1,fill:color},g); text(45,y+28,TOKENS[i],22,color,'middle',g); let left='',right=''; if(phase===0){left=`[${f.keys[i].join(', ')}]`;right=String(f.values[i]);} if(phase===1){left=`[${f.keys[i].join(', ')}]`;right=fmt(f.scores[i]);} - if(phase===2){left=i===3?`${fmt(f.scores[i])} → −∞`:fmt(f.scores[i]);right=i===3?'未来 · 阻断':'可见 · 保留';} + if(phase===2){left=fmt(f.scores[i]);right=fmt(f.masked[i]);} if(phase===3){left=fmt(pose.weights[i]);right=`${(100*f.probs[i]).toFixed(1)}%`;} - if(phase===4){left=`${f.probs[i].toFixed(3)} × ${f.values[i]}`;right=f.terms[i].toFixed(3);} + if(phase===4){left=`${(100*f.probs[i]).toFixed(1)}% × ${f.values[i]}`;right=f.terms[i].toFixed(3);} if(phase===5){left=f.terms[i].toFixed(3);right=pose.cumulative[i].toFixed(3);} - text(col1,y+28,left,mobile?17:21,color,'middle',g);text(col2,y+28,right,mobile?17:21,color,'middle',g); - if(phase===3){n('rect',{x:col2-(mobile?58:125),y:y+37,width:mobile?116:250,height:6,rx:2,fill:'#e9edf1'},g);n('rect',{x:col2-(mobile?58:125),y:y+37,width:(mobile?116:250)*f.probs[i],height:6,rx:2,fill:color},g);} + if(transfer?.inTransit){ + const t=transfer.progress,x=col2+(col1-col2)*t; + line(col2,y+40,col1,y+40,color,g); + text(x,y+28,`${transfer.unit}${f.phase>=4?'≈':'='}${Number.isFinite(transfer.values[i])?f.phase===4?(100*transfer.values[i]).toFixed(1)+'%':fmt(transfer.values[i]):'−∞'}`,mobile?17:21,color,'middle',g); + }else{ + text(col1,y+28,left,mobile?17:21,color,'middle',g); + const scoreArrived=phase===1?arrived(i,.9):phase===3?!collecting&&arrived(i):phase===4?arrived(i,.55):phase===5?arrived(i,.6):true; + if(scoreArrived)text(col2,y+28,right,mobile?17:21,color,'middle',g); + } + if(phase===1&&i===active&&pose.travel>=.75&&pose.travel<.9){ + const path=[[W/2,114],[W-12,114],[W-12,y+28],[col2,y+28]],q=(pose.travel-.75)/.15,point=pointOnPath(path,q); + n('path',{d:path.map((p,j)=>`${j?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:color,'stroke-width':.7}); + text(point[0],point[1],fmt(f.scores[i]),mobile?17:21,color); + } + if(phase===3&&!transfer?.inTransit){ + const full=mobile?116:250,x=col2-full/2,reveal=collecting?0:i0)n('rect',{x,y:y+37,width:full*f.probs[i]*reveal,height:6,rx:2,fill:color},g); + for(const t of [0,.5,1])line(x+full*t,y+44,x+full*t,y+47,'#bbc5ce',g); + } + if(phase===4&&!transfer?.inTransit&&i<3){ + const full=mobile?110:230,x=col1-full/2,yb=y+36; + // Outline is V, filled length is pV, both on the same 0..20 scale. A zero V stays zero. + n('rect',{x,y:yb,width:full*f.values[i]/20,height:7,fill:'none',stroke:color,'stroke-width':.7,'stroke-dasharray':'2 2'},g); + const computed=arrived(i,.55),reveal=i0)n('rect',{x,y:yb,width:full*f.terms[i]/20*reveal,height:7,fill:color},g); + if(computed)line(x+full*f.terms[i]/20,yb-2,x+full*f.terms[i]/20,yb+10,color,g); + } if(phase===2&&i===3){const x=W-23-(W-46)*pose.mask;n('rect',{x,y:y+2,width:(W-46)*pose.mask,height:46,fill:'#d6cbbf',opacity:.16},g);line(W-32,y+6,x+5,y+44,color,g);} // Continuous trace links an exact operation to its owning row; values never interpolate. - if(phase===1||phase===3){const x=col1+(col2-col1)*pose.travel;if(i===active){line(col1,y+33,col2,y+33,color,g);n('circle',{cx:x,cy:y+33,r:3,fill:color,stroke:'#fff'},g);}} + if((phase===1||phase===3||phase===5)&&!transfer?.inTransit&&!collecting){const x=col1+(col2-col1)*pose.travel;if(i===active){line(col1,y+33,col2,y+33,color,g);n('circle',{cx:x,cy:y+33,r:3,fill:color,stroke:'#fff'},g);}} } // V contributions travel to cumulative slots; final segment lengths use shared 0..20 scale. const bx=30,bw=W-60,by=438; if(phase>=4){let start=0;for(let i=0;i<4;i++){ const w=bw*f.terms[i]/20,x=bx+bw*start/20;const q=phase===5?1:pose.flights[i]; - n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:.25}); - if(w>0)n('rect',{x,y:by,width:w,height:16,fill:COLORS[i],opacity:q}); - const sx=mobile?330:760,sy=rowTop+i*rowStep+25,tx=x+w/2,corridor=W-14+i*3; + if(w>0&&q===1)n('rect',{x,y:by,width:w,height:16,fill:COLORS[i]}); + const sx=W-20,sy=rowTop+i*rowStep+25,tx=x+w/2,corridor=W-14+i*3; const path=[[sx,sy],[corridor,sy],[corridor,by-2],[tx,by-2],[tx,by+8]]; - if(phase===4&&w>0){n('path',{d:path.map((p,j)=>`${j?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:COLORS[i],'stroke-width':.7,'stroke-dasharray':'2 3'});} + if(phase===4&&!transfer?.inTransit&&w>0&&q>0){n('circle',{cx:sx,cy:sy,r:2.5,fill:'#fffdfa',stroke:COLORS[i],'stroke-width':1});n('path',{d:path.map((p,j)=>`${j?'L':'M'}${p.join(' ')}`).join(''),fill:'none',stroke:COLORS[i],'stroke-width':.7,'stroke-dasharray':'2 3'});} if(phase===4&&w>0&&q>0&&q<1){const dot=pointOnPath(path,q);n('circle',{cx:dot[0],cy:dot[1],r:4,fill:COLORS[i],stroke:'#fff'});} start+=f.terms[i]; }line(bx,by+22,bx+bw,by+22);for(const v of [0,10,20]){const x=bx+bw*v/20;line(x,by+20,x,by+25);text(x,by+43,String(v),16);} - text(W/2,by-10,`最终输出 o = ${f.output.toFixed(3)}`,20,'#66527e'); + const allArrived=phase===5||pose.flights.every((q,i)=>f.terms[i]===0||q===1); + text(W/2,by-10,allArrived?`最终输出 o ≈ ${f.output.toFixed(3)}`:mobile?'虚线 V · 实色 pV · 同尺度 0→20':'虚线是 V,实色是 pV · 同一 0→20 刻度',mobile?17:20,'#66527e'); }else text(W/2,474,phase===3?'每条长度用同一 0 → 100% 刻度':'手写教学 Q/K/V · 不运行真实模型',16,'#7d7285'); - anchor=phase===2?[24,rowTop+3*rowStep+25]:phase===4?[bx,by+8]:[W/2,4]; - svg.setAttribute('aria-label',`当前位置 C;阶段 ${phase+1};${formula}。${phase>=3?'权重 '+f.probs.join('、'):''}`); + anchor=phase===2?[24,rowTop+3*rowStep+25]:phase===4?[24,rowTop+active*rowStep+25]:[W/2,4]; + svg.setAttribute('aria-label',`当前位置 C;阶段 ${phase+1};${formula}。当前跟踪 ${TOKENS[active]};未来 D 不参与输出`); } return {render,projectAnchor(){const m=svg.getScreenCTM(),r=host.getBoundingClientRect();if(!m||!r.width)return null;const pt=svg.createSVGPoint();pt.x=anchor[0];pt.y=anchor[1];const z=pt.matrixTransform(m);return{x:(z.x-r.left)/r.width,y:(z.y-r.top)/r.height,routeLeft:last.phase===2||last.phase===4,bendX:12/(host.clientWidth<600?390:900)};},resize(){if(last)render(last);},dispose(){svg.remove();}}; } diff --git a/apps/site/learn/attention/style.css b/apps/site/learn/attention/style.css index 653d049..55b8514 100644 --- a/apps/site/learn/attention/style.css +++ b/apps/site/learn/attention/style.css @@ -22,4 +22,4 @@ dialog{border:1px solid #e5dce9;background:#fffdf8;border-radius:18px;max-width: #future{width:100px}.controls label{display:flex;align-items:center;gap:8px}.controls output{min-width:25px}.controls .presets button{padding:8px 10px}@media(max-width:700px){.controls{height:100px;max-height:100px}.controls label{font-size:10px;flex:1}#future{width:75px}.presets{justify-content:space-around}.controls .hint{display:none}.exhibit{min-height:435px}} /* Keep quantitative type readable; narrow views recompose as persistent rows. */ .exhibit{min-height:700px}.artwork svg text{stroke:none} -@media(max-width:700px){.exhibit{min-height:700px}.callout p{font-size:13px}} +@media(max-width:700px){.exhibit{min-height:700px}.callout p{font-size:14px}} diff --git a/docs/ai-learning/STATUS.md b/docs/ai-learning/STATUS.md index d681489..9a72339 100644 --- a/docs/ai-learning/STATUS.md +++ b/docs/ai-learning/STATUS.md @@ -1,6 +1,6 @@ # AI principles course status -Updated: 2026-10-29 (Asia/Shanghai). +Updated: 2026-10-30 (Asia/Shanghai). Current total: **4 / 10 published**. **Visual acceptance reopened for all four on 2026-10-28 after user feedback.** Token-choice follow-up has passed developer visual/teaching review and its checked release is verified in production; the other three remain open. Next rework: **Attention**. New topics, including Transformer, are on hold until the four-scene rework queue passes the updated review gates. @@ -70,3 +70,8 @@ Branch `rework/attention-causal-20261029`: persistent position rows, exact opera ### Attention follow-up — 2026-10-29 Same PR7 now has separate Q/K component wells and merge paths, routed contribution markers, correctedK header, darker text and measured15.21px narrow type. Rounded displayed arithmetic uses≈. Full tests passed; selected desktop intermediate/reverse and390px observations completed. Still draft: chapter handoffs and full4×/lifecycle/playing-layout gates remain open. No production update. + + +## Attention reviewed candidate — 2026-10-30 + +PR7 now has exact cross-chapter carriers, causal shared-denominator formation, delayed per-row result labels, same-scaleV/pV outlines and explicit source ports. Actual1×/native4×/390px intermediate evidence,31-frame narrow text/bounds checks and12 reverse geometry checks close the listed candidate craft findings. All numerical/site checks and affected playback/keyboard/manual-motion/quiz flows passed. A controlled hidden event was tested; native background scheduling, physical phones and learning-effect research remain unverified. Exact [record and screenshots](reviews/2026-10-29-attention-rework.md). Candidate passes developer review, but production is still unchanged until branch preview and source-matched release verification. Keep Attention active until that receipt; then Tokenization is next. Other published receipts and new-topic hold stay intact. Public Skill alignment remains pending. diff --git a/docs/ai-learning/reviews/2026-10-29-attention-rework.md b/docs/ai-learning/reviews/2026-10-29-attention-rework.md index dcb73e5..39e6833 100644 --- a/docs/ai-learning/reviews/2026-10-29-attention-rework.md +++ b/docs/ai-learning/reviews/2026-10-29-attention-rework.md @@ -34,3 +34,44 @@ Inspection also found misleading display arithmetic: rounded0.245×10 was printe npm run check passes, retaining17,298 pose cases, original goldens and mechanical tests. Added independent path sampling checks for endpoints, exact junctions and segment containment. Official PyTorch reference rechecked at its algorithm lines459–480: scaling, mask bias, softmax then weightedV; the scene omits dropout and projections explicitly. Still NOT accepted or released: cross-chapter value handoffs are not yet continuous; full1×/4× craft, mask semantics, all phases/long values/mobile playing layout and lifecycle matrix remain to review. Stage height700px causes initial scrolling and must be judged against single-screen playing requirements. Avoid ending with another formula-heavy table merely because the equations pass. Continue this PR; preserve existing production and needs-rework status. No Skill sync or host-compatibility claim. + + +## Follow-up 2026-10-30 — reviewed candidate, release verification pending + +This section supersedes the earlier draft's pending craft/lifecycle items. Source changes remain on PR7 until the checked preview is inspected. No production release is claimed by this review alone. + +### Causal and craft corrections + +- Exact output carriers now move from the previous output column to the next input column during the first18% of chapters2–5. Identity, color, row and underlying value do not change; the next arithmetic operation waits for arrival. Moving displayed numbers are not interpolated into invented probabilities. +- Q/K products enter a shared merge/divide path; the computed score travels to its owning row, and future rows do not expose scores before their turn. Close inspection found a2-unit gap under a component well; its connector now starts at the well boundary. The formula has its own clearance below the merge endpoint. +- Softmax first collects raw exponential weights into one denominator. Only then does each row trace its fraction on the same0..100% ruler; its result number appears at completion. A traced bar is a teaching pointer, not a changing distribution or measured execution latency. The pending handoff heading no longer exposes the denominator result early. Narration and accessible operation description follow the same pose. +- V has a dashed original-length outline and a coloredpV portion on the same0..20 scale as the result. Nonzero contributions leave explicit ports on the row face and travel outside the data rows. A zeroV or maskedD does not emit a flight. Cumulative addition exposes exact operands, not merely a final total. +- Carrying plates now have separate front, side, bottom and contact-shadow surfaces. Quantitative lengths stay frontal and unskewed. Active outlines, component wells, common-denominator inputs, bar ticks and actual source/receiver connections provide functional detail rather than decorative parts. This is a mathematical exhibit, not a fictitious mechanical attention device or physical naked-eye stereo display. +- Key mobile SVG type has an18-unit floor and darker identity-hue ink; bubble body is14px. Displayed rounded quantities use≈, including the query, denominator and output. Internal calculations remain full precision. Corrected an old Embedding meta description on the Attention page. + +### Actual browser evidence + +Current cloud Chrome, desktop1363×936 and a390×844 iframe, same built source. The iframe is a real narrow browser layout, not a physical phone test. Native4× is CSS zoom of the vector-rendered1200×1000 iframe; screenshots are not enlarged rasters. QA controls and a repeatable output-port focus are saved in evals/browser/attention-review.html (not a public product route). + +| Evidence | Observed | +| --- | --- | +| [1× denominator](assets/2026-10-30/softmax-final.jpg) | Four colored inputs, summation bus, shared partial denominator, waiting row result slots; completed results are not all shown at chapter entry. | +| [4× component merge](assets/2026-10-30/qk-4x-final.jpg) | Both component paths meet the merge; boundary contact and formula clearance visible. | +| [4× output port](assets/2026-10-30/b-port-4x.jpg) | B's source port contacts its front face; side/bottom/shadow relationships remain coherent; the route stays outside other row data. | +| [390px handoff23.7s](assets/2026-10-30/handoff-final.jpg) | Each carried masked score retains its own row/color; no percentages or next result labels are assigned to other objects. | +| [390px weightedV38s, future1000](assets/2026-10-30/value-final.jpg) | DashedV and filledpV share a ruler; long future input remains readable; only nonzero visible-position contributions travel. | +| [390px playing](assets/2026-10-30/playing-final.jpg) | Header, one bubble, full mathematical stage, bounds label and transport fit in844px. Configuration/footer have eased out; pause restores them. Initial configuration view can scroll. | + +Browser DOM checks covered31 forward frames at0,7,8.2,8.6,8.9,14.95,15,15.7,16.5,20,22.95,23,23.7,24.5,25.5,26.5,28,30.95,31,31.8,32.8,34,36,38,39.95,40,40.7,42,44,47,48s. All SVG text stayed within its horizontal viewport. Smallest SVG type across that matrix was15.178 CSSpx; the final38s long-input frame measured the same. This is not a general proof against all font/device collisions. Twelve selected intermediate/end frames were replayed in reverse; DOM geometry attributes, text, colors and path coordinates matched their forward snapshots exactly. [Raw browser record](assets/2026-10-30/dom-checks.json). The saved matrix preceded final wording/port-only corrections; final affected23.7s/38s and4× port frames were rechecked after those corrections. + +Actual UI actions checked: Space on play, Escape pause, pause/continue, Home/End on timeline, reset, end→replay, natural47→48 completion and configuration return, info-open pause, manual reduced-motion toggle and immediate endpoints, query±/zero, future0/1000, incorrect/correct quiz feedback and verify-in-diagram return. Controlled document.hidden visibilitychange paused at1.05s and visible restoration did not auto-resume. The cloud surfaces kept document.visibilityState=visible when interacting with another tab, so OS/browser background scheduling is NOT independently verified; only the actual browser handler with a controlled hidden event is evidenced. Manual reduced motion was tested, not a device OS preference toggle. + +### Source and numerical review + +Official PyTorch2.14 source/algorithm revisited2026-10-30: scale1/sqrt(d), add causal−∞ bias before softmax, then weightedV; dropout omitted explicitly. Existing independent goldens still match outputs15.752103826,10,4.247896174, with futureV invariance. npm run check passes:17,298 pose cases, raw/stable normalization agreement, dot-product reconstruction, cumulative sums, no masked/zero flight, exact path endpoints/segments, reverse seeking, exact handoff ownership and additional post-arrival/end-boundary checks. All existing scene/mechanical tests retained; no claim that every mechanical UI was re-exercised. + +### Teaching review decision + +The input, question and changing output are explicit; the visible operation connects corresponding components, excludes a future row, divides by one denominator and combinesV contributions. The learner can pause each stage, predict the query-zero case, operate it, and inspect why the visible three-way mean is10 rather than20 or257.5. Query reversal changes the relative weights/output; changing only futureV leaves them invariant. The display distinguishes score from probability, attention mixture from token sampling, K fromV, percentage from output units, and annotation trace from actual model timing. + +Developer teaching/craft review closes the concrete reopened Attention findings for this candidate. It does not establish Anatomy equivalence, an award-level score or measured learning gains. No real learner study, physical phone, alternate browser engine or screen-reader-device study has been performed. Skill distribution alignment and untested hosts remain pending. Tokenization and Embedding reviews remain open. Release only after the exact preview head/checks and production SHA/READY/domain flow are verified; preserve original receipts. diff --git a/docs/ai-learning/reviews/assets/2026-10-30/b-port-4x.jpg b/docs/ai-learning/reviews/assets/2026-10-30/b-port-4x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dbfb62708ced5453b8e47f8121feac43e1d2513a GIT binary patch literal 40322 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 Gt@B?U>)ay% literal 0 HcmV?d00001 diff --git a/docs/ai-learning/reviews/assets/2026-10-30/playing-final.jpg b/docs/ai-learning/reviews/assets/2026-10-30/playing-final.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85e55023a5ffbab044e6e5d25b57b7d54bbf2025 GIT binary patch literal 52605 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

qa$36mti%qc3WBf~g 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 Du<$4n literal 0 HcmV?d00001 diff --git a/docs/ai-learning/reviews/assets/2026-10-30/qk-4x-final.jpg b/docs/ai-learning/reviews/assets/2026-10-30/qk-4x-final.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea486575c34ea3a36364cb1b5f97247b489c4db1 GIT binary patch literal 56780 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

2e!Vc9E2-Ul+up?PVrS)pK)|nnlYf6v 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 zCDz1Attention visual QA