本节摘要:同一张网络,训练工艺不同,成品能差出几个档次。本节按"定标尺、定步子、拉缰绳"三步展开:损失函数给学习定方向,回归用均方误差、分类用交叉熵;优化器决定每步走多远,从批量、随机、小批量三种梯度下降,一路演化到动量、Adagrad、RMSprop 与 Adam,再配学习率调度;正则化专治过拟合,L1 与 L2 加惩罚、Dropout 随机丢弃、批量归一化稳住分布、早停及时收手。最后把三件套串成一条完整流水线,并给出常见故障的诊断方法。
炼钢先要有检验标准,训练先要有损失函数。它量化预测与真实的差距——也叫成本函数或目标函数——损失越大说明错得越离谱,训练的全部目标就是把它压下去。别小看这把尺:评分标准变了,模型的学习方向就整个变掉,3.1 节的反向传播算的就是损失对参数的梯度,尺子歪一寸,梯度指的方向就偏一丈。
| 损失函数 | 适用任务 | 一句话脾气 |
|---|---|---|
| 均方误差 MSE | 回归 | 误差平方后平均,大偏差罚得更狠 |
| 均方根误差 RMSE | 回归 | 开个根号,量纲回到与目标一致,好解释 |
| 平均绝对误差 MAE | 回归 | 绝对值平均,对异常值不敏感,罚得平缓 |
| 二元交叉熵 | 二分类 | 衡量预测概率与 0 或 1 标签的偏差 |
| 多类别交叉熵 | 多分类 | 衡量预测分布与真实类别的偏差 |
回归任务三把尺里,均方误差最常用:把每个样本的误差平方后取平均,误差翻倍、惩罚翻四倍,专治离谱大偏差。代价是对异常值过于敏感——房价数据里混进一栋别墅,平方惩罚会把整个模型拽向它,这时候换平均绝对误差更稳,它对大小误差一视同仁地线性处罚。均方根误差只是给均方误差开个根号,数值回到与目标同量纲,向业务方汇报时好解释。
分类任务的标准答案是交叉熵。二分类用二元交叉熵:真实标签是 0 或 1,模型输出"属于正类的概率",预测概率越偏,罚得越陡。多分类用多类别交叉熵:模型输出一组概率分布,哪一类被压低了概率就罚哪一类。交叉熵有个工程上的妙处——预测离正确答案越远,梯度越大、纠偏越猛,接近正确时又自动收力,收敛速度快,这是均方误差套在分类输出端给不了的特性。
⚠️ 常见坑:分类任务的输出端忘了接 Softmax 或 Sigmoid 就直接套均方误差,梯度行为会变得又平又慢,模型久久学不动。尺子要与输出端的激活函数配套:概率输出配交叉熵,连续数值输出配均方误差或平均绝对误差。
方向有了,接下来是怎么走。梯度下降的基本动作在 3.1 节讲过:沿梯度的反方向挪一步。分歧在于"一步"用多少样本算梯度,由此分出三个变种。批量梯度下降每步用全部训练样本求平均梯度,方向最稳、每一步都朝当前最优,但数据集一大就算不动,一步贵如黄金。随机梯度下降反其道而行,每步只用一个样本,便宜又灵活,还自带随机扰动,偶尔能跳出小坑;代价是方向抖得厉害,损失曲线上蹿下跳。小批量梯度下降取中间路线,每次抽一小批样本算梯度,兼顾速度与稳定,批大小成为重要超参数,也是实际训练的默认做法。
小批量之上,几代改进都在回答同一个问题:步子能不能更聪明。动量法借物理惯性的思路——更新方向不再只听当前梯度,还保留九成旧速度(动量因子常取 0.9),当前梯度只占一成。像雪球滚下山坡,越滚越有劲,还能借惯性冲过浅坑,路径也平滑许多。Adagrad 换个角度:给每个参数发各自的步长——历史上梯度频繁的参数步子放小,稀少的参数步子放大,对稀疏数据格外友好;毛病是历史梯度平方只增不减,学习率一路单调衰减,训练后期干脆迈不动腿。RMSprop 对症下药,不再累积全部历史,改用指数加权移动平均,只记近期的梯度平方,旧账自动翻篇。Adam 集两家之大成:一边像动量法维护梯度的一阶矩估计,一边像 RMSprop 维护梯度平方的二阶矩估计,再做偏差修正,两路合起来定步子;两个衰减率惯例取 0.9 与 0.999。鲁棒、省心,Adam 由此成为多数任务的默认首选。
| 优化器 | 核心想法 | 优点 | 代价或风险 |
|---|---|---|---|
| 小批量 SGD | 一小批样本定一步 | 稳定高效 通用底座 | 收敛慢 需配学习率调度 |
| 动量法 | 九成旧速度加一成新梯度 | 平滑路径 冲过浅坑 | 多一个动量因子要调 |
| Adagrad | 按参数历史梯度平方分步长 | 免手工调 稀疏数据友好 | 学习率单调衰减 后期学不动 |
| RMSprop | 梯度平方取指数加权移动平均 | 旧账翻篇 适合非凸曲面 | 仍需调学习率 |
| Adam | 一阶矩加二阶矩加偏差修正 | 收敛快 鲁棒 默认首选 | 泛化偶逊于带动量的 SGD |
学习率本身也需要随时间变化。全程一个定值很拧巴:前期要大步快速逼近,后期要小步精修。学习率调度由此登场——步长衰减,每隔若干轮把学习率乘个折扣因子,像下台阶;指数衰减,按轮数连续指数式缩小,坡度平滑;余弦退火,学习率沿余弦曲线从大到小周期变化,尾段收得温和。视觉任务里"带动量的 SGD 配步长衰减"至今仍是大批模型的夺冠组合。
⚠️ 常见坑:学习率一刀切。训练初期学习率太大,损失直接发散成天文数字;后期还是原学习率,又会在谷底反复横跳落不下去。先看损失曲线的形状再动手:发散就砍学习率,平台期停滞就考虑衰减时间表或换优化器。
💡 关键直觉:把优化想成浓雾里下山。损失函数是山谷地形,梯度是脚下坡度,学习率是每步迈多远。批量梯度下降像等全队测绘完再走,稳但慢;随机梯度下降像一个人摸着就冲,快但常走回头路;动量是雪球,Adam 是带记忆的登山杖——记住走过的坡度,自动决定迈腿大小。
3.1 节埋的伏笔在这里兑现。过拟合的病象是训练分数漂亮、新数据上一落千丈——模型把训练集里的噪声当成了规律。正则化的思路是在损失里加约束,或是在训练过程中制造受限环境,逼模型学通用规律而非背题。
先看在损失上做文章的两兄弟。L1 正则化给损失加上"全部权重绝对值之和"乘以惩罚系数:不重要特征的权重会被干脆压成零,模型因此变得稀疏,顺带完成特征筛选。L2 正则化加上的是"全部权重平方和"乘以惩罚系数:权重被整体压小但不会精确归零,模型曲线变得平滑,抗噪能力上升,也被称为权重衰减,是深度学习里用得最多的一味药。顺口区分:L1 造就稀疏,L2 造就平滑。
Dropout 走的是另一条路:训练时每一步都以一定概率随机丢掉一部分神经元及其连线,等于每轮都在一个临时"瘦身"的小网络上训练。副作用变成了疗效——任何一只神经元都无法依赖某些特定同伴,共适应性被打破,只能学出各自站得住的特征;从整体看,每次丢弃生成一个不同的子网络,最终模型近似于一大批子网络的集成投票。测试时所有神经元归位工作,输出按丢弃概率做缩放补偿。批量归一化则盯住另一个病灶:训练中每层的输入分布随前面参数变动而漂移,即内部协变量偏移。它在每层输入处按小批量的统计量做标准化,再配可学的缩放与平移。收益有三:收敛更快,能用更大的学习率,对初始化不那么挑剔;顺带的噪声还附赠了轻微的正则化效果。早停最朴素:盯住验证集,损失连续多轮不再下降就收手,把停在"刚学好、还没开始背题"的那一刻,几乎零成本。
💡 关键直觉:正则化像冶炼里的控温与送风。L1、L2 是控制入炉原料的配比,Dropout 是周期性抽掉几根风管逼炉膛自己稳住燃烧,批量归一化是恒温器,早停是老师傅喊停的火候——目标只有一个:炉火既要旺,又不能过烧把钢炼脆。
三件套就位,拼成完整流程。数据准备与三份切分,搭网络结构,选损失函数,配优化器与学习率调度,加上正则化手段,然后进入迭代循环:一批样本前向传播、算损失、反向传播、更新参数,每隔一轮用验证集体检,据此早停或回头调超参数,最后在测试集上做一次性终考。任何一个环节的改变都要回到循环重来。
故障诊断记三句话。训练慢:先查学习率是不是太小、优化器是不是还没配动量,再查数据有没有归一化。不收敛:损失发散大概率学习率过大,损失乱跳先看批大小是否过小、数据里是否有异常值在兴风作浪。过拟合:训练损失还在降、验证损失已抬头,就该加数据、上正则化或早停了——欠拟合则反过来,加深加宽网络或延长训练。
问:优化器无脑选 Adam 行不行? 行,多数任务它就是首选起点。但视觉任务里,带动量的 SGD 配步长衰减常常追平甚至反超 Adam,泛化更稳。常见节奏是先跑 Adam 定基线,有余力再试 SGD 调优。
问:Dropout 比例设多少合适? 常从 0.2 到 0.5 之间起试,全连接层用得多,卷积层较少用。没有万能数,验证集曲线说了算。
问:训练损失还在降,要不要一直训下去? 不要只盯训练损失。判据是验证损失——它不降反升的拐点,就是该早停的火候,再训下去多半是在背噪声。
工艺齐备,炉火正旺,新的难题却换了一副面孔:训练越深越贵,标注数据越算越不够用。当从零训练贵到只有巨头玩得起,行业把"学通识"与"学专业"拆成了两步——下一节看预训练与迁移学习如何把专用厂房接进公共电网。