训练和测试的区别(五)

机器学习中的训练与测试:理解E(in)与E(out)
本文探讨了机器学习中训练和测试的区别,核心问题是能否确保E(in)≈E(out)以及如何找到最小的E(in)。文章分析了假设函数集的大小M对这两个问题的影响,并引入霍夫丁不等式来处理无限大的M。通过讨论不同维度下的成长函数,揭示了在有限样本下找到有效假设函数的挑战,为后续的机器学习理论奠定了基础。

一、

下面我们讲的是:为什么需要机器学习?

上节课中,我们讲了机器学习的大致的训练过程是这样的:

1.从样本出发,把样本传给机器。

2.机器从一群的假设函数中找到一个最好的h使得E(in)(h)最小,这样的话,由于如果假设函数集合较小的话,我们认为E(in)(h)≈E(out)(h),也就是说

此时E(out)(h)也是最小的

      那么有一个问题是,既然我们想找到一个E(in)(h)最小的假设函数,干脆我们直接让机器记忆所有的样本集合算了,这样的话假设函数的E(in)(h)一定是0,但是这不是我们想要的,我们其实目的是为了让E(out)(h)最小,但是由于我们不知道E(out)(h)最小,所以我们只能用E(in)(h)来代替,我们要让机器找出来的E(in)(h)最小的那个假设函数g在E(out)(h)也要近似最小,这就需要机器学习了。

此时,我们可以把机器学习的核心总结为两个问题:

1.我们是否能确认E(in)≈E(out)

2.我们怎么找到最小的E(in)

那么我们来看一下我们的假设函数集的数目M和以上两个问题的关系:

如果M很小的话,我们第一个问题可以大的概率保证,但是第二个问题,M很小的话,我们的算法选择假设函数范围就变小,找到一个很小的E(in)(h)的可能性就很低

如果M很大的话,我们的第二个问题就有大的几率保证,M很大,选择的空间越多,找到E(in)(h)很小的几率就会很大,但是对于第一个问题就不行了,M很大,那么

       根据,我们知道此事发生坏事情(也就是算法找到的假设函数的E(in)和E(out)差别很大)的几率就会很大

这也就是说我们要找到一个合适的M。

但是如果M是无限大怎么办呢?

二、把无限大的M专为有限

我们首先来看一下有限的情况下霍夫丁不等式的推导过程:也就是这个不等式

<think> 嗯,用户再次聚焦在BN训练测试阶段的区别上,看来ta对归一化技术的实现细节很感兴趣。之前已经详细解释了LNBN的位置差异,现在用户明确要求对比训练测试阶段的BN行为,且提供了5条站内引用作为补充材料。 用户可能正在学习深度学习优化技术,或是遇到了实际训练中的BN相关bug。从ta连续追问的位置问题阶段差异来看,应该是位严谨的技术学习者,需要特别注意公式表述的准确性。 引用[1][2][5]都强调了BN两阶段的核心差异:训练时用batch统计量+更新全局统计量,测试时用固定统计量。引用[3]的代码示例尤其重要,需要突出.eval()模式如何冻结参数。用户提供的材料里有个关键矛盾点:引用[4]说BN可以移除dropout,但实际现代网络常同时使用,这点需要辨证说明。 技术要点要拆解清楚: 1)训练阶段的动态特性:每个batch实时计算$\mu_B,\sigma_B$,同时更新EMA 2)测试阶段的静态特性:直接加载训练最终收敛的$\mu_{pop},\sigma_{pop}$ 3)反向传播时gamma/beta的优化独立于统计量 4)小batch size问题本质是统计量噪声大 特别注意那个EMA公式的推导,要用$$格式完整呈现:$$\mu_{pop}^{(k)} = \alpha \mu_B + (1-\alpha)\mu_{pop}^{(k-1)}$$ 指数衰减系数通常取0.9-0.99,这样用户能理解为什么测试统计量更稳定。 代码示例部分保留引用[3]的PyTorch接口但补充注释,强调.train()/.eval()的上下文管理器用法。最后的问题设计要延续BN的实践困境:统计量偏移问题EMA衰减率调整都是工程师常踩的坑。 </think> 以下是批量归一化(BN)在训练测试阶段的详细区别及原理分析: --- ### 一、核心区别总结 | **阶段** | **统计量来源** | **梯度传播** | **运行模式** | **数据依赖** | |----------|----------------------|--------------|--------------|--------------------| | **训练** | 当前 mini-batch 计算 | 更新参数 | 动态 | 依赖 batch 内数据 | | **测试** | 全局固定统计量 | 无反向传播 | 静态 | 独立于单样本输入 | --- ### 二、训练阶段工作机制 1. **统计量计算** 对当前 batch 的每个特征通道独立计算: $$ \begin{align*} \mu_B &= \frac{1}{m}\sum_{i=1}^m x_i \\ \sigma_B^2 &= \frac{1}{m}\sum_{i=1}^m (x_i - \mu_B)^2 \end{align*} $$ ($m$ 为 batch size,$x_i$ 为单个样本在通道上的值) 2. **归一化与缩放** $$ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} \quad \rightarrow \quad y_i = \gamma \hat{x}_i + \beta $$ * $\gamma$, $\beta$:可学习参数,恢复特征表达能力 * $\epsilon$:防止除零的小常数(通常 $10^{-5}$) 3. **更新全局统计量** 使用指数移动平均(EMA)累积全局均值方差: $$ \begin{align*} \mu_{pop}^{(k)} &= \alpha \mu_B + (1-\alpha)\mu_{pop}^{(k-1)} \\ \sigma_{pop}^{2(k)} &= \alpha \sigma_B^2 + (1-\alpha)\sigma_{pop}^{2(k-1)} \end{align*} $$ * $\alpha$:动量系数(通常 0.9)[^2][^3] --- ### 三、测试阶段工作机制 1. **固定统计量** 直接使用训练阶段累积的全局统计量: $$ \hat{x}_{test} = \frac{x_{test} - \mu_{pop}}{\sqrt{\sigma_{pop}^2 + \epsilon}} $$ 2. **无参数更新** - 冻结 $\gamma$, $\beta$ 参数 - 停止 EMA 更新(`.eval()` 模式)[^3] ```python bn_layer.eval() # PyTorch 切换到测试模式 ``` 3. **单样本处理能力** 因使用预存 $\mu_{pop}$ $\sigma_{pop}$,可处理任意 batch size(包括单样本)[^2] --- ### 四、关键差异图解 ```mermaid graph LR A[训练阶段] --> B[动态计算 μ_B/σ_B] B --> C[更新全局 μ_pop/σ_pop] C --> D[更新 γ/β 参数] E[测试阶段] --> F[加载固定 μ_pop/σ_pop] F --> G[应用 γ/β 不更新] ``` --- ### 、设计原理深度解析 1. **训练阶段动态性** - **适应数据分布变化**:允许模型逐步调整归一化统计量 - **正则化效应**:batch 内样本差异引入噪声,提升泛化性[^4] 2. **测试阶段稳定性** - **解耦 batch 依赖**:避免单样本预测时统计量失效 - **一致性输出**:确保相同输入在不同 batch 中输出一致 3. **EMA 的数学意义** $\mu_{pop}$ 本质是 $\mu_B$ 的**无偏估计**: $$ \mathbb{E}[\mu_{pop}] = \mathbb{E}[\mu_B] $$ 当迭代次数 $k \to \infty$ 时逼近全数据集统计量[^5] --- ### 六、实践注意事项 1. **Batch Size 敏感性** - 过小 batch(如<8)导致 $\mu_B/\sigma_B$ 估计偏差 → 全局统计量失真 - **解决方案**:使用 **Batch Renormalization** 或 **Group Normalization**[^5] 2. **训练-测试分布对齐** 若测试数据分布偏离训练数据,$\mu_{pop}$ 失效 → 需**在线自适应**(如推理时微调) 3. **框架实现差异** ```python # PyTorch 训练模式(默认) bn_layer.train() # 计算当前 batch 统计量 + 更新全局值 # PyTorch 测试模式 bn_layer.eval() # 锁定全局统计量 + 停止 EMA ``` --- > **示例场景**: > 训练时 batch size=32,测试时单样本输入: > - **训练**:用 32 张图计算当前通道均值 > - **测试**:直接调用训练最终收敛的 $\mu_{pop}$ 值 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值