machine_learning梯度下降法

machine learning 梯度下降法


批梯度下降法(batch gradient descent)、随机梯度下降法(stochastic gradient descent)

date: January 30, 2018 1:45 PM
auther: xuwang
mail: xuwang.me@gmail.com
outline: 本文主要介绍了机器学习算法中的梯度下降法(批梯度下降法和随机梯度下降法),主要可用于linear regression等方法中的参数确定(通过最小化cost function);梯度下降法主要包括批梯度下降法和随机梯度下降法等,除此之外还包括小批量梯度下降法(Mini-batch Gradient Descent)等(本文不着重分析介绍)。

1. Basics

1. 偏导数

偏导数:多元函数沿坐标轴的变化率

对于二元函数 f(x,y) f ( x , y ) 来说, fx(x,y) f x ( x , y ) 指的是函数在保持 y y 方向不变的前提下,函数值沿着x轴方向的变化率; fy(x,y) f y ( x , y ) 指的是函数在保持 x x 方向不变的前提下,函数值沿着y轴方向的变化率.

  • 几何意义:偏导数 fx(x0,y0) f x ( x 0 , y 0 ) 就是曲面 f(x,y) f ( x , y ) 被平面 y=y0 y = y 0 所截得的曲线在点 (x0,y0) ( x 0 , y 0 ) 处的切线对于 x x 轴的斜率;偏导数fy(x0,y0)就是曲面 f(x,y) f ( x , y ) 被平面 x=x0 x = x 0 所截得的曲线在点 (x0,y0) ( x 0 , y 0 ) 处的切线对于 y y 轴的斜率。
  • :偏导数指的是多元函数沿坐标轴的变化率,并不能表示多元函数沿着任意方向的变化率(即方向导数)。
2. 方向导数

方向导数:多元函数沿着任意方向u的变化率, u u 为单位向量。

对于二元函数f(x,y)来说,我们假设单位向量 u=cosθi+sinθj u = c o s θ i + s i n θ j ,其中 θ θ 是向量与 x x 轴正向夹角,单位向量u可以用来表示任意方向导数的方向,如下图。

方向导数

u u 方向的方向导数为:

Duf=limt0f(x0+tcosθ,y0+tsinθ)f(x0,yx0)t

上面的极限值即为 f f 沿着u方向的方向导数,随着 θ θ 的不同,即可求出任意方向的方向导数。

除此之外,方向导数还可以用偏微分的方法来计算,如下所示:

Duf(x,y)=fx(x,y)cosθ+fy(x,y)sinθ D u f ( x , y ) = f x ( x , y ) c o s θ + f y ( x , y ) s i n θ

3. 梯度

定义:设函数 z=f(x,y) z = f ( x , y ) 在平面 D D 内具有一阶连续偏导数,则对于每一点(x,y)D,都可以确定一个向量 (fx(x,y)fy(x,y)) ( f x ( x , y ) , f y ( x , y ) ) ,该向量即为函数 z=f(x,y) z = f ( x , y ) 在点 (x,y) ( x , y ) 的梯度,记作 grad f(x,y) g r a d   f ( x , y )

我们如果将梯度向量记为向量 A A ,那么我们可以将Duf(x,y)=fx(x,y)cosθ+fy(x,y)sinθ表示为:

Duf(x,y)=Au=|A||u|cosα D u f ( x , y ) = A ⋅ u = | A | ∗ | u | ∗ c o s α

其中 α α 为方向向量 u u 和梯度向量A的夹角,当且仅当两个向量平行时,即 cosα c o s α 为1时,方向导数的值去最大值,此时方向导数的方向即为梯度的方向,导数的含义时函数单位长度内的增量,那么我们可以知道,在梯度方向上函数增长最快。

2. 批梯度下降法(batch gradient descent)

梯度下降法主要用于在给定目标条件下求解模型的参数(parameter),如在linear regression中,我们有hypotheses函数 h h 如下所示:

hθ(X(i))=θ0+θ1x1(i)+...θnxn(i)

即:

hθ(X(i))=j=0nθjxj=θTX(i) h θ ( X ( i ) ) = ∑ j = 0 n θ j x j = θ T X ( i )

其中, θT=[θ0,θ1,...,θn] θ T = [ θ 0 , θ 1 , . . . , θ n ] X(i)=[1,x(i)1,...,x(i)n] X ( i ) = [ 1 , x 1 ( i ) , . . . , x n ( i ) ] n n 为每个样本特征数,一共有m个样本, X(I) X ( I ) 表示第 i i 个样本。

我们在确定模型的参数θT时,要尽可能的让线性函数 hθ(X(i)) h θ ( X ( i ) ) 拟合出来的值与实际值 y(i) y ( i ) 相近(最好相等)。因此我们定义 cost function c o s t   f u n c t i o n

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

即,让 J(θ) J ( θ ) 的值尽可能的小,找到让 J(θ) J ( θ ) 值最小的 θ θ 的值。

梯度下降法即用来解决此类问题。

我们对 J(θ) J ( θ ) 求关于 θj θ j 的偏导, j={0,...n} j = { 0 , . . . n } ,得到偏导为 θjJ(θ) ∂ ∂ θ j J ( θ )

在批梯度下降法中,我们从对 θ θ 的值的随机初始化开始,即随机初始化一个 θ θ 点: θT=[θ0,θ1,...,θn] θ T = [ θ 0 , θ 1 , . . . , θ n ] ,在吴恩达的machine learning中将其称为”initial guess”,然后通过不断重复的更改 θ θ 的值使得 J(θ) J ( θ ) 的值越来越小,最终达到最小值。其中, θ θ 值的改变遵循如下公式:

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

其中, α α 称为 learning rate l e a r n i n g   r a t e α α 的值如果过小,将会导致迭代的次数过多,经过很漫长的时间才能收敛, α α 的值如果过大,将会导致达不到 J(θ) J ( θ ) 的最小值,而是在最小值附近来回震荡。

:我们注意到,在上面的公式中,各个方向的 θj θ j 减去了其对应方向的偏导数值,合起来即减去了梯度值,由于函数在梯度方向上增长最快,我们便向其反方向不断运动,故为减号

我们对 θjJ(θ) ∂ ∂ θ j J ( θ ) 进行进一步的运算求解可以得到如下的式子:

θjJ(θ)=θj12i=1m(hθ(X(i))y(i))2 =i=1m212(hθ(X(i))y(i))θj(hθ(X(i))y(i)) =i=1m(hθ(X(i))y(i))θj(hθ(X(i))y(i)) =i=1m(hθ(X(i))y(i))x(i)j ∂ ∂ θ j J ( θ ) = ∂ ∂ θ j 1 2 ∑ i = 1 m ( h θ ( X ( i ) ) − y ( i ) ) 2   = ∑ i = 1 m 2 ⋅ 1 2 ( h θ ( X ( i ) ) − y ( i ) ) ⋅ ∂ ∂ θ j ( h θ ( X ( i ) ) − y ( i ) )   = ∑ i = 1 m ( h θ ( X ( i ) ) − y ( i ) ) ⋅ ∂ ∂ θ j ( h θ ( X ( i ) ) − y ( i ) )   = ∑ i = 1 m ( h θ ( X ( i ) ) − y ( i ) ) ⋅ x j ( i )

上式中 θj(hθ(X(i))y(i)) ∂ ∂ θ j ( h θ ( X ( i ) ) − y ( i ) ) θj θ j 求偏导的结果是 (hθ(X(i))y(i)) ( h θ ( X ( i ) ) − y ( i ) ) θj θ j 的系数 x(i)j x j ( i )

因此,我们将偏导带入 θj θ j 的update公式:

θj:=θjαi=1m(hθ(X(i))y(i))x(i)j θ j := θ j − α ∑ i = 1 m ( h θ ( X ( i ) ) − y ( i ) ) ⋅ x j ( i )

通过利用上面的 θj θ j 的update公式,我们可以最终达到 J(θ) J ( θ ) 的最小值,上述的update rule也被称作 LMS update rule L M S   u p d a t e   r u l e ,即 lease mean squares l e a s e   m e a n   s q u a r e s (最小均方)。

但是,仔细观察我们便可以发现,每进行一次迭代,我们需要将m个样本的值都带进去进行一次求和(即批梯度下降),我们可以得到批梯度下降的算法如下:

Repeat until convergence{θj:=θjαi=1m(hθ(X(i))y(i))x(i)j(for every j)} R e p e a t   u n t i l   c o n v e r g e n c e { θ j := θ j − α ∑ i = 1 m ( h θ ( X ( i ) ) − y ( i ) ) ⋅ x j ( i ) ( f o r   e v e r y   j ) }

在样本数不多的情况下这种迭代是可以的,但如果在样本数很大,几十万个样本时,我们进行一次迭代都要花很久的时间,更不用说找到最终的 θ θ 值了,因此在样本数量很多的情况下,随机梯度下降(stochastic gradient descent)就排上了用场。

3. 随机梯度下降法(stochastic gradient descent)

在随机梯度下降法中,我们不用每进行一次 θj θ j 值的update必须计算所有样本的值,而是每次只选择其中一个样本的值进行计算,随机梯度下降算法如下所示:

Repeat until convergence{for i=1 to m,{θj=θjα(hθ(X(i))y(i))x(i)j(for every j)}} R e p e a t   u n t i l   c o n v e r g e n c e { f o r   i = 1   t o   m , { θ j = θ j − α ( h θ ( X ( i ) ) − y ( i ) ) ⋅ x j ( i ) ( f o r   e v e r y   j ) } }

在上面的算法中,我们对 θj θ j 的每次update只需要代入一个训练样本即可(批梯度下降法则需要遍历整个样本集进行计算)。

很大一部分情况下,随机梯度下降法得到一个 θT=[θ0,...,θn] θ T = [ θ 0 , . . . , θ n ] (“close” to the minimum)的速度大大快于批梯度下降法。但是随机梯度下降法的缺点是,他永远不会收敛到最小值minimum,得到的 θT=[θ0,...,θn] θ T = [ θ 0 , . . . , θ n ] 使得 J(θ) J ( θ ) 的值保持在 J(θ) J ( θ ) 最小值附近不断摆动(但是,在实际情况中,我们得到的参数 θ θ 的值是有理由很好的近似认为是真实最小值的 θ θ 值,我们可以通过合理的设置 learning rate α l e a r n i n g   r a t e   α 的值,通过慢慢的减小 α α 的值随着算法的运行慢慢减少为0,就优很大的可能保证参数parameters将收敛到全局最小值,而不是在最小值的取值附近摆动)。

因此,当训练样本集合数据量特别大时,随机梯度下降法往往表现的比批梯度下降法更好,在样本量极其大的情况下,可能不用训练完整个样本集就可以获得一个损失值在可接受范围内的模型。

4. 小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样本来迭代,1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值