假设你、朋友小李和明哥三人要去冷热温差很大的山城旅行一周。打包时,小李只带了个小挎包,塞了两件T恤就出发了——到了地方冻得直哆嗦,只好每天买新外套;你带了一个超大行李箱,把春夏秋冬的衣服全塞进去——箱子重到搬不动,托运超重费贵得吓人,但确实什么天气都不怕;明哥呢,带了个中等行李箱,装了几件百搭的长袖和一件轻便羽绒服,打开箱子就知道每件衣服都能用上。 明哥的打包哲学,正是 MDL(Minimum Description Length,最小描述长度)准则的灵魂:一个模型的“行李箱”多大,要看打包成本和路上补买成本的合计。模型好与坏,不是看它在已知数据上表演得多完美,而是看它描述这份数据的“总账单”是否最省。数据会说话——它倾向于选择那个能用最少位数把自己说明白的模型。这篇文章,我们就用这个行李箱的故事,把 MDL 这条信息论里的“选模尺子”彻底讲透。
对 AI 从业者而言,MDL 帮你建立“用编码视角选模型”的直觉:不用靠猜,不用单独划验证集,还能天然防过拟合。在特征选择、模型比较和小样本场景里,它是区分资深算法工程师和调参侠的一道分水岭。
目录
可视化演示
展示模型复杂度与拟合误差的编码长度权衡、MDL与贝叶斯推断的等价关系及特征选择中MDL的应用,帮助理解信息论视角的模型选择原理。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.balance+'
核心思想:总账单最短的模型
还记得开头那场旅行吗?小李的小挎包是欠拟合——箱子很轻,可到了山城天天买外套,补买账单(误差)惊人;你的超大行李箱是过拟合——每件衣服都精准应对一种天气,训练集上完美无缺,可箱子本身的托运超重费(模型复杂度)已经让人破产。明哥的行李箱不大不小,总花费最低。
MDL 在信息论里干的正是明哥的事:把“选模型”变成“算总账”。它不问你模型在训练集上表现多好,而是问——如果要把数据从发送方传到接收方,使用这个模型来帮忙压缩,总共需要多少位(bit)的编码长度?需要的位数越少,说明这个模型抓住了数据里真正的规律;位数越多,说明模型要么太笨没抓住规律,要么太啰嗦把噪声也当规律记下来了。
那“总账”由哪两部分构成呢?MDL 给出了一个极其优雅的加法:
所以回头看,明哥的行李箱之所以最省,不是因为他带得最少,也不是因为他带得最准,而是因为他把“箱子自重 + 途中补买”合在一起算了总账。MDL 的哲学正是如此:从来不存在“越简单越好”或“越准越好”的绝对标准,只有“总长度最短”这一个客观尺度。
- 模型编码项$L(M)$ 表示把模型 $M$ 本身写下来需要多少位。模型越复杂(参数越多、结构越精细),这份“说明书”就越长,就像你那个塞满衣柜的巨型行李箱。
- 数据残差编码项$L(D \mid M)$ 表示拿到模型说明书后,用它去近似描述原始数据、还差多少信息需要补充。误差越大,要打的“补丁”越多,编码越长,就像小李每天买外套的额外开销。
- 取最小在所有候选模型上求最小值。这个“最小化”就是数据在替自己发言——它悄悄告诉你:选那个把总位数压到最短的模型。
编码总览:两份账单怎么算
要让“总账单”可计算,关键问题是:模型的复杂度怎么折算成位数?数据的残差又怎么折算成位数? 信息论的答案是——一切都用概率说话。
先看误差编码。假设模型对第 $i$ 个样本的预测是 $f_M(x_i)$,真实值是 $y_i$,残差是 $y_i - f_M(x_i)$。如果残差服从均值为 0、方差为 $\hat{\sigma}^2$ 的高斯分布,那么对高斯随机变量做最优编码,每个数需要的位数由下面公式给出:
其中 $\hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^{n} (y_i - f_M(x_i))^2$ 是残差的方差——你可以把它通俗理解为“模型的平均失误面积”。
再看模型编码。一个有 $k$ 个自由参数的模型,其参数值本质上是从 $n$ 个样本中“学”出来的。为了把这些实数值精确传递给接收方,每个参数大约需要 $\frac{1}{2}\log_2 n$ 位(这个结果来自最优参数量化理论),于是模型编码长度近似为:
它就像行李箱的重量税:每多带一件衣服(多一个参数),都要按当前样本量交一笔“托运费”。样本越多,这件衣服被要求打包得越精细,税也越高——但也正因如此,当数据足够多时,模型才“养得起”更多参数。
- 残差方差$\hat{\sigma}^2$ 是每个样本预测误差的平方平均,它度量了模型“歪了多少”。歪得越厉害,这个值越大。
- 高斯编码代价$\log_2(2\pi e\,\hat{\sigma}^2)$ 是对一个方差为 $\hat{\sigma}^2$ 的高斯随机变量进行最优编码时,约需要这么多位。方差大,说明数值散乱难以预测,编码自然长。
- 样本量加权前面乘的 $n/2$ 表明——每个样本都贡献一份“误差信息”,样本越多,误差项在总账里的权重就越大。
防过拟合:超大行李箱的代价
为什么 MDL 天生就能防过拟合?回到旅行箱:你那个装满所有衣服的大箱子,在旅行中确实零补买,可托运超重费高得离谱。MDL 把“训练集上误差为 0”视为一种昂贵的虚荣——为了记住每一个噪声点,模型付出了巨大的编码税。
假设有两个模型竞争:简单模型 $M_1$ 有 $k_1$ 个参数,复杂模型 $M_2$ 有 $k_2 > k_1$ 个参数,且 $M_2$ 在训练集上拟合得更好,残差平方和 $RSS_2 < RSS_1$。MDL 会怎么裁决?看总长度之差:
妙处在于:MDL 不需要你手动调正则化系数——惩罚力度 $\frac{1}{2}\log_2 n$ 是从信息论里自然长出来的。它让“越复杂的模型越要拿出真本事来证明自己”。这就像明哥买外套前会算:这件外套能不能在接下来几天真派上用场?用不上,就不买。这背后正是哲学史上那把著名的奥卡姆剃刀:如无必要,勿增实体。
- 复杂度惩罚项$\frac{k_2 - k_1}{2} \log_2 n$ 是多出来的参数缴纳的“编码税”。每多一个参数,就要多交约 $\frac{1}{2}\log_2 n$ 位——这是 MDL 自动给模型复杂度上的枷锁。
- 拟合收益项$\frac{n}{2} \log_2 \frac{RSS_1}{RSS_2}$ 表示复杂模型把残差从 $RSS_1$ 压到 $RSS_2$ 后,误差编码省下的位数。拟合提升越大,这项收益越大。
- 胜负判定当 $\Delta L > 0$,税的增量超过了收益,说明这个复杂度“不值得买”;$\Delta L < 0$ 则说明这笔买卖划算。
贝叶斯联系:出发前的功课
明哥打包前会做功课——查天气预报、看攻略,对山城的天气有个预判。这份“预判”在贝叶斯推断里叫先验 $P(M)$;到了当地感受到的实际阴晴冷暖,叫似然 $P(D \mid M)$;旅行结束后你对“山城天气到底怎样”的综合判断,叫后验 $P(M \mid D)$。
贝叶斯公式告诉我们,这三者服从一个乘法关系:
MDL 和它的联系,藏在一个简单操作里:两边取负对数。乘法瞬间变成加法:
这个等式揭示了 MDL 的本质:它不是一个另起炉灶的新准则,而是贝叶斯模型选择穿上了一件叫“编码长度”的外衣。最小化 MDL 总长度,等价于最大化后验概率 $P(M \mid D)$。明哥的行李箱为什么总选得又好又省?因为他把先验功课(对天气的了解)和似然体验(实际感受)在脑子里合并成了同一个判断。MDL 只不过把这个合并过程量化成了位数。
- 贝叶斯乘法$P(M \mid D) \propto P(M) \cdot P(D \mid M)$,后验正比于先验乘似然——出发前的功课和路上的实际体验共同塑造最终判断。
- 先验取负对数$-\log_2 P(M)$ 正是模型 $M$ 的最优编码长度。意外吗?概率越小的模型,描述它越费劲——这就把“先验信念”和“编码成本”画上了等号。
- 似然取负对数$-\log_2 P(D \mid M)$ 正是数据残差的编码长度。数据在模型下越“常规”(概率大),需要补的描述越短。
实践应用:挑箱子实战
理论讲完,进入实战。MDL 在机器学习里最常见的三个战场是特征选择、模型比较和小样本决策。
先说特征选择。假设一个表格数据有 100 个候选特征,你想挑出一个子集 $S$。每个特征相当于一件行李——它可能有用,也可能纯粹占地方。MDL 给特征子集打分的方式很直接:特征数量 $|S|$ 就是模型复杂度,用 $S$ 训练出的模型在数据上的残差平方和 $RSS(S)$ 就是误差。于是特征子集的 MDL 分数定义为:
模型比较就更好理解了:两个结构完全不同的模型(比如决策树 vs 神经网络),没法比参数个数?没关系,MDL 不看你长什么样,只看你描述数据的总编码长度。谁短谁赢,连单独的验证集都可以省掉——因为编码长度本身就是一种“内在验证”。
小样本场景则是 MDL 的主场。数据量 $n$ 很小时,$L(M)$ 中的 $\log_2 n$ 很小,模型税很便宜?恰恰相反——$n$ 小时误差项 $\frac{n}{2}$ 这个权重也很小,模型很容易靠死记硬背拿低误差,此时 MDL 的复杂度税就起到了定海神针的作用,拦住那些在小数据上疯狂过拟合的复杂模型。明哥的智慧在这里体现得淋漓尽致:天气信息越少(数据越少),越要依赖普适的打包经验,而不是赌某件特定衣服一定用得上。
- 特征税$\frac{|S|}{2} \log_2 n$,每多选一个特征,就要多缴纳约 $\frac{1}{2}\log_2 n$ 位的“描述税”。特征越多,这个包袱越重。
- 数据交代成本$\frac{n}{2} \log_2 \frac{RSS(S)}{n}$ 是用这些特征拟合数据后剩余的“困惑量”。特征选得好,残差小,这一项就小。
计算挑战:用什么秤称行李箱
MDL 概念虽美,实践起来有一个绕不开的问题:“编码长度”到底用什么编码方案来量? 同一件行李,用体重秤称和用弹簧秤称,读数不一样;同样,模型编码 L(M) 的长度,取决于你选择什么样的编码器。
信息论给出了一个漂亮的通用答案:对于任意一个概率分布 $P(x)$,都存在一种前缀编码,使得单个事件的编码长度恰好等于负对数概率:
有了这个桥梁,MDL 的计算就有了理论保障:你要做的只是定义模型家族上的分布 $P(M)$ 和残差分布 $P(D \mid M)$,剩下的编码长度自然就出来了。但真正落地时还有两个坑:
一是编码方案的选择影响绝对分数。用 32 位浮点存参数,和用最优量化存参数,算出的 L(M) 不同。不过实践中我们通常不需要绝对长度,只要候选模型用同一套编码方案,相对比较就有效。这就像所有行李箱都用同一个秤称,谁轻谁重自然分明。
二是精确最优编码常常算不出来。真实模型结构千奇百怪,L(M) 往往无法精确计算。这时候就需要近似估计——用 $p$ 个参数实际压缩所需的字节数来近似,或用 $\frac{k}{2}\log_2 n$ 这种理论值来顶替。明哥打包也不会精确到克,他靠估重也能做出好决策——MDL 的近似版本在工程上照样能打。
- 事件概率$P(x)$ 是事件 $x$ 在模型下的概率。概率越高,说明模型越能预测它。
- 负对数取 $-\log_2$ 后,概率为 1 的事件编码长度为 0,概率为 0.5 的事件长度为 1 位,概率为 0.25 的为 2 位——遵循“越意外越啰嗦”的直觉。
对比辨析:明哥与邻居们的分歧
模型选择的世界里不止明哥一个聪明人。隔壁老李用 AIC,楼上老王用 BIC,小区门口的大爷用交叉验证。他们和明哥(MDL)的结论有时一致,有时吵得不可开交。这些准则到底是什么关系?
BIC(贝叶斯信息准则) 是 MDL 的“近亲”。对高斯噪声模型做近似后,MDL 的总长度可以写成:
AIC(赤池信息准则) 就不一样了:它的复杂度惩罚是常数 $2k$,不随样本量增长。这意味着样本量大时,AIC 倾向于选择比 MDL/BIC 更复杂的模型——它更担心欠拟合,不太担心过拟合。交叉验证则是另一种思路:不搞编码理论,直接模拟“未来预测”,把数据切几份轮流当考场。它的优点是几乎不依赖模型假设,缺点是计算量大、小样本时切分不稳定。
那什么时候该信谁?如果你能对模型和残差写出合理的概率分布(尤其是高斯噪声场景),MDL/BIC 是省事又稳健的选择,因为它不需要划验证集,还能给出信息论层面的解释。如果你的模型复杂到无法定义编码方案,或者数据形态极度非标准,交叉验证更靠谱。AIC 则适合你明确知道“数据里信号很强、不怕过拟合、更怕漏掉真信号”的场景。明哥的行李箱哲学并不排斥邻居们——他只是提醒你:任何准则本质上都在估计“描述数据的成本”,选哪把尺子要看你对模型的了解有多深。
- 复杂度税$k \ln n$ 中 $k$ 是参数个数,$\ln n$ 是对数样本量——参数越多、样本越多,税越重。这就是 MDL 模型编码项的自然对数版本。
- 拟合度$-2 \ln \hat{L}$ 是负二倍最大对数似然。模型拟合越好,似然越大,这一项越小——对应 MDL 的数据残差编码项。
AI 应用场景
特征选择:金融风控里的“精简行李”
阶段:特征工程与模型选择
解决的问题:银行信贷风控有数百个原始特征,传统做法靠统计显著性一个个筛,费时且容易把噪声当信号。MDL 直接把特征子集当成“行李箱”,用总编码长度打分,自动淘汰那些“占地方却没用”的冗余特征,还能防止在小样本欺诈数据上过拟合。
具体案例:某消金公司做违约预测,样本仅 2 万条但特征有 300 多个。用 MDL 对特征子集打分后,从 300 个特征里选出了 22 个,模型在测试集上的 AUC 提升了 3 个百分点,训练时间缩短为原来的十分之一。关键原因是 MDL 把“特征数量税”和“拟合收益”放进了同一张账单里,自动避开了那些只在训练集上有效的噪声特征。
模型比较:AutoML 里的裁判员
阶段:模型选择与超参数调优
解决的问题:AutoML 平台每天要比较成百上千个候选模型,传统做法给每个模型跑 K 折交叉验证,计算成本高,且小数据集上折间波动大。MDL 提供了一种“免验证集”的打分方式:只要算出每个候选模型的编码总长度,谁短谁胜出,速度比交叉验证快一个数量级。
具体案例:在 Kaggle 式的小型表格赛题中,参赛者常用 MDL 思想快速淘汰明显弱势的模型族(比如先算个线性模型和浅层树的 MDL 分数,差的直接不进入交叉验证环节),把宝贵的调参时间留给真正有潜力的模型。
小样本文本分类:少数据时的定海神针
阶段:小样本学习
解决的问题:舆情分析场景常常只有几百条标注数据,复杂模型(如大模型微调)极易过拟合。MDL 的复杂度税在 $n$ 小时天然起到强正则作用,帮你判断“这么小的数据量,到底养不养得起这个模型”。
具体案例:某政务舆情系统初期只有 800 条标注数据,工程师用 MDL 在“朴素贝叶斯 vs 小BERT”之间做选择,发现小 BERT 的模型编码长度远超它能省下的误差编码,果断先用朴素贝叶斯上线,等标注数据攒到 5000 条再切换——半年内系统性价比最优。
Python 演示
import math # 模拟 12 个带噪声的数据点,x 从 0 到 11DATA = [(0, 0.30), (1, 0.08), (2, 1.34), (3, 1.10), (4, 0.41), (5, 0.40), (6, 0.74), (7, -0.65), (8, -0.56), (9, -1.58), (10, -0.58), (11, -0.86)] def mdl_total(k): """把 x 轴等分为 k 段(分段常数模型),返回 MDL 总编码长度""" n = len(DATA) lo, hi = 0.0, 11.0 means = [0.0] * k counts = [0] * k for x, y in DATA: seg = min(k - 1, int((x - lo) / (hi - lo) * k)) means[seg] += y counts[seg] += 1 for i in range(k): means[i] = means[i] / counts[i] if counts[i] else 0.0 rss = 0.0 for x, y in DATA: seg = min(k - 1, int((x - lo) / (hi - lo) * k)) rss += (y - means[seg]) ** 2 model_bits = k * 1.2 # 每段均值约需 1.2 位 err_bits = 1.5 + 3 * math.log2(1 + rss) # 残差越大,编码越长 return model_bits + err_bits, model_bits, err_bits, rss def feature_score(k, n, rss): """给定特征数 k、样本数 n 和残差平方和 rss,计算 MDL 分数""" return (k / 2) * math.log2(n) + (n / 2) * math.log2(rss / n) if __name__ == "__main__": best_k, best_total = 1, float("inf") print("k 模型编码 误差编码 总长度 RSS") for k in range(1, 13): total, mb, eb, rss = mdl_total(k) print(f"{k:>2} {mb:6.2f} {eb:6.2f} {total:6.2f} {rss:.2f}") if total < best_total: best_total, best_k = total, k print(f"\n最优分段数 k = {best_k},MDL 总长度最小 = {best_total:.2f}") print("这就是数据自己挑中的模型:既不过度简单,也不过度复杂。")
seg = min(k - 1, int((x - lo) / (hi - lo) * k))把每个数据点归入它所属的段,就像把每件行李放进对应的箱子隔层。means[i] = means[i] / counts[i] if counts[i] else 0.0每段取段内均值作为预测值,这是分段常数模型最诚实的“代表性描述”。rss += (y - means[seg]) ** 2累加残差平方和,衡量模型对每个点交代得有多不到位。err_bits = 1.5 + 3 * math.log2(1 + rss)把残差折算成编码位数:残差越大,需要打的补丁越长。model_bits = k * 1.2每增加一段都要多付“编码税”,这是 MDL 对复杂度的天然约束。feature_score(k, n, rss)更通用的 MDL 打分公式,可直接用于特征选择场景:特征数 k 就是箱子层数,rss 就是数据交代成本。
常见误区
误区我以为 MDL 是鼓励大家用最简单的模型,比如能用线性就不用非线性,参数越少越好。所以我每次选模型都直接挑参数最少的那个。
正解MDL 选的是“总编码长度”最短的模型,而不是“模型编码”最短的模型。如果某个复杂模型能把误差编码大幅压缩,省下的位数远多于多交的模型税,MDL 会毫不犹豫选它。就像明哥不是只带最少衣服,而是带“箱子自重 + 补买成本”合计最少的行李。只追求简单会跌入欠拟合的坑。
为何常见:MDL 名字里有“最小描述长度”,“最小”两个字容易让人只盯着模型那一项,忽略了总长度是两项之和。
误区我觉得 MDL 只是个理论概念,实际项目里我又不能真的去写一个数据压缩算法,所以它对我没用。
正解MDL 的编码长度是通过概率模型算出来的理论值,不需要真的实现压缩器。利用 $L(x) = -\log_2 P(x)$,只要给定概率分布就能算出编码长度;工程上更常用 $\frac{k}{2}\log_2 n$ 这类近似公式。这就像明哥估行李箱重量不用真上秤,看一眼衣服件数和厚度心里就有数。
为何常见:把“信息论里的编码”理解成了“实际的 zip 压缩软件”,其实编码长度是一个数学量,不是工程产物。
误区我觉得 MDL 的复杂度惩罚跟 L1/L2 正则化差不多,都是给模型加个惩罚项,没必要单独学。
正解二者有本质区别:L1/L2 的惩罚系数 $\lambda$ 是人手调的、纯经验值;MDL 的惩罚 $\frac{k}{2}\log_2 n$ 是从信息论里推导出来的,有“描述一个参数需要多少位”的严格语义。而且 MDL 的惩罚会随样本量 $n$ 变化——数据越多,模型才越有资格变复杂。这相当于明哥的打包策略会自动根据旅行天数调整带多少衣服,而不是永远同一套规矩。
为何常见:单看公式都是“损失 + 惩罚”,容易被表面形式迷惑,忽略了惩罚项背后的推导逻辑和自适应特性。
误区我听说 BIC 是 MDL 的近似,那我直接用 BIC 不就行了,反正结果一样。
正解BIC 是 MDL 在“高斯噪声 + 最大似然参数 + 大样本渐近”这几个假设下的特例。当样本量小、噪声非高斯、模型高度非线性时,BIC 的近似误差会变大,而 MDL 通过显式设计模型的编码方案能获得更精细的总长度估计。一句话:BIC 是明哥,但 MDL 是带了精确电子秤的明哥——大多数时候结论一致,关键时刻 MDL 更细。
为何常见:教材里常直接写“MDL 等价于 BIC”,省略了前提条件,读者就记住了结论而忘了适用范围。
误区我觉得数据越多噪音越大,越应该用简单模型来防止过拟合,所以样本量翻倍后我把模型反而换简单了。
正解恰好相反。MDL 的复杂度惩罚 $\frac{k}{2}\log_2 n$ 随 $n$ 增大而增大,似乎惩罚变重;但误差编码项的系数 $n/2$ 增长得更快——数据量大了,拟合精度的收益越来越值钱,总账会越来越倾向于“养得起”复杂模型。好比旅行时间从一周拉长到一年,带一个装满四季衣服的大箱子反而成了划算的投资。
为何常见:“数据多会过拟合”是常见的朴素恐惧,其实过拟合的本质是模型相对数据量过于复杂,数据增多时模型的“合理复杂度上限”本就该提升。
面试题
Q1. MDL(最小描述长度)准则选模型的最终标准是?
- A.让模型参数个数最少
- B.让总编码长度最短← 正确答案
- C.让训练误差恰好为零
- D.让测试集准确率最高
答案:B。MDL 的目标是 $L(M) + L(D|M)$ 总编码长度最小。参数最少(A)只盯模型项,训练误差为零(C)只盯误差项,都是只看局部;测试集准确率(D)是评估方式而非 MDL 的选取目标。就像明哥不是看箱子最小或衣服最准,而是看总花费最省。
Q2. MDL 的总编码长度由哪两部分构成?
- A.模型复杂度的编码长度← 正确答案
- B.数据残差的编码长度← 正确答案
- C.梯度更新的迭代次数
- D.学习率的具体取值
答案:AB。MDL 总长度 = L(M)(描述模型本身的编码,复杂度越高越长) + L(D|M)(给定模型后描述误差的编码,残差越大越长)。梯度更新次数和学习率属于优化算法细节,与描述数据的编码长度无关。
Q3. 当模型复杂度从低到高变化时,MDL 总长度的典型变化趋势是?
- A.随着复杂度增加持续下降
- B.呈现先降后升的 U 形← 正确答案
- C.与复杂度大小完全无关
- D.只增不减单调上升
答案:B。一开始模型太简单,误差编码很大,增加复杂度能大幅省误差编码,总长下降;到达某个临界点后,模型编码的增长超过误差编码的省幅,总长转而上升。这个 U 形曲线的最低点就是最优复杂度。对应可视化演示里绿标最靠左的位置。
Q4. 关于 MDL 与贝叶斯推断的关系,下列说法正确的是?
- A.最小化 MDL 近似于最大化后验概率← 正确答案
- B.两者没有任何本质上的联系
- C.MDL 是完全违反贝叶斯原理的
- D.贝叶斯只能用于无监督学习
答案:A。对贝叶斯公式 $P(M|D) \propto P(M)P(D|M)$ 取负对数,正好得到 $L(M) + L(D|M)$,即 MDL 总长度。最小化 MDL 就是在最大化后验概率。MDL 是贝叶斯模型选择的“编码外衣”,两者一脉相承。
Q5. BIC 与 MDL 之间的关系,通常被认为?
- A.BIC 是 MDL 在高斯噪声下的渐近近似← 正确答案
- B.BIC 与 MDL 在数学上完全等价
- C.BIC 是专门反对 MDL 的准则
- D.BIC 只适用于自然语言处理任务
答案:A。在“残差服从高斯分布、参数用最大似然估计、样本量足够大”的假设下,把 MDL 的编码长度展开整理,得到的正是 BIC 公式。但它是近似而非完全等价,小样本或非高斯场景下两者会有偏差。B 选项忽略了近似的前提条件。
Q6. 在 MDL 的误差编码项中,残差大小与编码长度的关系是?
- A.残差越大编码长度越长← 正确答案
- B.残差越大编码长度越短
- C.两者之间完全没有关系
- D.残差只影响模型编码项
答案:A。残差越大,说明模型对数据“交代得越不清楚”,需要更多位数来补充描述这些偏差,所以编码长度越长。这就像旅行中衣服越不合身,需要额外买衣服的花费越高。
Q7. MDL 准则能天然防过拟合的原因包括哪些?
- A.模型复杂度被折算成编码成本← 正确答案
- B.数据残差被限制在编码预算内← 正确答案
- C.它直接禁止使用任何复杂模型
- D.它要求误差项必须严格为负
答案:AB。MDL 把复杂度折算成 L(M),复杂度越高编码税越重,这阻止了为拟合噪声而过度复杂化;同时误差编码只给“有效拟合”发奖励,死记硬背每一个噪声点需要付出巨大的模型编码代价。它不禁止复杂模型(C 错),误差项也不可能为负(D 错)。
Q8. 当样本量 n 显著增大时,MDL 的选模倾向会发生什么变化?
- A.仍然坚持选择最简单的单参数模型
- B.允许选择参数更多但拟合更好的模型← 正确答案
- C.完全忽略数据只按先验选模型
- D.总编码长度必然随 n 单调递减
答案:B。误差编码项含因子 $n/2$,样本增多时拟合精度的收益权重变大;而模型复杂度税的 $\frac{1}{2}\log_2 n$ 增长较慢。两者对比下,MDL 会更愿意为足够多的数据“购买”更多参数。总编码长度不会随 n 单调变化(D 错),因为模型编码和误差编码都在变。
Q9. 下列哪些是 MDL 准则的实际应用场景?
- A.特征选择时衡量特征子集优劣← 正确答案
- B.比较不同结构模型的优劣← 正确答案
- C.直接替代反向传播更新梯度
- D.小样本场景防止过拟合← 正确答案
答案:ABD。MDL 可给特征子集打分(A)、给不同结构的模型算总编码长度做比较(B)、在小样本下通过复杂度税防过拟合(D)。但它只是个“打分准则”,不参与参数更新的梯度计算(C 错)——MDL 负责选模型,优化器负责学参数。
Q10. 关于编码长度与概率的关系,正确说法是?
- A.概率越大编码长度越短← 正确答案
- B.概率越大编码长度越长
- C.概率与编码长度毫无关系
- D.只有等概率时编码才有长度
答案:A。$L(x) = -\log_2 P(x)$,概率越高,负对数越小,编码越短。这符合直觉:越常见的事件描述起来越省力气,越罕见的事件解释起来越费口舌。