<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Explainer on Ju Lin's AI Weblog</title><link>https://julin.ai/tags/explainer/</link><description>Recent content in Explainer on Ju Lin's AI Weblog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 23 Aug 2026 00:00:00 +1200</lastBuildDate><atom:link href="https://julin.ai/tags/explainer/index.xml" rel="self" type="application/rss+xml"/><item><title>Neural Network, Explained in Plain Language</title><link>https://julin.ai/2026/08/23/neural-network-eli5/</link><pubDate>Sun, 23 Aug 2026 00:00:00 +1200</pubDate><guid>https://julin.ai/2026/08/23/neural-network-eli5/</guid><description>&lt;style&gt;&#10; .nn{ --nn-wrong:#c62828 }&#10; .nn svg{max-width:100%;height:auto;display:block;margin:1.25rem 0}&#10; .nn .node{fill:var(--bg);stroke:var(--text);stroke-width:2.2}&#10; .nn .node-lit{fill:var(--accent);stroke:var(--accent)}&#10; .nn .wire{stroke:var(--border);stroke-width:1.8;fill:none}&#10; .nn .flow{stroke:var(--accent);stroke-width:3;fill:none;stroke-dasharray:5 15;animation:nn-flow 1.5s linear infinite}&#10; .nn .flow.no{stroke:var(--nn-wrong)}&#10; @keyframes nn-flow{to{stroke-dashoffset:-40}}&#10; .nn .lbl{font-size:13px;fill:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}&#10; .nn .big{font-size:26px;font-weight:600;fill:var(--accent)}&#10; .nn .big.no{fill:var(--nn-wrong)}&#10;&#10; .nn .dial-wire{fill:none;animation:nn-dial-width 6s ease-in-out infinite,nn-dial-color 6s ease-in-out infinite}&#10; .nn .dial-ring{fill:var(--bg);animation:nn-dial-color 6s ease-in-out infinite}&#10; .nn .dial-needle{transform-box:view-box;transform-origin:200px 105px;animation:nn-dial-rotate 6s ease-in-out infinite,nn-dial-color 6s ease-in-out infinite}&#10; .nn .dial-label{opacity:0}&#10; .nn .dial-label.label-1{animation:nn-dial-label-1 6s ease-in-out infinite}&#10; .nn .dial-label.label-2{fill:var(--accent);animation:nn-dial-label-2 6s ease-in-out infinite}&#10; .nn .dial-label.label-3{animation:nn-dial-label-3 6s ease-in-out infinite}&#10; @keyframes nn-dial-rotate{&#10; 0%{transform:rotate(-38deg)}&#10; 6%{transform:rotate(-50deg)}&#10; 12%,31%{transform:rotate(-45deg)}&#10; 37%{transform:rotate(9deg)}&#10; 43%,64%{transform:rotate(0deg)}&#10; 70%{transform:rotate(51deg)}&#10; 76%,98%{transform:rotate(45deg)}&#10; 100%{transform:rotate(-38deg)}&#10; }&#10; @keyframes nn-dial-width{&#10; 0%,31%{stroke-width:1}&#10; 43%,64%{stroke-width:3}&#10; 76%,98%{stroke-width:7}&#10; 100%{stroke-width:1}&#10; }&#10; @keyframes nn-dial-color{&#10; 0%,31%{stroke:var(--text-muted)}&#10; 43%,64%{stroke:var(--accent)}&#10; 76%,98%{stroke:var(--text-muted)}&#10; 100%{stroke:var(--text-muted)}&#10; }&#10; @keyframes nn-dial-label-1{&#10; 0%,29%{opacity:1}&#10; 35%,96%{opacity:0}&#10; 100%{opacity:1}&#10; }&#10; @keyframes nn-dial-label-2{&#10; 0%,39%{opacity:0}&#10; 45%,62%{opacity:1}&#10; 68%,100%{opacity:0}&#10; }&#10; @keyframes nn-dial-label-3{&#10; 0%,72%{opacity:0}&#10; 78%,96%{opacity:1}&#10; 100%{opacity:0}&#10; }&#10;&#10; .nn .s06-fwd{animation:nn-flow 1.5s linear infinite,nn-phase-fwd 6s ease-in-out infinite}&#10; .nn .s06-back{animation:nn-flow 1.5s linear infinite,nn-phase-back 6s ease-in-out infinite}&#10; @keyframes nn-phase-fwd{&#10; 0%,42%{opacity:1}&#10; 48%,100%{opacity:0}&#10; }&#10; @keyframes nn-phase-back{&#10; 0%,48%{opacity:0}&#10; 54%,92%{opacity:1}&#10; 98%,100%{opacity:0}&#10; }&#10; .nn text.s06-fwd{animation:nn-phase-fwd 6s ease-in-out infinite}&#10; .nn text.s06-back{animation:nn-phase-back 6s ease-in-out infinite}&#10;&#10; .nn .tick{stroke:var(--accent);stroke-width:2;stroke-linecap:round;transform-box:view-box;animation:nn-wobble 2s ease-in-out infinite}&#10; @keyframes nn-wobble{&#10; 0%,100%{transform:rotate(-13deg)}&#10; 50%{transform:rotate(13deg)}&#10; }&#10;&#10; .nn .node-outcome{animation:nn-node-outcome 6s ease-in-out infinite}&#10; @keyframes nn-node-outcome{&#10; 0%,42%{fill:var(--nn-wrong);stroke:var(--nn-wrong)}&#10; 54%,100%{fill:var(--accent);stroke:var(--accent)}&#10; }&#10;&#10; @media (prefers-reduced-motion:reduce){&#10; .nn .flow{animation:none;stroke-dasharray:none;opacity:.9}&#10; .nn .flow.s06-back{opacity:0}&#10; .nn .dial-wire,.nn .dial-ring,.nn .dial-needle,.nn .dial-label{animation:none}&#10; .nn .dial-wire,.nn .dial-needle{stroke:var(--accent);stroke-width:3}&#10; .nn .dial-ring{stroke:var(--accent)}&#10; .nn .dial-label.label-2{opacity:1}&#10; .nn .tick{animation:none}&#10; .nn text.s06-fwd{animation:none;opacity:0}&#10; .nn text.s06-back{animation:none;opacity:1}&#10; .nn .node-outcome{animation:none;fill:var(--accent);stroke:var(--accent)}&#10; }&#10;&lt;/style&gt;&#10;&lt;div class="nn"&gt;&#10;&#10;&lt;p&gt;A machine that learns by getting things wrong.&lt;/p&gt;</description></item><item><title>Next Token Prediction, Explained in Plain Language</title><link>https://julin.ai/2026/08/22/next-token-prediction-eli5/</link><pubDate>Sat, 22 Aug 2026 00:00:00 +1200</pubDate><guid>https://julin.ai/2026/08/22/next-token-prediction-eli5/</guid><description>&lt;style&gt;&#10; .tok svg{max-width:100%;height:auto;display:block;margin:1.25rem 0}&#10; .tok .wire{stroke:var(--border);stroke-width:1.8;fill:none}&#10; .tok .flow{stroke:var(--accent);stroke-width:3;fill:none;stroke-dasharray:5 15;animation:tok-flow 1.5s linear infinite}&#10; @keyframes tok-flow{to{stroke-dashoffset:-40}}&#10; .tok .lbl{font-size:13px;fill:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}&#10;&#10; .tok .chip{fill:var(--bg);stroke:var(--border);stroke-width:1.6}&#10; .tok .chip-lit{fill:var(--accent-light);stroke:var(--accent)}&#10; .tok .chip-text{font-size:14px;fill:var(--text)}&#10; .tok .chip-text-lit{fill:var(--accent-dark);font-weight:600}&#10;&#10; .tok .bar{fill:var(--border)}&#10; .tok .bar-win{fill:var(--accent)}&#10; .tok .bar-fade{fill:var(--border);opacity:.4}&#10; .tok .pulse{animation:tok-pulse 1.8s ease-in-out infinite}&#10; @keyframes tok-pulse{0%,100%{opacity:1}50%{opacity:.55}}&#10;&#10; .tok .cursor{fill:var(--accent);animation:tok-blink 1s step-end infinite}&#10; @keyframes tok-blink{0%,100%{opacity:1}50%{opacity:0}}&#10;&#10; .tok .cyc{opacity:0}&#10; .tok .cyc1{animation:tok-cyc1 5s ease-in-out infinite}&#10; .tok .cyc2{animation:tok-cyc2 5s ease-in-out infinite}&#10; .tok .cyc3{animation:tok-cyc3 5s ease-in-out infinite}&#10; .tok .cyc4{animation:tok-cyc4 5s ease-in-out infinite}&#10; .tok .cyc5{animation:tok-cyc5 5s ease-in-out infinite}&#10; @keyframes tok-cyc1{0%,2%{opacity:0}4%,18%{opacity:1}20%,100%{opacity:0}}&#10; @keyframes tok-cyc2{0%,22%{opacity:0}24%,38%{opacity:1}40%,100%{opacity:0}}&#10; @keyframes tok-cyc3{0%,42%{opacity:0}44%,58%{opacity:1}60%,100%{opacity:0}}&#10; @keyframes tok-cyc4{0%,62%{opacity:0}64%,78%{opacity:1}80%,100%{opacity:0}}&#10; @keyframes tok-cyc5{0%,82%{opacity:0}84%,98%{opacity:1}100%{opacity:0}}&#10;&#10; .tok .track{fill:var(--border);opacity:.35}&#10; .tok .fillbar{fill:var(--border)}&#10; .tok .fillbar.win{fill:var(--accent)}&#10;&#10; .tok .tbl{opacity:0}&#10; .tok .tbl1{animation:tok-tbl1 20s ease-in-out infinite}&#10; .tok .tbl2{animation:tok-tbl2 20s ease-in-out infinite}&#10; .tok .tbl3{animation:tok-tbl3 20s ease-in-out infinite}&#10; .tok .tbl4{animation:tok-tbl4 20s ease-in-out infinite}&#10; @keyframes tok-tbl1{0%,1%{opacity:0}3%,20%{opacity:1}22%,100%{opacity:0}}&#10; @keyframes tok-tbl2{0%,26%{opacity:0}28%,45%{opacity:1}47%,100%{opacity:0}}&#10; @keyframes tok-tbl3{0%,51%{opacity:0}53%,70%{opacity:1}72%,100%{opacity:0}}&#10; @keyframes tok-tbl4{0%,76%{opacity:0}78%,92%{opacity:1}94%,100%{opacity:0}}&#10;&#10; .tok .rw{opacity:0}&#10; .tok .rw1{animation:tok-rw1 20s ease-in-out infinite}&#10; .tok .rw2{animation:tok-rw2 20s ease-in-out infinite}&#10; .tok .rw3{animation:tok-rw3 20s ease-in-out infinite}&#10; .tok .rw4{animation:tok-rw4 20s ease-in-out infinite}&#10; @keyframes tok-rw1{0%,18%{opacity:0}20%,100%{opacity:1}}&#10; @keyframes tok-rw2{0%,43%{opacity:0}45%,100%{opacity:1}}&#10; @keyframes tok-rw3{0%,68%{opacity:0}70%,100%{opacity:1}}&#10; @keyframes tok-rw4{0%,90%{opacity:0}92%,100%{opacity:1}}&#10;&#10; @media (prefers-reduced-motion:reduce){&#10; .tok .flow{animation:none;stroke-dasharray:none;opacity:.9}&#10; .tok .pulse{animation:none;opacity:1}&#10; .tok .cursor{animation:none;opacity:1}&#10; .tok .cyc{animation:none;opacity:0}&#10; .tok .cyc5{animation:none;opacity:1}&#10; .tok .tbl{animation:none;opacity:0}&#10; .tok .rw{animation:none;opacity:1}&#10; }&#10;&lt;/style&gt;&#10;&lt;div class="tok"&gt;&#10;&#10;&lt;p&gt;An AI writes one little piece at a time. It never knows the whole sentence up front — it only ever picks &lt;strong&gt;what comes next&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>