首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
线性模型笔记:损失函数、梯度下降与正则化全解析
📅 2026/10/19 5:26:33
✍️ 爱科研究院
👁 阅读 3,247
第一次完整刷完这门机器学习课程的时候我其实已经工作三四年了。当时最让我意外的不是后面那些复杂的神经网络结构反而是第一课「线性模型Linear Model」——因为越往后学越会发现后面那些听起来很高深的架构本质上都是从这个最简单框架上长出来的。这个系列笔记第一篇就是想把这块地基彻底打牢。之所以要重新整理一份笔记是因为这堂课的信息密度远比看起来高。它表面只讲了一个线性模型实际却把机器学习最重要的四件事全讲透了我们靠什么学损失函数、我们怎么学梯度下降、为什么能学优化理论、学过头怎么办正则化与过拟合。几乎所有后续章节都是在给这个框架加模块。这篇笔记适合两类人正在上这门课、边看边做记录的初学者以及已经看完一遍但觉得知识比较散、想用一条主线串起来的自学者。我会按自己重新梳理后的逻辑来讲不会照抄课程顺序而是把课程中真正重要的概念用更容易理解的方式重新串联一遍。1. 这门课的整体结构和学习主线1.1 课程在讲一件什么事这门课从头到尾只回答一个问题我们怎么让机器通过数据自己学会做决策。课程把机器学习任务分成了三类回归Regression、分类Classification和结构化学习Structured Learning。回归就是预测一个连续数值比如房价、气温、明天股票涨跌多少分类是给输入打一个离散标签比如判断邮件是不是垃圾邮件、图片里有没有猫结构化学习更复杂是输出一个结构比如翻译出一整句句子、生成一张图片。很多人刚接触时会被这个分类吓到觉得三个任务三种学法是三套完全不同的东西。实际上课程会反复强调它们的底层框架完全一样都是「定义模型 定义损失 优化参数」。区别只在于模型输出形式不同、损失函数不同、评价方式不同。线性模型这一课就是从最简单的回归场景切入把这套框架完整演示一遍。这也是我后来带人入门时最常用的一个讲法——不要先去看应用花活先把「训练数据长什么样、模型怎么给预测、坏得怎么衡量、怎么调整参数变好」这四个步骤刻在脑子里。后面的深度学习、卷积网络、注意力机制全部只是在这个流程里换了更复杂的模型组件。1.2 机器学习流程的五个关键零件我整理这堂课时把课程内容拆成了五个零件后面几乎所有章节都在给这五个零件做升级零件解决什么问题线性模型版本后面章节的升级版训练数据学习的原材料一组输入特征 标准答案大规模数据集、数据增强模型从输入到输出的映射线性函数f(x)w·xb多层神经网络、Transformer损失函数衡量预测得有多差均方误差MSE交叉熵、对比损失、感知损失优化算法怎么调整参数让损失下降梯度下降动量、Adam、学习率调度评估与防过拟合判断是不是真的学到了规律验证集 正则化早停、Dropout、数据增强这个表格我在笔记本里写了很多遍每次学新模型都会回来对照一遍。你会发现真正变的最多的只是「模型」这一行其他四个零件的核心逻辑是贯穿始终的。1.3 为什么第一个模型是线性模型这堂课没有直接上神经网络而是先讲线性模型这个选择非常有讲究。线性模型是唯一一种你既能用数学完全理解、又能用直观图像看明白的模型。它足够简单所以你能清楚地看到损失函数的形状、梯度下降每一步参数的变化、过拟合到底长什么样。如果一开始就上复杂模型你会陷入「模型效果好了但不知道为什么好、坏了也不知道改哪里」的状态。课程的进度安排也印证了这件事先讲线性模型 → 引出损失函数与梯度下降 → 讲线性模型的局限 → 用特征变换突破局限 → 然后才引入神经网络告诉你「神经网络其实就是自动帮你做特征变换」。这一条链完整看下来你会意识到神经网络不是凭空出现的它是线性模型在「特征表达」这个环节的必然升级。2. 线性模型的核心逻辑从一个最简单的函数开始2.1 从预测房价说起课程里举的例子是预测某种宝可梦的战斗力CP值用进化前的数据去预测进化后的数据。为了不被宝可梦这个具体场景带偏我用更通用的房价预测来讲。假设你只有两个特征房屋面积x1和卧室数量x2。线性模型就是猜一个函数f(x) w1·x1 w2·x2 b其中 w1、w2 是特征的权重b 是偏置。整个模型的参数就这三个w1、w2、b。机器学习要做的事情就是根据已有的历史数据找出一组让预测房价和真实房价差距最小的 (w1, w2, b)。这里我要特别强调一个认知线性模型做的不是「发现」规律而是「拟合」规律。它假设输出和输入之间是线性关系然后去数据里找最合适的比例系数。这个假设成立与否完全取决于你的数据本身。如果房价和面积的关系确实是近似线性的这个模型就很好用如果不是它再怎么调参也不行。2.2 损失函数用数字给模型打分有了模型怎么评价它好不好课程引入了损失函数这个概念。线性回归里最常用的是均方误差Mean Squared ErrorMSEL (1/N) · Σ(f(x⁽ⁱ⁾) - y⁽ⁱ⁾)²这个公式的直觉非常简单对每一笔训练数据算出预测值和真实值的差求平方然后取平均。平方的作用有两个一是把正负误差都变成正的避免正负相抵二是放大大误差——预测差 5 和差 1平方后是 25 比 1差了 25 倍这样优化算法会优先去解决那些错得离谱的样本这跟现实里「大事故优先处理」的逻辑一样。课程里画了损失函数的等高线图横轴是 w1纵轴是 w2颜色深浅代表损失大小。这个图非常直观地说明了不同参数组合对应不同的损失我们就是在等高线地形图上找最低点。线性回归的损失函数是凸函数也就是说它只有一个全局最低点不存在「陷在局部最优出不来」的问题。这一点非常重要因为后面深度学习时代的很多痛点都跟损失函数不是凸函数有关。2.3 两个解法的对比解析解与迭代解既然线性回归的损失函数是凸的它在数学上其实有解析解——直接用最小二乘法Normal Equation就能算出来w (XᵀX)⁻¹Xᵀy课程里没有重点推这个公式而是花大力气讲梯度下降。为什么因为解析解虽然一步到位但它需要求矩阵的逆当特征维度很高、数据量很大的时候计算成本高得离谱。更重要的是深度学习时代的模型根本不存在解析解你无法通过求解一个方程直接得到几亿个参数的最优值。所以梯度下降不是「其中一个解法」而是「以后所有模型都要用的通用解法」。线性模型是唯一一个让你既能用解析解验证梯度下降结果是否正确、又能把梯度下降每一步看得清清楚楚的场景。这是我建议初学者一定要亲手对比一下的原因——你会非常直观地看到梯度下降走几步之后参数确实在不断逼近解析解。3. 梯度下降与损失函数的推导过程3.1 训练的本质是沿着最陡方向下山课程里把梯度下降比作「在山里迷路想走回山脚」你站在山坡的某个位置当前参数对应的损失点环顾四周找到最陡的下坡方向往前迈一步然后站在新位置重复这个过程直到走到山脚损失最低点。这个「最陡的下坡方向」就是梯度的反方向。梯度是一个向量它的每个分量是对应参数的偏导数。数学上偏导数 ∂L/∂w 的含义是当 w 发生微小变化时损失 L 会变化多少。如果这个值是正的说明 w 增大损失也增大所以你应该让 w 减小反之则增大。参数更新规则就是w ← w - η · ∂L/∂w其中 η 是学习率Learning Rate代表每一步迈多大。这个公式看起来简单但它包含了优化问题的全部精髓方向梯度反方向由函数本身决定步子大小学习率由我们设置。3.2 MSE 对参数的偏导推导为了让你对梯度有一个可触达的理解这里完整推导一次。设训练集有 N 个样本第 i 个样本的特征是 x⁽ⁱ⁾标签是 y⁽ⁱ⁾模型是 f(x) w·x bL(w,b) (1/N) · Σ (w·x⁽ⁱ⁾ b - y⁽ⁱ⁾)²对 w 求偏导∂L/∂w (2/N) · Σ (w·x⁽ⁱ⁾ b - y⁽ⁱ⁾) · x⁽ⁱ⁾对 b 求偏导∂L/∂b (2/N) · Σ (w·x⁽ⁱ⁾ b - y⁽ⁱ⁾)可以看到导数的结构非常规律误差预测减真实乘以该参数对应的输入特征然后求和取平均。这个规律是后面反向传播算法的雏形——误差从输出端往回流乘上路径上的激活值得到每个参数的梯度。实际写代码时你不需要手工实现这些公式框架已经帮你自动求导了。但强烈建议你至少在纸上推导一遍因为遇到梯度异常比如梯度爆炸、梯度消失时你需要能判断是不是公式实现出的问题。3.3 学习率一个对结果影响极大的超参数课程里现场演示了不同学习率导致的三种结果这段我每次看都觉得很有冲击力。下面用我自己的实验数据来说明学习率表现原因分析0.001损失下降极慢训练 1000 轮还在半山腰步子太小收敛需要大量迭代0.01平稳下降500 轮左右逼近最优点适中正常情况下的首选1.0损失上下震荡甚至越跑越高步子太大跨过了最低点还可能跳向更高处这件事的直觉可以用一个很简单的场景理解你闭着眼睛下山如果你的每一步都跨出几十米你可能直接从山谷这边跨到了对面山坡上不但没下去还可能跑到更远的地方。学习率设置不当导致的震荡就是这种「跨过头」的现象。我在实际训练中常用的策略是先用 0.01 打底观察损失曲线。如果下降太慢就乘 10如果震荡就除以 10。等损失曲线平稳下降后再配合学习率衰减比如每训练若干轮将学习率乘 0.9让优化后期步子小一些以便在最低点附近精细收敛。4. 数据预处理与特征工程线性模型的隐藏关键4.1 特征尺度差异如何毁掉梯度下降课程在这部分花了不少篇幅讲特征标准化Feature Normalization的必要性。什么叫特征尺度差异就是不同特征的数值范围差别很大。比如房价预测中房屋面积是 50~200 平方米而卧室数量是 1~5 个这两个特征直接喂给模型时它们对梯度的贡献量级完全不对等。假设面积特征的数值是卧室数量的几十倍那么在计算偏导时面积对应的梯度会天然偏大参数更新会以面积为主、卧室数量几乎不被优化。表现在损失函数的等高线图上就是等高线呈现瘦长的椭圆形梯度下降的路径会沿着长轴来回震荡曲折前进收敛速度极慢。课程给出的解法是标准化最常用的是 z-score 归一化x_new (x - μ) / σ把每个特征变成均值为 0、标准差为 1 的分布。处理之后特征的数值范围大致都在 -3 到 3 之间等高线图趋近正圆形梯度下降可以几乎直着走向最低点。这个细节我在很多初学项目里都见过被忽视的情况有人觉得「反正模型能跑标准化不做也行」——确实能跑但训练耗时会多出数倍甚至在小数据集上直接不收敛。4.2 特征变换当线性不够用时课程非常诚实地指出线性模型是有限制的。用一个很简单的例子就足够说明问题如果真实规律是 y x²你用线性模型 y wx b 去拟合无论怎么调 w 和 b都不可能得到一个对称的抛物线形状。这就是「线性模型无法表达非线性关系」的硬边界。突破这个限制的一个思路是特征变换Feature Transformation。课程以宝可梦的 CP 值预测为例展示了几种不同的特征变换方式把 x 变成 x²、或者把一个连续区间切成多段分段函数。每变换一次相当于在重新定义模型的「输入表达」而模型本身仍然可以是线性的。我在实际项目中非常喜欢用这个思路先不要急着上复杂模型而是观察数据的分布。如果发现某个特征和目标值之间存在明显的先增后减或者近似抛物线关系先构造一个 x² 特征放进线性回归里试试。很多时候效果提升立竿见影而且模型仍然可解释——你能直接看到二次项的系数是多少。在传统行业的数据分析场景里这种「人可解释的模型」远比黑盒模型受欢迎。4.3 特征变换的复杂度与过拟合的第一次出现但是特征变换不是越多越好。课程用宝可梦数据做了个对照实验只用 x 时训练集误差和测试集误差差不多加入 x² 项两者都下降继续加入 x³、x⁴……直到加入 x⁵ 时训练集误差降到了接近零但测试集误差反而上涨了。这个现象就是过拟合的第一次完整呈现。它的本质是特征变换给模型提供了更强的表达能力但表达力过强时模型会开始去拟合训练数据里那些「只属于这批数据」的噪声和偶然模式而在新数据上表现反而变差。我当时看到课程画的那张训练误差下降、测试误差上升的曲线时心里咯噔一下——原来过拟合不是深度学习的专利连一个简单的线性回归加特征变换都能轻松过拟合。这也是我觉得这一课价值极高的原因它把这个困扰所有机器学习从业者的问题放在最简单直观的场景里让你看透。5. 过拟合与正则化给模型加一点约束5.1 过拟合的机制模型在背答案为什么训练误差很低但测试误差却很高课程的解释我非常认同模型在「背答案」而不是「学规律」。还是拿房价预测举例。加入高次特征后模型有能力让预测曲线精确穿过每一个训练数据点。但这种精确是通过把函数形状扭曲得极其复杂来实现的——它在那些没有训练数据覆盖的区间里形状可能异常诡异完全不符合真实的房价规律。一旦来一个不在训练集里的新房子模型用这种扭曲的函数去预测结果自然会离谱。课程用了一个很形象的对比想象你在听写单词如果学生只是机械记住了每一篇听写文章的每个字他能在这篇文章上拿满分但你随便换一篇新文章他就彻底不会了。训练集上的高分是「记住了」测试集上的高分才是「学会了」。机器学习要的显然是后者。5.2 L2 正则化让参数学会「克制」课程给出的对策是正则化Regularization重点讲了 L2 正则化。做法是在原来的损失函数后面加一个年头惩罚项L 原始损失 λ·Σ(wᵢ²)这里的 λ 是正则化强度的超参数。加上这一项后优化过程不仅要让预测误差小还要让参数的平方和尽量小。也就是说模型被要求「用尽量平缓、尽量简单的函数去拟合数据」。这背后的直觉很接近现实生活如果一个预测规则的参数非常巨大且波动剧烈它通常意味着模型在过度迎合训练数据中的偶然模式。惩罚大参数就是逼着模型更谨慎、更保守不要对数据里的风吹草动都反应过度。λ 越大参数被压得越小函数越平滑但 λ 过大也不行模型会变得过于简单直接欠拟合连训练数据的主要趋势都抓不住。5.3 偏差与方差同一个问题的两面课程在这一段还引入了偏差Bias和方差Variance的概念这是评估模型泛化能力的两个视角。偏差衡量的是模型假设本身的准确度——线性模型去拟合非线性数据偏差就高方差衡量的是模型对训练数据变化的敏感度——高次特征变换的模型换一批训练数据结果可能天翻地覆方差就高。正则化本质上是在做偏差和方差之间的一个权衡。增大 λ方差下降但偏差上升减小 λ偏差下降但方差上升。最佳点在最中间——测试误差最低的位置。这个「U 形曲线」我在后续工作中反复见到每次调完正则化参数后看验证集曲线都能看到这个经典形状。这个思想是理解课程后半部分的关键线索。后面的深度学习、集成学习、Dropout 等大量技术本质上都可以理解为在用各种方式控制模型的方差或者降低偏差目的都是为了让测试误差尽可能小。6. 自己动手复现从零到一的完整流程6.1 环境准备与数据构造这一课没有官方的编程作业但强烈建议你自己动手实现一遍线性模型因为这是打通「数学公式 → 代码逻辑」最快的方式。我用 Python 的 numpy 库手写了一个最小实现不使用任何现成的机器学习框架。代码量十几行但每一步都有明确含义。import numpy as np # 构造合成数据真实规律是 y 2 * x 3 噪声 np.random.seed(42) N 200 x np.random.rand(N, 1) * 10 true_w, true_b 2.0, 3.0 y true_w * x true_b np.random.randn(N, 1) * 1.5 # 参数初始化 w 0.0 b 0.0 lr 0.02 epochs 300 # 梯度下降训练 for epoch in range(epochs): y_pred w * x b loss np.mean((y_pred - y) ** 2) grad_w np.mean((y_pred - y) * x) grad_b np.mean(y_pred - y) w - lr * grad_w b - lr * grad_b if (epoch 1) % 60 0: print(fepoch {epoch1}: loss{loss:.4f}, w{w:.4f}, b{b:.4f})训练过程中你会看到 loss 稳步下降w 逐步趋近 2b 逐步趋近 3。这里有一个小细节我没有把每个样本的梯度先算出来再取平均而是直接对「平均损失」求梯度顺序不同结果完全一致但理解上建议先按均值损失的方式推导一遍。6.2 复现时必须注意的细节上面这段代码能跑通但里面其实埋着几个容易出问题的地方我自己第一次写时也踩过第一个是初始化。w 和 b 都初始化为 0 在这段代码里没问题因为线性模型的损失是凸函数从任何地方起步最终都会到同一个最优点。但如果你把这个习惯带到神经网络的实现里全零初始化会导致所有神经元学到同样的特征这就是后面课程会讲的「对称性问题」。第二个是学习率。这个例子我特意选了 0.02如果改成 0.5你会看到 loss 开始震荡甚至变成 NaN。原因就是前面说的步子太大跨过了最低点后又跳到更高的位置。遇到 loss 变成 NaN第一反应永远是检查学习率而不是怀疑数据。第三个是特征尺度。这个例子里 x 的范围是 0~10y 是 3~23量级接近所以不需要标准化。但如果你把 x 换成单位是「平方米」几百和「套内数量」个位数这样的混合特征就一定要先做标准化否则梯度下降会像走迷宫一样缓慢这一点新手特别容易忽略。6.3 用训练/验证/测试三件套评估模型课程里反复强调「训练集的损失不能代表模型真实水平」。我在第一次跑这个例子时也犯过错看到训练 loss 降到很低就很兴奋后来才发现这个模型在测试集上一塌糊涂。规范的评估流程应该是把数据分成三份训练集用来拟合参数验证集用来选择超参数比如正则化强度 λ、特征要不要加 x²测试集只用来最后评估模型一次。验证集和测试集的关系经常被初学者混淆验证集是你在做决策时用的比如决定用哪个 λ、要不要加某个特征测试集是你所有决策做完后最后做一次真实性检验用的。实际操作中最常见的问题有两个一是没有验证集直接在测试集上调参这样测试集其实已经变成了「训练数据集的一部分」最终评估结果会偏乐观二是数据划分时没有打乱顺序如果你的数据是按照时间收集的不打乱直接切分会造成严重的分布偏差。我踩过这个坑之后养成了另一个习惯凡是涉及到数据划分、预处理这类步骤都先固定随机种子保证实验可以复现。7. 线性模型笔记的延伸思考它给深度学习埋了哪些伏笔7.1 特征变换到神经网络的跳跃课程在过拟合部分其实埋了一条通往深度学习的暗线既然手工设计特征变换很麻烦、还容易过拟合那如果让机器自己去学习特征变换呢这就是神经网络出现的最重要动机。一个带隐藏层的神经网络做的事情本质上就是「自动的特征变换」——输入进隐藏层后经过激活函数的非线性变换输出层再把这个变换后的特征线性组合出最终结果。不同之处在于神经网络的中间层输出是我们无法直接解释的它是机器自己学出来的特征表达。所以你看深度学习的门槛其实没有想象中那么高。如果你把这一课的线性模型吃透了理解梯度下降理解损失函数理解过拟合那么看神经网络时只需要把「模型」那一格从 f(x) w·xb 换成多层加激活函数的结构其他零件全部照旧。7.2 第一个实战项目建议学完这一课后很多人会想趁热打铁做一个项目练手。我的建议是不要一上来就去跑图像分类或者自然语言处理那些数据规模大、模型复杂容易迷失在环境和框架层面而忽略模型本身的逻辑。更适合的是找一个二维特征的回归问题特征少的意义在于你可以画出数据分布和模型曲线用直观的视觉感受去验证你对理论的理解。我自己试过的一个模拟项目是根据某个城市过去几年的房屋记录用面积和位置两个特征预测价格。先跑线性回归记录训练误差然后加入二次项特征再跑一次最后在模型里加一点 L2 正则化。这三种配置对比下来你会在同一份数据上看到欠拟合、正常拟合、过拟合三种状态的完整变化这一课就真正内化成你自己的经验了。7.3 笔记的第一篇就到这里整理这份笔记时我尽量把课程里更多「顺嘴一提但极其关键」的细节都显式地拆了出来比如标准化对梯度下降收敛速度的影响、偏差与方差的权衡、训练/验证/测试集的正确划分方式。这些东西在原课程里都讲到了但因为字幕和信息密度的问题第一次刷很容易滑过去。如果这篇笔记对你有帮助还希望你能动起手来把里面的代码跑一遍对照一下误差曲线和参数变化。学习机器学习没有任何一步能越过「亲手试一次」这个关卡。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/19 5:26:33
开源支付编排层Hyperswitch:从架构原理到部署实战
2026/10/19 5:26:33
MySQL mysqldump备份实战:核心参数、自动化脚本与恢复演练
2026/10/19 5:26:33
SSA-GRNN回归预测实战:麻雀搜索算法优化平滑因子详解
2026/10/19 6:31:37
基于Luenberger降阶观测器的PMSM负载转矩前馈补偿方案
2026/10/19 6:31:37
居民负荷分层调度与非合作博弈:双层鲸鱼算法的Matlab实现
2026/10/19 6:31:37
Lightroom青橙预设:旅行摄影电影感调色实战指南
2026/10/19 6:31:37
知识图谱落地实战:从本体设计到数据质量与应用的完整方案
2026/10/19 6:31:37
MQBench量化感知训练实践:从误差诊断到端侧部署调优
2026/10/19 6:26:37
LLM Guard实战拆解:构建企业级LLM应用的内容安全防线
2026/10/19 0:01:13
频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现
2026/10/19 0:01:13
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道
2026/10/19 0:01:13
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统
2026/10/18 0:02:43
OpenResearch实战:Claude Code、Codex、OpenCode、Cursor 工作流搭建与故障排查
2026/10/19 2:04:59
知识管理核弹:用Obsidian构建第二大脑的工程化方案(TaoToken 统一 Key 接入版)
2026/10/18 0:02:43
金融AI落地指南:从调研报告到技术选型与工程实践
2026/10/17 10:15:50
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/16 18:46:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/16 18:46:46
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)