从模型评估、梯度难题到科学初始化:一步步解析深度学习的训练问题

news2026/3/31 12:31:40
偏差 方差要理解模型的泛化能力我们首先要量化它的“泛化误差”即模型在未知数据上的表现。然而泛化误差并非一个单一的问题它源于三种不同性质的错误模型固有的近似能力不足、对训练数据的过度敏感、模型数据本身的不可约噪声。偏差 - 方差分解公式规定data(,)Pdata​(x,y)数据生成分布D从dataPdata​中独立同分布采样得到的训练数据集(;)f(x;D)由训练集 D 学得的模型 f 对 x 的预测输出。‾()f​(x)∼data⊗[(;)]ED∼Pdata⊗n​​[f(x;D)]对所有可能训练集的期望∼data⊗[⋅]ED∼Pdata⊗n​​[⋅]对训练集采样的期望有∣[((;)−)2]Bias2(())Var(())2Ey∣x​ED​[(f(x;D)−y)2]Bias2(f(x))Var(f(x))σϵ2​其中Bias2(())Bias2(f(x))偏差反映模型拟合能力。设真实函数为 ℎ()[∣]h(x)E[y∣x]条件期望则偏差应定义为 (‾()−ℎ())2(f​(x)−h(x))2Var(())Var(f(x))方差反映不同数据集表现波动情况即泛化能力:[((;)−‾())2]:ED​[(f(x;D)−f​(x))2]2σϵ2​噪声反映学习难度:[(−ℎ())2]:E[(y−h(x))2]这里正好对应两种模型线性拟合 vs. 神经网络若线性拟合模型容量低并且假设空间简单即大偏差小方差泛化误差大欠拟合。若复杂度过高的神经网络如未正则化会学到训练数据中的噪声导致在训练数据上表现很好小偏差但在未见过的数据上表现波动很大大方差泛化误差大过拟合。若复杂度适中的神经网络中等偏差中等方差泛化误差小最佳了。得出结论偏差大欠拟合意味着模型能力不足未能捕捉数据中的真实模式方差大过拟合意味着模型过于复杂对训练数据中的噪声和随机波动过度敏感。影响偏差与方差的三大因素1. 学习算法能力模型复杂度如果模型欠拟合偏差大就换更复杂的模型如果过拟合方差大就换更简单的模型或对复杂模型做正则化。2. 训练数据量可间接降低偏差对方差影响大如果模型过拟合方差大优先增加训练数据。3. 学习任务本身的难度任务复杂度如果任务简单但方差大就控制模型复杂度或增加数据如果任务复杂导致偏差大就提升模型复杂度处理模型高偏差、高方差的一些方法欠拟合高偏差应该换更复杂的模型、增加特征维数、仔细判断训练误差是否收敛到最低。过拟合高方差应该增加训练数据、正则化如使用L1正则化、L2正则化即权重衰减、Dropout等、批量归一化、剪枝降复杂度、降低特征维度。偏差-方差权衡偏差与方差通常是对立的提高模型复杂度可以减少偏差但可能增加方差反之降低模型复杂度可以减少方差但偏差可能会升高。这种权衡关系被称为偏差-方差权衡Bias-Variance Tradeoff在此我们应该拓展一下经典理论认为模型复杂度如参数数量增加泛化误差会先因偏差降低而下降后因方差增大而上升形成单一的U型曲线。双重下降则揭示了在插值阈值模型刚好能完美拟合训练数据后随着复杂度进一步增加误差会再次下降形成“下降-上升-下降”的波浪形曲线。在过参数化区域模型并非必然过拟合到更差的程度优化过程会引导其找到一个泛化良好的解。在过参数化体制下模型好像是先“记忆”拟合噪声后通过漫长的优化过程“逐渐获得”泛化规则。其实真正的原因是隐式正则化使得优化算法如SGD倾向于找到最小范数解或平坦极小值这告诉我们如果观察到增加模型参数后性能先变差不要立即止步。这可能只是处于插值阈值附近的危险区。继续增加规模并配合足够的训练性能可能会突破并变得更好。理解了模型的误差问题由偏差、方差间的权衡决定我们大体了解如何选择模型的复杂度。但是当我们着手训练一个复杂深层模型尤其是现代网络层数不断加深时我们应该考虑训练本身是否能够正常进行否则结果上的“偏差、方差”都成空谈。这就引出了深度学习中的梯度问题。梯度问题我们可以认为ℎ()(ℎ(−1))h(l)fl​(h(l−1))因此∘−1∘…∘2∘1()ofL​∘fL−1​∘…∘f2​∘f1​(x)那么不难得到∂()∂ℎ(−1)ℎ()⏟()def⋅…⋅∂ℎ()ℎ(1)⏟(1)def∂()ℎ()⏟()def.∂W(l)​oM(L)def∂h(L−1)​h(L)​​⋅…⋅M(l1)def∂h(l)​h(l1)​​v(l)def∂W(l)​h(l)​​.也因此梯度 ∂()∂W(l)​o 是 (−)(L−l) 个雅可比矩阵 (),…,(1)M(L),…,M(l1) 与一个二维张量 ()v(l) 的乘积。在深层网络中连续矩阵乘法可能导致结果数值过大爆炸或过小消失。梯度消失如果使用Sigmoid函数就要考虑 Sigmoid 函数在其饱和区梯度逼近于零的情况。因此当输入很大或很小时梯度消失。为此我们最好用ReLU函数替代之。如果每一次的 梯度都减小一点那么多层传播后梯度值会非常小。如果权重的初始值太小向前传播过程中每层线性变换的输出方差大幅衰减进而使激活函数的输入落入该函数的危险区如 Sigmoid 的饱和区、ReLU的斩杀区。梯度爆炸特指反向传播过程中梯度值随着层级增加而不断变大乃至指数型增加。很可能因为 ℎweight 的初始值太大层数过多等等参数化的对称性若同一层内的的所有权重均初始化为相同值那么该层所有的神经元在反向传播中都会获得完全一样的梯度永远学习相同的特征极大降低模型容量。那么如何为我们模型的训练提供一个良好、稳健的起点呢这就是神经网络参数初始化的showtime了。良好的初始化方式能够前向传播中保持传递强度在反向传播中保证梯度流动从而打破上文的参数化的对称性等等问题。三种常见的初始化Xavier初始化目标保持各层激活值方差稳定确保前向传播的信号强度和反向传播的梯度强度在初始化时不衰减也不爆炸。Xavier 初始化因为提出的时间较早它主要针对像 ℎtanh 这样在原点附近近似线性且对称的饱和激活函数。因此对于后来广泛使用的 ReLU 及其变种它的效果并非最优。这里的3个函数都有饱和区也就是梯度消失的那段区域太大或太小时函数导数趋于 00 。这个理论的基本原则就是在前向传播中保持各层激活值的方差一致在反向传播中保持各层梯度的方差一致。 也就是说初始化阶段的激活值和梯度的期望均为 00。Xavier初始化是为 ℎtanh 这类在零点附近近似线性且对称的激活函数设计的对于 Sigmoid虽然 Xavier初始化可以用于 Sigmoid 但不是最优的。实际应用中对 Sigmoid 可以使用 Xavier初始化但可能需要调整缩放因子。用数学语言表述就是要激活函数在原点泰勒展开的一阶近似当然 x 也在 00 附近 ()f(x) 满足()−(−)即(0)0′(0)1​f(x)−f(−x)即f(0)0f′(0)1​再换句话由观察我们希望任意层的输入信号方差应等于其输出信号方差((−1))≈(())Var(a(l−1))≈Var(a(l))观察第 l 层的线性变换∑1()⋅(−1)zil​j1∑nin​​wij(l)​⋅aj(l−1)​这里先基本假设一下权重 ()wij(l)​ 独立同分布均值为 00方差 2σw2​激活值 (−1)aj(l−1)​ 独立同分布均值为 00方差 2σa2​权重和激活值相互独立先看看期望[()][∑1()(−1)][()]∑1[()]⋅[(−1)][()]0E[zi(l)​]E[zi(l)​]E[zi(l)​]​E[j1∑nin​​wij(l)​aj(l−1)​]j1∑nin​​E[wij(l)​]⋅E[aj(l−1)​]0​再看看方差先着眼于前向传播的过程(())[(())2]−([()])2[(())2][(∑1in()(−1))2][∑1in∑1in()()(−1)(−1)]…∑1[(())2]⋅[((−1))2] ()⋅2⋅2Var(zi(l)​)​E[(zi(l)​)2]−(E[zi(l)​])2E[(zi(l)​)2]E​(j1∑nin​​wij(l)​aj(l−1)​)2​E[j1∑nin​​k1∑nin​​wij(l)​wik(l)​aj(l−1)​ak(l−1)​]…j1∑nin​​E[(wij(l)​)2]⋅E[(aj(l−1)​)2] (jk)nin​⋅σw2​⋅σa2​​上文公式推导省略号中的内容当 ≠jk式子为 00当 jk式子为 ∑1[(())2]⋅[((1))2]∑j1nin​​E[(wij(l)​)2]⋅E[(aj(l1)​)2]因此求和中仅 jk 的项有贡献。为了保证激活方差不变即(())((−1))⋅2⋅22⋅21Var(zi(l)​)nin​⋅σ2⋅σa2​nin​⋅σw2​​Var(aj(l−1)​)σa2​1​接着推导一下反向传播反向传播的梯度传播公式如下∂∂(−1)∑1()⋅∂∂()∂aj(l−1)​∂L​i1∑nout​​wij(l)​⋅∂zi(l)​∂L​那么假设 ∂∂()∂zi(l)​∂L​ 独立同分布方差为 2σg2​ 可以得到梯度方差的表示(∂∂(−1))∑1[(())2]⋅[(∂∂())2]⋅2⋅2Var(∂aj(l−1)​∂L​)​i1∑nout​​E[(wij(l)​)2]⋅E​(∂zi(l)​∂L​)2​nout​⋅σw2​⋅σg2​​我们希望反向传播前后梯度方差不变。即希望(∂∂(−1))(∂∂())Var(∂aj(l−1)​∂L​)Var(∂zi(l)​∂L​)那么就可以得到反向传播保持方差不变时应满足的条件⋅2⋅22⋅21nout​⋅σw2​⋅σg2​nout​⋅σw2​​σg2​1​因此这种一下这两个条件取调和平均⋅21⋅2122nin​⋅σw2​nout​⋅σw2​σw2​​11nin​nout​2​​即()2Var(w)nin​nout​2​这样标准差就出来了2σnin​nout​2​​因此初始权值应符合的正态分布∼(0,2)W∼N(0,σ2)或者转化为均匀分布形式即∼[−6,6]w∼U[−nin​nout​6​​,nin​nout​6​​]然而Xavier初始化提出的时间有点早ReLU激活函数还没有得到广泛应用。对于ReLU函数Xavier初始化力不从心ReLU的函数输出非对称∈[0,∞)y∈[0,∞)负的输入反向输出时梯度为 00会将 50%50% 的神经元输出清零从而前向传播()≈12()Var(a)≈21​Var(y)反向传播梯度方差同样减半而且对于深层神经网络而言线性激活函数价值不大因为它需要非线性激活函数来构建复杂的非线性神经网络。面对这些问题He初始化Kaiming初始化被提了出来。Kaiming 初始化与 Xavier 初始化类似Kaiming 初始化的目的也是尽量让每一层输出层的方差与输入层的方差一致以缓解深层网络中的梯度消失、梯度爆炸问题最后使极深整流网络如30层能从零开始直接训练并收敛。对于向前传播Var()Var(∑1in⋅)input⋅Var()⋅Var()Var(yi​)​Var(j1∑nin​​wij​⋅xj​)ninput​⋅Var(wij​)⋅Var(xj​)​对yi​加入ReLU函数得到ai​那么我们就希望Var()≈Var(),∀,Var(ai​)≈Var(xj​),∀i,j这里的初始化假设与 Xavier 相同。因为 wij​ 与 xj​ 独立且均值为 00有Var()Var()Var()22Var(wij​xj​)Var(wij​)Var(xj​)σw2​σx2​则 yi​ 的方差为Var()Var(∑1)∑1Var()∑12222⋅Var()⋅Var()Var(yi​)​Var(j1∑nin​​wij​xj​)j1∑nin​​Var(wij​xj​)j1∑nin​​σw2​σx2​nin​σw2​σx2​nin​⋅Var(w)⋅Var(x)​我们假设 yi​ 的分布是关于 0 对称的那么 yi​ 取正数和取负数的概率各占一半。再看 2yi2​。因为平方把正负都变成了正数所以 2yi2​ 的期望值 [2]E[yi2​] 可以拆成两半一半来自 0yi​0一半来自 0yi​0。由于对称这两半的贡献是一模一样的。而 ReLU 函数 max⁡(0,)ai​max(0,yi​) 只取 yi​ 的正值部分负数部分直接归零。所以 2ai2​ 其实就是 2yi2​ 在 0yi​0 时的值其他情况为 0。因此2ai2​ 的期望 [2]E[ai2​] 正好就等于 2yi2​ 期望的一半即[2]12[2]E[ai2​]21​E[yi2​]而 []0E[yi​]0有 [2]Var()E[yi2​]Var(yi​)故[2]12Var()E[ai2​]21​Var(yi​)当 ([])2(E[ai​])2 相较于 [2]E[ai2​] 可以忽略时可近似为Var()≈12Var()Var(ai​)≈21​Var(yi​)我们希望 Var()Var()Var(ai​)Var(x)当然至少得是近似的结合可得12⋅⋅()⋅()()()221​⋅nin​⋅Var(w)⋅Var(x)Var(w)​Var(x)nin​2​​以此类推可以得到反向传播时()2Var(w)nout​2​不过一般情况我们使用前向传播优先即∼(0,2)W∼N(0,nin​2​​)我们为什么不常见类比Xavier做调和平均呢其实是可以的见 PyTorch 中的modefan_avg因为ReLU的单向激活特性使得前向传播和反向传播的方差传播规律不同对前向传播ReLU 杀死一半的神经元方差减半对反向传播相当于简单的伯努利掩码方差依旧减半。问题在于正向反向的网格结构可能是不同的且正向反向的衰减机制有席位差别。pytorch实现1234layer nn.Linear(64, 128) init.kaiming_normal_(layer.weight, a0, modefan_in, nonlinearityrelu) # a负斜率Leaky ReLU 的情况默认为0 # Leaky ReLU : 负x轴设置为 ax 而不是 0 通常 a 0.01正交初始化上面两种方法都是对每个权重分别进行随机独立采样但是由于采样的随机性仍不可避免出现各种梯度问题。对于一个 L 层的等宽线性网络可以很容易得到这个等式()(−1)(−2)⋯(2)(1)yW(L)W(L−1)W(L−2)⋯W(2)W(1)x那么我们可以直接将 ()W(i) 初始化为正交矩阵。根据线代知识我们对这个初始权重矩阵的构建分为两步用均值 00 , 方差 11 的高斯分布构建一个矩阵奇异值分解这个矩阵得到两个正交矩阵选择其中一个作为权重矩阵根据正交矩阵的性质这个线性网络就会在前向、反向传播中都有一定的范数保持性。如果这个网络是非线性的只需在矩阵前面乘上一个系数 ρ这个系数与激活函数有关如对于 ReLU 应该 2ρ2​ 对于 ℎtanh 应该 ≈1.0ρ≈1.0这是为了补偿激活函数对信号幅度的压缩扩张效应。更加现代的初始化方法Fixup可使在不使用批量归一化的情况下完成深度残差网络训练。通过缩放残差网络分支的权重来控制梯度规模避免深层网络的梯度爆炸方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2460370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…