从零推导线性回归:最小二乘法与梯度下降的数学原理

欢迎来到我的主页:【Echo-Nie

本篇文章收录于专栏【机器学习

本文所有内容相关代码都可在以下仓库中找到:
Github-MachineLearning


1 线性回归

1.1 什么是线性回归

线性回归是一种用来预测分析数据之间关系的工具。它的核心思想是找到一条直线(或者一个平面),让这条直线尽可能地"拟合"已有的数据点,通过这条直线,我们可以预测新的数据。

eg:

假设你想预测房价,你知道房子的大小(面积)和房价之间有关系。线性回归可以帮助你找到一条直线,表示"房子越大,房价越高"的关系。

这条直线的方程可以写成:
y = θ 0 + θ 1 x y = \theta_0 + \theta_1 x y=θ0+θ1x

其中:

  • y y y 是房价(目标变量)。
  • x x x 是房子的大小(特征)。
  • θ 0 \theta_0 θ0 是截距(当房子大小为 0 时的房价)。
  • θ 1 \theta_1 θ1 是斜率(房子每增加一平米,房价增加多少)。

简单线性回归:

如果只有一个特征(比如房子的大小),线性回归就是找到一条直线来拟合数据。公式是:
y = θ 0 + θ 1 x y = \theta_0 + \theta_1 x y=θ0+θ1x

  • 目标 :找到 θ 0 \theta_0 θ0 和 θ 1 \theta_1 θ1,使得这条直线最接近所有的数据点。
  • 怎么找 ?通过调整 θ 0 \theta_0 θ0 和 θ 1 \theta_1 θ1,让预测值 y y y 和实际值之间的误差最小。

多元线性回归:

如果有多个特征(比如房子的大小、房间数量、地段等),线性回归就是找到一个"平面"来拟合数据。公式是:
y = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n y=θ0+θ1x1+θ2x2+⋯+θnxn

这里:

x i x_i xi 是多个特征(比如房子大小、房间数量等); θ i \theta_i θi 是模型的参数,表示每个特征对房价的影响

  1. 拟合数据:线性回归就像在一堆散点图中画一条直线,让这条直线尽可能靠近所有的点。
  2. 预测:有了这条直线后,如果有一个新的数据点(比如一个新房子的大小),我们可以用这条直线来预测它的房价。
  3. 误差:预测值和实际值之间的差距叫误差。线性回归的目标是让所有数据的误差最小。

1.2 年龄和金钱举例

x 1 x_1 x1、 x 2 x_2 x2就是我们的两个特征(年龄,工资); Y Y Y是银行最终会借给我们多少钱。找到最合适的一条线(想象一个高维)来最好的拟合我们的数据点。

假设 θ 1 \theta_1 θ1是年龄的参数, θ 2 \theta_2 θ2是工资的参数

  1. 拟合平面
    h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 hθ(x)=θ0+θ1x1+θ2x2

    这里, θ 0 \theta_0 θ0 是偏置项, θ 1 \theta_1 θ1 和 θ 2 \theta_2 θ2 是权重, x 1 x_1 x1 和 x 2 x_2 x2 是输入特征。

  2. 引入 x 0 = 1 x_0 = 1 x0=1

    为了将偏置项 θ 0 \theta_0 θ0 也纳入向量化的形式,我们引入一个额外的特征 x 0 x_0 x0,并设 x 0 = 1 x_0 = 1 x0=1。相当于我们做数据预处理,矩阵最外围加了一圈1,方便计算。这样,公式可以写成:
    h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 hθ(x)=θ0x0+θ1x1+θ2x2

  3. 向量化表示

    现在,我们可以将权重 θ \theta θ 和特征 x x x 表示为向量:
    θ = [ θ 0 θ 1 θ 2 ] , x = [ x 0 x 1 x 2 ] \theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \end{bmatrix}, \quad x = \begin{bmatrix} x_0 \\ x_1 \\ x_2 \end{bmatrix} θ= θ0θ1θ2 ,x= x0x1x2

    这样,原始公式可以表示为这两个向量的点积:
    h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 = θ T x h_{\theta}(x) = \theta_0 x_0 + \theta_1 x_1 + \theta_2 x_2 = \theta^T x hθ(x)=θ0x0+θ1x1+θ2x2=θTx

    其中, θ T \theta^T θT 是向量 θ \theta θ 的转置。

  4. 一般化到 n n n 个特征

    如果有 n n n 个特征,公式可以推广为:
    h θ ( x ) = ∑ i = 0 n θ i x i = θ T x h_{\theta}(x) = \sum_{i=0}^{n} \theta_i x_i = \theta^T x hθ(x)=i=0∑nθixi=θTx

    这里, θ \theta θ 和 x x x 都是 n + 1 n+1 n+1 维的向量。

  5. 误差表示:

    误差真实值和预测值之间肯定是要存在差异的(用 ε \varepsilon ε 来表示该误差)。

对于每个样本:
y ( i ) = θ T x ( i ) + ε ( i ) y^{(i)} = \theta^T x^{(i)} + \varepsilon^{(i)} y(i)=θTx(i)+ε(i)

参数意义:

  • y ( i ) y^{(i)} y(i) 是第 i i i 个样本的真实值。
  • θ T x ( i ) \theta^T x^{(i)} θTx(i) 是模型对第 i i i 个样本的预测值。
  • ε ( i ) \varepsilon^{(i)} ε(i) 是第 i i i 个样本的误差,表示真实值和预测值之间的差异。

1.3 误差

误差是模型预测值和真实值之间的差距。比如你预测房价是 10 万,但实际房价是 15 万,那么误差就是 5 万。

误差 ε ( i ) \varepsilon^{(i)} ε(i) 是独立并且具有相同的分布,并且服从均值为 0 0 0、方差为 σ 2 \sigma^2 σ2 的高斯分布。

  • 独立:每个数据的误差是独立的,不会互相影响。比如张三贷款多了,不会影响李四的贷款。
  • 同分布:所有数据的误差都来自同一个"规律"。比如所有贷款误差都来自同一家银行的规则。
  • 高斯分布:误差大多数情况下比较小,偶尔会有一些大的误差,但这种情况很少。比如银行通常不会多给或少给太多钱,但偶尔可能会有一些特殊情况。

误差 ε ( i ) \varepsilon^{(i)} ε(i)​ 服从高斯分布:
ε ( i ) ∼ N ( 0 , σ 2 ) \varepsilon^{(i)} \sim \mathcal{N}(0, \sigma^2) ε(i)∼N(0,σ2)

为什么假设误差是高斯分布?

因为高斯分布(也叫正态分布)符合现实世界中很多现象的规律。比如大多数人的身高、体重等都集中在某个平均值附近,极端值很少。


1.4 误差的数学推导

线性回归模型假设目标变量 y y y 是输入特征 x x x 的线性组合加上一个误差项 ε \varepsilon ε :
y ( i ) = θ T x ( i ) + ε ( i ) y^{(i)} = \theta^T x^{(i)} + \varepsilon^{(i)} y(i)=θTx(i)+ε(i)

其中:

  • y ( i ) y^{(i)} y(i) 是第 i i i个观测值的实际值。
  • θ T x ( i ) \theta^T x^{(i)} θTx(i) 是模型对第 i i i个观测值的预测值。
  • ε ( i ) \varepsilon^{(i)} ε(i) 是第 i i i个观测值的误差。

1.4.1 误差的高斯分布假设

假设误差 ε ( i ) \varepsilon^{(i)} ε(i) 服从均值为 0 0 0、方差为 σ 2 \sigma^2 σ2 的高斯分布(正态分布)。其概率密度函数为:
p ( ε ( i ) ) = 1 2 π σ exp ⁡ ( − ( ε ( i ) ) 2 2 σ 2 ) p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(\varepsilon^{(i)})^{2}}{2\sigma^{2}}\right) p(ε(i))=2π σ1exp(−2σ2(ε(i))2)

这个假设的意义是:

  1. 误差是随机的,且大多数误差集中在 0 附近。
  2. 误差的分布是对称的,且较大的误差出现的概率较低。

1.4.2 将线性回归模型代入误差分布

从线性回归模型 y ( i ) = θ T x ( i ) + ε ( i ) y^{(i)} = \theta^T x^{(i)} + \varepsilon^{(i)} y(i)=θTx(i)+ε(i),我们可以将误差 ε ( i ) \varepsilon^{(i)} ε(i) 表示为:
ε ( i ) = y ( i ) − θ T x ( i ) \varepsilon^{(i)} = y^{(i)} - \theta^T x^{(i)} ε(i)=y(i)−θTx(i)

将这个表达式代入误差的高斯分布公式中,得到:
p ( ε ( i ) ) = 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^{2}}{2\sigma^{2}}\right) p(ε(i))=2π σ1exp(−2σ2(y(i)−θTx(i))2)


1.4.3 条件概率分布

由于 ε ( i ) = y ( i ) − θ T x ( i ) \varepsilon^{(i)} = y^{(i)} - \theta^T x^{(i)} ε(i)=y(i)−θTx(i) ,我们可以将 p ( ε ( i ) ) p(\varepsilon^{(i)}) p(ε(i)) 重新表示为 y ( i ) y^{(i)} y(i) 的条件概率分布:
p ( y ( i ) ∣ x ( i ) ; θ ) = 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) p(y^{(i)}|x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^{2}}{2\sigma^{2}}\right) p(y(i)∣x(i);θ)=2π σ1exp(−2σ2(y(i)−θTx(i))2)

在给定输入 x ( i ) x^{(i)} x(i) 和参数 θ \theta θ 的情况下, y ( i ) y^{(i)} y(i) 的概率分布。 y ( i ) y^{(i)} y(i) 的分布是以( θ T \theta^T θT 和 x ( i ) x^{(i)} x(i) )的某个组合为均值、 σ 2 \sigma^2 σ2为方差的高斯分布。什么意思呢?就是说,让( θ T \theta^T θT 和 x ( i ) x^{(i)} x(i) )的组合成为 y y y 的可能性越大越好


1.4.4 最大似然估计

为了找到最优的参数 θ \theta θ ,我们使用最大似然估计(Maximum Likelihood Estimation, MLE)。具体步骤如下:

似然函数:

假设所有观测值 y ( i ) y^{(i)} y(i) 是独立同分布的,则整个数据集的联合概率(似然函数)为:
L ( θ ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ; θ ) L(\theta) = \prod_{i=1}^{n} p(y^{(i)}|x^{(i)};\theta) L(θ)=i=1∏np(y(i)∣x(i);θ)

在独立同分布的前提下,联合概率等于边缘密度的乘积。

将条件概率分布代入:
L ( θ ) = ∏ i = 1 n 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) L(\theta) = \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^{2}}{2\sigma^{2}}\right) L(θ)=i=1∏n2π σ1exp(−2σ2(y(i)−θTx(i))2)

上述表示的是:什么样的参数与我们的数据组合之后恰好是真实值。

对数似然:

为了简化计算,取对数似然函数(乘法难解,改成加法 ):
ℓ ( θ ) = log ⁡ L ( θ ) = ∑ i = 1 n log ⁡ ( 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) ) \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log \left( \frac{1}{\sqrt{2\pi}\sigma} \exp\left(-\frac{(y^{(i)} - \theta^T x^{(i)})^{2}}{2\sigma^{2}}\right) \right) ℓ(θ)=logL(θ)=i=1∑nlog(2π σ1exp(−2σ2(y(i)−θTx(i))2))

Q:为什么能这么做呢?

A:因为我们只需要求出极值点 θ \theta θ ,而不是极值,改成 l o g log log 之后,极值 m m m 会变为 l o g m log^{m} logm ,但是极值点不变啊。

展开:
ℓ ( θ ) = ∑ i = 1 n ( log ⁡ 1 2 π σ − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) \ell(\theta) = \sum_{i=1}^{n} \left( \log \frac{1}{\sqrt{2\pi}\sigma} - \frac{(y^{(i)} - \theta^T x^{(i)})^{2}}{2\sigma^{2}} \right) ℓ(θ)=i=1∑n(log2π σ1−2σ2(y(i)−θTx(i))2)

去掉常数项(与 θ \theta θ 无关的项):
ℓ ( θ ) = − 1 2 σ 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 + 常数 \ell(\theta) = -\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} (y^{(i)} - \theta^T x^{(i)})^{2} + \text{常数} ℓ(θ)=−2σ21i=1∑n(y(i)−θTx(i))2+常数

最大化对数似然:

最大化对数似然函数等价于最小化以下目标函数:
J ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 J(\theta) = \frac{1}{2} \sum_{i=1}^{n} (y^{(i)} - \theta^T x^{(i)})^{2} J(θ)=21i=1∑n(y(i)−θTx(i))2

Q:什么越大什么越小,乱七八糟的?

A:因为 ℓ ( θ ) \ell(\theta) ℓ(θ) 是一个常数减去对数似然,我们要让 ℓ ( θ ) \ell(\theta) ℓ(θ) 最大的话,就是让对数似然最小,因为对数似然恒正。

这就是最小二乘法的目标函数,以上就是通过最大似然估计,推导出最小二乘法。


1.5 目标函数

目标函数 J ( θ ) J(\theta) J(θ) 定义为:

J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 = \frac{1}{2} (X\theta - y)^T (X\theta - y) J(θ)=21i=1∑m(hθ(x(i))−y(i))2=21(Xθ−y)T(Xθ−y)

这里, h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是假设函数, y ( i ) y^{(i)} y(i) 是实际值, X X X 是特征矩阵, θ \theta θ 是参数向量。目标函数衡量了预测值与实际值之间的误差。

这个目标函数实际上就是最小二乘法的目标函数,其中 θ T x ( i ) \theta^T x^{(i)} θTx(i) 就是假设函数 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i))

h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是为了表示模型的预测值,它与实际值 y ( i ) y^{(i)} y(i) 之间的差异(误差)被用来构建目标函数。

求偏导:

为了找到最小化目标函数的参数 θ \theta θ,对 J ( θ ) J(\theta) J(θ) 求偏导并令其等于零。首先展开目标函数:

J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2} (X\theta - y)^T (X\theta - y) J(θ)=21(Xθ−y)T(Xθ−y)

展开后得到:

J ( θ ) = 1 2 ( θ T X T − y T ) ( X θ − y ) J(\theta) = \frac{1}{2} (\theta^T X^T - y^T)(X\theta - y) J(θ)=21(θTXT−yT)(Xθ−y)

进一步展开:

J ( θ ) = 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) J(\theta) = \frac{1}{2} (\theta^T X^T X\theta - \theta^T X^T y - y^T X\theta + y^T y) J(θ)=21(θTXTXθ−θTXTy−yTXθ+yTy)

对 θ \theta θ 求偏导:

∇ θ J ( θ ) = ∇ θ ( 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ) \nabla_\theta J(\theta) = \nabla_\theta \left( \frac{1}{2} (\theta^T X^T X\theta - \theta^T X^T y - y^T X\theta + y^T y) \right) ∇θJ(θ)=∇θ(21(θTXTXθ−θTXTy−yTXθ+yTy))

矩阵微分,得到:

∇ θ J ( θ ) = 1 2 ( 2 X T X θ − X T y − ( y T X ) T ) = X T X θ − X T y \nabla_\theta J(\theta) = \frac{1}{2} (2X^T X\theta - X^T y - (y^T X)^T) = X^T X\theta - X^T y ∇θJ(θ)=21(2XTXθ−XTy−(yTX)T)=XTXθ−XTy

偏导等于零:

为了找到最小值,令偏导等于零:

X T X θ − X T y = 0 X^T X\theta - X^T y = 0 XTXθ−XTy=0

解这个方程得到 θ \theta θ 的解析解:

θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)−1XTy

这个解称为正规方程Normal Equation,它给出了最小化目标函数的参数 θ \theta θ 的值

注:这里我们发现有逆矩阵 ,众所周知,不是所有矩阵均可逆,那么解不出 θ \theta θ 怎么办?接下来就引出了我们经常说的优化算法。


2 梯度下降

梯度下降是一种优化方法,用来找到目标函数的最小值。你可以把它想象成"下山":你站在山顶上,目标是找到山谷的最低点。梯度下降就是一步步往下走,直到你到达最低点。

为什么要用梯度下降?

  1. 直接求解不一定可行:有时候目标函数很复杂,甚至没有直接的数学公式可以解出来(比如非线性问题)。线性回归是个特例,可以直接用公式求解,但大多数情况下不行。
  2. 机器学习的套路:我们给机器一堆数据,告诉它"什么样的学习方式是对的"(目标函数),然后让它自己慢慢调整参数,找到最好的结果。

梯度下降怎么工作?

  1. 一口吃不成胖子:你不能一步就从山顶跳到山谷,而是需要一步步往下走。每一步都根据当前的位置,找到最陡的下坡方向(梯度),然后往那个方向迈一小步。
  2. 迭代优化:每次优化一点点,累积起来就是一个很大的进步。比如,你第一次走一步,第二次再走一步,重复很多次后,你就离目标越来越近了。

举例

想象你在玩一个游戏,目标是找到地图上的最低点(比如宝藏的位置)。你每走一步,都会看看周围哪个方向是下坡,然后往那个方向走。梯度下降就是这个过程:

  1. 目标函数:地图的高度(越低越好)。
  2. 梯度:你每走一步时,判断哪个方向是下坡。
  3. 迭代:一步步走,直到找到最低点。

2.1 目标函数

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2

目标:我们希望模型的预测值 h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 尽可能接近实际值 y ( i ) y^{(i)} y(i)。

平方误差: ( h θ ( x ( i ) ) − y ( i ) ) 2 (h_\theta(x^{(i)}) - y^{(i)})^2 (hθ(x(i))−y(i))2 表示单个样本的预测误差。平方的作用是:消除正负误差的抵消(比如 − 2 -2 −2 和 2 2 2 的误差平方后都是 4 4 4)。对大误差给予更大的惩罚。

均值: 1 m ∑ i = 1 m \frac{1}{m} \sum_{i=1}^{m} m1∑i=1m 表示对所有样本的误差取平均,反映模型的整体误差。

1 2 \frac{1}{2} 21 :为了简化求导时的计算,因为对平方项求导后会多出一个 2 2 2, 1 2 \frac{1}{2} 21 可以抵消这个 2 2 2。


2.2 批量梯度下降(Batch Gradient Descent)

梯度公式:
∂ J ( θ ) ∂ θ j = − 1 m ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = -\frac{1}{m} \sum_{i=1}^{m} (y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} ∂θj∂J(θ)=−m1i=1∑m(y(i)−hθ(x(i)))xj(i)

梯度:梯度是目标函数对参数 θ j \theta_j θj 的偏导数,表示目标函数在 θ j \theta_j θj 方向上的变化率。

误差项: ( y ( i ) − h θ ( x ( i ) ) ) (y^{(i)} - h_\theta(x^{(i)})) (y(i)−hθ(x(i))) 是第 i i i 个样本的预测误差。

特征值: x j ( i ) x_j^{(i)} xj(i) 是第 i i i 个样本的第 j j j 个特征值,表示误差对 θ j \theta_j θj 的影响。

均值: 1 m ∑ i = 1 m \frac{1}{m} \sum_{i=1}^{m} m1∑i=1m 表示对所有样本的梯度取平均,确保更新方向是全局最优的。

参数更新公式:
θ j : = θ j − α ⋅ ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α⋅∂θj∂J(θ)

负梯度方向:梯度 ∂ J ( θ ) ∂ θ j \frac{\partial J(\theta)}{\partial \theta_j} ∂θj∂J(θ) 表示目标函数上升最快的方向,因此负梯度方向是下降最快的方向。

学习率 α \alpha α:控制每次更新的步长。如果 α \alpha α 太大,可能会跳过最优解;如果 α \alpha α 太小,收敛速度会变慢。

容易得到最优解,但是每次要考虑所有的样本,所以很慢。


2.3 随机梯度下降(Stochastic Gradient Descent, SGD)

参数更新公式:
θ j : = θ j − α ⋅ ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j - \alpha \cdot (y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} θj:=θj−α⋅(y(i)−hθ(x(i)))xj(i)

单个样本:每次只使用一个样本 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i)) 计算梯度。

随机性:由于每次只用一个样本,梯度方向可能不完全准确,但计算速度快。

更新方向: ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) (y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} (y(i)−hθ(x(i)))xj(i) 是单个样本的梯度,表示当前样本对参数 θ j \theta_j θj 的影响。

每次找一个样本,迭代速度快,但不一定每次都朝着收敛的方向(说直白点就是看命)


2.4 小批量梯度下降(Mini-batch Gradient Descent)

参数更新公式:
θ j : = θ j − α ⋅ 1 b ∑ k = i i + b − 1 ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) \theta_j := \theta_j - \alpha \cdot \frac{1}{b} \sum_{k=i}^{i+b-1} (h_\theta(x^{(k)}) - y^{(k)})x_j^{(k)} θj:=θj−α⋅b1k=i∑i+b−1(hθ(x(k))−y(k))xj(k)

小批量样本:每次使用 b b b 个样本计算梯度,既不是全部样本,也不是单个样本。

均值: 1 b ∑ k = i i + b − 1 \frac{1}{b} \sum_{k=i}^{i+b-1} b1∑k=ii+b−1 表示对小批量样本的梯度取平均,平衡了批量梯度下降的稳定性和随机梯度下降的效率。

更新方向: ( h θ ( x ( k ) ) − y ( k ) ) x j ( k ) (h_\theta(x^{(k)}) - y^{(k)})x_j^{(k)} (hθ(x(k))−y(k))xj(k) 是小批量样本的梯度,表示当前小批量样本对参数 θ j \theta_j θj 的影响。

b a t c h batch batch 一般有32、64、128、256;batch越大结果越精确,但是会更慢。所以需要自己去权衡,一般越大越好,很少有低于64的。

每次更新选择一小部分数据来算,比较合理的


补充 对 θ \theta θ 求偏导

怕之后会忘记这部分的知识,笔者在这里就补充一下推导过程。

对 θ \theta θ 求偏导:

∇ θ J ( θ ) = ∇ θ ( 1 2 ( θ T X T X θ − θ T X T y − y T X θ + y T y ) ) \nabla_\theta J(\theta) = \nabla_\theta \left( \frac{1}{2} (\theta^T X^T X\theta - \theta^T X^T y - y^T X\theta + y^T y) \right) ∇θJ(θ)=∇θ(21(θTXTXθ−θTXTy−yTXθ+yTy))

矩阵微分,得到:

∇ θ J ( θ ) = 1 2 ( 2 X T X θ − X T y − ( y T X ) T ) = X T X θ − X T y \nabla_\theta J(\theta) = \frac{1}{2} (2X^T X\theta - X^T y - (y^T X)^T) = X^T X\theta - X^T y ∇θJ(θ)=21(2XTXθ−XTy−(yTX)T)=XTXθ−XTy

我们需要计算目标函数 J ( θ ) J(\theta) J(θ) 对 θ \theta θ 的偏导数 ∇ θ J ( θ ) \nabla_{\theta} J(\theta) ∇θJ(θ)。具体步骤如下:

对 J ( θ ) J(\theta) J(θ) 中的每一项分别求导:

第一项: θ T X T X θ \theta^T X^T X\theta θTXTXθ

关于 θ \theta θ 的二次型:
∇ θ ( θ T X T X θ ) = 2 X T X θ \nabla_{\theta} (\theta^T X^T X\theta) = 2X^T X\theta ∇θ(θTXTXθ)=2XTXθ
第二项: − θ T X T y -\theta^T X^T y −θTXTy

关于 θ \theta θ 的线性项:
∇ θ ( − θ T X T y ) = − X T y \nabla_{\theta} (-\theta^T X^T y) = -X^T y ∇θ(−θTXTy)=−XTy
第三项: − y T X θ -y^T X\theta −yTXθ

关于 θ \theta θ 的线性项:
∇ θ ( − y T X θ ) = − X T y \nabla_{\theta} (-y^T X\theta) = -X^T y ∇θ(−yTXθ)=−XTy

(因为 y T X θ y^T X\theta yTXθ 是一个标量,其转置等于自身,即 y T X θ = ( y T X θ ) T = θ T X T y y^T X\theta = (y^T X\theta)^T = \theta^T X^T y yTXθ=(yTXθ)T=θTXTy)

第四项: y T y y^T y yTy

这是一个常数项,与 θ \theta θ 无关:
∇ θ ( y T y ) = 0 \nabla_{\theta} (y^T y) = 0 ∇θ(yTy)=0

将上述各项的导数合并:

∇ θ J ( θ ) = 1 2 ( 2 X T X θ − X T y − X T y + 0 ) \nabla_{\theta} J(\theta) = \frac{1}{2} (2X^T X\theta - X^T y - X^T y + 0) ∇θJ(θ)=21(2XTXθ−XTy−XTy+0)

简化后:

∇ θ J ( θ ) = 1 2 ( 2 X T X θ − 2 X T y ) = X T X θ − X T y \nabla_{\theta} J(\theta) = \frac{1}{2} (2X^T X\theta - 2X^T y) = X^T X\theta - X^T y ∇θJ(θ)=21(2XTXθ−2XTy)=XTXθ−XTy

相关推荐
程序猿000001号23 分钟前
DeepSeek模型:开启人工智能的新篇章
人工智能·deepseek
梦云澜4 小时前
论文阅读(十四):贝叶斯网络在全基因组DNA甲基化研究中的应用
论文阅读·人工智能·深度学习
忆~遂愿5 小时前
3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路
java·人工智能·spring boot·深度学习·机器学习·spring cloud·eureka
纠结哥_Shrek6 小时前
pytorch逻辑回归实现垃圾邮件检测
人工智能·pytorch·逻辑回归
辞落山6 小时前
自定义数据集,使用 PyTorch 框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
人工智能·pytorch·逻辑回归
天宇琪云7 小时前
关于opencv环境搭建问题:由于找不到opencv_worldXXX.dll,无法执行代码,重新安装程序可能会解决此问题
人工智能·opencv·计算机视觉
大模型之路7 小时前
大模型(LLM)工程师实战之路(含学习路线图、书籍、课程等免费资料推荐)
人工智能·大模型·llm
deephub7 小时前
十大主流联邦学习框架:技术特性、架构分析与对比研究
人工智能·python·深度学习·机器学习·联邦学习
英国翰思教育8 小时前
留学毕业论文如何利用不同问题设计问卷
人工智能·深度学习·学习·算法·学习方法·论文笔记
gaoenyang7605259 小时前
探索高效图像识别:基于OpenCV的形状匹配利器
人工智能·opencv·计算机视觉