线性回归
线性回归是机器学习中最基础、最通用的监督学习算法之一,旨在建立输入特征与连续输出标签之间的线性关系。
零.前置知识补充
1. 损失函数、代价函数、目标函数
这三个概念的终极目的相同:都是为了衡量"模型当前有多差",并作为梯度下降等优化算法的"指南针"。但它们的作用范围和评估维度有所区别。
我们可以用一个包含关系来直观理解它们的层级:
目标函数 (Objective Function) ⊃\supset⊃ 代价函数 (Cost Function) ⊃\supset⊃ 损失函数 (Loss Function)
(1).损失函数 (Loss Function)
- 作用范围: 针对 单个训练样本。
- 物理意义: 衡量模型对某一个特定输入 xix_ixi 的预测值与真实标签 yiy_iyi 之间的误差。
- 数学符号: 通常记为 L(y^,y)\mathcal{L}(\hat{y}, y)L(y^,y) 或 L(f(xi),yi)L(f(x_i), y_i)L(f(xi),yi)。
- 常见举例: 平方损失 (yi−f(xi))2(y_i - f(x_i))^2(yi−f(xi))2、绝对误差 ∣yi−f(xi)∣|y_i - f(x_i)|∣yi−f(xi)∣。
(2).代价函数 (Cost Function)
- 作用范围: 针对 整个训练集(或某一个 Batch 的数据集)。
- 物理意义: 将所有单个样本的"损失"加起来求平均,代表模型在当前数据集上的整体预测误差(即经验风险)。
- 数学符号: 通常记为 J(θ)J(\theta)J(θ) 或 J(w)J(w)J(w)。
- 数学公式: J(θ)=1N∑i=1NL(f(xi;θ),yi)J(\theta) = \frac{1}{N} \sum_{i=1}^{N} \mathcal{L}(f(x_i; \theta), y_i)J(θ)=N1∑i=1NL(f(xi;θ),yi)
- 常见举例: 均方误差 (MSE)。
(3).目标函数 (Objective Function)
- 作用范围: 针对 整个模型训练过程的最终优化目标。
- 物理意义: 在"预测误差(代价函数)"的基础上,加入了"模型复杂度惩罚(正则化项)"。它要求模型不仅要预测得准,还要尽量保持简单(即结构风险最小化)。优化算法(如梯度下降)最终尽力去最小化的就是这个函数。
- 数学符号: 通常记为 Obj(θ)Obj(\theta)Obj(θ) 或直接等同于加了正则化的 J(θ)J(\theta)J(θ)。
- 数学公式: Obj(θ)=Cost Function+Regularization TermObj(\theta) = \text{Cost Function} + \text{Regularization Term}Obj(θ)=Cost Function+Regularization Term
核心公式全景图
将这三者放在同一个公式里,它们的对应关系一目了然:
Obj(θ)⏟目标函数=1N∑i=1NL(f(xi;θ),yi)⏞损失函数⏟代价函数 (经验风险)+λ∑jθj2⏟正则化项 (惩罚损失) \underbrace{\text{Obj}(\theta)}{\text{目标函数}} = \underbrace{\frac{1}{N} \sum{i=1}^{N} \overbrace{\mathcal{L}(f(x_i; \theta), y_i)}^{\text{损失函数}}}{\text{代价函数 (经验风险)}} + \underbrace{\lambda \sum_j \theta_j^2}{\text{正则化项 (惩罚损失)}}目标函数 Obj(θ)=代价函数 (经验风险) N1i=1∑NL(f(xi;θ),yi) 损失函数+正则化项 (惩罚损失) λj∑θj2
总结
| 概念名称 | 英文对应 | 评估对象 | 核心目标 | 包含关系 |
|---|---|---|---|---|
| 损失函数 | Loss Function | 1 个样本 | 算对单道题 | 基础元件 |
| 代价函数 | Cost Function | NNN 个样本 (全体) | 最小化经验风险 (拟合数据) | 多个损失的平均 |
| 目标函数 | Objective Function | 模型本身 | 最小化结构风险 (兼顾拟合与泛化) | 代价 + 惩罚项 |
2.数学概念补充
(1).点积 (Dot Product)
概念: 点积又叫数量积 或标量积 。它接受两个长度相同的一维向量 ,并返回一个单一的数值(标量)。点积可以说是多维空间中向量"相似度"或"投影长度"的一种度量。
公式:
点积有两种等价的数学表达方式:
-
代数定义(基于坐标计算):
将两个向量对应位置的元素相乘,然后把所有的乘积加起来。
设向量 a=a1,a2,...,an\mathbf{a} = a_1, a_2, \\dots, a_na=a1,a2,...,an 和 b=b1,b2,...,bn\mathbf{b} = b_1, b_2, \\dots, b_nb=b1,b2,...,bn,则:
a⋅b=∑i=1naibi=a1b1+a2b2+⋯+anbn\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^n a_i b_i = a_1b_1 + a_2b_2 + \dots + a_nb_na⋅b=i=1∑naibi=a1b1+a2b2+⋯+anbn
-
几何定义(基于夹角和长度):
点积等于两个向量的模长(长度)相乘,再乘以它们夹角的余弦值。
a⋅b=∥a∥∥b∥cos(θ)\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta)a⋅b=∥a∥∥b∥cos(θ)
(注:当 θ=90∘\theta = 90^\circθ=90∘ 即两个向量垂直时,cos(90∘)=0\cos(90^\circ) = 0cos(90∘)=0,点积为 0。)
(2).内积 (Inner Product)
概念:
内积是点积的高维抽象与推广 ,内积包含点积,但是在实际用的时候都差不多,特殊情况(不是实数的情况)遇不到。
**即:点积是内积在欧几里得空间(常见的实数空间)中的一种具体特例。 在一般的实数向量空间里,内积的计算方式和点积一模一样;**但内积的概念还可以推广到更抽象的数学空间(比如复数空间、函数空间等)。
公式:
内积通常用尖括号 ⟨x,y⟩\langle \mathbf{x}, \mathbf{y} \rangle⟨x,y⟩ 表示。对于实数向量,它的公式与点积完全相同:
⟨a,b⟩=a⋅b=∑i=1naibi\langle \mathbf{a}, \mathbf{b} \rangle = \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^n a_i b_i⟨a,b⟩=a⋅b=i=1∑naibi
补充:复数空间下的内积 (对应 PyTorch 的 vdot)
如果在复数空间中,为了保证向量自己跟自己的内积必须是非负实数,计算时需要对其中一个向量取复数共轭 (conjugate):
⟨a,b⟩=∑i=1naˉibi\langle \mathbf{a}, \mathbf{b} \rangle = \sum_{i=1}^n \bar{a}_i b_i⟨a,b⟩=i=1∑naˉibi
(3).矩阵乘法 (Matrix Multiplication)
概念:
矩阵乘法是针对二维张量(矩阵)的运算。它是点积的高阶组合 。当一个 m×nm \times nm×n 的矩阵 AAA 乘以一个 n×pn \times pn×p 的矩阵 BBB 时,本质上是 AAA 的每一行向量 与 BBB 的每一列向量 分别做点积。
核心规则:
必须满足**"左矩阵的列数 = 右矩阵的行数"**,即 (m×n)×(n×p)→(m×p)(m \times n) \times (n \times p) \rightarrow (m \times p)(m×n)×(n×p)→(m×p)。
公式:
设矩阵 C=ABC = ABC=AB,则结果矩阵 CCC 中第 iii 行第 jjj 列的元素 cijc_{ij}cij 计算公式为:
cij=∑k=1naikbkjc_{ij} = \sum_{k=1}^n a_{ik} b_{kj}cij=k=1∑naikbkj
(通俗解释:cijc_{ij}cij 的值,就是矩阵 AAA 的第 iii 行向量,与矩阵 BBB 的第 jjj 列向量的点积。)
补充技巧:
在矩阵和向量计算中,一个列向量的"转置乘上它本身"(即 vTv\mathbf{v}^T \mathbf{v}vTv),在数学上代表该向量所有元素的平方和,它也等于这个向量在空间中长度(L2范数)的平方。
(4).总结
点积就是对应相乘再相加;内积是点积的学名;矩阵乘法就是批量做点积(行乘列)。
| 概念 | 数学符号 | 参与对象 | 输出结果 | 核心本质 |
|---|---|---|---|---|
| 点积 | a⋅b\mathbf{a} \cdot \mathbf{b}a⋅b | 两个一维向量 (1D ×\times× 1D) | 一个数值 (标量) | 对应元素相乘后求和 |
| 内积 | ⟨a,b⟩\langle \mathbf{a}, \mathbf{b} \rangle⟨a,b⟩ | 两个一维向量 | 一个数值 (标量) | 点积的抽象统称(在实数域中即为点积) |
| 矩阵乘法 | ABABAB | 两个二维矩阵 (2D ×\times× 2D) | 一个二维矩阵 (2D) | 行向量与列向量的批量点积 |
(5). 矩阵的迹 (Trace)
**概念: 迹是方阵特有的属性,但 PyTorch 中不是方阵也能计算,它等于矩阵主对角线上所有元素的总和。**在物理学和线性代数中,迹拥有非常好的性质(比如在坐标变换下保持不变)。
公式与性质:
设 AAA 为 n×nn \times nn×n 的方阵,其迹 Tr(A)\text{Tr}(A)Tr(A) 为:
Tr(A)=∑i=1naii=a11+a22+⋯+ann\text{Tr}(A) = \sum_{i=1}^n a_{ii} = a_{11} + a_{22} + \dots + a_{nn}Tr(A)=i=1∑naii=a11+a22+⋯+ann
(核心性质:矩阵的迹,在数值上严格等于该矩阵所有特征值之和。)
(6). 矩阵的秩 (Rank)
概念:
矩阵的秩(Rank)是指矩阵中行或列的极大线性无关数(即极大线性无关组中包含的向量个数)。任何矩阵的秩都是唯一值。
- 极大线性无关组: 指的是从矩阵中挑出的一组向量,它们之间互相绝对独立(没有任何一个向量可以通过其他向量加减乘除组合出来),且矩阵中剩下的所有冗余向量都可以由这组向量线性表示。
通俗来说,秩衡量了矩阵里面含有多少真正有效且不重复的核心信息。如果把矩阵看作是对空间的一种变换,秩就代表了变换后空间的实际维度。
性质与核心应用:
- 行列秩相等: 矩阵中行、列的极大无关数总是相同的,无论矩阵是宽是长。
- 满秩 (Full Rank): 特指在方阵(行数和列数相同的矩阵)中,行数、列数和秩完全相同。这意味着全员独立、没有冗余。满秩矩阵具有线性唯一解等重要特性。
- 降秩与降维: 如果矩阵的秩小于行/列数,说明存在可以被替代的"废话/冗余信息"。在空间变换中,降秩意味着原本的3D空间被压扁成了2D平面甚至1D的线。在数据科学中,正是利用了这一点,通过求解秩来对高维复杂数据进行降维。
- 算法基石: 秩也是奇异值分解 (SVD)、主成分分析 (PCA) 等高级数学运算中不可或缺的核心指标。
(7). 行列式 (Determinant)
概念:
行列式是方阵的一个专属基本性质或属性,行列式永远是一个单一的数值(标量,Scalar)。
- 代数角度来看,通过行列式的计算,我们能够知道矩阵是否可逆,从而可以进一步求解矩阵所对应的线性方程组。不满秩的的方阵行列式就是0,行列式一旦是0就无法计算这个矩阵的逆矩阵。
- 几何角度来看,行列式实际上就是矩阵进行线性变换时,对空间体积(或面积)的伸缩因子(缩放比例)。
基础二阶方阵的计算公式:
对于最基础的 2×22 \times 22×2 方阵,它的行列式计算有一条固定公式,即"主对角线乘积 减去 副对角线乘积":
设 A=abcdA = \begin{bmatrix} a & b \\ c & d \end{bmatrix}A=acbd,则其行列式为:
det(A)=ad−bc\det(A) = ad - bcdet(A)=ad−bc
计算方法与代数余子式 (Cofactor):
对于 3×33 \times 33×3 及更高阶的方阵,其行列式的计算通常依赖于代数余子式展开(拉普拉斯展开),这是一种将高维行列式降维计算的核心方法。
- 余子式 (MijM_{ij}Mij):在一个 nnn 阶方阵中,划去元素 aija_{ij}aij 所在的第 iii 行和第 jjj 列后,留下来的 n−1n-1n−1 阶方阵的行列式。
- 代数余子式 (CijC_{ij}Cij):在余子式的基础上赋予正负号。符号的规则取决于行标与列标之和的奇偶性,公式为 Cij=(−1)i+jMijC_{ij} = (-1)^{i+j} M_{ij}Cij=(−1)i+jMij。
- 展开定理:行列式的值等于它的任意一行(或一列)的各元素与其对应的代数余子式乘积之和。即 det(A)=∑j=1naijCij\det(A) = \sum_{j=1}^n a_{ij} C_{ij}det(A)=∑j=1naijCij。
性质与几何意义:
用 det(A)\det(A)det(A) 或 ∣A∣|A|∣A∣ 表示。
- det(A)>0\det(A) > 0det(A)>0: 空间体积被放大了 det(A)\det(A)det(A) 倍,且空间方向保持不变。
- det(A)<0\det(A) < 0det(A)<0: 空间体积被缩放,同时空间发生了翻转(类似于照镜子)。
- det(A)=0\det(A) = 0det(A)=0: 绝对的核心考点!说明空间被压扁了(体积变成0,伸缩因子为0)。此时矩阵必定降秩,且必定没有逆矩阵(不可逆)。
(8). 逆矩阵 (Inverse Matrix)
概念:
相当于矩阵乘法中的倒数。如果矩阵 AAA 是一种线性变换(比如把空间顺时针旋转90度),那么它的逆矩阵 A−1A^{-1}A−1 就是把这个操作完美撤销的动作(逆时针转回90度)。
公式与前提:
AA−1=A−1A=IA A^{-1} = A^{-1} A = IAA−1=A−1A=I
(注:III 是单位阵,相当于数字里的 111。前提条件是方阵 AAA 必须满秩,即行列式 det(A)≠0\det(A) \neq 0det(A)=0。如果空间已经被压扁成了0维,就再也无法还原回去了。)
在正式进入到更进一步矩阵运算的讨论之前,我们需要对矩阵建立一个更加形象化的理解。通常来说,我们会把高维空间中的一个个数看成是向量,而由这些向量组成的数组看成是一个矩阵。例如:(1,2),(3,4)是二维空间中的两个点,矩阵A就代表这两个点所组成的矩阵。
如果更进一步,我们希望在二维空间中找到一条直线,来拟合这两个点,也就是所谓的构建一个线性回归模型,我们可以设置线性回归方程: y = ax + b
带入(1,2)和(3,4)两个点之后,我们还可以进一步将表达式改写成矩阵表示形式,改写过程如下
而用矩阵表示线性方程组,则是矩阵的另一种常用用途,接下来,我们就可以通过上述矩阵方程组来求解系数向量x。
首先一个基本思路是,如果有个和A矩阵相关的另一个矩阵,假设为A−1A^{-1}A−1,可以使得二者相乘之后等于1,也就是A∗A−1=1A * A^{-1} = 1A∗A−1=1,那么在方程组左右两边同时左乘该矩阵,等式右边的计算结果A−1∗BA^{-1} * BA−1∗B就将是x系数向量的取值。而此处的A−1A^{-1}A−1就是所谓的AAA的逆矩阵。(并非所有矩阵都有逆矩阵,对于一个矩阵来说,首先必须是方正,其次矩阵的秩不能为零,满足两个条件才能求解逆矩阵。)
然后在方程组左右两边同时左乘A−1A^{-1}A−1,求解x
A\^{-1} \* A \* x= A\^{-1} \* B
E \* x = A\^{-1} \* B
x=A−1∗Bx = A^{-1} * Bx=A−1∗B
最终得到线性方程为: y = x + 1
补充:考场/手算求逆矩阵的标准步骤
1. 对于 2×22 \times 22×2 矩阵:伴随矩阵法(口诀法)
这是最快最直接的方法,适用于所有二阶方阵。
设矩阵 A=abcdA = \begin{bmatrix} a & b \\ c & d \end{bmatrix}A=acbd
-
前提判断: 计算行列式 ∣A∣=ad−bc|A| = ad - bc∣A∣=ad−bc。若 ∣A∣=0|A|=0∣A∣=0,则该矩阵不可逆。
-
口诀记忆: "主对角线换位置,副对角线变符号,最后除以行列式"。
-
计算公式:
A−1=1∣A∣d−b−caA^{-1} = \frac{1}{|A|} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}A−1=∣A∣1d−c−ba
2. 对于 3×33 \times 33×3 及更高阶矩阵:初等行变换法 (高斯-若尔当消元法)
这是手算高阶逆矩阵最通用、最不易出错的方法。
-
步骤 1 (构造增广矩阵): 将原矩阵 AAA 和同阶单位矩阵 III 左右拼接在一起,构造出一个 n×2nn \times 2nn×2n 的增广矩阵 A∣IA \\mid IA∣I。
-
步骤 2 (初等行变换): 仅通过矩阵的行操作(某行乘非零常数、两行互换、某行的倍数加到另一行),努力把左侧的 AAA 化为单位矩阵 III。
- 手算技巧: 先利用消元法把第一列下方的元素变成
0,再处理第二列,依此类推,最后处理对角线上方的元素。尽量推迟产生分数的时间以避免算错。
- 手算技巧: 先利用消元法把第一列下方的元素变成
-
步骤 3 (得出结果): 当左侧成功变成单位矩阵 III 时,右侧原本的单位矩阵 III 就自然变成了逆矩阵 A−1A^{-1}A−1。
即:A∣I→一系列初等行变换I∣A−1A \\mid I \xrightarrow{\text{一系列初等行变换}} I \\mid A\^{-1}A∣I一系列初等行变换 I∣A−1。
(进阶) 伴随矩阵法求解 3×33 \times 33×3 矩阵 (适合有严格步骤要求的解答题)
- 公式: A−1=1∣A∣A∗A^{-1} = \frac{1}{|A|} A^*A−1=∣A∣1A∗
- 步骤: 1. 先求出 ∣A∣|A|∣A∣。
2. 求出每个元素的代数余子式 CijC_{ij}Cij。
3. 将这些代数余子式排成矩阵后进行转置 (即第 iii 行第 jjj 列的位置放入 CjiC_{ji}Cji),得到伴随矩阵 A∗A^*A∗。
4. 最后整体除以 ∣A∣|A|∣A∣ 得到逆矩阵。
在机器学习考试中,常见的高阶矩阵求逆通常只有以下三种情况:
1. 对角矩阵 (Diagonal Matrix)
这是最常见的送分题。除了主对角线,其他地方全是 0。
- 怎么求逆? 直接把主对角线上的数字取倒数即可。
- 例如: A=diag(2,4,5)A = \text{diag}(2, 4, 5)A=diag(2,4,5),则 A−1=diag(1/2,1/4,1/5)A^{-1} = \text{diag}(1/2, 1/4, 1/5)A−1=diag(1/2,1/4,1/5)。
- 关联知识: 笔记中提到的特征分解 A=QΛQ−1A = Q \Lambda Q^{-1}A=QΛQ−1,中间那个 Λ\LambdaΛ 就是对角矩阵,求它的逆极其简单。
2. 正交矩阵 (Orthogonal Matrix)
- 怎么求逆? 笔记中特别强调过,正交矩阵的性质是 QTQ=IQ^T Q = IQTQ=I。这意味着它的逆矩阵就等于它的转置:A−1=ATA^{-1} = A^TA−1=AT。
- 考试场景: 题目可能会先让你证明这是一个正交矩阵(验证一下列向量长度为1且互相垂直),然后让你求逆。你只需要把矩阵沿着对角线翻转(转置)一下,5秒钟就能写出答案!SVD 分解中的 UUU 和 VVV 矩阵经常这么考。
3. 利用分块矩阵或已知公式
题目可能会给你一个很大的矩阵,但它可以被划分为几个小区块(比如左上角是个 2×22 \times 22×2,右下角是个 2×22 \times 22×2,其余全是0)。这时候只要利用分块矩阵求逆公式分别求 2×22 \times 22×2 的逆即可。
(9). 特征分解 (Eigenvalue Decomposition)
引言:
矩阵分解有非常多门派,常见的如 QR 分解、LU 分解、特征分解、SVD 分解等。虽然在形式上,它们都是将一个复杂的矩阵拆分成几个特殊矩阵(如正交阵、对角阵)的乘积,但本质上,矩阵分解是为了剥离表象,去探索矩阵更深层次的几何属性和物理规律。 下面主要围绕深度学习中最核心的特征分解 和SVD分解展开讲解。
核心概念:
特征分解旨在拆解一个**方阵**的核心 DNA。当一个矩阵作用于空间中的一组向量时,绝大多数向量都会被改变方向;但有一类极其特殊的向量,它们在变换后方向完全不变(或完全反向),仅仅是长度被拉伸或压缩了。
- 一个矩阵作用于空间中的一组向量"在高等数学的视角里,矩阵不仅仅是一堆死板的数字,它是一个"动作",一种对空间的"变换"。当你用一个矩阵 AAA 去乘一个向量 x\mathbf{x}x(即 AxA\mathbf{x}Ax),这就相当于你抓住这个空间,对它进行拉伸、挤压、或者旋转。空间里的向量就像是画在橡皮筋上的箭头,随着空间的扭曲,它们也会跟着变换位置。
- "绝大多数向量都会被改变方向"想象你在纸上画了一个指向右上角的箭头。现在我把这张纸横向拉伸两倍,再纵向斜切一下(这就是矩阵变换)。你会发现,原本指向右上角的箭头,可能被扯得偏向了右下角。对于空间中 99% 的普通向量来说,经历矩阵变换后,它们不仅长度变了,连指向的方向也偏离了原来的轨道。
- 但有一类极其特殊的向量...方向完全不变,仅长度被拉伸或压缩"在这一片混乱的扭曲空间中,有几根极其"倔强"的箭头。不管你怎么用这个特定的矩阵去拉伸、挤压空间,这几根箭头就像是被钉在了自己原本的直线上。它们绝对不会发生旋转或偏移,唯一发生改变的,只是它们变长了、变短了,或者反向了(乘了个负数)。这些"倔强、不偏离方向"的特殊箭头,就叫作矩阵的 特征向量 (Eigenvector)。它们被拉伸或压缩的"倍数",就叫作对应的 特征值 (Eigenvalue)。
- 特征向量 (Eigenvector):
- 直观理解: 它代表了矩阵这个空间变换操作中的**"独立方向"或"主轴"**。
- 物理意义: 不管矩阵怎么扭曲空间,这些方向就像是空间的"骨架",岿然不动。特征向量之间通常是线性无关的(在对称矩阵中甚至相互垂直正交)。
- 特征值 (Eigenvalue):
- 直观理解: 它代表了矩阵在对应特征向量那个方向上的**"拉伸/压缩倍数"**。
- 物理/信息意义: 它是特征向量的"权重"。特征值的绝对值越大,说明矩阵在这个方向上施加的能量(或包含的信息量、方差)越大。
- 与秩的关系: 极其重要!一个方阵中非零特征值的个数,严格等于这个矩阵的秩 (Rank)。如果某个特征值为 0,说明矩阵在那个方向上把空间彻底"压扁"了。
公式与拆解:
将方阵 AAA 分解为三个矩阵的乘积:
A=QΛQ−1A = Q \Lambda Q^{-1}A=QΛQ−1
参数详解:
- QQQ (特征向量矩阵): 它是由矩阵 AAA 的所有特征向量按列拼成的一个方阵。
- Q−1Q^{-1}Q−1 (逆矩阵): 是 QQQ 的逆矩阵。(注:如果 AAA 是一个实对称矩阵,那么 QQQ 会是一个正交矩阵,此时 Q−1=QTQ^{-1} = Q^TQ−1=QT,公式可以直接简写为 A=QΛQTA = Q \Lambda Q^TA=QΛQT,计算极其高效!)
- Λ\LambdaΛ (特征值对角阵): 是一个除了主对角线以外其他元素全为 0 的矩阵。主对角线上的元素就是矩阵 AAA 的特征值 。
- 避坑提醒: 在未经人工排序的情况下,Λ\LambdaΛ 中的特征值排列是无序的(并非默认降序)。对角线上的第 iii 个特征值,严格对应着矩阵 QQQ 中的第 iii 列特征向量。
总结:
A=QΛQ−1A = Q \Lambda Q^{-1}A=QΛQ−1 其实是在描述一个三步走的过程:
- Q−1Q^{-1}Q−1:把原本杂乱的坐标系,旋转对齐到矩阵的"骨架(特征向量)"上。
- Λ\LambdaΛ:在骨架方向上,按照"特征值"的大小,进行简单的、独立的拉伸或缩放。
- QQQ:把缩放完的空间,再旋转回原来的坐标系中。
一. 线性模型概述
1. 通用性与优势
- 通用性: 许多自然与社会科学过程可以用线性模型进行初步近似。
- 可分析性: 具有明确的解析解,且为许多复杂机器学习核心概念(如正则化、损失函数)提供了最佳切入点。
- 模块化: 通常作为更大复杂系统(如神经网络的神经元)的基础模块。
2. 基本符号约定
- mmm:训练样本的总数。
- xxx:输入特征(自变量)。
- yyy:输出标签(因变量/真实值)。
- (x(i),y(i))(x^{(i)}, y^{(i)})(x(i),y(i)):表示第 iii 个训练样本对。
二. 一元线性回归
处理单个输入特征与单个输出值之间的关系。
1. 模型表示 (Hypothesis)
hθ(x)=θ0+θ1xh_{\theta}(x) = \theta_0 + \theta_1 xhθ(x)=θ0+θ1x
其中 θ0\theta_0θ0 为截距(Bias),θ1\theta_1θ1 为权重(Weight/Slope)。
2. 损失函数 (Cost Function)
通常使用均方误差(MSE)的一半,方便求导:
J(θ0,θ1)=12m∑i=1m(hθ(x(i))−y(i))2J(\theta_0, \theta_1) = \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
- 目标: 寻找 θ0,θ1\theta_0, \theta_1θ0,θ1 使得 J(θ0,θ1)J(\theta_0, \theta_1)J(θ0,θ1) 达到最小。
三. 多元线性回归
处理多个输入特征(ddd 个)与单个输出值之间的关系。
1. 向量化表示
为了简化计算,引入 x0=1x_0 = 1x0=1,则特征向量与参数向量表示为:
- x=x0,x1,...,xdT\mathbf{x} = x_0, x_1, \\dots, x_d^Tx=x0,x1,...,xdT
- θ=θ0,θ1,...,θdT\mathbf{\theta} = \\theta_0, \\theta_1, \\dots, \\theta_d^Tθ=θ0,θ1,...,θdT
模型公式:
hθ(x)=θ0x0+θ1x1+⋯+θdxd=θTxh_{\theta}(\mathbf{x}) = \theta_0 x_0 + \theta_1 x_1 + \dots + \theta_d x_d = \mathbf{\theta}^T \mathbf{x}hθ(x)=θ0x0+θ1x1+⋯+θdxd=θTx
2. 矩阵形式
设 XXX 为 m×(d+1)m \times (d+1)m×(d+1) 维的特征矩阵(每一行为一个样本),y\mathbf{y}y 为 mmm 维的目标向量:
J(θ)=12m(Xθ−y)T(Xθ−y)J(\mathbf{\theta}) = \frac{1}{2m} (X\mathbf{\theta} - \mathbf{y})^T (X\mathbf{\theta} - \mathbf{y})J(θ)=2m1(Xθ−y)T(Xθ−y)
四. 参数求解方法
1. 最小二乘法解析解
(1).一元线性回归公式
θ1=∑i=1mx(i)(y(i)−yˉ)∑i=1mx(i)(x(i)−xˉ)\theta_1 = \frac{\sum_{i=1}^{m} x^{(i)}(y^{(i)} - \bar{y})}{\sum_{i=1}^{m} x^{(i)}(x^{(i)} - \bar{x})}θ1=∑i=1mx(i)(x(i)−xˉ)∑i=1mx(i)(y(i)−yˉ) 或
θ1=∑i=1mx(i)y(i)−mxˉyˉ∑i=1m(x(i))2−mxˉ2\theta_1 = \frac{\sum_{i=1}^{m} x^{(i)}y^{(i)} - m\bar{x}\bar{y}}{\sum_{i=1}^{m} (x^{(i)})^2 - m\bar{x}^2}θ1=∑i=1m(x(i))2−mxˉ2∑i=1mx(i)y(i)−mxˉyˉ
θ0=yˉ−θ1xˉ\theta_0 = \bar{y} - \theta_1 \bar{x}θ0=yˉ−θ1xˉ
(2).一元线性回归证明
①. 设定目标:损失函数
我们要找一条直线 f(x)=θ0+θ1xf(x) = \theta_0 + \theta_1 xf(x)=θ0+θ1x。
J(θ0,θ1)=12∑i=1m(θ0+θ1x(i)−y(i))2J(\theta_0, \theta_1) = \frac{1}{2} \sum_{i=1}^{m} (\theta_0 + \theta_1 x^{(i)} - y^{(i)})^2J(θ0,θ1)=21i=1∑m(θ0+θ1x(i)−y(i))2
注:
- 前面乘个 12\frac{1}{2}21 是为了微积分求导时和平方的 222 约掉,方便计算,不影响求极小值的位置。
- 要把证明中的损失函数从 12SSE\frac{1}{2} SSE21SSE 改为 12MSE\frac{1}{2} MSE21MSE,核心区别在于公式中多了一个样本量 mmm 的倒数。由于 mmm 是一个常数,它在求导并令其为 0 的过程中会被约掉,因此最终的解析解 θ0\theta_0θ0 和 θ1\theta_1θ1 的表达式保持不变。
②. 核心原理:求偏导数等于 0
因为我们有两个未知数 θ0\theta_0θ0 和 θ1\theta_1θ1,我们需要分别对它们求偏导数,并令其等于 0:
③. 推导截距 θ0\theta_0θ0 的公式
我们先对 θ0\theta_0θ0 求偏导,并令结果为 0:
∂J∂θ0=∑i=1m(θ0+θ1x(i)−y(i))=0\frac{\partial J}{\partial \theta_0} = \sum_{i=1}^{m} (\theta_0 + \theta_1 x^{(i)} - y^{(i)}) = 0∂θ0∂J=i=1∑m(θ0+θ1x(i)−y(i))=0
把求和符号拆开:
mθ0+θ1∑i=1mx(i)−∑i=1my(i)=0m\theta_0 + \theta_1 \sum_{i=1}^{m} x^{(i)} - \sum_{i=1}^{m} y^{(i)} = 0mθ0+θ1i=1∑mx(i)−i=1∑my(i)=0
等式两边同时除以样本数量 mmm:
θ0+θ1xˉ−yˉ=0\theta_0 + \theta_1 \bar{x} - \bar{y} = 0θ0+θ1xˉ−yˉ=0
把 θ0\theta_0θ0 留在一边,移项就得到了你图片中的公式:
θ0=yˉ−θ1xˉ\theta_0 = \bar{y} - \theta_1 \bar{x}θ0=yˉ−θ1xˉ
④. 推导斜率 θ1\theta_1θ1 的公式
接着,我们对 θ1\theta_1θ1 求偏导(根据链式法则,要多乘一个 x(i)x^{(i)}x(i)),并令结果为 0:
∂J∂θ1=∑i=1m(θ0+θ1x(i)−y(i))⋅x(i)=0\frac{\partial J}{\partial \theta_1} = \sum_{i=1}^{m} (\theta_0 + \theta_1 x^{(i)} - y^{(i)}) \cdot x^{(i)} = 0∂θ1∂J=i=1∑m(θ0+θ1x(i)−y(i))⋅x(i)=0
现在,把我们刚才求出来的 θ0=yˉ−θ1xˉ\theta_0 = \bar{y} - \theta_1 \bar{x}θ0=yˉ−θ1xˉ 代入到这个式子里:
∑i=1m(yˉ−θ1xˉ+θ1x(i)−y(i))⋅x(i)=0\sum_{i=1}^{m} (\bar{y} - \theta_1 \bar{x} + \theta_1 x^{(i)} - y^{(i)}) \cdot x^{(i)} = 0i=1∑m(yˉ−θ1xˉ+θ1x(i)−y(i))⋅x(i)=0
稍微重新组合一下括号里的项:
∑i=1mθ1(x(i)−xˉ)−(y(i)−yˉ)⋅x(i)=0\sum_{i=1}^{m} \left \\theta_1(x\^{(i)} - \\bar{x}) - (y\^{(i)} - \\bar{y}) \\right \cdot x^{(i)} = 0i=1∑mθ1(x(i)−xˉ)−(y(i)−yˉ)⋅x(i)=0
把 x(i)x^{(i)}x(i) 乘进去并分成两部分:
θ1∑i=1m(x(i)−xˉ)x(i)=∑i=1m(y(i)−yˉ)x(i)\theta_1 \sum_{i=1}^{m} (x^{(i)} - \bar{x}) x^{(i)} = \sum_{i=1}^{m} (y^{(i)} - \bar{y}) x^{(i)}θ1i=1∑m(x(i)−xˉ)x(i)=i=1∑m(y(i)−yˉ)x(i)
由此得出 θ1\theta_1θ1 的标准形式:
θ1=∑i=1mx(i)(y(i)−yˉ)∑i=1mx(i)(x(i)−xˉ)\theta_1 = \frac{\sum_{i=1}^{m} x^{(i)}(y^{(i)} - \bar{y})}{\sum_{i=1}^{m} x^{(i)}(x^{(i)} - \bar{x})}θ1=∑i=1mx(i)(x(i)−xˉ)∑i=1mx(i)(y(i)−yˉ)
以上面公式的分子为例展开:
∑i=1m(x(i)y(i)−x(i)yˉ)=∑i=1mx(i)y(i)−yˉ∑i=1mx(i)\sum_{i=1}^{m} (x^{(i)}y^{(i)} - x^{(i)}\bar{y}) = \sum_{i=1}^{m} x^{(i)}y^{(i)} - \bar{y}\sum_{i=1}^{m}x^{(i)}i=1∑m(x(i)y(i)−x(i)yˉ)=i=1∑mx(i)y(i)−yˉi=1∑mx(i)
因为 ∑x(i)=mxˉ\sum x^{(i)} = m\bar{x}∑x(i)=mxˉ,代入进去就变成了:
∑i=1mx(i)y(i)−mxˉyˉ\sum_{i=1}^{m} x^{(i)}y^{(i)} - m\bar{x}\bar{y}i=1∑mx(i)y(i)−mxˉyˉ
(3).多元线性回归公式
最小二乘法要求:(XTX)(X^TX)(XTX)必须可逆,XXX是特征矩阵。
通过令 ∇θJ(θ)=0\nabla_{\theta} J(\theta) = 0∇θJ(θ)=0,可以直接求得全局最优解:
θ=(XTX)−1XTy\mathbf{\theta} = (X^T X)^{-1} X^T \mathbf{y}θ=(XTX)−1XTy
XTXX^T XXTX 不可逆(奇异矩阵)的情况:
- 特征冗余: 存在两个特征线性相关(多重共线性)。
- 特征过多: 样本数 mmm 小于特征数 ddd(此时矩阵不满秩)。
(4).多元线性回归证明(最小二乘法的矩阵解析解推导)
数学补充:
-
双竖线 ∣∣⋅∣∣|| \cdot ||∣∣⋅∣∣:范数 (Norm)
在数学中,双竖线用来表示一个向量的"大小"或"长度"。就像绝对值 ∣x∣|x|∣x∣ 表示实数的大小一样,∣∣v∣∣||v||∣∣v∣∣ 表示向量 vvv 在空间中的大小。
-
下标 2_22:L2 范数 (L2 Norm)
向量有多种衡量大小的方法(比如 L1 曼哈顿距离),下标的
2代表我们使用的是 L2 范数(欧几里得距离)。它的计算方法就是把向量里所有元素平方、求和、再开根号(就是勾股定理在多维空间的延伸)。
假设有一个误差向量 e=e1e2e3e = \begin{bmatrix} e_1 \\ e_2 \\ e_3 \end{bmatrix}e= e1e2e3 ,那么:
∣∣e∣∣2=e12+e22+e32||e||_2 = \sqrt{e_1^2 + e_2^2 + e_3^2}∣∣e∣∣2=e12+e22+e32
-
上标 2^22:平方 (Squared)
上标的2就是最普通的平方操作。它的作用极其巧妙------把 L2 范数公式里的根号给抵消掉了!
所以,加上平方后:
∣∣e∣∣22=(e12+e22+e32)2=e12+e22+e32||e||_2^2 = (\sqrt{e_1^2 + e_2^2 + e_3^2})^2 = e_1^2 + e_2^2 + e_3^2∣∣e∣∣22=(e12+e22+e32 )2=e12+e22+e32
-
在线性代数中,一个列向量的 L2 范数平方,刚好等于它的转置乘以它自己:
∣∣e∣∣22=eTe=e1e2e3e1e2e3=e12+e22+e32||e||_2^2 = e^T e = \begin{bmatrix} e_1 & e_2 & e_3 \end{bmatrix} \begin{bmatrix} e_1 \\ e_2 \\ e_3 \end{bmatrix} = e_1^2 + e_2^2 + e_3^2∣∣e∣∣22=eTe=e1e2e3 e1e2e3 =e12+e22+e32
-
矩阵转置运算法则:
- 加减法的转置: (A±B)T=AT±BT(A \pm B)^T = A^T \pm B^T(A±B)T=AT±BT
- 乘法的转置(重点:一定要倒序!): (AB)T=BTAT(AB)^T = B^TA^T(AB)T=BTAT
-
矩阵求导法则(多维空间的"求导公式表"):
在阅读机器学习推导时,我们可以直接把标量世界(高中一元函数)的求导逻辑映射到矩阵世界。
符号统一定义:
- w^\hat{w}w^ 代表未知的变量列向量 (类比一元函数里的自变量 xxx)。
- a,A,B,Ca, A, B, Ca,A,B,C 等代表已知的常数标量或常数矩阵(类比一元函数里的常数系数)。
基于分母布局(机器学习最常用),我们有如下最基础的求导规则:
-
常数法则 :
∂a∂w^=0\frac{\partial a}{\partial \hat{w}} = 0∂w^∂a=0
-
线性项法则(无论变量在左还是在右) :
∂(CTBw^)∂w^=BTC\frac{\partial (C^T B \hat{w})}{\partial \hat{w}} = B^T C∂w^∂(CTBw^)=BTC
∂(w^TBTC)∂w^=BTC\frac{\partial (\hat{w}^T B^T C)}{\partial \hat{w}} = B^T C∂w^∂(w^TBTC)=BTC
-
二次项法则(最通用形态) :
∂(w^TBw^)∂w^=(B+BT)w^\frac{\partial (\hat{w}^T B \hat{w})}{\partial \hat{w}} = (B + B^T) \hat{w}∂w^∂(w^TBw^)=(B+BT)w^
如果常数矩阵 BBB 是对称矩阵(即 BT=BB^T = BBT=B)。此时公式可化简为:
∂(w^TBw^)∂w^=2Bw^\frac{\partial(\hat{w}^TB\hat{w})}{\partial\hat{w}} = 2B\hat{w}∂w^∂(w^TBw^)=2Bw^
线性项矩阵求导口诀(对列向量 w^\hat{w}w^ 求导):
- "剥洋葱,看常数" :把包含 w^\hat{w}w^ 的那一项拿掉,剩下的就是常数项。
- "变量在右,常数转置" :如果 w^\hat{w}w^ 在乘法算式的最右边,把剩下的常数项整体转置。
- "变量在左,常数照抄" :如果 w^T\hat{w}^Tw^T 在乘法算式的最左边,把剩下的常数项原封不动作为结果。
在实际工程计算中,使用矩阵表示远比代数推导简洁高效。
对于多元线性回归,我们将所有样本特征组合为特征矩阵 XXX(大小为 n×dn \times dn×d,即:n个样本,每个样本d个特征),将真实标签组合为列向量 yyy(大小为 n×1n \times 1n×1,即:n个样本)。
具象化展示(以 3个样本、2个特征 为例):
X原始=x11x12x21x22x31x32n×dy=y1y2y3n×1X_{原始} = \begin{bmatrix} x_{11} & x_{12} \\ x_{21} & x_{22} \\ x_{31} & x_{32} \end{bmatrix}{n \times d} \quad\quad y = \begin{bmatrix} y{1} \\ y_{2} \\ y_{3} \end{bmatrix}_{n \times 1}X原始= x11x21x31x12x22x32 n×dy= y1y2y3 n×1
为了把截距 bbb 融合进矩阵计算中,我们会在 XXX 的最右侧人为添加一列全为 111 的列,并将参数组合成一个统一的权重列向量 w^=w1,w2,...,wd,bT\hat{w} = w_1, w_2, ..., w_d, b^Tw^=w1,w2,...,wd,bT。
具象化展示(拼接常数列与权重向量):
X拼接后=x11x121x21x221x31x321n×(d+1)w^=w1w2b(d+1)×1X_{拼接后} = \begin{bmatrix} x_{11} & x_{12} & \mathbf{1} \\ x_{21} & x_{22} & \mathbf{1} \\ x_{31} & x_{32} & \mathbf{1} \end{bmatrix}{n \times (d+1)} \quad\quad \hat{w} = \begin{bmatrix} w_1 \\ w_2 \\ \mathbf{b} \end{bmatrix}{(d+1) \times 1}X拼接后= x11x21x31x12x22x32111 n×(d+1)w^= w1w2b (d+1)×1
此时,模型的预测值可表示为矩阵乘法 Xw^X\hat{w}Xw^。你可以直观地看到,添加全1列后,偏置项 bbb 被完美分配给了每一个样本:
Xw^=x11x121x21x221x31x321w1w2b=w1x11+w2x12+bw1x21+w2x22+bw1x31+w2x32+bn×1X\hat{w} = \begin{bmatrix} x_{11} & x_{12} & 1 \\ x_{21} & x_{22} & 1 \\ x_{31} & x_{32} & 1 \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ b \end{bmatrix} = \begin{bmatrix} w_1x_{11} + w_2x_{12} + \mathbf{b} \\ w_1x_{21} + w_2x_{22} + \mathbf{b} \\ w_1x_{31} + w_2x_{32} + \mathbf{b} \end{bmatrix}_{n \times 1}Xw^= x11x21x31x12x22x32111 w1w2b = w1x11+w2x12+bw1x21+w2x22+bw1x31+w2x32+b n×1
优化目标(损失函数 SSE)的矩阵形式可写为预测值与真实值差值的平方和:
SSE=∣∣y−Xw^∣∣22=(y−Xw^)T(y−Xw^)SSE = ||y - X\hat{w}||_2^2 = (y - X\hat{w})^T(y - X\hat{w})SSE=∣∣y−Xw^∣∣22=(y−Xw^)T(y−Xw^)
将其展开:
SSE=yTy−yTXw^−w^TXTy+w^TXTXw^SSE = y^Ty - y^TX\hat{w} - \hat{w}^TX^Ty + \hat{w}^TX^TX\hat{w}SSE=yTy−yTXw^−w^TXTy+w^TXTXw^
SSE=yTy−2w^TXTy+w^TXTXw^SSE = y^Ty - 2\hat{w}^TX^Ty + \hat{w}^TX^TX\hat{w}SSE=yTy−2w^TXTy+w^TXTXw^
对权重向量 w^\hat{w}w^ 求导并令其为 0(利用矩阵求导法则 ∂(Aw^)∂w^=AT\frac{\partial(A\hat{w})}{\partial\hat{w}} = A^T∂w^∂(Aw^)=AT 以及 ∂(w^TAw^)∂w^=2Aw^\frac{\partial(\hat{w}^TA\hat{w})}{\partial\hat{w}} = 2A\hat{w}∂w^∂(w^TAw^)=2Aw^):
∂SSE∂w^=−2XTy+2XTXw^=0\frac{\partial{SSE}}{\partial{\hat{w}}} = -2X^Ty + 2X^TX\hat{w} = 0∂w^∂SSE=−2XTy+2XTXw^=0
化简后得到正规方程 (Normal Equation):
XTXw^=XTy\boldsymbol{X^TX\hat{w} = X^Ty}XTXw^=XTy
维度校验:
- XTXX^TXXTX 得到了一个形状为 (d+1)×(d+1)(d+1) \times (d+1)(d+1)×(d+1) 的方阵。
- XTyX^TyXTy 得到了一个形状为 (d+1)×1(d+1) \times 1(d+1)×1 的列向量。
- 等式两边的形状完美契合!
最小二乘法最终矩阵解析解:
要使上式有解,等价于方阵 XTXX^TXXTX (交叉乘积矩阵) 存在逆矩阵。若其可逆,则在等式两边同乘 (XTX)−1(X^TX)^{-1}(XTX)−1,最终求得权重最优解为:
w^=(XTX)−1XTy\boldsymbol{\hat{w} = (X^TX)^{-1}X^Ty}w^=(XTX)−1XTy
2. 梯度下降法
当 XTXX^T XXTX 规模过大或不可逆时,使用迭代法求解:
θj:=θj−α∂∂θjJ(θ)\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta)θj:=θj−α∂θj∂J(θ)
- α\alphaα:学习率(Learning Rate),控制步长。
####(1).全批量梯度下降
每次更新利用所有训练样本计算误差
训练数据多时,复杂度高,效率低
(2).随机梯度下降
每次更新利用单个训练数据计算误差
训练过程受数据影响大,波动大,效率不高
(3).小批量梯度下降
每次更新利用小批量训练数据计算误差
平衡了全批量梯度下降和随机梯度下降
(4).矩阵解析推导
损失函数为 L=12mSSE=12m∣∣y−Xw^∣∣22L = \frac{1}{2m}SSE = \frac{1}{2m}||y - X\hat{w}||_2^2L=2m1SSE=2m1∣∣y−Xw^∣∣22,其对权重向量 w^\hat{w}w^ 的梯度矩阵推导为:∇f(w^)=1mXT(Xw^−y)\nabla f(\hat{w}) = \frac{1}{m} X^T(X\hat{w} - y)∇f(w^)=m1XT(Xw^−y)
代入参数更新的迭代公式 w^new=w^old−α⋅∇f(w^old)\boldsymbol{\hat{w}{new}} = \boldsymbol{\hat{w}{old}} - \alpha \cdot \nabla f(\boldsymbol{\hat{w}_{old}})w^new=w^old−α⋅∇f(w^old),即可得到矩阵解析迭代公式:
w^new=w^old−α⋅1mXT(Xw^old−y)\boldsymbol{\hat{w}{new}} = \boldsymbol{\hat{w}{old}} - \alpha \cdot \frac{1}{m}X^T(X\boldsymbol{\hat{w}_{old}} - y)w^new=w^old−α⋅m1XT(Xw^old−y)
公式中各关键参数的含义说明:
- L\boldsymbol{L}L 或 L(w^)\boldsymbol{L(\hat{w})}L(w^):损失函数 (Loss Function)。
- m\boldsymbol{m}m:样本总数,即参与计算的数据条数。
- y\boldsymbol{y}y:真实标签向量 ,形状为 m×1m \times 1m×1 的列向量,包含所有样本的真实输出值。
- X\boldsymbol{X}X:特征矩阵 (Feature Matrix) ,形状为 m×(d+1)m \times (d+1)m×(d+1) 的矩阵(包含 ddd 个特征,且通常外加一列全 111 用于计算截距/偏置 bbb)。它的每一行代表一个独立样本的特征。
- w^\boldsymbol{\hat{w}}w^:权重参数列向量 ,形状为 (d+1)×1(d+1) \times 1(d+1)×1,包含了所有的待优化参数(包括各个特征的权重 wiw_iwi 以及截距 bbb)。w^old\boldsymbol{\hat{w}{old}}w^old 代表本轮迭代前的旧参数,w^new\boldsymbol{\hat{w}{new}}w^new 代表更新后的新参数。
- Xw^\boldsymbol{X\hat{w}}Xw^:预测值向量 ,即当前模型对所有 mmm 个样本的预测结果向量。
- (Xw^−y)\boldsymbol{(X\hat{w} - y)}(Xw^−y):误差向量 (Error Vector),即模型预测值与真实值之间的差值。
- α\boldsymbol{\alpha}α:学习率 (Learning Rate) ,决定了参数更新时每次迈出的步长大小(等同于前文提到的 η\etaη)。
- ∇f(w^)\boldsymbol{\nabla f(\hat{w})}∇f(w^):梯度向量,损失函数对所有参数求偏导后组合而成的列向量,代表函数值上升最快的方向。
下面给出 L=12mSSE=12m∣∣y−Xw^∣∣22L = \frac{1}{2m}SSE = \frac{1}{2m}||y - X\hat{w}||_2^2L=2m1SSE=2m1∣∣y−Xw^∣∣22到∇f(w^)=1mXT(Xw^−y)\nabla f(\hat{w}) = \frac{1}{m} X^T(X\hat{w} - y)∇f(w^)=m1XT(Xw^−y)的推导全过程
已知目标函数(修正后的损失函数):
L(w^)=12m∣∣y−Xw^∣∣22L(\hat{w}) = \frac{1}{2m} ||y - X\hat{w}||_2^2L(w^)=2m1∣∣y−Xw^∣∣22
推导目标:求 LLL 对列向量 w^\hat{w}w^ 的导数(梯度):
∇f(w^)=∂L∂w^=1mXT(Xw^−y)\nabla f(\hat{w}) = \frac{\partial L}{\partial \hat{w}} = \frac{1}{m} X^T(X\hat{w} - y)∇f(w^)=∂w^∂L=m1XT(Xw^−y)
Step 1. 将 L2 范数平方展开为矩阵乘法
根据矩阵性质,一个列向量 vvv 的 L2 范数平方等于它的转置乘以它自己:∣∣v∣∣22=vTv||v||_2^2 = v^Tv∣∣v∣∣22=vTv。
我们将 v=(y−Xw^)v = (y - X\hat{w})v=(y−Xw^) 代入:
L(w^)=12m(y−Xw^)T(y−Xw^)L(\hat{w}) = \frac{1}{2m} (y - X\hat{w})^T(y - X\hat{w})L(w^)=2m1(y−Xw^)T(y−Xw^)
根据转置的分配律 (A−B)T=AT−BT(A - B)^T = A^T - B^T(A−B)T=AT−BT,以及矩阵乘法转置律 (AB)T=BTAT(AB)^T = B^TA^T(AB)T=BTAT,将括号展开:
L(w^)=12m(yT−w^TXT)(y−Xw^)L(\hat{w}) = \frac{1}{2m} (y^T - \hat{w}^TX^T)(y - X\hat{w})L(w^)=2m1(yT−w^TXT)(y−Xw^)
L(w^)=12m(yTy−yTXw^−w^TXTy+w^TXTXw^)L(\hat{w}) = \frac{1}{2m} (y^Ty - y^TX\hat{w} - \hat{w}^TX^Ty + \hat{w}^TX^TX\hat{w})L(w^)=2m1(yTy−yTXw^−w^TXTy+w^TXTXw^)
Step 2. 合并中间的标量项
观察展开式中间的两项:yTXw^y^TX\hat{w}yTXw^ 和 w^TXTy\hat{w}^TX^Tyw^TXTy。
由于它们的结果最终都是表示"误差平方和"的一部分,其计算结果必定是一个实数(标量) (维度为 1×11 \times 11×1)。
在矩阵代数中,一个标量的转置等于它本身 。 因此:
(yTXw^)T=w^TXTy(y^TX\hat{w})^T = \hat{w}^TX^Ty(yTXw^)T=w^TXTy
这意味着中间两项其实是完全相等的。我们可以将它们合并为一项(通常保留 w^T\hat{w}^Tw^T 在前的形式以便于后续套用求导公式):
L(w^)=12m(yTy−2w^TXTy+w^TXTXw^)L(\hat{w}) = \frac{1}{2m} (y^Ty - 2\hat{w}^TX^Ty + \hat{w}^TX^TX\hat{w})L(w^)=2m1(yTy−2w^TXTy+w^TXTXw^)
Step 3. 利用矩阵求导法则逐项求导
接下来,我们对式子中的每一项关于列向量 w^\hat{w}w^ 求导。
前置复习:必备的两个矩阵求导公式
- 线性项法则 :∂(w^Ta)∂w^=a\frac{\partial (\hat{w}^T a)}{\partial \hat{w}} = a∂w^∂(w^Ta)=a (其中 aaa 是常数列向量)
- 二次项法则 :∂(w^TAw^)∂w^=(A+AT)w^\frac{\partial (\hat{w}^T A \hat{w})}{\partial \hat{w}} = (A + A^T)\hat{w}∂w^∂(w^TAw^)=(A+AT)w^。如果常数矩阵 AAA 是对称矩阵(即 A=ATA = A^TA=AT),则结果化简为 2Aw^2A\hat{w}2Aw^。
现在,对常数 12m\frac{1}{2m}2m1 内部的三项分别求导:
- 第一项 yTyy^TyyTy :不包含变量 w^\hat{w}w^,视为常数,导数为 000。
- 第二项 −2w^TXTy-2\hat{w}^TX^Ty−2w^TXTy :这是一个线性项。把 (XTy)(X^Ty)(XTy) 看作常数向量 aaa,套用线性项法则:
∂(−2w^TXTy)∂w^=−2XTy\frac{\partial (-2\hat{w}^TX^Ty)}{\partial \hat{w}} = -2X^Ty∂w^∂(−2w^TXTy)=−2XTy- 第三项 w^TXTXw^\hat{w}^TX^TX\hat{w}w^TXTXw^ :这是一个二次项。把 (XTX)(X^TX)(XTX) 看作常数矩阵 AAA。由于任意矩阵乘以自身的转置一定是对称矩阵(即 (XTX)T=XTX(X^TX)^T = X^TX(XTX)T=XTX),套用对称矩阵的二次项法则:
∂(w^TXTXw^)∂w^=2XTXw^\frac{\partial (\hat{w}^TX^TX\hat{w})}{\partial \hat{w}} = 2X^TX\hat{w}∂w^∂(w^TXTXw^)=2XTXw^Step 4. 汇总求导结果并化简
将上述三项的导数结果放回原式,并乘以外面的常数 12m\frac{1}{2m}2m1:
∂L∂w^=12m(0−2XTy+2XTXw^)\frac{\partial L}{\partial \hat{w}} = \frac{1}{2m} \Big( 0 - 2X^Ty + 2X^TX\hat{w} \Big)∂w^∂L=2m1(0−2XTy+2XTXw^)
提取括号内的公因数 222 与外面的 12m\frac{1}{2m}2m1 约分抵消:
∂L∂w^=1m(−XTy+XTXw^)\frac{\partial L}{\partial \hat{w}} = \frac{1}{m} ( -X^Ty + X^TX\hat{w} )∂w^∂L=m1(−XTy+XTXw^)
调换顺序,并提取公因式 XTX^TXT:
∂L∂w^=1m(XTXw^−XTy)\frac{\partial L}{\partial \hat{w}} = \frac{1}{m} (X^TX\hat{w} - X^Ty)∂w^∂L=m1(XTXw^−XTy)
∇f(w^)=1mXT(Xw^−y)\nabla f(\hat{w}) = \frac{1}{m} X^T(X\hat{w} - y)∇f(w^)=m1XT(Xw^−y)
五. 岭回归与正则化
当 XTXX^T XXTX 不可逆或模型出现过拟合时,通过引入正则化项来解决。
1. 岭回归优化
岭回归(Ridge Regression),在数学上也被称为提克洪诺夫正则化,是传统线性回归模型的一种改良版本。
岭回归是一种引入了 L2 正则化惩罚项的线性分类和回归算法。它在传统的最小二乘法损失函数(均方误差)基础上,加入了一个与模型权重参数平方和成正比的惩罚项。
在所有的优化算法中,最小二乘法虽然高效且结果精确,但也有其局限性。核心在于最小二乘法的使用条件较为苛刻,要求特征张量的交叉乘积 (XTX)(X^TX)(XTX) 必须是满秩矩阵(Full-rank Matrix),才能进行求逆运算。而在实际情况中,若特征之间存在多重共线性,则无法直接使用最小二乘法进行求解。
最小二乘法解析解:
θ=(XTX)−1XTy\mathbf{\theta} = (X^TX)^{-1}X^T\mathbf{y}θ=(XTX)−1XTy
参数解释:
- θ\mathbf{\theta}θ (参数向量/Parameter Vector): 模型待估计的未知参数列向量,包含各特征权重 θ1,...,θdT\\theta_1, \\dots, \\theta_d^Tθ1,...,θdT 及偏置项 θ0\theta_0θ0。
- XXX (特征矩阵/Feature Matrix): 包含所有样本输入特征的矩阵。通常在首列增加全 1 列以对应偏置项 θ0\theta_0θ0。
- y\mathbf{y}y (标记向量/Label Vector): 包含所有样本真实输出结果的列向量。
当最小二乘法失效的情况时,其实往往也就代表原目标函数没有最优解或最优解不唯一。针对这样的情况,有很多中解决方案,例如,我们可以在原矩阵方程中加入一个扰动项λI\lambda IλI,修改后表达式如下:
θ=(XTX+λI)−1XTy\mathbf{\theta} = (X^TX + \lambda I)^{-1}X^T\mathbf{y}θ=(XTX+λI)−1XTy
参数解释:
- λ\lambdaλ (正则化系数/岭系数): 用于调节结构风险与经验风险的比例。
- III (单位矩阵/Identity Matrix): 维度与 XTXX^TXXTX 相同的单位阵。
- 说明:由矩阵性质可知,加入 λI\lambda IλI 后,(XTX+λI)(X^TX + \lambda I)(XTX+λI) 强行变为满秩,保证了矩阵一定可逆,从而使方程有确定解。这也就是岭回归的一般做法。
当然,上式修改后求得的结果就不再是全域最小值,而是一个接近最小值的点。鉴于许多目标函数本身也并不存在最小值或者唯一最小值,在优化的过程中略有偏差也是可以接受的。
2. 正则化损失函数
传统线性回归的优化目标是单纯地最小化预测值与真实值之间的残差平方和。
在原始均方误差(MSE)损失函数后添加 L2 正则化项(参数的平方和):
J(θ)=MSE(X,y,θ)+λ∑i=1dθi2J(\mathbf{\theta}) = \text{MSE}(X, \mathbf{y}, \mathbf{\theta}) + \lambda \sum_{i=1}^{d} \theta_i^2J(θ)=MSE(X,y,θ)+λi=1∑dθi2
用矩阵形式表示:
J(θ)=12m(Xθ−y)T(Xθ−y)+λθTθJ(\mathbf{\theta}) = \frac{1}{2m} (X\mathbf{\theta} - \mathbf{y})^T (X\mathbf{\theta} - \mathbf{y}) + \lambda \mathbf{\theta}^T \mathbf{\theta}J(θ)=2m1(Xθ−y)T(Xθ−y)+λθTθ
参数解释:
- J(θ)J(\mathbf{\theta})J(θ) (目标函数/代价函数): 衡量模型拟合程度与复杂度的综合指标。
- mmm (样本数量): 训练集中的样本总数。
- Xθ−yX\mathbf{\theta} - \mathbf{y}Xθ−y (残差向量): 预测输出值与真实标记值之间的差距。
- λ\lambdaλ (正则化系数): 惩罚项的权重。当 λ\lambdaλ 越大,模型对参数大小的惩罚越严厉,模型越简单。
- θTθ\mathbf{\theta}^T \mathbf{\theta}θTθ (L2 正则化项/罚项): 即所有参数的平方和 ∣∣θ∣∣22||\mathbf{\theta}||_2^2∣∣θ∣∣22,通过惩罚过大的权重参数来缓解过拟合。
3. 岭回归解析解
θ=(XTX+λI)−1XTy\mathbf{\theta} = (X^T X + \lambda I)^{-1} X^T \mathbf{y}θ=(XTX+λI)−1XTy
物理意义与作用:
- 物理意义: 加上 λI\lambda IλI(对角矩阵)后,使得矩阵变为满秩,从而保证一定可逆。
- 作用: 引入正则化通过限制参数 θ\mathbf{\theta}θ 的取值范围,有效降低了模型的复杂度(Capacity)。这种"以偏差换方差"的策略,虽然在训练集上误差略微上升,但显著提高了模型在未见数据上的泛化能力。

