假设你是一家快递公司的老板。每个快递员是一颗“神经元”,快递员之间传递包裹的固定路线,是一条条“权重”。公司刚开业时,几个明星员工把熟客的习惯背得滚瓜烂熟——谁家狗会叫、谁周末才收件。可一旦来了新客户,整个公司立刻抓瞎。这就是“过拟合”:太擅长背题,却不会解题。 为了治这个毛病,行业里先有了 Dropout——每天随机让几个快递员休假,迫使每个人都独当一面,公司不再依赖任何人。而 DropConnect 更进一步:员工不休假,而是每天随机关闭一部分快递路线。快递员都在岗,但彼此之间的路时通时断。这样一来,公司没法依赖任何一条固定路线,必须学会更灵活的协作方式。 这篇文章会用“快递公司”这个比喻贯穿始终,从过拟合讲起,带你理解 DropConnect 的原理、数学表达、与 Dropout 的对比、代码实现,以及实际调参心法。读完你会多一件防过拟合的趁手兵器。
对 AI 从业者而言,DropConnect 是正则化武器库中“权重级随机丢弃”的代表思路。理解它,能让你在面对全连接层过拟合时多一种有效手段,也能在面试中展现出对 Dropout 家族演进的深度理解。
目录
可视化演示
展示二分查找在有序数组中的查找过程,通过左右指针和中间值比较逐步缩小搜索范围,时间复杂度O(log n),拖动滑块更改目标值。
本节配有交互动效(进入视口后自动加载,约 3KB)。
二分查找初始状态 左指针lo=0,右指针hi=10,搜索范围覆盖全部元素 中间值mid=(lo+hi)/2,逐步缩小范围 T(n) = O(log n)
1. 问题根源:背题公司为什么不行
快递公司 A 训练时只服务三位老客户。一个月后,A 对老客户的服务误差几乎为零——几点敲门、门锁怎么开、狗叫什么名字,全记住了。可一旦来一位新客户,A 完全不知道该怎么规划路线。这就是模型世界里最经典的病:训练集上成绩优异,测试集上一塌糊涂。我们把这种“背题而不解题”的表现叫作过拟合。
为什么过拟合?因为模型的“记性”太好。深度神经网络的参数量动辄百万千万,每个参数就像公司里一条可调的路况规则,规则越多,越容易把训练数据里的噪声也当作规律背下来。模型复杂度过高,是过拟合的温床。
训练的本质是找一组权重 W,让它在所有训练样本上的平均损失最小。但如果只盯着训练集优化,模型就会把训练集中的特殊细节也学进去,导致测试集上表现变差。所以正则化的思路,就是给“背题”增加阻力,逼模型学更通用的规律。
公司越想压低老客户的扣分,就越会把老客户的怪癖当铁律,新客户一来就翻车。要治这个病,就得让公司“别太依赖任何一个细节”——这正是 Dropout 和 DropConnect 的出发点。
- 权重 W模型所有可调参数,对应快递公司所有的路况规则与员工排班方案。
- 一条样本 (x_i, y_i)一个输入输出对,对应一单“从哪送到哪”的快递订单。
- 损失函数 L衡量模型预测 f(x_i; W) 与真实答案 y_i 的差距,像订单派错的扣分。
- 平均与最小化对所有样本损失取平均,再找让平均损失最小的 W,对应公司想让平均扣分最低。
2. Dropout 奠基:让员工轮流休假
老板发现公司太依赖明星员工小张。只要小张在,所有人都把活推给他;小张一请假,整个片区瘫痪。于是老板定了规矩:每天随机让一部分员工休假。谁都不知道明天谁不在,所以每个人都必须学会别人的活,团队协作变得冗余而稳健。
这个思路落到神经网络里就是 Dropout。训练时,每一层按概率 p 随机保留一部分神经元,其余神经元在本轮“休假”——输出被置为 0,既不向前传信息,也不参与本轮梯度更新。每个训练步,网络实际都在用不同的“子网络”工作。
从集成学习的视角看,Dropout 等于同时训练了大量共享权重的子网络,测试时再把它们近似平均起来。这种随机屏蔽让神经元之间不能形成“共谋”,从而缓解过拟合。Dropout 的掩码是向量,按神经元粒度生效。
“休假机制”很有效,但老板很快发现一个细节问题:休假是按整人算的。哪怕小张在岗,他和某个片区之间的那条固定线路也可能有问题。能不能更精细一点——不休假,只封路?这就引出了 DropConnect。
- 掩码向量 m与神经元数量等长的 0/1 向量,每个元素独立按概率 p 取 1(保留)、以 1-p 取 0(丢弃)。
- 逐元素相乘 ⊙掩码与输入逐位相乘,遇到 0 的位置输入被清零,神经元暂时失活。
- 线性加权 W(m⊙x)+b剩下的神经元照常做加权求和、加偏置,相当于“休假名单”之外的员工继续干活。
- 激活函数 f对线性结果施加非线性变换,得到这一层的最终输出。
3. DropConnect 原理:不休假,只封路
规则再次升级:员工照常上班,但每天早上,老板随机关闭一部分员工之间的协作路线。小张今天在岗,但他和李姐之间的路是断的,只能绕道找王哥。每一条路都可能被临时关闭,任何“黄金路线”都靠不住。这就是 DropConnect 的直觉。
技术上,Dropout 屏蔽的是神经元(激活值),操作对象是一维向量;DropConnect 屏蔽的是权重(连接),操作对象是权重矩阵。对每个权重,独立地以概率 p 保留、以 1-p 丢弃。于是同一颗神经元,可能一部分输入连接被关闭,另一部分还活着。
实现时只需在权重矩阵上逐元素乘一个同样大小的 0/1 掩码矩阵 M,再做正常的矩阵乘法。掩码矩阵的每个元素独立采样,随机粒度从“整颗神经元”细化到了“每一条连接”。这种更细的粒度,让 DropConnect 的正则化强度通常高于 Dropout。
快递公司的每一条路都有独立的“通断开关”,公司再也没法把身家性命押在任何一条固定线路上——这就是 DropConnect 与 Dropout 最本质的分野:一个管人,一个管路。
- 掩码矩阵 M与权重矩阵 W 同尺寸的 0/1 矩阵,每个元素 M_ij 独立决定“第 i 个输入到第 j 个神经元”这条路今天是否开放。
- 逐元素相乘 M ⊙ W把权重矩阵中被选中的位置清零,对应路线被封闭。
- 矩阵乘法 (M⊙W)x用封路后的权重对输入加权求和,只有存活的连接在传递信息。
- 激活输出与普通网络一致,加偏置、过激活函数得到最终输出。
4. 数学表达:写下路段的通断表
每天清晨,老板拿出一张“路段通断表”:表里每一行是发货点,每一列是收货点,格子里的 1 表示今天这条路通,0 表示封路。整张表,就是 DropConnect 里的掩码矩阵 M。
有了通断表,前向传播就变成了“带随机路网的一次演练”。注意,每条样本可以有自己的通断表——不同订单走的路网可以不一样。这让每次前向都处在一个不同的随机子网络里。
完整地把 DropConnect 写进训练目标,就是为每条样本采样一个掩码矩阵 M_i,在带掩码的前向结果上计算损失,再对所有样本求平均。为了进一步约束模型复杂度,通常还会加上权重衰减(L2 正则)项,让权重本身也别太大。
通断表是随机生成的,公司永远不知道明天哪条路封闭,但它知道平均下来只有 p 比例的路是通的。这个“平均视野”正是下一节测试阶段缩放权重的钥匙。
- 每条样本的掩码 M_i不同样本使用独立采样的通断表,增加随机多样性。
- 带掩码的前向先逐元素屏蔽权重,再做矩阵乘法与激活,得到预测。
- 平均损失对 N 条样本的损失取平均,衡量整体预测质量。
- L2 正则项λ 控制惩罚强度,权重平方和大时受罚更重,像限制车辆超载。
5. 训练与预测:训练封路,运营全通
公司平时演练时封掉四成路段,员工已经习惯了在稀疏路网里干活。到了正式运营那天,所有路段突然全通——货流量会成倍增加,反而可能打乱节奏。聪明的做法是:正式运营时,每条路只按平时的“通行比例”控制货量,也就是给每条路打个折扣。
这个道理对应 DropConnect 的测试阶段。训练时,每个权重平均只有 p 比例的时间在起作用;测试时如果不做任何处理,直接把所有连接全开,信号强度会整体偏高,破坏训练时学到的统计特性。
用期望的语言说:掩码矩阵每个元素的期望是 p,所以带掩码权重 M⊙W 的期望是 pW。测试时用期望权重 pW 做前向(等价于训练时把权重除以 p,即“反向缩放”),就能让测试的输出量级与训练时一致。注意,测试阶段绝不能再随机丢弃。
训练时封路,是为了让公司学会不依赖任何一条路;运营时全通但打折,是为了让公司的表现稳定可预期。Dropout 家族在测试阶段也都是同一个心法:训练随机化,测试期望化。
- 期望值 E掩码元素平均为 p,即平均 p 比例的路开放。
- 测试权重 W_test用期望权重代替随机权重,全连接但按 p 打折。
6. 效果对比:整员休假 vs 逐线检修
老板把两种方案摆在桌上:方案 A(Dropout)是随机让整组员工休假,一天可能空掉一整个小组;方案 B(DropConnect)是每条线路独立检修,同一天里几乎不会有两条相邻的黄金路线同时出问题,但全网“意外点”更多、更散。方案 B 的干扰更琐碎,逼公司适应的场景也更丰富。
为什么更琐碎反而正则化更强?看随机性空间就明白:一个有 n 个神经元的层,Dropout 可能产生的掩码有 2^n 种;而一个有 n 个输入、m 个输出的全连接层,连接数是 n×m,DropConnect 的掩码有 2^(n×m) 种。指数级的差距,意味着每个训练步面对的子网络“更不一样”。
因此 DropConnect 通常能提供比 Dropout 更强的正则化效果,在训练数据有限、模型偏大的全连接网络上尤为明显。代价是:更强的随机扰动意味着训练方差更大、收敛更慢,丢弃率设置不当也更容易欠拟合。在卷积层和注意力层上,逐权重掩码的实现与收益则不如全连接层那么直接。
休假是粗颗粒的整顿,封路是细颗粒的检修。DropConnect 用更细的随机性织了一张更大的“防依赖网”,代价是训练时波动更明显。理解了这层权衡,你就知道什么时候该选谁了。
- Dropout 的状态数 2^n每个神经元只有“开/关”两种状态,n 个神经元共 2^n 种组合。
- DropConnect 的状态数 2^(n×m)每条连接独立开/关,共 n×m 条连接,所以是 2 的 n×m 次方。
7. 实现方式:把通断表写成代码
通断表听着复杂,实现起来却只是一行代码:生成一个和“路线清单”一样大的随机 0/1 表,然后和路线清单逐项相乘。早已写好的“按表跑路线”的流程完全不用动。
在 NumPy 里,掩码矩阵就是 np.random.rand(*W.shape) < p 生成的布尔矩阵(转成浮点数后是 0/1)。前向传播时,先让权重乘掩码再做矩阵乘法。工程上常用“反向缩放”:训练时直接把掩码除以 p(或乘以 1/p),这样测试时就无需再乘 p。
反向传播同样要带着掩码:损失对权重的梯度,必须先乘回同一个掩码矩阵,被关闭的连接不参与更新。实现时,把前向用过的掩码存下来,反向时逐元素乘到梯度上。这与 Dropout 的“掩码只作用于激活”形成对称——一个是梯度乘向量掩码,一个是梯度乘矩阵掩码。
一张通断表贯穿前后:前向决定哪些路走货,反向决定哪些路能调整。代码不过十来行,但把“随机封路”这个想法从直觉落成了可训练的工具。
- 误差信号 δ损失对加权输出的梯度,由反向传播从后层传回来。
- 无掩码梯度 xᵀδ普通全连接层的权重梯度,是输入与误差的外积。
- 乘回掩码 M只有今天开放的路段才允许更新,封闭路段的梯度被清零。
8. 实操建议:封多少路,何时封路
封路比例是门手艺。封少了,公司还是能靠几条固定线路混日子,起不到锻炼作用;封太多,员工连正常路线都记不住,快递天天送错。p 太低(丢弃太多)会欠拟合,p 太高(接近 1)又几乎等于没封。
经验上,DropConnect 的保留概率 p 通常取 0.5~0.8。数据量越小、模型越大、过拟合越严重,p 可以越低;反之 p 应该调高。观察训练曲线:如果训练误差都降不下去,说明封得太狠,应提高 p;如果训练误差很低但验证误差高,说明封得不够,应降低 p。
从期望角度看,保留概率 p 决定了每层平均存活的连接比例。实操中,DropConnect 更适合用在参数量巨大的全连接层,卷积与归一化层一般不动;可以与权重衰减、早停等正则手段叠加,但要注意别把多个强随机正则叠过头。近年来 Transformer 类模型更多用 Dropout 族和 LayerNorm,DropConnect 在一些结构化剪枝变体中仍有身影。
回到快递公司:封路的艺术不是把路封得越狠越好,而是让公司在“刚好能干活”的路网里练出应变力。DropConnect 给的是一把更精细的刻度尺,用不用、用多狠,取决于你的数据、模型与耐心。
- L0 范数 ||·||₀统计非零元素个数,也就是还在通行的路段数。
- 期望值 E随机通断表下,存活连接数的平均值是 p 乘以总连接数。
AI 应用场景
CTR 预估中深度全连接层的防过拟合
阶段:模型训练与正则化
解决的问题:推荐/广告场景的 CTR 模型(如 DeepFM、DCN)通常包含巨大的 Embedding 层和若干全连接层。稀疏特征加庞大数据,让全连接层极易把训练数据的偶然模式背下来,导致线上泛化掉点。用 DropConnect 按权重级随机屏蔽全连接层,破坏特征间的“固定共谋”,让模型只能依赖更稳定的信号。这就像快递公司不能依赖任何一条固定路线一样。
具体案例:某推荐团队的 3 层 MLP 深度塔出现明显过拟合(训练 AUC 0.92,验证 AUC 0.86)。把两层全连接的 Dropout 换成 p=0.6 的 DropConnect 后,验证 AUC 提升约 1.5 个百分点,线上点击率周同比上升。
自编码器的重建鲁棒性提升
阶段:无监督特征学习与正则化
解决的问题:自编码器参数量大,容易“死记”训练分布,一旦输入带噪声,重建误差波动很大。在编码器全连接层使用 DropConnect,随机屏蔽部分连接,迫使隐层编码抓住更本质的结构,提高对正常样本的重建稳定性。
具体案例:传感器异常检测项目中,堆叠自编码器在编码层加入 DropConnect(p=0.7)后,正常样本的重建误差分布更集中,异常检测 AUC 从 0.81 提升到 0.87。
小样本调优的三件套之一
阶段:模型调优与正则化策略选择
解决的问题:标注数据只有几千条时,再小的模型也容易过拟合。DropConnect 可以和权重衰减、早停组合使用,作为“第三件工具”从连接粒度给模型加约束,适合“数据少、模型偏大”的典型困境。
具体案例:某 NLP 团队用 3000 条样本微调小模型做意图分类,在分类头上加 DropConnect(p=0.5)后,测试集 F1 提升 2~3 个点,而且对随机种子的敏感度明显下降。
Python 演示
import numpy as np def make_dataset(n=600, noise=0.2): """生成带标签噪声的圆形分类数据集。""" rng = np.random.default_rng(1) X = rng.uniform(-1.5, 1.5, (n, 2)) y = (X[:, 0] ** 2 + X[:, 1] ** 2 > 1.0).astype(int) flip = rng.random(n) < noise y[flip] = 1 - y[flip] return X, y def relu(x): return np.maximum(0.0, x) class SmallNet: """单隐层 MLP,支持 none / dropout / dropconnect 三种模式。""" def __init__(self, n_hid=64, seed=0): rng = np.random.default_rng(seed) self.W1 = rng.normal(0, 0.3, (2, n_hid)) self.b1 = np.zeros(n_hid) self.W2 = rng.normal(0, 0.3, (n_hid, 2)) self.b2 = np.zeros(2) self.mask1 = None self.mask2 = None self.mode = "none" self.h = None def forward(self, X, p=1.0, mode="none"): self.mode = mode self.mask1 = None self.mask2 = None if mode == "dropout": self.mask1 = (np.random.rand(self.b1.size) < p) / p self.h = relu(X @ self.W1 + self.b1) * self.mask1 self.mask2 = (np.random.rand(self.b2.size) < p) / p return (self.h @ self.W2 + self.b2) * self.mask2 if mode == "dropconnect": self.mask1 = (np.random.rand(*self.W1.shape) < p) / p self.h = relu(X @ (self.W1 * self.mask1) + self.b1) self.mask2 = (np.random.rand(*self.W2.shape) < p) / p return self.h @ (self.W2 * self.mask2) + self.b2 self.h = relu(X @ self.W1 + self.b1) return self.h @ self.W2 + self.b2 def backward(self, X, d_out, lr): e2 = d_out if self.mask2 is None else d_out * self.mask2 dh = e2 @ self.W2.T dh[self.h <= 0] = 0.0 dw1 = X.T @ dh db1 = dh.sum(axis=0) if self.mask1 is not None: dw1 = dw1 * self.mask1 if self.mode == "dropout": db1 = (dh * self.mask1).sum(axis=0) dw2 = self.h.T @ e2 db2 = e2.sum(axis=0) self.W1 -= lr * dw1 self.b1 -= lr * db1 self.W2 -= lr * dw2 self.b2 -= lr * db2 def run_experiment(mode, seed=0): """训练并返回测试集准确率。""" X, y = make_dataset() split = np.random.default_rng(seed).permutation(len(X)) tr, te = split[:450], split[450:] model = SmallNet() for epoch in range(300): idx = np.random.default_rng(epoch).permutation(len(tr)) for s in range(0, len(tr), 64): bi = idx[s:s + 64] Xb, yb = X[tr[bi]], y[tr[bi]] out = model.forward(Xb, 0.5, mode) prob = np.exp(out - out.max(axis=1, keepdims=True)) prob /= prob.sum(axis=1, keepdims=True) model.backward(Xb, prob - np.eye(2)[yb], 0.4) pred = model.forward(X[te], 1.0, "none").argmax(axis=1) return (pred == y[te]).mean() if __name__ == "__main__": print("mode test acc") for mode in ["none", "dropout", "dropconnect"]: acc = run_experiment(mode) print("%-11s %.4f" % (mode, acc))
self.mask1 = (np.random.rand(*self.W1.shape) < p) / p一行生成“通断表”:与权重同形状的 0/1 矩阵,再除以 p 实现反向缩放,测试时无需再乘 p。self.h = relu(X @ (self.W1 * self.mask1) + self.b1)封路后的前向:权重先逐元素乘掩码,再做矩阵乘法。dw1 = dw1 * self.mask1被封路段不参与更新,反向传播的梯度同样要乘回掩码。prob /= prob.sum(axis=1, keepdims=True)softmax 归一化,把网络输出变成概率分布。out = model.forward(Xb, 0.5, mode)训练时按 p=0.5 采样随机掩码,每次前向都是不同的子网络。pred = model.forward(X[te], 1.0, "none")测试时 p=1.0 且不随机,用完整权重做预测,保证结果可复现。print("%-11s %.4f" % (mode, acc))对比三种模式的测试准确率,观察正则化带来的泛化收益。
常见误区
误区初学者看到 DropConnect 和 Dropout 都“随机置零”、都能防过拟合,就以为两者本质一样,只是叫法不同。
正解二者作用对象完全不同。Dropout 屏蔽的是神经元(激活值),掩码是向量,按神经元粒度操作;DropConnect 屏蔽的是权重(连接),掩码是矩阵,按连接粒度操作。相当于一个管“休假”,一个管“封路”。作用对象不同,导致随机性空间、梯度形式、适用场景都不一样。
为何常见:名字只差一个词,公式长得也像,很容易只看到“随机丢东西”的共性,而忽略“丢的是人还是路”这个关键差异。
误区有人觉得训练时靠随机丢连接才有效,测试时也应该继续随机丢弃,否则效果会变差。
正解测试时必须用完整网络,并把权重按期望缩放(乘 p,或训练时反向除以 p)。随机丢弃只是训练期的正则化手段,测试期引入随机会让预测不稳定、不可复现。就像正式运营时不能真的把路封了,而要全通但打折。
为何常见:把“训练技巧”误当成“推理必需”,忽略了正则化的作用边界只在训练阶段。
误区既然过拟合严重,那就把路封得越狠越好,p 越小正则化越强,效果自然越好。
正解正则化强不等于效果好。p 过低会让模型欠拟合、收敛慢、训练方差大。经验上 p 取 0.5~0.8,要根据训练曲线调节:如果训练误差都降不下去,就该提高 p;只有训练误差低、验证误差高时,才应该降低 p。
为何常见:线性思维“越多越好”,忽视了正则化过强会压制模型的表达能力,导致连训练集都学不好。
误区有人认为随机性只存在于前向传播,反向传播时梯度照常计算,不用理会掩码。
正解反向传播时,损失对权重的梯度必须逐元素乘回当时的掩码矩阵,被关闭的连接梯度为 0,不参与权重更新。否则“封路”就形同虚设,被关闭的权重仍然会被调整。DropConnect 的本质是对权重矩阵做逐元素操作,梯度自然也要逐元素屏蔽。
为何常见:初学者常只盯着前向公式,忽略 DropConnect 的掩码作用在权重上,而权重更新恰恰发生在反向传播。
面试题
Q1. DropConnect 在训练时随机丢弃的对象是什么?
- A.神经元的激活输出值
- B.神经网络中的连接权重← 正确答案
- C.训练数据集里的样本
- D.梯度下降的学习速率
答案:B。DropConnect 逐元素屏蔽权重矩阵,属于“封路”;A 描述的是 Dropout,C 是数据层面的采样,D 是优化器超参。抓住“丢的是连接”这一核心即可。
Q2. Dropout 随机丢弃的对象是什么?
- A.掩码矩阵里的单个元素
- B.神经元的激活输出数值← 正确答案
- C.数据集的整条样本对
- D.损失函数的具体数值
答案:B。Dropout 按神经元粒度屏蔽激活值,对应“员工休假”;A 描述的是 DropConnect 对权重矩阵的操作。二者最直观的差别就是作用对象。
Q3. DropConnect 的掩码矩阵 M 中每个元素服从什么分布?
- A.标准高斯分布 N(0,1)
- B.伯努利分布 Bernoulli(p)← 正确答案
- C.均匀分布 U(0,1)
- D.泊松分布 Poisson(λ)
答案:B。M_ij 以概率 p 取 1、以 1-p 取 0,是典型的伯努利采样,只有 0/1 才能表达“通/断”语义。高斯、均匀、泊松都无法直接生成 0/1 通断表。
Q4. 训练时 DropConnect 的保留概率为 p,测试时为保证输出量级一致,应怎样处理权重?
- A.测试时把权重乘以 p← 正确答案
- B.测试时把权重乘以 1-p
- C.测试时把权重设为 0
- D.测试时把权重除以 p
答案:A。掩码的期望是 p,测试时用期望权重 pW 做前向,才能与训练时的信号量级对齐;若工程上训练时已反向除以 p,则测试保持原权重。B 和 C 会直接毁掉模型。
Q5. 某全连接层有 n 个输入神经元、m 个输出神经元,Dropout 与 DropConnect 的可能掩码数量分别是?
- A.2^n 与 2^m
- B.2^n 与 2^(n×m)← 正确答案
- C.2^(n×m) 与 2^n
- D.2^(n+m) 与 2^(n×m)
答案:B。Dropout 按神经元开关,共 n 个开关,状态数 2^n;DropConnect 按连接开关,共 n×m 条连接,状态数 2^(n×m)。状态数差异体现了随机粒度的差距。
Q6. 下面的前向公式中,哪一个是 DropConnect 的正确表达(M 为矩阵掩码,m 为向量掩码,⊙ 为逐元素乘)?
- A.y=f(W(m⊙x)+b)
- B.y=f((M⊙W)x+b)← 正确答案
- C.y=f((M⊙m)x+b)
- D.y=f(Wx+b)
答案:B。DropConnect 把掩码乘在权重 W 上,是矩阵粒度操作,选 B;A 是 Dropout 的形式,掩码乘在输入/激活上;C 掩码相乘语义不明;D 是普通前向。
Q7. 关于 DropConnect 的说法,正确的有哪些?
- A.随机粒度比 Dropout 更细← 正确答案
- B.测试时必须使用随机掩码
- C.反向传播梯度需乘掩码矩阵← 正确答案
- D.保留概率 p 越小正则化越强← 正确答案
答案:ACD。A 正确,粒度从神经元细化到连接;B 错误,测试期用完整网络;C 正确,被封权重的梯度必须清零;D 正确,p 小丢弃多、扰动大,正则化更强,但“更强”不等于“更好”,过强会欠拟合。
Q8. 关于 DropConnect 训练与测试阶段的正确做法,下列正确的有?
- A.训练时每次前向重新采样掩码← 正确答案
- B.测试时保留全部连接参与预测← 正确答案
- C.测试时用期望权重 pW 做前向← 正确答案
- D.测试时继续随机丢弃一半连接
答案:ABC。训练期每次前向重新采样掩码,让每个训练步面对不同子网络;测试期全连接并按期望缩放权重 pW,保证稳定可复现;D 是“测试期随机化”的典型错误。
Q9. 关于 Dropout 与 DropConnect 的异同,正确的有哪些?
- A.两者都用于缓解过拟合← 正确答案
- B.两者都属于随机正则化← 正确答案
- C.Dropout 屏蔽神经元输出← 正确答案
- D.两者必须同时使用才有效
答案:ABC。A 和 B 是共同点,都属于随机正则化手段;C 是 Dropout 的操作粒度;D 错误,二者可独立使用,实践中通常只选其一,叠加使用并不必需。
Q10. 过拟合最典型的表现是什么?
- A.训练误差低但测试误差高← 正确答案
- B.训练误差与测试误差都低
- C.训练误差高但测试误差低
- D.训练误差与测试误差都高
答案:A。过拟合就是“背题不解题”:训练集上表现优异,新数据上泛化差。B 是理想状态,C 一般不会出现,D 属于欠拟合或学习失败。