随机梯度下降(Stochastic Gradient Descent, SGD)是随机和优化相结合的产物,是一种很神奇的优化方法,属于梯度下降的一种,适用于大规模的问题 。
要想扯清楚它,还得先谈谈梯度下降。
众所周知,每个优化问题会有一个目标函数f(w),
梯度下降就是采用迭代的策略,
从初始点w1开始,
每次沿着目标函数在当前点的负梯度方向前进一定的步长,即
只要步长ηt设置合理,
这样可以得到一个单调递减的序列{f(w1),…,f(wt),…},
直至最终不再下降,即可得到最优解w∗。
对于一般优化问题,梯度下降可以找到局部最优解,对于凸优化问题,梯度下降可以得到全局最优解,下面我们只考虑凸优化问题。
考虑如下的目标函数
其中xi是与w无关的常向量。
当n为很大的正整数时,例如几十万甚至几百万时,计算梯度:
代价很大,那么这个方法就行不通了。
但是这样的问题在机器学习领域又很常见,比如感知机(Perceptron),支持向量机(Support Vector Machine, SVM),套索(Least Absolute Shrinkage and Selection Operator, LASSO)等算法都可以写成如下的形式:
其中Ω(w)是关于w的凸正则化项,
L(w,xi)是关于w的凸损失函数。
因此我们需要克服梯度下降计算开销太大的问题,那么,随机梯度下降就呼之欲出了。
随机梯度下降的基本想法很简单,就是不直接计算梯度的精确值,而是用梯度的无偏估计 g(w)来代替梯度,即
其中E[g(wt) | wt]=∇f(wt)。
那么肯定有人要问,这么简单,靠不靠谱啊?
可以证明的是在某些条件下,这样得到的序列
{f(w1),…,f(wt),…}
中的最小值依期望收敛 到f(w∗)。
具体来说,设
其中η=[η1,η2,…]⊤是无穷维向量,
并假设存在常数G和
对于任意t有
并记fbest(t)=min{f(w1),…,f(wt)},
那么当t→∞时,E[fbest(t)]→f(w∗)。
结合条件期望的性质和f的凸性知
两边同时对wt取期望,由重期望公式知
重复利用该式可得
注意E[||wt+1–w∗||22]≥0,
E[||w1–w∗||22]≤R2以及∑tj=1η2j≤||η||22,
于是
结合E[fbest(t)]≤E[f(wj)]可知
由于∑∞t=1ηt=∞,故当t→∞时有E[fbest(t)]→f(w∗)。
此外,由Markov不等式知对于∀ϵ>0有
即当t→∞时有P(fbest(t)–f(w∗)≥ϵ)→0。
下面举几个机器学习里的具体例子,设训练集S有
即S={(x1,y1),(x2,y2),…,(xn,yn)},
由于有
成立,于是一个很直观的想法就是每次更新只随机选取一个样本xi来计算梯度。
感知机:感知机可形式化成如下的优化问题
那么对应的更新公式为
支持向量机:支持向量机可形式化成如下的优化问题
那么对应的更新公式为
套索:套索可形式化成如下的优化问题
设w=u–v
且u≥0,v≥0,e为全1向量,
优化问题可重写为
那么对应的更新公式为
最后再提一个小技巧,以支持向量机为例,它的更新公式为
当x维度很高而非零元素很少时,+ytxt可以很高效地算出来,
但是第一项(1–ληt)wt的计算代价就有点高了,
因为w一般来说不是稀疏的,一个小技巧就是做个变量代换
其中αt是标量,于是原来的更新式可以转化为如下只涉及标量计算和稀疏向量操作的更新过程

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

被折叠的 条评论
为什么被折叠?



