梯度下降法

最优化概述

机器学习近年来已经获得迅速发展,而机器学习的本质就是对问题进行抽象建模,使得一个学习问题变为一个可求解的优化问题,归纳起来就是把一个学习问题转化为优化问题.我们需要寻找输入特征与标签之间的映射关系,有一条重要的原则就是使得寻找到的映射结果与原始标签之间的误差最小. 
最优化算法从最基本的梯度下降法到一些启发式算法,如遗传算法(GA),差分演化算法(DE),粒子群算法(PSO)和人工蜂群算法(ABC).

梯度下降法

梯度下降法又称为最速下降法,是一种最优化求解算法,可被应用到线性回归算法中,当然还有其他机器学习算法,如逻辑斯蒂回归和神经网络.

拟合函数

以线性回归作为算法实例,拟合函数为: 

H(x)=θ0+θ1X1+θ2X2+...+θnXnH(x)=θ0+θ1X1+θ2X2+...+θnXn

其中, θ0,θ1,θnθ0,θ1,θn 为参数, X1,X2,XnX1,X2,Xn 为特征.

代价函数

为求得模型最优化解,需要找到合适的参数使得拟合函数能更好的适合模型,然后使用梯度下降法最小化代价函数J(θ)J(θ),这里采用平方差作为代价函数. 

J(θ)=12mi=1m(hθ(x(i))y(i))2J(θ)=12m∑i=1m(hθ(x(i))−y(i))2

m表示训练集的数目, 
x(i)x(i) 表示第i个训练样本的所有特征, 
hθ(x(i))hθ(x(i)) 表示依据拟合函数第i个训练样本的拟合值, 
y(i)y(i) 为第i个样本的实际结果值. 
代价函数的用途:对假设的函数进行评价,代价函数(误差)越小的拟合函数说明拟合训练数据拟合的越好. 
举例说明
给定训练数据集: (1,1),(2,2),(3,3),共有3个训练样本,每个训练样本包含一个特征值及对应的结果值,只有一个特征,所以拟合函数为 h(x)=θ0+θ1Xh(x)=θ0+θ1X
如果预测 θ0=0,θ1=0.5θ0=0,θ1=0.5 ,则拟合函数 h(x)=0.5xh(x)=0.5x ,代价函数为 J(θ)=16[(h(1)1)2+(h(2)2)2+(h(3)3)2]=0.58J(θ)=16[(h(1)−1)2+(h(2)−2)2+(h(3)−3)2]=0.58
如果预测 θ0=0θ0=0 θ1=1θ1=1 ,则拟合函数 h(x)=xh(x)=x ,代价函数为 J(θ)=16[(h(1)1)2+(h(2)2)2+(h(3)3)2]=0J(θ)=16[(h(1)−1)2+(h(2)−2)2+(h(3)−3)2]=0
因此第二种预测的代价函数较小,拟合程度较高. 
对于大量训练数据,我们可以采用梯度下降法求得使代价函数最小的最优解.

基本概念

梯度下降法的理论基础是梯度,梯度与方向导数的关系为:梯度的方向与取得最大方向导数值的方向一致,梯度的模就是函数在该点的方向导数的最大值. 
梯度本意是一个向量,当某一函数在某点处沿着该方向的方向导数取得该点处的最大值,即函数在该点处沿该方向变化最快,变化率最大,那么这个方向就是梯度的方向,变化率为梯度的模
想象我们站在一座山上,要去往山下,现在要决定那个方向是下降最快的方向,这个方向就是梯度的方向.

求解过程

以线性回归为例应用梯度下降: 
首先我们给θθ一个初值,然后让J(θ)J(θ)向着变化最大的方向更新θθ的取值,如此迭代. 

θj:=θjαθjJ(θ)θj:=θj−α∂∂θjJ(θ)

αα 为学习速率,即每一步的大小,它控制 θθ 每次向 J(θ)J(θ) 变小的方向迭代时的变化幅度.取较小的值意味着迭代速度慢,反之迭代速度快,但反而有可能使得走到更高的地方. 
θjJ(θ)∂∂θjJ(θ)  为 J(θ)J(θ) θθ 偏导 ,表示 J(θ)J(θ) 变化最快的方向. 
hθ(x)hθ(x) 为线性回归的拟合函数. 
θjJ(θ)=θj12(hθ(x)y)2=212(hθ(x)y)θj(hθ(x)y)=(hθ(x)y)θj(i=0nθixiy)=(hθ(x)y)xj∂∂θjJ(θ)=∂∂θj12(hθ(x)−y)2=2⋅12(hθ(x)−y)⋅∂∂θj(hθ(x)−y)=(hθ(x)−y)⋅∂∂θj(∑i=0nθixi−y)=(hθ(x)−y)⋅xj

(hθ(x)y)xj(hθ(x)−y)⋅xj 就是代价函数 J(θ)J(θ) 的梯度. 
j表示训练样本的特征数目. 
那么 θθ 的迭代公式变为
θj:=θj+α1mi=1m(y(i)hθ(x(i)))x(i)jθj:=θj+α⋅1m∑i=1m(y(i)−hθ(x(i)))xj(i)

分类

基于如何使用数据计算代价函数的导数,梯度下降法可定义为不同的形式.即根据使用数据量的大小,时间复杂度和算法的精确度,梯度下降法可分为:

批量梯度下降法 BGD

使用整个数据集计算代价函数的梯度,每次使用全部数据计算梯度来更新参数,对于大型数据集很难载入内存,存在磁盘读写I/O瓶颈,需要较长时间才能收敛.优点是可以得到较准确的代价函数最优值. 
随机初始化参数θθ并按如下方式更新参数θθ:

repeat until convergence { 
for j in 0…n{ 
θj:=θj+α1mmi=1(y(i)hθ(x(i)))x(i)jθj:=θj+α⋅1m∑i=1m(y(i)−hθ(x(i)))xj(i) 
} }

其中,n为样本特征数量,m为训练样本数量. 
从公式可以看到批量梯度下降法每迭代一次都要计算所有的训练数据,能保证得到的结果为全局最优,但我们需要对每个参数θθ求偏导,且在对每个参数求偏导过程中还需要对所有训练数据遍历一次,所以收敛时间长.

随机梯度下降法 SGD

随机梯度下降法是为了解决批量梯度下降的弊端而产生的,不同于批量梯度下降法每次计算所有训练数据,随机梯度下降法的第一步是随机化整个数据集,在每次迭代时只选择一个训练样本去计算代价函数的梯度,然后更新参数,所以训练速度大大提升,缺点是准确度会下降,得到的结果并不是全局最优,而是在全局最优解附近.

repeat until convergence { 
for j in 0…n { 
// 挑选一个训练样本 
for i :=1…m { 
θj:=θj+α(y(i)hθ(x(i)))x(i)jθj:=θj+α(y(i)−hθ(x(i)))xj(i) 
}}}

可以看到随机梯度下降法不必计算所有训练数据,通过每个样本来迭代更新一次,如果样本量很大,可能使用其中一部分训练样本就已经将参数迭代到最优解了,但是随机梯度下降法并不是每次迭代都朝着最优化方向,在最优解的搜索过程中看起来很盲目.从迭代次数上看,随机梯度下降法迭代次数较多,它最终会游走到全局最小值附近的区域停止.

小批量梯度下降法 MBGD

每次迭代时考虑一小部分样本,假设这一部分样本数为k:

repeat until convergence { 
for j in 0…m { 
// 将m个训练数据按k个为一组进行划分 
for i := 1,k+1,2k+1…m { 
θj:=θj+α1ki+kl=i(y(i)hθ(x(i)))x(i)jθj:=θj+α⋅1k∑l=ii+k(y(i)−hθ(x(i)))xj(i) 
}}}

m同样表示训练样本数.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值