news 2026/5/1 10:03:18

一只菜鸟学机器学习的日记:拟合问题与经典解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一只菜鸟学机器学习的日记:拟合问题与经典解决方案

让我们用偏差 - 方差分解公式引入这个话题

$$

\mathbf{E}(f;D)=bias^2

(x)+var(x)+\epsilon^2$$

其中,

$$

\begin{split}

学习能力:&bias^2(x) =(\overline f(x)-y)^2 \

数据充分性:&var(x)=E_D[(f(x;D)-\overline f(x))^2] \

学习难度:&\epsilon 2=E_D[(y_D-y)2]

\end{split}

$$

若线性拟合,只能单独看一个特征,然后遍历以拟合,即大偏差小方差,泛化误差大,欠拟合。

若复杂度过高的神经网络(如未正则化),对训练数据的微小噪声波动极敏感,小偏差大方差,泛化误差大,过拟合。

若复杂度适中的神经网络,中等偏差中等方差,泛化误差小,最佳了。

得出结论:偏差是模型没学会,方差是模型学太杂

影响偏差与方差的三大因素

1. 学习算法能力(模型复杂度)

如果模型欠拟合(偏差大),就换更复杂的模型;如果过拟合(方差大),就换更简单的模型(或对复杂模型做正则化)。

2. 训练数据量

对偏差无影响,对方差影响大

如果模型过拟合(方差大),优先增加训练数据。

3. 学习任务本身的难度(任务复杂度)

如果任务简单但方差大,就控制模型复杂度或增加数据;如果任务复杂导致偏差大,就提升模型复杂度

如何判断模型是 “欠拟合(高偏差)” 还是 “过拟合(高方差)

欠拟合(高偏差):训练误差大,测试误差也大(模型没学会核心规律,对训练和测试数据都判断不准)。应该换更复杂的模型、增加特征维数、增加 epoch_num 大小。

过拟合(高方差):训练误差小,测试误差大(模型过于重视训练数据的噪声,对测试数据判断不准)。应该增加训练数据、正则化(如使用L1正则化、L2正则化即权重衰减、归一化、Dropout等)、剪枝降复杂度、降低特征维度。

先说权重衰减($L_2$正则化):

背景 :阶数过低(欠拟合)或阶数过高(过拟合,并且导致模型复杂度显著提升)都不行

$Solution$:$L_2$ 正则化 $(\space Weight\space Decay\space)$

就是惩罚增长过大的权重向量,通过函数与零的距离来衡量函数的复杂度,因为函数$f(\mathbf{x})=0$ 永远是最简单的

为保证权重向量比较小,将其范数 $| \mathbf{w} |^2$ 作为惩罚项加入 $\mathbf{L}$ 中,将训练目标从 最小化训练标签上的预测损失 变为 最小化预测损失和惩罚项之和 。我们就可以得到:

首先原有损失为:

$$

L(\mathbf{w}, b) = \frac{1}{n}\sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y{(i)}\right)2.

$$

引入超参数 $\lambda$ 权衡 $| \mathbf{w} |^2$。即

$$

L_{new}(\mathbf{w}, b) =L(\mathbf{w}, b) + \frac{\lambda}{2} |\mathbf{w}|^2,

$$

这里取 $\frac{\lambda}{2}$ 是为了计算导数时的美观简单。

再说Bishop

我们从扰动的稳健性说起

经典泛化理论认为,为了缩小训练和测试性能之间的差距,应该以简单的模型为目标。简单性的另一个角度是平滑性,即函数不应该对其输入的微小变化敏感。即如果我们想样本添加一些随机噪声应该是对模型基本无影响。

在深层网络中注入噪声,会强制网络学习更加稳定、鲁棒的输入- 输出关系,使得微小的输入变化不会导致输出的剧烈跳变,从而增强映射的平滑性。

而 在输入数据中添加噪声 就等价于 Tikhonov正则化 。

Tikhonov正则化 实际上就是 L2正则化 或 权重衰减

但是 Tikhonov正则化 存在一个问题:只是在输入层添加噪声。

然而对于一个多层的深层网络,如果只在输入层添加噪声,深层网络可能会忽略这些噪声,从而仍然过拟合。

而如果在每一层都添加噪声,即 在前向传播过程中,计算每一内部层的同时注入噪声,那么整个网络都被正则化,迫使每一层都要对噪声具有鲁棒性,这才是我们想要的。

如何注入噪声呢?我们将高斯噪声添加到线性模型。每次迭代,我们对$\mathbf{x}$ :

$$

\begin{split}

取分布\space\epsilon &\sim \mathcal{N}(0,\sigma^2) \

使\space \mathbf{x}' &= \mathbf{x} + \epsilon\

预期\space E[\mathbf{x}'] &= \mathbf{x}

\end{split}

$$

这就是Bishop方法。

现在可以说说Dropout 了

对于每个中间激活值,

$$

\begin{split}\begin{aligned}

h' =

\begin{cases}

0 & \text{ 概率为 } p \

\frac{h}{1-p} & \text{ 其他情况}

\end{cases}

\end{aligned}\end{split}

$$

那么 $h$ 是什么?

$$

x\xrightarrow{W_1,\space b_1}z_1\xrightarrow{\sigma}h_1\xrightarrow{Dropout}h'_1\xrightarrow{W_2,\space b_2}z_2\xrightarrow{\sigma}h_2\xrightarrow{Dropout}h'_2\rightarrow\ldots

$$

就是中间特征值。所以,我们用掩码去掉的,其实就是某层的整个某节点。

我们不难证明,$E[h'] = h$ (很简单的高中数学概率知识)

无 $Dropout$ 的神经网络:

$$\begin{equation}\begin{split}

\mathcal{z}_i^{(l+1)} &=\mathbf{w}_i{(l+1)}\mathbf{y}l+b_i^{(l+1)}\

\mathcal{y}_i{(l+1)}&=f(\mathcal{z}_i)

\end{split}\end{equation}$$

有 $Dropout$ 的神经网络(这是早期,原始论文,所以未进行缩放来维持期望):

$$\begin{equation}\begin{split}

\mathcal{r}_j^{(l)}&\sim \mathbf{Bernoulli}(p) \

\mathbf{\hat y}^{(l)} &=\mathbf{r}^{(l)} \cdot \mathbf{y}^{(l)} \

\mathcal{z}_i^{(l+1)} &=\mathbf{w}_i^{(l+1)}\mathbf{\hat y}l+b_i\

\mathcal{y}_i{(l+1)}&=f(\mathcal{z}_i)

\end{split}\end{equation}$$

$\mathbf{Bernoulli(p) 就是对概率 p 的 0 - 1 分布}$

代码实现:

mask = (torch.rand(X.shape) > dropout).float()

return mask * X / (1.0 - dropout)

对于使用Dropout的net构建:

net = nn.Sequential(nn.Flatten(),

nn.Linear(784, 256),

nn.ReLU(),

nn.Dropout(dropout1),

nn.Linear(256, 256),

nn.ReLU(),

nn.Dropout(dropout2),

nn.Linear(256, 10))

拓展:更好理解Dropout(通过原论文理解)

类比一下,在自然界中,在中大型动物中,一般是有性繁殖,有性繁殖是指后代的基因从父母两方各继承一半。但是从直观上看,似乎无性繁殖更加合理,因为无性繁殖可以保留大段大段的优秀基因。而有性繁殖则将基因随机拆了又拆,破坏了大段基因的联合适应性。

但是自然选择中毕竟没有选择无性繁殖,而选择了有性繁殖,须知物竞天择,适者生存。我们可做一个假设,那就是基因的力量在于混合的能力而非单个基因的能力。

神经网络过拟合与每一层都依赖于前一层激活值相关,称这种情况为“共适应性”。 作者认为,暂退法会破坏共适应性,就像有性生殖会破坏共适应的基因一样。

$Dropout$ 也能达到同样的效果,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。

Dropping out 20% of the input units and 50% of the hidden units was often found to be optimal.

Dropout缺点:将训练时间延长至2~3倍,因为Each training case effectively tries to train a different random architecture

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 7:10:23

像素艺术创作新纪元:用Pyxel编辑器开启你的数字艺术之旅

在数字艺术的浩瀚星空中,像素艺术以其独特的复古魅力和创作自由度,正吸引着越来越多的创作者。今天,我要向你介绍一款专为像素艺术打造的神奇工具——Pyxel编辑器,它将带你进入一个充满无限可能的创作世界。✨ 【免费下载链接】py…

作者头像 李华
网站建设 2026/4/23 14:09:26

使用Vue播放M3U8视频流的方法

使用Vue播放M3U8视频流的方法 安装依赖 需要安装video.js和videojs-contrib-hls插件,用于解析和播放M3U8格式的视频流。 npm install video.js videojs-contrib-hls引入并初始化Video.js 在Vue组件中引入Video.js及相关样式,初始化播放器并配置HLS支持。…

作者头像 李华
网站建设 2026/5/1 5:48:05

Hugging Face官方出免费AI Agent教程!

2024年被称为是AI Agent的元年,经过了一年的酝酿,各类AI Agent的产品方案层出不穷,比如Dify、扣子等等。在未来,AI Agent无疑也会是AI的一块核心领域。🤗Hugging Face说,现在就是学AI Agent的最好时机&…

作者头像 李华
网站建设 2026/5/1 6:57:58

数智时代,为什么算力成了“新石油”?

当“新石油”这个词第一次被用来形容算力时,很多人并没有真正理解它的分量。但到了 2024—2025 年,这个比喻正在被反复验证。从大模型竞赛、AIGC 应用爆发,到企业全面推进数智化转型,算力,已经从 IT 资源升级为决定产业…

作者头像 李华