资讯动态

AI训练机制底层原理:从数学基础到梯度下降与反向传播

发布时间:2026/10/19 5:01:54 来源:尧图企业网站定制
很多人都会有这个疑问AI 模型到底是怎么“学到东西”的我见过不少开发者用框架调接口的时候挺顺手可一旦换到新业务、新数据就发现模型怎么调都不收敛或者效果波动非常大——这时候回头补底层原理通常是最值得做的事。这篇内容我想借“AI底层数学原理与训练机制”这个主题把一条完整的链路讲清楚数学基础、损失函数、梯度下降、反向传播、优化器、训练闭环以及训练中常见的数值陷阱。不追求把公式堆满而是告诉你每个环节解决什么问题、为什么要这样设计、实操时哪里容易翻车。适合刚入门深度学习或者已经跑过几个项目但想真正理解训练过程的开发者。1. 四大数学基石把“智能”变成可计算问题1.1 线性代数AI的“容器”与“传动轴”神经网络处理的所有数据本质上都是张量。一张彩色图片不是“图”而是三个二维矩阵叠在一起一句文本不是“句子”而是一串整数索引再经过嵌入层变成一个矩阵。神经网络的计算过程基本上就是张量不断地做乘法、加法、变形。所以线性代数是 AI 的容器。矩阵乘法有多重要全连接层做的就是y Wx b。卷积层做的事情扫一遍图像每一个位置做局部区域的加权求和——本质上也是一堆小矩阵乘法。Transformer 里面的自注意力机制核心就是QK^T / sqrt(d)再乘V全是矩阵运算。可以说没有矩阵乘法就没有现代深度学习。为什么 GPU 特别适合跑 AI因为 GPU 的核心优势就在于并行做矩阵乘法。一个全连接层如果手动用 CPU 跑几千次循环慢得无法忍受GPU 可以把矩阵运算拆成成千上万个小任务同时执行。理解这个底层逻辑之后你在调 batch size、调显存占用的时候心里就有数了更大的矩阵、更大的批次意味着更高并行度但同时也意味着显存吃紧。还有个容易被忽略的线性代数概念是“线性变换”。如果把一个网络层理解成“对输入空间做一次旋转和缩放”那么多个层叠加起来就是在做一系列复杂的几何变换。这也是为什么层数越深模型理论上能表达的函数越复杂。可如果中间没有激活函数那多层线性变换叠起来还是线性变换网络再深也等价于一层——这就是激活函数必须存在的原因。1.2 概率论与信息论AI应对不确定性的语言AI 面对的几乎所有任务都带有不确定性。图像分类不是“这张图是什么”而是“这张图属于每个类别的概率分别是多少”。机器翻译不是“这段英文对应哪段中文”而是“在数以亿计的候选句子中哪一句概率最高”。概率论为这种不确定性提供了统一的语言。分类模型最后一层几乎都用 Softmax就是因为它能把一组实数映射成和为 1 的概率分布。Softmax 有一个容易被忽略的性质指数运算会把数值差异放大。如果某个类别得分特别高它的概率就会被推到接近 1但反过来如果所有得分都差不多输出就会接近均匀分布。你在实际训练中如果发现某个类别怎么都学不动往往就是因为 Softmax 的输入logits被某个特征维度带偏了模型过于自信地输出错误类别。信息论里最关键的概念是熵它描述的是一个概率分布的不确定程度。交叉熵就是用来衡量“模型预测的概率分布”和“真实分布”之间距离的指标。分类任务为什么几乎都用交叉熵损失而不是用均方误差因为交叉熵配合 Softmax在“预测错误且置信度高”的时候会产生很大的梯度模型能更快地自我纠正而均方误差在这种场景下梯度容易被压得很小学习速度明显更慢。这个选择背后有清晰的数学逻辑不是靠经验随口定的。从概率角度看训练过程其实就是在做最大似然估计我们调整参数让模型给真实标签分配的概率尽可能大。把整个训练集上的所有样本的对数概率加起来取平均再取个负号就成了我们要最小化的损失函数。理解了这一点你会明白为什么数据质量和标签一致性那么重要——损失函数默认假设训练样本相互独立且来自同一分布如果某些样本标签是错的模型就是在朝错误方向被拉扯。1.3 微积分训练过程的方向盘如果说线性代数负责“描述状态”概率论负责“描述不确定性”那微积分负责的就是“描述变化”。训练模型的本质是反复回答一个问题参数往哪个方向调一点损失会变小导数就是变化率的度量。对一元函数来说导数告诉你函数值随着自变量增大的变化速度对多元函数来说偏导数告诉你某个方向单独变化时函数的变化速度。把所有偏导数拼成一个向量就是梯度。梯度指向的是函数值上升最快的方向那我们要最小化损失就往梯度的反方向走——这就是“梯度下降”这个名字的由来。很多人第一次听说反向传播就觉得很玄其实它依赖的数学工具就是微积分里的链式法则。前面一层参数的变化会通过中间层的激活值一步步影响到最后的损失。反向传播做的事情是从输出层往回走逐层把损失对每一层参数的偏导数计算出来。内存里需要存的是前向传播过程中算出来的中间结果所以模型越深、batch 越大显存占用越高因为要攒下这些值供反向求导用。理解链式法则还有一个实际的用途。为什么深层网络的梯度容易消失因为在链式法则里梯度是逐层相乘的。如果每一层的导数都小于 1几十层乘下来梯度就会趋近于零这就是 ReLU 这类激活函数相对 Sigmoid 更好的原因之一——它在正区间的导数恒为 1不会在正向传播路径上反复压缩梯度。1.4 最优化理论AI学习的目标把训练过程抽象一下就是给定损失函数找到一组参数让损失尽可能小。听起来像初中就学过的“求函数最小值”但实际难点在于参数规模太大、函数太复杂。先算一道算术题一个 1000 万参数的模型损失函数是关于这些参数的多元函数你要找它的极小值。理论上可以令所有偏导数为零去解方程组但这是非线性方程组根本没有解析解只能迭代逼近。这个“迭代逼近”就是训练的本质。最优化领域里的“凸优化”性质好因为凸函数只有一个全局最小值点怎么走都不怕困在局部。但神经网络的损失函数极度非凸存在着大量局部极小值、鞍点、平坦区域。鞍点尤其麻烦在该点上梯度为零但它不是极小值模型走到附近会以为“到底了”实际还能继续下降。这也是为什么纯 SGD 在复杂模型上经常走得磕磕绊绊后来才有动量、Adam 这类更聪明的优化器——它们一定程度上能帮模型冲出平坦区和鞍点。另外最优化里有个概念叫“迭代步长”对应到训练就是学习率。它太小收敛慢训一天可能还没到好区域太大参数在最优值附近震荡甚至发散。后面我会专门展开讲学习率的调法。2. 损失函数与梯度下降训练的两个引擎2.1 损失函数模型好坏的“裁判”训练过程必须有明确的评分标准这个标准就是损失函数。损失函数输出一个标量告诉模型“你这次错得有多离谱”。不同任务要选不同的损失函数选错等于裁判的方向错了模型再努力也白费。回归任务常用均方误差MSE也就是预测值和真实值差的平方的平均值。平方的存在意味着大误差会被放大模型会更关注那些偏差很大的样本。但反过来如果数据里有极端异常值MSE 会被它们牵着走这时平均绝对误差MAE更鲁棒。实际工程里我见过很多做预测的团队数据没洗干净就直接上 MSE结果模型被几个脏数据点带偏损失曲线上看起来下降正常预测结果却一塌糊涂。分类任务几乎都用交叉熵。前面提过它的梯度特性好但还有一个原因它和 Softmax 天然配套。交叉熵的梯度形式十分简洁计算稳定如果你把 Softmax 和 MSE 拼起来用容易同时遇到梯度消失和收敛慢两个问题属于典型的“能跑但很难用”。在一些特殊场景比如目标检测单个损失函数不够用得把分类损失、边框回归损失按权重相加这就引入了“权重怎么设”的问题。这类权重的设置没有标准答案跟你数据分布强相关。我的做法是先让所有项权重相等跑一轮看哪部分 loss 降得慢再针对性调权重——比一上来就凭感觉设要靠谱得多。2.2 梯度下降的直觉与数学梯度下降的直觉可以用一个例子来说明你在山腰上起了大雾看不见山下只能用脚感受当前位置的坡度然后朝最陡的下坡方向迈一步。每迈一步重新感受坡度再迈一步。学习率就是迈的步子大小。这一连串动作迭代几十万次如果路况正常你最终会到山谷。这个“感受坡度”的过程就是计算梯度“朝反方向迈步”就是参数更新。标准梯度下降要算整个数据集上的梯度。如果数据集有 100 万条每更新一次参数就要完整过一遍所有样本速度完全不可接受。于是有了随机梯度下降SGD每次只随机挑一个样本来算梯度。但单样本的梯度噪声太大路径会很抖折中的方案是 mini-batch 梯度下降每次选一小批样本算平均梯度。这个“小批”的大小就是我们常说的 batch size。batch size 选多大合适我在实际项目中Vision 任务常用 32 或 64语言模型因为序列长度长batch 经常更小。小 batch 的梯度噪声更大某种程度上反而有正则化效果不容易陷进尖锐极小值大 batch 梯度更稳但需要配套调大学习率否则收敛速度会很慢。这背后涉及一个经验法则当你把 batch size 翻倍时学习率通常也应该相应放大否则模型每步走得太平滑却太短总步数不够用。还有个细节轮次epoch是“整个训练集过一遍”。一个 epoch 里的更新次数 总样本数 / batch size。比如 16000 条数据、batch size 64一个 epoch 就有 250 次更新。训练多少个 epoch 不是拍脑袋定的要结合验证集曲线来判断模型是否还在真正变好。2.3 反向传播错怎么传递回参数前向传播是从输入到输出一条直线把数据算过去反向传播则是从损失出发把所有“责任”按链式法则分摊到每个参数上。这个名字看起来复杂实际代码实现却只是一个“从后往前”的梯度计算循环。用一个简化例子来理解。假设网络只有一层y Wx b损失是L (y - t)^2。前向时你算出了 y对比真实目标 t算出 L。反向时第一步算∂L/∂y 2(y-t)这就是“输出层的误差信号”。第二步用链式法则把这个信号传给 W∂L/∂W ∂L/∂y * ∂y/∂W 2(y-t) * x。x 在前向时是已知的误差信号也是已知的乘法一算W 的梯度就出来了。多层网络的道理完全一样只是中间传输的信号要经过更多层。深度框架比如 PyTorch 或 TensorFlow自动帮我们完成了所有这些求导。但如果你不理解反向传播遇到“梯度为 NaN”“某层参数完全不更新”这类问题会非常被动。我排查过不少这类问题最后定位到的原因五花八门有的是计算图上某个操作导致梯度截断有的是损失函数里某个分支把梯度流断掉了还有的是某一层的输入尺度过大导致梯度爆炸。有反向传播的基础概念至少你能判断问题是出在前向的数值还是反传的梯度路径。在实践中梯度剪裁gradient clipping是常见技术原理很简单如果算出来的梯度范数超过阈值就缩放到阈值范围。这是防止梯度爆炸最直接的手段之一尤其在训练 Transformer 和 RNN 时基本是标配。3. 一次完整训练的实操链路3.1 从数据划分到训练闭环训练一个模型最怕的不是模型不够好而是你根本不知道它好不好。所以第一步永远是数据划分训练集、验证集、测试集。训练集让模型学验证集用来观察训练效果并决定是否调整超参测试集只留到最终评估那天。如果验证集和测试集划分不合理你得到的所有结论都可能失真。数据划分的比例没有绝对标准我常用 80% 训练、10% 验证、10% 测试但如果数据量极其稀少比如总共几千条那就要考虑交叉验证。还有一个特别容易忽略的问题数据泄露。比如你在数据预处理时用了整个数据集的统计量做归一化验证集的信息就间接进入了训练过程验证指标会虚高。正确做法是只用训练集算出均值和方差保存下来再对验证集和测试集应用同一组数值。这种错误普通 API 调用不会提示只会让模型上线后表现明显下滑。归一化不是可选项。数值范围跨度过大的特征会让损失面变得狭长梯度下降走起来会来回震荡。把所有特征压到零均值和单位方差附近损失面会更接近“圆形”优化更顺畅。图像任务里归一化到[-1,1]或者[0,1]都是常见做法。文本任务虽然不需要对 token 归一化但 embedding 层的初始化标准差也要控制得当。数据顺序也值得讲究。如果你的数据按类别排好序一个 batch 里全是同一类模型会学得很别扭。所以每个 epoch 开始前都做一次随机打乱shuffle这是保证训练稳定的低成本操作。3.2 前向传播与损失计算的具体过程完整跑一个训练步骤流程是这样取一个 batch 的输入数据经过各层网络算出一个输出用输出算损失然后反向传播得到每个参数的梯度再用优化器按梯度更新参数。这个顺序不能乱。实际感受一下数值流。假设一个二分类问题输入是二维向量网络就一层权重 W 是[[0.5, -0.2]]偏置 b 是 0.1。一条输入[1.2, 0.8]前向算出 logits 0.5*1.2 (-0.2)*0.8 0.1 0.54。经过 Sigmoid 变成概率 0.63。如果真实标签是 1二分类交叉熵损失就是-ln(0.63) ≈ 0.46。反向传播时损失对 logits 的梯度有一个非常漂亮的化简结论∂L/∂logits p - y也就是预测概率减真实标签。这里是0.63 - 1 -0.37负梯度告诉我们要让 logits 变大。于是 W 沿反方向更新下次输出的概率会更接近 1。整个链路清晰、闭环。这个例子演算下来你会明白为什么很多框架代码里写loss.backward()之前必须把梯度清零因为如果不清零PyTorch 默认会把梯度累加。累计梯度在某些场景是特性比如小 batch 模拟大 batch但大多数情况是坑——上一次迭代的梯度残留会让这次更新方向混乱训练曲线看起来就像抽风一样。前向计算中还有一个实际工程点中间结果的内存占用。前面提到反向传播需要前向时缓存中间激活值。所以同样一个模型如果你的 batch size 设得太大导致 OOM显存溢出常见办法不是换省钱机器而是调小 batch size、打开梯度累积、或者用混合精度训练。混合精度就是把部分计算从 FP32 降到 FP16显存占用直接减半但要注意某些算子对精度敏感需要走一点点调试流程不是无脑打开就行。3.3 优化器选择与常见参数说完梯度再谈“怎么用梯度更新参数”。最朴素的 SGD 就是w w - lr * grad。它简洁但容易卡在鞍点而且收敛速度对学习率极其敏感。动量Momentum的思路如果梯度一直指向同一方向说明这个方向可信就把速度累加起来如果方向来回变动量项会平滑掉噪声。它让更新在光滑方向上加速、在震荡方向上刹车。有一段时间我很喜欢用带动量的 SGD调好参数后验证集表现通常很稳缺点是学习率要仔细配初期试错成本高。Adam 是目前工程上的默认选择。它同时借鉴了动量和“自适应学习率”为每个参数单独调整步长还内置了偏差修正启动阶段不会因为初始梯度小而被压死。Adam 的默认学习率经常直接用 3e-4 或 1e-4配合 Transformer 系列模型是很多人反复试出来的稳定参考值。Adam 也不是万能。它有个特点后期可能出现“泛化能力略逊于精心调好的 SGDMomentum”的现象尤其在视觉分类任务上。我个人的处理方式是一开始用 Adam 快速探索合适的网络结构和数据策略确定方案后再切换成 SGDMomentum 做最终训练配合适当的学习率退火让模型收敛到更平滑的极小值。这个“先 Adam 探索、再 SGD 精修”的工作流帮我省过不少时间。权值衰减weight decay是另一个容易混淆的概念。L2 正则化是在损失函数里加所有参数的平方和相当于限制参数不要太大而 AdamW 把权值衰减从梯度里分离出来直接在参数更新时按比例缩小参数。实践下来AdamW 配合 Transformer 类模型是更加稳定的组合这也是现在主流框架默认选择它的原因。3.4 训练监控与模型保存训练不是把代码丢进 GPU 就万事大吉你必须实时观察训练状态。最少要盯两个东西训练损失以及验证集上的指标。训练损失下降说明模型在拟合训练数据验证指标决定模型是否真的学到可泛化的知识。二者关系一旦失衡就涉及后面要讲的过拟合或欠拟合。损失曲线也能提供大量信息。正常情况是平滑下降、越来越缓和如果损失曲线呈现锯齿状剧烈震荡大概率是学习率偏大或 batch size 偏小如果曲线长时间平着不走可能陷入局部极值、特征没做归一化、或者数据里有大量错标签。一定要养成把每个训练运行的曲线保存下来的习惯没有曲线你后面的所有调参都像蒙着眼走路。模型保存也有讲究。我的经验是每个 epoch 结束后在验证集上评估一次只要比历史最佳有提升就保存一份 checkpoint而不是硬等到训练完再存最后一次。这样即使最终一轮发生了过拟合你手里仍有之前那个更好的模型。Early stopping 就是结合验证指标在“不再提升”时提前终止省时间也降低过拟合风险。保存最佳模型和开发集驱动并行会让整个训练闭环更敏捷。4. 训练中常见的数值问题与排查方法4.1 梯度消失与梯度爆炸如果你看到 loss 一开始就变成 NaN或者训练几十轮后突然数值爆炸十有八九是梯度爆炸。原因是深层网络中梯度逐层相乘只要某一层的梯度范数偏大就会在反向传播中被层层放大最终冲爆数值范围。典型场景是网络太深、初始化尺度不对、或者学习率过大。梯度消失则是完全相反的问题深层网络的梯度趋近于零前几层参数几乎不更新模型表达能力形同虚设。早期使用 Sigmoid 的深层网络特别容易出现这种情况因为 Sigmoid 导数最大只有 0.25多层相乘后梯度必然消失。这也是为什么现代网络普遍用 ReLU 族激活函数——它在正区间的导数是 1不会进一步压缩梯度。排查顺序建议从这几步走先看输入数据是否有 NaN 或异常大值再看学习率是否过大然后检查每一层的输出标准差是否爆炸正常情况下经过初始化后每层方差应维持在 1 附近最后看损失函数的设计是否合理。有一回我定位一个损失不断跳变的模型最后原因是有几个样本的标签值填成了 999MSE 一算梯度直接爆掉——这种属于数据问题但从流程角度它和梯度爆炸的表现完全一样。缓解手段很多最常用的是梯度剪裁、换合适的初始化、加归一化层、调小学习率。归一化层BatchNorm、LayerNorm的价值不只是加速收敛它把每层输入拉到可控范围相当于是从源头降低深层网络训练不稳定的概率。如果一个模型怎么调都发飘我第一件事就是检查有没有加归一化层。4.2 过拟合与欠拟合的判定判断过拟合不是靠感觉而是靠训练损失和验证损失的关系。训练损失持续下降、验证损失在某个点后开始回升这就是过拟合的典型曲线形态——模型开始把训练数据里的细节甚至噪声背下来了却没有变成可泛化的规律。欠拟合反过来训练损失和验证损失都还在很高的位置下不去说明模型容量不够或者训练不充分。处理过拟合的主流方向有三个增加数据、限制模型复杂度、引入正则化。增加数据不一定非要重新收集数据增强旋转、裁剪、加噪声、文本回译在很多任务上能大幅扩展有效样本。限制模型复杂度可以从减少层数或通道数入手但有时候降得太狠反而欠拟合需要权衡。正则化手段里Dropout 是经验上很有效的选择它的原理是训练时随机丢弃部分神经元迫使网络学到更冗余、更鲁棒的特征L2 则直接约束参数范数让权重不要过大。欠拟合就反过来模型太浅或太小那就加层加宽度训练轮数不够就加轮数优化器不给力就换 Adam 或调大学习率。实话说大多数工程场景下咱们碰到的更多是“验证集差但训练集也差”的欠拟合而不是训练集很好但验证集崩溃的过拟合——尤其在数据量足够的场景。数据量不够时才特别要小心过拟合。4.3 超参数调优的工程经验超参数是“训练前设定好、不由梯度更新决定”的参数学习率、batch size、网络层数、隐藏维度、Dropout 比例、权重衰减系数。对新手来说超参调优最怕的就是毫无章法地乱试。我自己走过弯路之后现在习惯采用这样的流程先固定网络结构和 batch size用一组“安全默认超参”Adam、默认学习率、默认权重衰减跑通一轮接着只调学习率找到模型能稳定下降的量级再动 batch size并配套调整学习率最后才调结构和正则化。一次只动一个变量否则你根本分不清效果变化是哪个因素带来的。学习率可以在小范围上做粗扫描比如{1e-2, 3e-3, 1e-3, 3e-4, 1e-4}。理想的学习率是训练前期 loss 能稳定下降而且下降幅度足够快如果 loss 震荡甚至变大就是过高了。更精细的做法是用“学习率预热”warmup最开始几百步用很小的学习率逐步升到目标值再正常训练。它在 Transformer 训练中是标配能有效规避初始阶段梯度过大带来的不稳定。官方没有为每个任务定制好超参你需要建立自己的“经验地图”。我习惯在开始一组实验前先列一个表格记录每组实验的学习率、batch size、层数、归一化方案、最终验证指标。一段时间后回头翻这张表你很容易发现规律——比如“数据量大时大 batch 效果更好”“序列任务中 LayerNorm 必不可少”。训练模型本质上是一个实验科学好的记录习惯带来的长期收益比单次调参成功更值钱。5. 问题速查表与排错实战5.1 常见训练问题速查表下面这张表是我在实际训练中经常对照的排查手册。遇到问题先按表里从上到下的顺序检查能节省大量时间。现象可能原因常用对策loss 完全不下降学习率过低特征未归一化标签噪声过大检查数据分布调大学习率清洗标签loss 很快变成 NaN学习率过高梯度爆炸输入含 NaN调小学习率梯度剪裁检查数据管道训练 loss 降但验证 loss 回升过拟合加 Dropout加权重衰减扩数据训练和验证 loss 都偏高欠拟合模型容量不足加深加宽网络增加训练轮数换优化器验证集指标来回跳动学习率过大batch 太小调低学习率增大 batch某层参数始终不更新梯度消失该层未参与计算图换 ReLU 族激活检查代码分支直接 OOMbatch size 过大序列过长调小 batch梯度累积混合精度不同次训练结果差异巨大随机种子未固定数据打乱不一致固定随机种子统一预处理流程这张表不能完全覆盖所有情况但覆盖了我在大多数项目中见过的 80% 训练事故。遇到没见过的怪问题先放宽心态把数值流从前到后理一遍再针对性看某一层激活值的分布定位效率通常比盲目调参高得多。5.2 我自己踩过的一个坑batch size 翻倍后精度反降做完项目后我开始固定超参把 batch size 从 32 调到 64结果验证精度不升反降当时第一反应是模型结构有问题。排查了很久才发现问题出在“学习率没跟着调整”上。大 batch 的梯度更平滑同样的学习率下参数更新次数减半模型实际走的总路程不够收敛不到位应该把学习率按比例调大。这里插一句其实标准经验法则和实际效果之间有细微差距——直接翻倍学习率也不总是最好需要再微调。那次之后我就把所有实验都做成“batch 和学习率联动调整”的习惯。类似的坑还有在验证集上看到效果变好就立刻停调结果测试效果崩了。这是因为验证集和测试集分布本身有差异你在验证集上调太多次验证集信息也间接进入了决策过程等同于“过拟合到验证集”。后来我都会留一部分数据完全不参与调参过程只用来做最终验证。5.3 模型训练里最有价值的习惯建立可复现实验记录在所有技巧里如果要我挑一个最值得养成的习惯就是完整的实验记录。很多入门项目一开始只是随便跑跑后来发现问题复现不了连当初用了什么超参都不知道。现在我的心法是把每一次训练实验的固定信息完整记下来包括数据版本、代码提交号、超参配置、随机种子、训练轮数和验证指标再附上损失曲线截图。这比任何模型调参技巧都重要——它让你的失败变得有意义同一个错误不会犯第二次。还有一个小技巧训练之前先在极少量的数据比如几十条样本上跑过一次确保模型能把它“背下来”——能过拟合少量数据说明代码逻辑基本没问题训练链路是通的。如果连几十条都拟合不了代码肯定有 bug这时不要浪费时间在大量数据上调参。这个“先小规模冒烟、再大规模训练”的流程帮我拦下了大量低级错误。6. 结尾个人实操中的几点体会写了这么多最后就说说实操中我个人的感受。训练模型这件事看起来是在调代码、调参数实质上是在跟数学打交道。损失函数就像指挥棒梯度下降和反向传播就是执行动作本身。数学直觉强的人遇到问题会先想“我的数据在损失面上长什么样”“梯度的尺度和方向正常吗”而不是盲目试参数。作为普通开发者不一定要把最优化理论和概率论的推导背得很熟但至少要知道每个你调过的参数背后都对应一种数学行为。学习率是步长batch size 是梯度估计的噪声程度权重衰减是参数空间里的约束Dropout 是对网络结构的随机扰动。你把它们当成可操作的“数学旋钮”而不是“魔法参数”调参才谈得上效率。如果读完这篇你想动手巩固一下我建议从一个小项目开始用最基本的 numpy 实现一个两层神经网络手动完成前向、反向和梯度下降更新然后在某个简单二分类数据集上把它训练起来。这个练习做完再回去看深度学习框架的文档你会明显感觉很多配置项不再抽象。后面如果还想延展可以再补概率图模型、变分推断这些方向它们本质上都是同一套数学体系的延伸。哪天你把自己的模型从坏到好调通了回头再看损失曲线你会清楚地感受到这不是玄学是一步步可以由数学解释的优化过程。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑