线性回归中,三种梯度下降MGD、BGD与MBGD对比研究(一)——公式推导

1.线性回归

我们都知道,一般线性回归的假设函数为:

h θ = ∑ j = 1 n θ j x j h_{\theta} = \sum_{j=1}^{n}\theta_{j}x_{j} hθ=j=1nθjxj

即:
h θ ( X ) = θ T X h_{\theta}(\mathbf{X}) = \boldsymbol{\theta}^{T}\mathbf{X} hθ(X)=θTX
其中:
θ = ( θ 1 , θ 2 , . . . , θ n ) T X = ( x 1 , x 2 , . . . , x n ) T \boldsymbol{\theta} = (\theta_{1}, \theta_{2},...,\theta{n})^{T}\\ \mathbf{X} = (x_{1}, x_{2}, ..., x_{n})^{T} θ=(θ1,θ2,...,θn)TX=(x1,x2,...,xn)T


2.MSE均方误差损失函数

设: x ( i ) x^{(i)} x(i) y ( i ) y^{(i)} y(i)为一个数据对,共有 m m m个数据对, h θ ( x ( i ) ) h_{\theta}(x^{(i)}) hθ(x(i))为线性回归的预测值

使用均方误差损失函数:

J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 注:此处的1/2是为了之后求导方便 J_{train}(\boldsymbol{\theta}) = \frac{1}{2m}\sum_{i=1}^{m}\left (h_{\theta}(x^{(i)})-y^{(i)}\right )^{2} \qquad \text{注:此处的1/2是为了之后求导方便} Jtrain(θ)=2m1i=1m(hθ(x(i))y(i))2:此处的1/2是为了之后求导方便


3.梯度公式推导

我们的目的是不断的迭代,使得均方误差(MSE)最小,根据梯度下降法, θ \boldsymbol{\theta} θ的更新策略为:
θ j : = θ j − α ∂ ∂ θ j J ( θ ) ( 1 ≤ j ≤ n ) \\\\ \theta_{j}:=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}}J(\boldsymbol{\theta}) \qquad (1\leq j\leq n) θj:=θjαθjJ(θ)(1jn)

我们现在假设之有一个数据 ( X 1 T , y ) (\mathbf{X_{1}^{T}}, y) (X1T,y):

(即数据为: ( x 1 , x 2 , x 3 , . . . , x n , y ) (x_{1}, x_{2}, x_{3},..., x_{n}, y ) (x1,x2,x3,...,xn,y))

∂ ∂ θ j J ( θ ) = ∂ ∂ θ j ( 1 2 ( h θ ( X ) − y ) 2 ) ( 1 ≤ j ≤ n ) = ( h θ ( X ) − y ) ⋅ ∂ ∂ θ j ( h θ ( X ) − y ) = ( h θ ( X ) − y ) ⋅ ∂ ∂ θ j ( ∑ i = 1 n θ i x i − y ) = ( h θ ( X ) − y ) x j \begin{aligned} \frac{\partial}{\partial \theta_{j}}J(\boldsymbol{\theta}) =& \frac{\partial}{\partial \theta_{j}} \left ( \frac{1}{2}\left (h_{\theta}(\mathbf{X})-y\right )^{2} \right ) \qquad (1\leq j\leq n)\\ =& \left (h_{\theta}(\mathbf{X}) - y \right ) \cdot \frac{\partial}{\partial\theta_{j}}\left (h_{\theta}(\mathbf{X})-y \right )\\ =& \left (h_{\theta}(\mathbf{X}) - y \right ) \cdot \frac{\partial}{\partial\theta_{j}}\left (\sum_{i=1}^{n}\theta_{i}x_{i} -y \right ) \\ =& \left (h_{\theta}(\mathbf{X}) - y \right )x_{j} \end{aligned} θjJ(θ)====θj(21(hθ(X)y)2)(1jn)(hθ(X)y)θj(hθ(X)y)(hθ(X)y)θj(i=1nθixiy)(hθ(X)y)xj

现在我们考虑m个数据 (只需要将 m m m个值求平均即可):
∂ ∂ θ j J ( θ ) = − 1 m ∑ i = 1 m ( y i − h θ ( X i ) ) x j i \frac{\partial}{\partial \theta_{j}}J(\boldsymbol{\theta}) = -\frac{1}{m}\sum_{i=1}^{m}\left (y^{i}-h_{\theta}(\mathbf{X^{i}})\right )x_{j}^{i} θjJ(θ)=m1i=1m(yihθ(Xi))xji
其中:
y i 、 x j i 和 的 上 标 i 表 示 第 几 个 数 据 , 下 标 j 表 示 哪 一 个 维 度 , X i 表 示 第 i 个 数 据 y^{i}、x_{j}^{i}和的上标i表示第几个数据,下标j表示哪一个维度,\mathbf{X^{i}}表示第i个数据 yixjiijXii


4.梯度下降法更新策略

(1).批梯度下降法(MGD

在最小化损失函数的过程中,需要不断反复的更新权重 θ \theta θ使得误差函数减小,更新过程如下:
θ j ′ = θ j + α 1 m ∑ i = 1 m ( y i − h θ ( X i ) ) x j i {\theta_{j}}'=\theta_{j}+\alpha\frac{1}{m}\sum_{i=1}^{m}\left (y^{i}-h_{\theta}(\mathbf{X^{i}})\right )x_{j}^{i} θj=θj+αm1i=1m(yihθ(Xi))xji

(2).随机梯度下降法(SGD)

由于MGD每更新一个参数时,都要用到所有的样本数,所以训练速度会随着样本数量的增加而变得很慢。而SGD每更新一个参数,仅会随机取一个样本:
θ j ′ = θ j + α ( y i − h θ ( X i ) ) x j i {\theta_{j}}'=\theta_{j}+\alpha\left (y^{i}-h_{\theta}(\mathbf{X^{i}})\right )x_{j}^{i} θj=θj+α(yihθ(Xi))xji

(3).小批量梯度下降(MBGD)

MBGD小批量梯度下降法,假设每次更新参数时用到的样本数为 k k k
θ j ′ = θ j + α 1 k ∑ i i + k ( y i − h θ ( X i ) ) x j i ( i = 1 , 1 + k , 1 + 2 k , . . . ) {\theta_{j}}'=\theta_{j}+\alpha\frac{1}{k}\sum_{i}^{i+k}\left (y^{i}-h_{\theta}(\mathbf{X^{i}})\right )x_{j}^{i} \qquad (i=1,1+k,1+2k,...) θj=θj+αk1ii+k(yihθ(Xi))xji(i=1,1+k,1+2k,...)


5.三种算法比较结论

1.BGD(批梯度下降)

每次更新会使用所有的训练数据来最小化损失函数。 如果只有一个极小值,那么BGD是考虑了所有训练集数据,朝着最小值迭代运动。缺点是如果样本值很大的话,更新速度会很慢

2.SGD(随机梯度下降)

在每次更新的时候,由于只考虑了一个样本点,大大加快了训练数据的速度,但是由于训练数据的噪声点较多,那么每一次利用噪声点进行更新,就不一定是朝着极小值方向更新,但是由于更新多次,所以整体方向上还是朝着极小值方向更新。

3.MBGD(小批量梯度下降)

MBGD为了综合BGD的训练速度慢以及SGD的准确性综合而来。但是这里要注意,不同问题的batch是不一样的


我们在下一篇博客中,用numpy实现算法。
https://blog.csdn.net/HaoZiHuang/article/details/104817087

你可能感兴趣的:(机器学习轮子实现,pytorch)