三种梯度下降方法与代码实现
Posted 辰chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种梯度下降方法与代码实现相关的知识,希望对你有一定的参考价值。
目录
前言
本文属于 线性回归算法【AIoT阶段三】(尚未更新),这里截取自其中一段内容,方便读者理解和根据需求快速阅读。本文通过公式推导+代码两个方面同时进行,因为涉及到代码的编译运行,如果你没有 N u m P y NumPy NumPy, P a n d a s Pandas Pandas, M a t p l o t l i b Matplotlib Matplotlib 的基础,建议先修文章:数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解),本文是梯度下降的第二部分,学之前需先修:梯度下降【无约束最优化问题】,后续还会有:梯度下降优化,梯度下降优化进阶 (暂未更新)
1.梯度下降方法
1.1 三种梯度下降不同
🚩梯度下降分三类:批量梯度下降 B G D BGD BGD(Batch Gradient Descent)、小批量梯度下降 M B G D MBGD MBGD(Mini-Batch Gradient Descent)、随机梯度下降 S G D SGD SGD(Stochastic Gradient Descent)。
三种梯度下降有什么不同呢?我们从梯度下降步骤开始讲起,梯度下降步骤分以下四步:
-
1、随机赋值, R a n d o m Random Random 随机数生成 θ \\theta θ,随机一组数值 w 0 、 w 1 … … w n w_0、w_1……w_n w0、w1……wn
-
2、求梯度 g g g ,梯度代表曲线某点上的切线的斜率,沿着切线往下就相当于沿着坡度最陡峭的方向下降
-
3、 i f if if g < 0 g < 0 g<0, θ \\theta θ 变大, i f if if g > 0 g > 0 g>0, θ \\theta θ 变小
-
4、判断是否收敛 c o n v e r g e n c e convergence convergence,如果收敛跳出迭代,如果没有达到收敛,回第 2 2 2 步再次执行 2 2 2 ~ 4 4 4 步
收敛的判断标准是:随着迭代进行损失函数 L o s s Loss Loss,变化非常微小甚至不再改变,即认为达到收敛
三种梯度下降不同,体现在第二步中:
-
B G D BGD BGD 是指在每次迭代使用所有样本来进行梯度的更新
-
M B G D MBGD MBGD 是指在每次迭代使用一部分样本(所有样本 500 500 500 个,使用其中 32 32 32 个样本)来进行梯度的更新
-
S G D SGD SGD 是指每次迭代随机选择一个样本来进行梯度更新
1.2 线性回归梯度更新公式
🚩回顾上一讲公式!
最小二乘法公式如下:
J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\\theta) = \\frac12\\sum\\limits_i = 1^n(h_\\theta(x^(i)) - y^(i))^2 J(θ)=21i=1∑n(hθ(x(i))−y(i))2
矩阵写法:
J ( θ ) = 1 2 ( X θ − y ) T ( X θ − y ) J(\\theta) = \\frac12(X\\theta - y)^T(X\\theta - y) J(θ)=21(Xθ−y)T(Xθ−y)
接着我们来讲解如何求解上面梯度下降的第 2 2 2 步,即我们要推导出损失函数的导函数来。
-
θ j n + 1 = θ j n − η ∗ ∂ J ( θ ) ∂ θ j \\theta_j^n + 1 = \\theta_j^n - \\eta * \\frac\\partial J(\\theta)\\partial \\theta_j θjn+1=θjn−η∗∂θj∂J(θ) 其中 j j j 表示第 j j j 个系数
-
∂ J ( θ ) ∂ θ j = ∂ ∂ θ j 1 2 ( h θ ( x ) − y ) 2 \\frac\\partial J(\\theta)\\partial \\theta_j = \\frac\\partial\\partial \\theta_j\\frac12(h_\\theta(x) - y)^2 ∂θj∂J(θ)=∂θj∂21(hθ(x)−y)2
= 1 2 ∗ 2 ( h θ ( x ) − y ) ∂ ∂ θ j ( h θ ( x ) − y ) = \\frac12*2(h_\\theta(x) - y)\\frac\\partial\\partial \\theta_j(h_\\theta(x) - y) =21∗2(hθ(x)−y)∂θj∂(hθ(x)−y) ( 1 ) (1) (1)
= ( h θ ( x ) − y ) ∂ ∂ θ j ( ∑ i = 0 n θ i x i − y ) = (h_\\theta(x) - y)\\frac\\partial\\partial \\theta_j(\\sum\\limits_i = 0^n\\theta_ix_i - y) =(hθ(x)−y)∂θj∂(i=0∑nθix梯度下降