随机梯度下降

本文详细解释了随机梯度下降的概念及其在机器学习领域的应用,包括梯度下降的基本原理,如何克服大规模问题的计算开销,以及在不同算法中的具体实现。通过数学推导证明了随机梯度下降的收敛性,并提供了实际例子,如感知机、支持向量机和套索算法的更新公式。最后,介绍了一种提高更新效率的小技巧。

随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模的问题 。
要想扯清楚它,还得先谈谈梯度下降。
众所周知,每个优化问题会有一个目标函数f(w)
梯度下降就是采用迭代的策略,
从初始点w1开始,
每次沿着目标函数在当前点的负梯度方向前进一定的步长,即

wt+1=wtηtf(wt)

只要步长ηt设置合理,
这样可以得到一个单调递减的序列{f(w1),,f(wt),}
直至最终不再下降,即可得到最优解w
对于一般优化问题,梯度下降可以找到局部最优解,对于凸优化问题,梯度下降可以得到全局最优解,下面我们只考虑凸优化问题。
考虑如下的目标函数

f(w)=i=1nf(w,xi)

其中xi是与w无关的常向量。
n为很大的正整数时,例如几十万甚至几百万时,计算梯度:

f(w)=i=1nfi(w,xi)

代价很大,那么这个方法就行不通了。
但是这样的问题在机器学习领域又很常见,比如感知机(Perceptron),支持向量机(Support Vector Machine, SVM),套索(Least Absolute Shrinkage and Selection Operator, LASSO)等算法都可以写成如下的形式:

λΩ(w)+1ni=1nL(w,xi)

其中Ω(w)是关于w的凸正则化项,
L(w,xi)是关于w的凸损失函数。
因此我们需要克服梯度下降计算开销太大的问题,那么,随机梯度下降就呼之欲出了。

随机梯度下降的基本想法很简单,就是不直接计算梯度的精确值,而是用梯度的无偏估计 g(w)来代替梯度,即

wt+1=wtηtg(wt)

其中E[g(wt) | wt]=f(wt)

那么肯定有人要问,这么简单,靠不靠谱啊?
可以证明的是在某些条件下,这样得到的序列
{f(w1),,f(wt),}
中的最小值依期望收敛 到f(w)
具体来说,设

ηt0, t=1η2t=||η||22<, t=1ηt=

其中η=[η1,η2,]是无穷维向量,
并假设存在常数GR满足,
对于任意tE[||g(wt)||22]G2E[||w1w||22]R2
并记fbest(t)=min{f(w1),,f(wt)}
那么当t时,E[fbest(t)]f(w)

结合条件期望的性质和f的凸性知

E[||wt+1w||22 | wt]=E[||wtηtg(wt)w||22 | wt]=E[||wtw||22 | wt]2ηtE[g(wt)(wtw) | wt]+η2tE[g(wt)2 | wt]=||wtw||222ηtE[g(wt) | wt](wtw)+η2tE[g(wt)2 | wt]=||wtw||222ηtf(wt)(wtw)+η2tE[g(wt)2 | wt]||wtw||222ηt(f(wt)f(w))+η2tE[g(wt)2 | wt]

两边同时对wt取期望,由重期望公式知

E[||wt+1w||22]E[||wtw||22]2ηt(E[f(wt)]f(w))+η2tG2

重复利用该式可得

E[||wt+1w||22]E[||w1w||22]2j=1tηj(E[f(wj)]f(w))+G2j=1tη2j

注意E[||wt+1w||22]0
E[||w1w||22]R2以及tj=1η2j||η||22
于是

2j=1tηj(E[f(wj)]f(w))R2+G2||η||22

结合E[fbest(t)]E[f(wj)]可知

E[fbest(t)]f(w)R2+G2||η||222tj=1ηj

由于t=1ηt=,故当t时有E[fbest(t)]f(w)

此外,由Markov不等式知对于ϵ>0

P(fbest(t)f(w)ϵ)E[fbest(t)f(w)]ϵR2+G2||η||222ϵtj=1ηj

即当t时有P(fbest(t)f(w)ϵ)0

下面举几个机器学习里的具体例子,设训练集Sn个样本,
S={(x1,y1),(x2,y2),,(xn,yn)}
由于有

Exi[L(w,xi)]=i=1n1nL(w,xi)=(1ni=1nL(w,xi))

成立,于是一个很直观的想法就是每次更新只随机选取一个样本xi来计算梯度。

感知机:感知机可形式化成如下的优化问题

minw   1ni=1nmax{0,yiwxi}

那么对应的更新公式为

wt+1=wt+ηt{ytxt0ytwxt<0otherwise

支持向量机:支持向量机可形式化成如下的优化问题

minw   λ2||w||22+1ni=1nmax{0,1yiwxi}

那么对应的更新公式为

wt+1=wtηt{λwtytxtλwtytwxt<1otherwise

套索:套索可形式化成如下的优化问题

minw   λ||w||1+1ni=1n12(wxiyi)2

w=uv
u0,v0e为全1向量,
优化问题可重写为

minu,v   λue+λve+1ni=1n12(uxivxiyi)2

那么对应的更新公式为

ut+1vt+1=max{0,utηt(utηt(λe+(wxtyt)xt))}=max{0,vtηt(vtηt(λe(wxtyt)xt))}

最后再提一个小技巧,以支持向量机为例,它的更新公式为

wt+1=(1ληt)wt+{ytxt0ytwxt<1otherwise

x维度很高而非零元素很少时,+ytxt可以很高效地算出来,
但是第一项(1ληt)wt的计算代价就有点高了,
因为w一般来说不是稀疏的,一个小技巧就是做个变量代换

wt=utαt

其中αt是标量,于是原来的更新式可以转化为如下只涉及标量计算和稀疏向量操作的更新过程

αt+1ut+1=αt1ληt=ut+{αt+1ytxt0ytwxt<1otherwise
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值