前言
很多初学深度学习的人,都能看懂代码、会调用优化器,但始终搞不懂最底层逻辑:损失函数到底有什么用?为什么求梯度、反向更新参数,就能让模型越来越准?本文从零拆解,讲透线性分类/神经网络通用的训练底层逻辑。
一、机器学习的核心:我们到底在优化什么?
以线性分类器 为例,简单概括模型的两个组成部分:
-
输入与结果:输入图片数据 x,数据是固定不变的,我们无法修改;
-
可调节参数:权重矩阵W、偏置 b,这是模型的"大脑",也是我们唯一能手动调节的东西。
模型训练的终极目标:寻找一组最优的权重 W,让模型在训练数据上的错误最低。
二、损失函数(Loss):模型的"打分裁判"
1. 核心作用
数据 x 传入模型,结合当前权重 W 得到预测分数,损失函数负责评判:本次预测和真实标签差距有多大。
-
Loss 值越大:模型预测越离谱,犯错越多;
-
Loss 值越小:模型预测越贴合真实结果,效果越好;
-
Loss=0:理想状态,模型预测完全正确。
2. 关键关系(重中之重)
因为权重 W 一旦改变,模型的预测结果就会改变,对应的损失值也会同步变化。所以数学上可以定义:损失是权重的函数:。
对应初中函数模型:自变量 x=W(可调控参数) ,因变量 y=L(错误分数)。我们的目标就是:调整自变量,找到函数的最低点。
三、梯度(导数):告诉模型错在哪、怎么改错
单纯的Loss数值只能告诉我们:模型现在好不好。但想要优化模型,我们还需要知道:该怎么调整W,才能降低Loss? 梯度就是解决这个问题的核心。
1. 梯度的直白定义
梯度(偏导数)描述:当前位置下,自变量W小幅变动时,损失L的变化趋势与变化幅度。
2. 梯度最核心的特性(全文重点)
梯度指向的是 让损失L变大的方向:
-
梯度为正数:增大W → Loss变大;减小W → Loss变小
-
梯度为负数:增大W → Loss变小;减小W → Loss变大
通俗类比:把损失函数看作一座山坡,你当前站在山坡某一点。梯度就是当前位置最陡峭的上山方向。
四、梯度下降:整套训练的执行逻辑
既然梯度是上山(增大Loss)的方向,那我们想要下山(减小Loss),只需要 反向更新参数,这就是梯度下降的底层逻辑。
1. 参数更新公式
-
:损失对权重的梯度;
-
:学习率,控制每次更新的步长(下山步子大小);
-
减号:核心精髓,代表舍弃上山方向,反向下山。
2. 完整闭环训练流程
-
前向传播:数据输入模型,依靠当前权重W,输出预测结果;
-
计算损失:通过损失函数,算出当前模型的整体错误值L;
-
反向求导:计算梯度,明确每个权重往哪个方向改会增加错误;
-
参数更新:反向微调所有权重,强制降低损失;
-
循环迭代:重复上述步骤,反复微调权重,直到Loss收敛至最小值。
五、补充总结
-
Loss:量化模型的错误程度;
-
梯度:告知模型怎么调W会变得更差;
-
梯度下降:反着梯度方向更新W,持续降低错误;
-
所有神经网络、分类模型的训练,底层全部遵循这套逻辑。
六、全方位降低Loss的方法
前面我们弄懂了梯度下降的底层原理:梯度下降是降低Loss的唯一底层核心。其余所有优化手段,都不会跳出这个底层逻辑,只是用来辅助梯度下降:让Loss下降更快、更稳定、更容易收敛、避免卡在局部最优解。下面我把深度学习里所有降低损失的方法,按层级从底层到实战进行分类。
1. 基础核心:原生梯度下降(一切优化的根基)
所有模型训练的本源,没有任何花里胡哨的优化,仅依靠基础公式更新参数:。也是前面原理部分讲到的核心逻辑。
根据训练数据读取方式,分为三种形式:
-
批量梯度下降 BGD:使用全部数据集计算梯度,Loss下降最平稳,但计算量大、速度极慢;
-
随机梯度下降 SGD:每次只用单一样本更新参数,训练速度快,缺点是Loss震荡严重;
-
小批量梯度下降 Mini-Batch :折中方案,每次取一小批数据计算梯度,兼顾速度与稳定性,工业界、作业项目中默认通用方案。
2. 优化器升级:改良梯度下降,加速收敛
原生梯度下降存在明显短板:固定学习率、容易陷入局部最优、对不同参数统一更新,适配性差。优化器本质就是梯度下降的升级版,在梯度更新的基础上增加额外策略,帮助Loss更快下降。
-
SGD:基础优化器,适合学习调参,收敛速度慢;
-
Momentum(动量):模拟下坡惯性,积累历史梯度,加速同向更新、弱化震荡,突破局部最优;
-
RMSprop:为不同参数自适应调整学习率,解决陡峭区域梯度爆炸、平缓区域更新缓慢的问题;
-
Adam:集合动量+自适应学习率两大优势,上手无脑通用,绝大多数分类、回归任务首选,能让Loss又快又稳降到最低。
3. 模型结构优化:从根源降低拟合难度
梯度下降只能优化参数,如果模型本身表达能力不足,无论怎么调参,Loss都无法降到理想值。针对模型结构优化,适配非线性数据:
-
引入非线性激活函数:线性分类器只能绘制直线/超平面,无法拟合非线性数据。添加ReLU、Sigmoid等激活函数,让模型拥有拟合曲线、复杂边界的能力,是深层网络生效的必备条件;
-
加深网络层数:浅层网络特征提取能力弱,加深网络可以逐层提取浅层特征、深层抽象特征,适配复杂图像、文本任务;
-
增加神经元/卷积层:增加单元数量等价于扩充模型"大脑容量",CNN卷积层可以专属提取图像纹理、轮廓特征,大幅降低图像任务的Loss;
-
参数初始化:权重W初始值不能过大或过小,合理初始化(Xavier、He初始化),避免训练初期梯度消失/爆炸,保证Loss可以正常下降。
4. 数据层面:优化输入,降低训练难度
数据质量直接决定Loss下限,劣质数据会直接导致模型无法收敛:
-
数据归一化/标准化:将像素值从0~255缩放到0~1,统一特征尺度。如果数值跨度差距过大,梯度下降更新会极度不稳定,Loss极易震荡、停滞;
-
扩充数据集:数据量越大,模型学到的特征越通用,泛化能力越强,训练Loss与测试Loss都会同步降低;
-
数据增强:图像翻转、裁剪、随机扰动等,低成本扩充有效数据,抑制过拟合;
-
清洗脏数据:剔除标注错误、无效样本,避免模型被错误数据误导,减少不必要的损失。
5. 超参数调优:人为干预训练节奏
-
调整学习率:最重要的超参数。学习率过大,Loss来回震荡无法收敛;学习率过小,训练耗时成倍增加;可搭配学习率衰减,前期大步快速下降,后期小步精细收敛;
-
调整迭代轮数(Epoch):深度学习没有一步到位的训练,适当增加迭代次数,让权重反复迭代优化,Loss会稳步下降;
-
选择适配的损失函数:任务不同,损失函数不能混用。多分类任务用Softmax交叉熵、二分类用二元交叉熵、回归任务用MSE均方误差,选错损失函数,Loss永远无法收敛。
6. 正则化:解决过拟合,降低测试集Loss
注意:上述所有方法都是降低训练集Loss;当训练Loss极低、测试Loss很高时,代表模型过拟合,需要用正则化手段,提升泛化能力:
-
L1/L2正则化:在原始Loss基础上增加惩罚项,限制权重W数值大小,防止参数过于极端,简化模型;
-
Dropout:训练过程中随机失效一部分神经元,避免神经元过度依赖,打破特征冗余;
-
早停(Early Stop):监控验证集Loss,当验证集损失不再下降时,立刻停止训练,从源头杜绝过拟合。
七、终极全局总结
所有降低损失的手段,层级关系一目了然:
-
底层核心:全部依靠梯度下降,反向更新权重W;
-
辅助优化:优化器、超参数,让Loss下降更快、更稳;
-
能力补强:激活函数、加深网络,提升模型拟合上限;
-
输入优化:数据清洗、归一化,降低训练门槛;
-
过拟合兜底:正则化系列方法,平衡训练集与测试集损失。