压缩不一定要还原所有细节。关键是先说清楚“哪些差异可以忽略”,再问保留这些信息需要多少比特。
从精确还原,到允许有用的省略
第三篇的源编码 要求无损重建。第四篇的信道编码 则用冗余抵抗传输噪声。本篇换一个问题:如果应用本来就允许一定误差,压缩下界会怎样变化?
图像或音频压缩可以舍弃部分感知不敏感的细节;分类器可以忽略与标签无关的背景。但“可以舍弃”取决于目标:对人眼不明显的像素变化,仍可能影响测量或识别。必须先定义失真,而不是先假设丢掉的信息都没有价值。
R(D) 的 min:在所有重建方式里挑选
令 X 是原始符号,X^ 是重建符号,d(x,x^) 衡量一次重建的代价。对独立同分布信源、逐符号可加的失真,率失真函数给出长块编码在平均失真约束下的渐近最低码率:
R(D)=p(x^∣x):E[d(X,X^)]≤DminI(X;X^).
这里优化的是整个重建条件分布 p(x^∣x)。D 只限制平均误差,不规定必须怎样犯错。不同重建方式可能达到相同失真,却保留不同数量的原始信息;min 选择其中最省信息的一个。单位是 bit/源符号,单字母公式背后是允许编码块长度增长的定理,不是某个逐符号压缩器的实际输出长度。
R(D) 单调不增,在上述标准设定下为凸函数。放宽失真约束只会扩大可选集合,因此最优码率不会上升;把两种编码分配给不同部分的长序列,则给出凸性的时间共享直觉。
阴影表示渐近可达区域,蓝线是其码率下边界。固定一个失真预算,沿竖直方向向上看,允许使用更高码率;向下越过曲线则不可达。
示意图采用有限离散字母表,以及只有精确重建才为零的失真。此时 R(0)=H(X);连续高斯信源配平方误差时,R(0)=∞,不能用微分熵替代这个端点。
零码率端点也有明确含义。若允许的失真达到
D0=x^minE[d(X,x^)],
解码器始终输出同一个常数便能满足要求,无须传输消息。因此 D≥D0 时 R(D)=0。
同样允许 20% 错误,随机翻转为什么还不够好?
考虑 X∼Bernoulli(0.2),失真是出错记 1、正确记 0 的汉明失真。记二元熵为 h2,则
R(D)={h2(0.2)−h2(D),0,0≤D≤0.2,D≥0.2.
一种直觉做法是独立地以概率 D 翻转 X。它确实造成平均错误率 D,但互信息是 h2(0.2+0.6D)−h2(D),通常高于下界。到 D=0.2 时,它仍让重建结果携带一部分输入信息;而永远输出 0 已经能满足 20% 错误率,根本不需要这些信息。
正在呈现知识画面
同样的失真,为什么还要挑重建方式?固定 80% 为 0 的二元信源,比较最优重建与独立随机翻转。两者平均错误率相同,互信息不同;熵条带把原始信息分成保留信息和残余不确定性。
{"id":"rd-bound","title":"同样的失真,为什么还要挑重建方式?","summary":"固定 80% 为 0 的二元信源,比较最优重建与独立随机翻转。两者平均错误率相同,互信息不同;熵条带把原始信息分成保留信息和残余不确定性。","height":950,"html":"<p class=\"eyebrow\" data-i18n=\"eyebrow\"></p><h2 data-i18n=\"heading\"></h2><p class=\"intro\" data-i18n=\"intro\"></p>\n<label class=\"control\" for=\"distortion\"><span data-i18n=\"control\"></span><output id=\"d-value\"></output></label><input id=\"distortion\" type=\"range\" min=\"0\" max=\"200\" value=\"100\">\n<p class=\"note\" data-i18n=\"axis\"></p><div class=\"plot\"><svg viewBox=\"0 0 600 190\" preserveAspectRatio=\"none\" role=\"img\" data-i18n-label=\"chart\"><path id=\"naive-curve\" class=\"curve secondary\"/><path id=\"bound-curve\" class=\"curve\"/><line id=\"cursor\" y1=\"0\" y2=\"190\"/><circle id=\"bound-dot\" r=\"5\"/><circle id=\"naive-dot\" r=\"5\"/></svg></div><div class=\"scale\"><span>D = 0</span><span>0.2</span></div>\n<div class=\"legend\"><span class=\"blue\" data-i18n=\"optimal\"></span><span class=\"gold\" data-i18n=\"naive\"></span></div>\n<div class=\"metric-pair\"><div><span data-i18n=\"optimal\"></span><strong id=\"rate\"></strong></div><div><span data-i18n=\"naive\"></span><strong id=\"naive-rate\"></strong></div></div>\n<div class=\"formula\" id=\"decomposition\"></div><div class=\"band\" role=\"img\" data-i18n-label=\"strip\"><div id=\"retained\"></div><div id=\"discarded\" class=\"gold\"></div></div><div class=\"legend\"><span class=\"blue\">I(X;X̂)</span><span class=\"gold\">H(X|X̂)</span></div>\n<div class=\"formula\" id=\"reconstruction\"></div><p class=\"note\" data-i18n=\"note\"></p>\n","css":".intro { margin:8px 0 18px; color:var(--muted); font-size:14px; }\n.control { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:18px; }\n.control output { min-width:4em; flex-shrink:0; text-align:center; background:var(--accent-soft); color:var(--accent); padding:2px 8px; border-radius:6px; font-weight:600; }\n.formula { margin-top:18px; padding:14px 0; border-block:1px solid var(--rule); font-size:16px; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }\n.copy-stack { display:grid; margin-top:14px; color:var(--muted); font-size:14px; }\n.copy-stack > * { grid-area:1/1; }\n.copy-stack .reserve { visibility:hidden; }\n.note { margin-top:14px; color:var(--muted); font-size:12px; }\n.metric-pair { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:18px; }\n.metric-pair > div { min-width:0; }\n.metric-pair span { display:block; font-size:12px; color:var(--muted); }\n.metric-pair strong { display:block; font-size:24px; font-weight:500; font-variant-numeric:tabular-nums; }\n.scale { display:flex; justify-content:space-between; color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }\n@media(max-width:480px) { .metric-pair strong { font-size:21px; } }\n.presets { display:flex; }\n.plot { position:relative; margin-top:18px; height:190px; border-left:1px solid var(--rule); border-bottom:1px solid var(--muted); }\n.plot svg { width:100%; height:100%; overflow:hidden; }\n.plot .curve { fill:none; stroke:var(--accent); stroke-width:2.5; vector-effect:non-scaling-stroke; }\n.plot .curve.secondary { stroke:var(--second); stroke-dasharray:5 4; }\n.scale { position:relative; }.scale .middle { position:absolute; left:50%; transform:translateX(-50%); }\n.formula { font-size:14px; }.formula div+div { margin-top:6px; }\n@media(max-width:480px) { .plot { height:170px; } }\n.plot .curve { transition:d .28s cubic-bezier(.22,1,.36,1); }\n.band { display:flex; height:28px; border-radius:5px; overflow:hidden; background:var(--surface); margin-top:10px; }\n.band > div { background:var(--accent); transition:width .28s ease; }\n.band > .gold { background:var(--second); }\n.legend { display:flex; flex-wrap:wrap; gap:6px 18px; margin-top:10px; font-size:12px; color:var(--muted); }\n.legend .blue::before,.legend .gold::before { content:''; display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:6px; background:var(--accent); }\n.legend .gold::before { background:var(--second); }\n.rows { margin-top:18px; display:grid; gap:12px; }\n.row { display:grid; grid-template-columns:32px 1fr 60px; align-items:center; gap:10px; font-size:13px; }\n.row > div { min-width:0; }.row output { text-align:right; font-variant-numeric:tabular-nums; }\n.track { height:14px; background:var(--surface); border-radius:3px; overflow:hidden; }\n.fill { height:100%; width:0; background:var(--accent); transition:width .28s ease; }\n.presets { flex-wrap:wrap; gap:4px; }.presets button { min-width:0; }\n.metric-pair strong { overflow-wrap:anywhere; }\n#cursor { stroke:var(--rule); vector-effect:non-scaling-stroke; }#bound-dot { fill:var(--accent); }#naive-dot { fill:var(--second); }\n","js":"const input=document.querySelector('input'),h=p=>viz.entropy([p,1-p]),base=h(.2),$=s=>document.querySelector(s);\nconst rate=d=>base-h(d),naive=d=>h(.2+.6*d)-h(d);\nfor(const [id,fn] of [['#bound-curve',rate],['#naive-curve',naive]])$(id).setAttribute('d',Array.from({length:201},(_,i)=>(i?'L':'M')+(i*3)+','+((1-fn(i/1000)) *190).toFixed(4)).join(' '));\nfunction draw(){const d=+input.value/1000,r=Math.max(0,rate(d)),n=naive(d),q=(.2-d)/(1-2*d);$('#d-value').textContent=viz.number(d,3);$('#rate').textContent=viz.number(r,3)+' bit';$('#naive-rate').textContent=viz.number(n,3)+' bit';\n for(const [id,value] of [['#bound-dot',r],['#naive-dot',n]]){$(id).setAttribute('cx',d/.2*600);$(id).setAttribute('cy',(1-value)*190);}$('#cursor').setAttribute('x1',d/.2*600);$('#cursor').setAttribute('x2',d/.2*600);\n $('#decomposition').textContent='H(X) = I(X;X̂) + H(X|X̂) ≈ '+viz.number(r,3)+' + '+viz.number(h(d),3)+' = '+viz.number(base,3)+' bit';$('#retained').style.width=r/base*100+'%';$('#discarded').style.width=h(d)/base*100+'%';\n $('#reconstruction').textContent='P(X̂ = 1) = (0.2 − D) / (1 − 2D) = '+viz.number(q,4);}\ninput.addEventListener('input',draw);draw();\n","audio":false,"strings":{"axis":"横轴 D:0–0.2;纵轴 I:0–1 bit。蓝色是下界,金色虚线是独立翻转的互信息。","chart":"最优重建与独立翻转的互信息曲线,两个圆点共享同一失真。","control":"平均错误率 D","eyebrow":"率失真里的最小化","heading":"同样的失真,为什么还要挑重建方式?","intro":"X 中 1 的比例固定为 0.2。移动 D,两条曲线对应同一个失真预算;下方条带只分解最优方案。","naive":"独立翻转 I","note":"最优方案满足 X = X̂ ⊕ Z,Z 与 X̂ 独立且 P(Z=1)=D;这是一种反向描述,不是直接对 X 独立加噪。D=0.2 时始终重建为 0,码率为 0。曲线表示长块编码极限,随机翻转本身不是压缩编码器。","optimal":"最优重建 R(D)","strip":"固定 H(X) 的熵条带:蓝色保留信息,金色残余不确定性。"}}
为什么蓝线恰好能取到?定义错误变量 Z=X⊕X^。对 D≤0.2,
H(X∣X^)=H(Z∣X^)≤H(Z)≤h2(D),
所以 I(X;X^)≥h2(0.2)−h2(D)。要达到等号,可以反过来构造:先取 X^∼Bernoulli(q),再令 X=X^⊕Z,其中 Z∼Bernoulli(D) 与 X^ 独立。为了让 P(X=1) 仍为 0.2,需要
0.2=D+q(1−2D)⇒q=1−2D0.2−D.
这保证了正确的源分布、平均失真和相互信息,也就给出可达下界的联合分布。注意独立性在错误与重建之间,不是错误与原始输入之间;这正是两条曲线不同的原因。
信息瓶颈:把“还原输入”换成“保留任务信息”
率失真先指定 d(x,x^)。但学习表示时,我们往往关心标签 Y,而不必还原 X 的每个细节。信息瓶颈(IB)固定数据联合分布 p(x,y),选择随机编码器 p(t∣x):
p(t∣x)minJIB=I(X;T)−βI(T;Y),β≥0.
第一项衡量表示记住多少输入信息;第二项奖励它保留多少与任务有关的信息。β 越大,越重视保留任务信息。这里的压缩量是互信息,不是向量维度或文件大小;低维连续向量并不自动意味着低互信息。
图取下方的颜色/形状例子:四种输入等概率,颜色与形状独立,任务只识别颜色。两种形状汇入同一个颜色表示,输入的 2 bit 压成 1 bit,颜色标签仍能被完整预测。
概率关系是 p(x,y,t)=p(x,y)p(t∣x),即 Y→X→T,表示编码器只读输入;图中的 X→T→Y^ 是预测流程,Y^ 才是预测值,不能把这两种箭头混为一谈。
要看见合并后哪些原值再也分不开,以及为何再次加工不能还原它们,可以操作数据处理与还原实验。
相同的压缩量,可以丢掉完全不同的信息
设输入 X=(S,N):S 是颜色,N 是形状,两者是独立的公平比特,标签为 Y=S。输入总熵为 2 bit,任务信息最多为 1 bit。
正在呈现知识画面
压缩表示时,究竟应该丢掉什么?四种等概率输入由颜色 S 与形状 N 组成,任务 Y=S。切换表示观察哪些输入被合并,再用 β 比较四种表示的瓶颈目标。
{"id":"ib-representation","title":"压缩表示时,究竟应该丢掉什么?","summary":"四种等概率输入由颜色 S 与形状 N 组成,任务 Y=S。切换表示观察哪些输入被合并,再用 β 比较四种表示的瓶颈目标。","height":950,"html":"<p class=\"eyebrow\" data-i18n=\"eyebrow\"></p><h2 data-i18n=\"heading\"></h2><p class=\"intro\" data-i18n=\"intro\"></p>\n<div class=\"presets\" role=\"group\" data-i18n-label=\"representations\"><button data-mode=\"all\" data-i18n=\"all\"></button><button data-mode=\"signal\" data-i18n=\"signal\"></button><button data-mode=\"noise\" data-i18n=\"noise\"></button><button data-mode=\"none\" data-i18n=\"none\"></button></div>\n<div class=\"mapping\"><svg viewBox=\"0 0 320 180\" role=\"img\" data-i18n-label=\"chart\"><g id=\"edges\"></g><g id=\"sources\"></g><g id=\"targets\"></g></svg></div><p class=\"note\" data-i18n=\"legend\"></p>\n<div class=\"metric-pair\"><div><span>I(X;T)</span><strong id=\"input-info\"></strong></div><div><span>I(T;Y)</span><strong id=\"task-info\"></strong></div></div>\n<label class=\"control\" for=\"beta\"><span data-i18n=\"control\"></span><output id=\"beta-value\"></output></label><input id=\"beta\" type=\"range\" min=\"0\" max=\"300\" value=\"150\">\n<div class=\"formula\" id=\"objective\"></div><div class=\"scores\" id=\"scores\"></div><p class=\"note\" data-i18n=\"note\"></p>\n","css":".intro { margin:8px 0 18px; color:var(--muted); font-size:14px; }\n.control { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:18px; }\n.control output { min-width:4em; flex-shrink:0; text-align:center; background:var(--accent-soft); color:var(--accent); padding:2px 8px; border-radius:6px; font-weight:600; }\n.formula { margin-top:18px; padding:14px 0; border-block:1px solid var(--rule); font-size:16px; font-variant-numeric:tabular-nums; overflow-wrap:anywhere; }\n.copy-stack { display:grid; margin-top:14px; color:var(--muted); font-size:14px; }\n.copy-stack > * { grid-area:1/1; }\n.copy-stack .reserve { visibility:hidden; }\n.note { margin-top:14px; color:var(--muted); font-size:12px; }\n.metric-pair { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:18px; }\n.metric-pair > div { min-width:0; }\n.metric-pair span { display:block; font-size:12px; color:var(--muted); }\n.metric-pair strong { display:block; font-size:24px; font-weight:500; font-variant-numeric:tabular-nums; }\n.scale { display:flex; justify-content:space-between; color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }\n@media(max-width:480px) { .metric-pair strong { font-size:21px; } }\n.presets { display:flex; }\n.plot { position:relative; margin-top:18px; height:190px; border-left:1px solid var(--rule); border-bottom:1px solid var(--muted); }\n.plot svg { width:100%; height:100%; overflow:hidden; }\n.plot .curve { fill:none; stroke:var(--accent); stroke-width:2.5; vector-effect:non-scaling-stroke; }\n.plot .curve.secondary { stroke:var(--second); stroke-dasharray:5 4; }\n.scale { position:relative; }.scale .middle { position:absolute; left:50%; transform:translateX(-50%); }\n.formula { font-size:14px; }.formula div+div { margin-top:6px; }\n@media(max-width:480px) { .plot { height:170px; } }\n.plot .curve { transition:d .28s cubic-bezier(.22,1,.36,1); }\n.band { display:flex; height:28px; border-radius:5px; overflow:hidden; background:var(--surface); margin-top:10px; }\n.band > div { background:var(--accent); transition:width .28s ease; }\n.band > .gold { background:var(--second); }\n.legend { display:flex; flex-wrap:wrap; gap:6px 18px; margin-top:10px; font-size:12px; color:var(--muted); }\n.legend .blue::before,.legend .gold::before { content:''; display:inline-block; width:9px; height:9px; border-radius:2px; margin-right:6px; background:var(--accent); }\n.legend .gold::before { background:var(--second); }\n.rows { margin-top:18px; display:grid; gap:12px; }\n.row { display:grid; grid-template-columns:32px 1fr 60px; align-items:center; gap:10px; font-size:13px; }\n.row > div { min-width:0; }.row output { text-align:right; font-variant-numeric:tabular-nums; }\n.track { height:14px; background:var(--surface); border-radius:3px; overflow:hidden; }\n.fill { height:100%; width:0; background:var(--accent); transition:width .28s ease; }\n.presets { flex-wrap:wrap; gap:4px; }.presets button { min-width:0; }\n.metric-pair strong { overflow-wrap:anywhere; }\n.mapping { margin-top:20px; }.mapping svg { width:100%; display:block; max-height:230px; }.edge { stroke:var(--muted); opacity:.45; stroke-width:2; fill:none; transition:d .28s ease; }.source-text { fill:var(--ink); font-size:18px; }.target { fill:var(--paper); stroke:var(--rule); }.target-text { fill:var(--ink); font-size:18px; }.scores { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:14px; }.score { padding:10px; border:1px solid var(--rule); border-radius:7px; min-width:0; }.score span { display:block; max-height:230px; font-size:12px; color:var(--muted); }.score strong { font-size:18px; font-weight:500; font-variant-numeric:tabular-nums; }.score.best { border-color:var(--accent); background:var(--accent-soft); }.score.current span { color:var(--ink); font-weight:600; }\n","js":"const $=s=>document.querySelector(s),ns='http://www.w3.org/2000/svg',modes={all:[0,1,2,3],signal:[0,0,1,1],noise:[0,1,0,1],none:[0,0,0,0]},info={all:[2,1],signal:[1,1],noise:[1,0],none:[0,0]};let mode='signal';\nfunction node(tag,attrs,parent,text){const e=document.createElementNS(ns,tag);for(const [k,v]of Object.entries(attrs))e.setAttribute(k,v);if(text)e.textContent=text;parent.append(e);return e;}\nfor(let i=0;i<4;i++){const x=40+80*i;node('path',{d:'M'+x+',90 C'+x+',105 '+x+',105 '+x+',120',class:'edge'},$('#edges'));node(i%2?'rect':'circle',i%2?{x:x-12,y:25,width:24,height:24,fill:i<2?'var(--accent)':'var(--second)'}:{cx:x,cy:37,r:12,fill:i<2?'var(--accent)':'var(--second)'},$('#sources'));node('text',{x,y:78,'text-anchor':'middle',class:'source-text'},$('#sources'),''+Math.floor(i/2)+(i%2));const g=node('g',{},$('#targets'));node('rect',{x:-28,y:120,width:56,height:40,rx:10,class:'target'},g);node('text',{x:0,y:146,'text-anchor':'middle',class:'target-text'},g,'T'+i);}\nfor(const m of Object.keys(modes)){$('#scores').insertAdjacentHTML('beforeend','<div class=\"score\" data-score=\"'+m+'\"><span></span><strong></strong></div>');$('[data-score=\"'+m+'\"] span').textContent=viz.t(m);}\nfunction draw(){const b=+$('#beta').value/100,values=Object.fromEntries(Object.keys(info).map(k=>[k,info[k][0]-b*info[k][1]])),best=Math.min(...Object.values(values)),map=modes[mode],count=Math.max(...map)+1;\n document.querySelectorAll('.edge').forEach((e,i)=>e.setAttribute('d','M'+(40+80*i)+',90 C'+(40+80*i)+',105 '+((map[i]+.5)*320/count)+',105 '+((map[i]+.5)*320/count)+',120'));[...$('#targets').children].forEach((e,i)=>{e.style.transition='transform .28s ease, opacity .2s';e.style.transform='translateX('+(i<count?(i+.5)*320/count:160)+'px)';e.style.opacity=i<count?'1':'0';});\n $('#input-info').textContent=info[mode][0]+' bit';$('#task-info').textContent=info[mode][1]+' bit';$('#beta-value').textContent=viz.number(b,2);$('#objective').textContent='J = I(X;T) − β I(T;Y) = '+info[mode][0]+' − '+viz.number(b,2)+' × '+info[mode][1]+' = '+viz.number(values[mode],2);\n document.querySelectorAll('[data-mode]').forEach(e=>e.setAttribute('aria-pressed',String(e.dataset.mode===mode)));for(const m of Object.keys(info)){const e=$('[data-score=\"'+m+'\"]');e.classList.toggle('best',Math.abs(values[m]-best)<1e-9);e.classList.toggle('current',m===mode);e.querySelector('strong').textContent=viz.number(values[m],2);}}\n$('#beta').addEventListener('input',draw);document.querySelectorAll('[data-mode]').forEach(e=>e.addEventListener('click',()=>{mode=e.dataset.mode;draw();}));draw();\n","audio":false,"strings":{"all":"全部保留","chart":"四种输入经过不同映射合并为表示 T 的节点。","control":"任务信息的权重 β","eyebrow":"把无关差异合并","heading":"压缩表示时,究竟应该丢掉什么?","intro":"颜色 S 决定标签 Y,形状 N 与任务独立。四种组合等概率;连线汇合表示编码器不再区分这些输入。","legend":"输入下方的两位数字是 SN;蓝/金表示 S=0/1,圆/方表示 N=0/1。","noise":"只留形状","none":"全部合并","note":"下方列出四种表示的 J,越小越好;蓝色框标出并列最优者。只留颜色与全部保留的任务信息相同,却少记 1 bit。β<1 时全部合并更优;β>1 时只留颜色更优。这是有限离散例子,不是神经网络训练轨迹。","representations":"选择表示","signal":"只留颜色"}}
保留颜色 T=S 时,I(X;T)=I(T;Y)=1;保留形状 T=N 时,I(X;T)=1,但 I(T;Y)=0。同样压缩到 1 bit,任务价值可以完全不同。 全保留给出 (2,1),不如只留颜色的 (1,1);全合并给出 (0,0),压缩最彻底却无法预测标签。
在这个特例里,I(T;Y)≤I(X;T) 且 I(T;Y)≤1。所以 β<1 时 J≥0,常量表示最优;β>1 时 J≥1−β,保留颜色达到最优;β=1 时两者并列。这是目标函数的权衡结果,不意味着“信息越少,泛化就一定越好”。
“先拟合后压缩”是观察,不是普遍训练定律
信息平面把每层表示放在 (I(X;T),I(T;Y)) 上。Shwartz-Ziv 与 Tishby 在特定网络和估计设定下观察到拟合与压缩阶段,由此提出理解深度学习的一种视角。
但不能把图上的移动直接当作泛化的原因。互信息估计会受离散分箱、噪声、激活函数与样本量影响;对连续输入的确定性表示,互信息还可能是无限大,必须说明采用了什么概率模型和估计口径。后续研究对压缩阶段的普遍性提出了反例与限制。IB 提供了一种可定义、可分析的学习目标,并未证明所有网络都按相同轨迹训练。
对比学习:相关,但不自动等于信息瓶颈
InfoNCE 通过区分正样本和负样本学习表示。在正样本来自联合分布、负样本按相应边缘分布独立抽取等条件下,若候选总数为 K,使用自然对数的损失满足
I(U;V)≥logK−LNCE.
降低损失是在提高一个互信息下界,不是直接测量真实互信息;下界受采样方式和 K 影响,且不超过 logK。这与 IB 的“保留相关信息”有联系,但普通 InfoNCE 没有显式的 I(X;T) 压缩项,不能把所有对比学习都称作 IB 优化。
| 框架 | 优化什么 | 怎样定义该保留的信息 |
| 率失真 | 最小化 I(X;X^) | 平均失真不超过 D |
| 信息瓶颈 | 最小化 I(X;T)−βI(T;Y) | 表示与任务标签的互信息 |
| InfoNCE | 最小化对比损失 | 正负样本构造与相应的互信息下界 |
下一篇把这些量放回实际建模: LLM 中的信息论。
参考
关键词:率失真、R(D)、有损压缩、信息瓶颈、互信息、任务相关表示、InfoNCE