我们都知道,一般线性回归的假设函数为:
h θ = ∑ j = 1 n θ j x j h_{\theta} = \sum_{j=1}^{n}\theta_{j}x_{j} hθ=j=1∑nθ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
设: 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=1∑m(hθ(x(i))−y(i))2注:此处的1/2是为了之后求导方便
我们的目的是不断的迭代,使得均方误差(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−α∂θj∂J(θ)(1≤j≤n)
我们现在假设之有一个数据 ( 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} ∂θj∂J(θ)====∂θj∂(21(hθ(X)−y)2)(1≤j≤n)(hθ(X)−y)⋅∂θj∂(hθ(X)−y)(hθ(X)−y)⋅∂θj∂(i=1∑nθixi−y)(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} ∂θj∂J(θ)=−m1i=1∑m(yi−hθ(Xi))xji
其中:
y i 、 x j i 和 的 上 标 i 表 示 第 几 个 数 据 , 下 标 j 表 示 哪 一 个 维 度 , X i 表 示 第 i 个 数 据 y^{i}、x_{j}^{i}和的上标i表示第几个数据,下标j表示哪一个维度,\mathbf{X^{i}}表示第i个数据 yi、xji和的上标i表示第几个数据,下标j表示哪一个维度,Xi表示第i个数据
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=1∑m(yi−hθ(Xi))xji
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+α(yi−hθ(Xi))xji
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+αk1i∑i+k(yi−hθ(Xi))xji(i=1,1+k,1+2k,...)
BGD
(批梯度下降)每次更新会使用所有的训练数据来最小化损失函数。 如果只有一个极小值,那么BGD是考虑了所有训练集数据,朝着最小值迭代运动。缺点是如果样本值很大的话,更新速度会很慢。
SGD
(随机梯度下降)在每次更新的时候,由于只考虑了一个样本点,大大加快了训练数据的速度,但是由于训练数据的噪声点较多,那么每一次利用噪声点进行更新,就不一定是朝着极小值方向更新,但是由于更新多次,所以整体方向上还是朝着极小值方向更新。
MBGD
(小批量梯度下降)MBGD为了综合BGD的训练速度慢以及SGD的准确性综合而来。但是这里要注意,不同问题的batch是不一样的。
我们在下一篇博客中,用numpy
实现算法。
https://blog.csdn.net/HaoZiHuang/article/details/104817087