从 ( y = wx + b ) 到神经网络:参数、loss、梯度到底怎么连起来(一)

张开发
2026/6/24 23:38:25 15 分钟阅读
从 ( y = wx + b ) 到神经网络:参数、loss、梯度到底怎么连起来(一)
很多人一开始学深度学习最容易卡住的不是代码而是这些词模型参数loss梯度反向传播参数更新这些词单独看都好像认识但一连起来就会发虚。尤其是刚接触 YOLO 的时候经常会看到模型在训练loss 在下降梯度在回传参数在更新可如果你不知道这些东西之间到底是什么关系那后面看检测模型、结构图、训练日志时就容易变成“看过但没真正懂”。这一篇就从最简单的开始一步一步走到神经网络把这条链真正串起来。一、先从最简单的模型开始( y wx b )这个式子你应该不陌生。它本质上是一个函数。给它一个输入 ( x )它就输出一个结果 ( y )。比如那么这件事本身其实就已经很接近“模型”了。1. 什么叫模型在机器学习和深度学习里模型本质上就是一个函数给它一个输入它会给你一个输出。最简单时这个函数可以写成这里我故意把输出写成 ()而不是直接写 ( y )。因为在机器学习里通常表示真实答案通常表示模型预测出来的值这里的 x 是输入ŷ 是模型预测值w 和 b 是模型内部可调的量。只要 x 给定参数也给定模型就会算出一个确定的输出。模型根据输入 ( x )算出一个预测值 ()。图 1 最简单的训练链输入 x 经模型得到预测值再与真实值 y 比较得到 loss。二、参数到底是什么在这个模型里x 是输入不由训练决定真正可以被训练不断调整的是 w 和 b。它们就是参数。1. 参数不是一句空话很多资料喜欢说“模型有很多参数”但不解释参数到底是什么。其实参数一点都不玄。你可以直接把它理解成你可以把参数理解成模型里的“旋钮”旋钮拧到不同位置模型输出就会不同。对于来说•w 控制斜率也就是输入变化时输出变化得有多快。•b 控制截距也就是在 x 0 时输出的基准位置。它们会影响模型输出所以它们就是参数。因此训练模型并不是在“背公式”而是在“找一组更合适的参数”。2. 为什么参数重要因为模型好不好不在于“有没有公式”而在于参数取什么值。比如同一个公式情况 1情况 2虽然都是同一种模型形式但参数不同输出就完全不同。所以训练模型说白了就是找到一组更合适的参数让模型输出更接近真实答案。三、真实答案和预测答案怎么比较模型现在已经能输出预测值了但只有预测值还不够。因为你不知道它预测得好不好。比如模型输出 7这到底算对还是算错你必须拿它和真实答案比较。假设真实答案是那么你就要比较真实值??? 预测值两者越接近说明模型越好。两者差得越多说明模型越差。四、loss 是什么这时候就需要一个东西把“差得多不多”变成一个明确的数字。这个数字就叫loss损失。可以先把它理解成模型当前这次预测错得有多严重。1. 最简单的一种 loss平方误差对于 (wxb ) 这种很简单的模型我们常用一种 loss这里预测值真实值这个公式的意思非常直白如果预测值和真实值一样差是 0loss 就是 0如果差得越远平方后会更大loss 就越大2. 为什么要平方这里顺手说一下平方的原因。如果只写那会出现正负抵消的问题。比如错 3得到 ( 3 )错 -3得到 ( -3 )从“错得多严重”这个角度看它们都错了 3。所以通常会平方变成这样一定是非负数错得越多惩罚越大五、把模型代入 loss关键一步来了我们知道又知道把模型输出代进 loss 里就得到L (wxb-y)^2这一行特别关键。因为从这一刻起loss 不再只是“预测和真实的差距”这么简单了它已经变成了一个和参数有关的函数。也就是说loss 依赖于参数 ( w ) 和 ( b )这就是后面一切的根源。六、为什么梯度会和 loss 有关系这就是很多初学者最卡的地方。不是因为“梯度天生就和 loss 相关”而是因为模型输出依赖参数loss 依赖模型输出所以 loss 最终也依赖参数我们刚才已经写出来了你看loss 里面是不是已经有 ( w ) 和 ( b ) 了所以你当然可以问( w ) 稍微改一点loss 会怎么变( b ) 稍微改一点loss 会怎么变而这种“某个量改一点另一个量怎么变”的问题就是导数 / 偏导 / 梯度在解决的问题。七、先区分三个概念导数、偏导、梯度这里不要混。1. 导数如果一个函数只有一个变量比如那对 ( x ) 求导就叫导数。2. 偏导如果一个函数有多个变量比如那你可以分别对 ( w )、( b ) 求导这时候叫偏导。比如3. 梯度把多个偏导数组合起来就叫梯度。对于这个例子来说梯度可以理解成所以梯度不是一个神秘新东西它本质上就是“loss 对各个参数的偏导数组成的一组方向信息”图 2 以 L(w)(w-5)² 为例当前位置的斜率由导数给出沿负梯度方向移动loss 更可能减小。八、真正算一次loss 对参数的梯度我们现在有L (wxb-y)^2下面分别对 w 和 b 求偏导。1. 对 w 求偏导L (wxb-y)^2把里面这一坨先记成u wxb-y那L u^2根据求导法则而所以2. 对 b 求偏导同理九、这两个式子到底说明了什么我们先看这部分wxb-y它其实就是也就是预测值减真实值所以这两个梯度可以写成更直观的形式1. 如果预测偏大如果那么这时这说明如果继续把 b 增大loss 在当前位置附近会更倾向于增大。所以更新时就应该往反方向走也就是减小 ( b )。2. 如果预测偏小如果那么此时这说明如果把 ( b ) 增大loss 反而有机会减小。所以这时更新公式里“减去负数”就会让 b 变大。3. 为什么梯度绝对值大说明更敏感这是因为局部近似下有一个很重要的关系它的意思是当参数发生一个很小变化时loss 的变化量大约由梯度决定。所以如果很大那么同样改一点loss 会变得更明显如果很小那么同样改一点loss 变化就没那么明显这就是“梯度大说明更敏感”的真正原因。十、来一个带数字的完整例子只讲公式容易抽象我们直接算一次。假设现在有一条样本输入 x2真实值 y7模型当前参数是( w1 )( b0 )1. 先算预测值模型公式代入模型预测出来是 2。2. 再算 loss用平方误差loss 是 25说明当前预测得不太行。3. 再算梯度对 ( w )对 ( b )4. 这两个负号是什么意思负号的意思不是“错了”而是如果你把参数往大方向改loss 有机会下降。因为更新通常写成假设学习率那么更新后得到5. 再看更新后的预测这时L(7-7)^20你会发现这一步更新后模型恰好就对了。这个例子非常小但它已经完整展示了训练的核心逻辑用当前参数做预测计算 loss计算 loss 对参数的梯度按梯度方向更新参数让 loss 变小十一、训练到底是在干什么看到这里你其实已经能把训练说清楚了。训练并不是“模型自己突然变聪明”。训练本质上就是不断调整参数让 loss 尽量变小所以训练过程的核心可以概括成输入预测计算 loss求梯度更新参数这条链后面学任何深度学习模型都会遇到。十二、从 ( ywxb ) 到神经网络中间到底差了什么到这里你可能会问现在这个模型这么简单可神经网络不是很复杂吗那它和这个简单式子到底是什么关系答案是神经网络本质上还是函数只不过函数更复杂、参数更多、层数更多1. 线性模型太简单了这个模型只能表示很简单的线性关系。如果现实问题更复杂比如图像识别、目标检测那一个肯定不够。所以就需要把多个这样的计算单元叠起来。2. 一个简单“神经元”也可以写成类似形式最基本的神经元可以写成然后再过一个激活函数这里线性变换结果激活函数输出你可以看到它还是从来的只是多了一步非线性变换。激活函数的作用是让模型不再只会表示线性关系而能拟合更复杂的模式。3. 多个神经元组合起来就变成网络如果你把很多个这样的单元堆起来就会变成第一层做一轮变换第二层再做一轮变换第三层继续做于是整个模型就变成了一个更复杂的函数。比如一个两层网络可以写成这里第一层参数第二层参数中间特征最终输出这时候参数已经不再只有一个和一个而是变成了一大堆。图 4 从单个线性模型到多层神经网络变化的是函数复杂度和参数规模不变的是训练逻辑。但本质没变模型仍然是函数参数仍然是那些可学习的系数十三、神经网络里的 loss 和梯度逻辑变了吗没有变。逻辑还是同一套只是对象更复杂了。1. 神经网络的预测仍然可以写成这里输入所有参数整个神经网络这个复杂函数预测结果2. loss 还是用来衡量预测和真实的差距代入模型输出后你会发现这和前面那个线性模型完全同构。前面是现在只是把简单的换成了复杂的。本质还是loss 依赖参数。3. 所以仍然要求梯度因为 loss 依赖参数所以仍然要研究也就是loss 对各个参数的梯度然后继续更新参数让 loss 下降。所以你要牢牢记住从线性模型到神经网络变化的是函数的复杂程度不变的是训练逻辑。十四、前向传播和反向传播到底是什么这两个词后面会反复出现现在可以一起讲清楚。1. 前向传播forward前向传播就是输入数据经过模型得到输出再算出 loss。也就是这条路你可以理解成“从前往后算”。2. 反向传播backward反向传播就是从 loss 出发反过来计算 loss 对各个参数的梯度。也就是这条路更准确地说是把梯度从后往前一层层传回去。它背后最核心的数学工具就是链式法则。3. 为什么叫反向传播因为前向时数据流动方向是输入 → 中间层 → 输出 → loss反向时梯度流动方向是反过来的loss → 输出层参数 → 中间层参数 → 前面层参数所以叫“反向传播”。十五、optimizer 在干什么前面已经有了参数loss梯度那 optimizer优化器在干嘛它的任务很简单根据梯度决定怎么更新参数。最常见的基础形式就是梯度下降其中参数学习率梯度1. 学习率是什么学习率就是“每次改参数时迈多大步”。如果学习率太大可能一步跨过头loss 反而震荡甚至发散如果学习率太小训练会很慢很久都收敛不了所以训练不是“有梯度就完了”还要考虑每次按梯度改多少。十六、图像任务里这套逻辑还成立吗完全成立。只是输入从一个简单数字变成了一张图像。参数从两个数变成了几百万个参数。输出也不再只是一个数而可能是一个类别多个框多个类别概率坐标回归结果但底层逻辑没变。1. 在图像分类里输入是一张图片模型输出一个类别预测。然后和真实类别比较算 loss再更新参数。2. 在目标检测里输入是一张图片模型输出很多框、类别、分数。然后和真实标注比较算检测任务的 loss再更新参数。也就是说YOLOv8 虽然比复杂得多但本质仍然是在做这件事输入模型输出计算 loss求梯度更新参数十七、把整条链最后完整写一遍现在我们把这一篇的核心关系用最完整的形式写出来。1. 线性模型版本模型损失代入后梯度更新2. 神经网络版本模型损失代入后梯度更新你会发现神经网络只是把简单的升级成了更复杂的。训练逻辑没有换。十八、这一篇里最容易混的几个点1. 参数不是输入参数是模型内部要学习的量输入是你喂给模型的数据。输入参数不要混。2. loss 不是模型本身模型负责预测loss 负责评价预测得好不好。模型是loss 是一个负责“算结果”一个负责“打分”。3. 梯度不是“误差本身”误差是预测和真实之间的差。梯度是“参数变化时loss 怎么变”。它们有关但不是一个东西。4. 反向传播不是更新参数反向传播是算梯度。优化器才是拿梯度去更新参数。这个区别一定要记住。十九、小结从最简单的出发可以把整套逻辑看成这样模型本质上是函数参数是模型里可以学习、可以调整的系数模型根据输入给出预测值loss 用来衡量预测值和真实值的差距因为 loss 依赖参数所以可以对参数求梯度梯度告诉我们参数往哪个方向改loss 更可能下降优化器根据梯度更新参数神经网络只是把简单函数换成了更复杂的函数训练逻辑不变模型模型本质上是一个带参数的函数。参数参数是模型里可以通过训练不断调整的量例如 w、b。lossloss 用一个数字把“预测得好不好”表达出来。梯度梯度描述参数微小变化时loss 会朝什么方向、以多快速度变化。反向传播反向传播负责把 loss 对各层参数的梯度算出来。优化器优化器根据梯度真正去更新参数。

更多文章