梯度下降算法基本数学推导

基本数学原理

由线性回归算法我们可得:

J(θ)J(θ)=12i=1m(y(i)θTx(i))2目标函数J(\theta)即为: J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}

在目标函数J(θ)得到后,我们并不一定能够直接进行求解,而应用梯度下降算法可以对J(θ)进行求解。

  • 梯度:对J(θ)求偏导得到的斜率,方向为上升
  • 梯度下降即为方向向下的梯度,可以应用于求最小值
  • 梯度下降算法即为通过一次一次的迭代优化,不断调整我们的梯度下降方向,直至求出一个近似最优解。
优化步骤
  1. 找到当前合适的优化方向
  2. 进行一次小幅迭代
  3. 按照迭代的方向和步伐对参数进行更新权重参数
梯度下降的类型

目标函数:

J(θ)=12mi=1m(yihθ(xi))2J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{i}-h_{\theta}\left(x^{i}\right)\right)^{2}

批量梯度下降(GD)

此方式最容易得到最优解,但由于每次综合考虑所有样本,速度很慢

J(θ)θj=1mi=1m(yihθ(xi))xji\frac{\partial J(\theta)}{\partial \theta_{j}}=-\frac{1}{m} \sum_{i=1}^{m}\left(y^{i}-h_{\theta}\left(x^{i}\right)\right) x_{j}^{i} \quad

θj=θj+1mi=1m(yihθ(xi))xji\theta_{j}'=\theta_{j}+\frac{1}{m} \sum_{i=1}^{m}\left(y^{i}-h_{\theta}\left(x^{i}\right)\right) x_{j}^{i}

优化获得的结果形式如下:

梯度下降算法基本数学推导

随机梯度下降(SGD)

此方式的思路为每次找一个样本进行迭代,迭代速度很快,但不一定每次都朝着收敛的方向

θj=θj+(yihθ(xi))xji\theta_{j}^{\prime}=\theta_{j}+\left(y^{i}-h_{\theta}\left(x^{i}\right)\right) x_{j}^{i}

随机梯度下降由于并不一定每个变量的迭代都沿着总收敛的方向,所以求解过程中会具有较大的波动性。

梯度下降算法基本数学推导

小批量梯度下降

每次更新都选择一小部分数据来进行计算,相对实用

θj:=θjα110k=ii+9(hθ(x(k))y(k))xj(k)\theta_{j}:=\theta_{j}-\alpha \frac{1}{10} \sum_{k=i}^{i+9}\left(h_{\theta}\left(x^{(k)}\right)-y^{(k)}\right) x_{j}^{(k)}

先打乱数据顺序,在对数据进行批量迭代,之后更新θ参数。(上式中的每批的数据量即为十个:i = 1 —> i = 9)在实际应用中,我们通常选取2的倍数如32,64,128为数据的每批次量进行迭代。同时,我们也要考虑内存与效率。通常情况下,批次量越大,结果稳定程度越高。

梯度下降中的重要特征
步长(学习率)

会对结果产生巨大的影响,通常取较小的值会带来较优的结果,但会使迭代次数上升。而学习率在实际应用中也并不一定一直保持不变,可以在求解的过程中进行调整。

梯度下降算法基本数学推导

图为不同步长对目标函数求解的影响