欢迎来到我的主页:【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 年龄和金钱举例
x 1 x_1 x1、 x 2 x_2 x2就是我们的两个特征(年龄,工资); Y Y Y是银行最终会借给我们多少钱。找到最合适的一条线(想象一个高维)来最好的拟合我们的数据点。
假设 θ 1 \theta_1 θ1是年龄的参数, θ 2 \theta_2 θ2是工资的参数
-
拟合平面:
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 是输入特征。 -
引入 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 -
向量化表示:
现在,我们可以将权重 θ \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 θ 的转置。 -
一般化到 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 维的向量。 -
误差表示:
误差真实值和预测值之间肯定是要存在差异的(用 ε \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)
这个假设的意义是:
- 误差是随机的,且大多数误差集中在 0 附近。
- 误差的分布是对称的,且较大的误差出现的概率较低。
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 梯度下降
梯度下降是一种优化方法,用来找到目标函数的最小值。你可以把它想象成“下山”:你站在山顶上,目标是找到山谷的最低点。梯度下降就是一步步往下走,直到你到达最低点。
为什么要用梯度下降?
- 直接求解不一定可行:有时候目标函数很复杂,甚至没有直接的数学公式可以解出来(比如非线性问题)。线性回归是个特例,可以直接用公式求解,但大多数情况下不行。
- 机器学习的套路:我们给机器一堆数据,告诉它“什么样的学习方式是对的”(目标函数),然后让它自己慢慢调整参数,找到最好的结果。
梯度下降怎么工作?
- 一口吃不成胖子:你不能一步就从山顶跳到山谷,而是需要一步步往下走。每一步都根据当前的位置,找到最陡的下坡方向(梯度),然后往那个方向迈一小步。
- 迭代优化:每次优化一点点,累积起来就是一个很大的进步。比如,你第一次走一步,第二次再走一步,重复很多次后,你就离目标越来越近了。
举例
想象你在玩一个游戏,目标是找到地图上的最低点(比如宝藏的位置)。你每走一步,都会看看周围哪个方向是下坡,然后往那个方向走。梯度下降就是这个过程:
- 目标函数:地图的高度(越低越好)。
- 梯度:你每走一步时,判断哪个方向是下坡。
- 迭代:一步步走,直到找到最低点。
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