随机梯度下降(Stochastic gradient descent)

总目录

一、 凸优化基础(Convex Optimization basics)

  1. 凸优化基础(Convex Optimization basics)

二、 一阶梯度方法(First-order methods)

  1. 梯度下降(Gradient Descent)
  2. 次梯度(Subgradients)
  3. 近端梯度法(Proximal Gradient Descent)
  4. 随机梯度下降(Stochastic gradient descent)

三、对偶

  1. 线性规划中的对偶(Duality in linear programs)
  2. 凸优化中的对偶(Duality in General Programs)
  3. KKT条件(Karush-Kuhn-Tucker Conditions)
  4. 对偶的应用及拓展(Duality Uses and Correspondences)
  5. 对偶方法(Dual Methods)
  6. 交替方向乘子法(Alternating Direction Method of Multipliers)

Introduction

前面介绍过了多种梯度下降的方法,当数据规模比较小时,我们可以使用这些方法计算在所有数据上的梯度并进行更新迭代。而当数据规模比较大时,每次计算所有数据梯度的开销将会非常巨大。由于随机梯度下降可以大大减小计算开销,因此常用于大规模数据优化中。

随机梯度下降

考虑这样一个最优化问题
min ⁡ x 1 m ∑ i = 1 m f i ( x ) \min_{x}\frac{1}{m}\sum^{m}_{i=1}f_i(x) xminm1i=1mfi(x)
即最小化一系列函数的平均值。该问题的梯度为 ∇ ∑ i = 1 m f i ( x ) = ∑ i = 1 m ∇ f i ( x ) \nabla \sum^{m}_{i=1}f_i(x)=\sum^{m}_{i=1}\nabla f_i(x) i=1mfi(x)=i=1mfi(x)。常规的梯度下降就是不断迭代:
x ( k ) = x ( k − 1 ) − t k ⋅ 1 m ∑ i = 1 m ∇ f i ( x ( k − 1 ) ) , k = 1 , 2 , 3 , . . . x^{(k)}=x^{(k-1)}-t_k\cdot \frac{1}{m}\sum^m_{i=1}\nabla f_i(x^{(k-1)}),\qquad k=1,2,3,... x(k)=x(k1)tkm1i=1mfi(x(k1)),k=1,2,3,...

而随机梯度下降(SGD)则是迭代:
x ( k ) = x ( k − 1 ) − t k ⋅ ∇ f i k ( x ( k − 1 ) ) , k = 1 , 2 , 3 , . . . x^{(k)}=x^{(k-1)}-t_k\cdot \nabla f_{i_k}(x^{(k-1)}),\qquad k=1,2,3,... x(k)=x(k1)tkfik(x(k1)),k=1,2,3,...

其中, i k ∈ { 1 , . . . , m } i_k\in \{1,...,m\} ik{1,...,m}是在第k次迭代中被选择的函数索引。

有两种方式选择 i k i_k ik:

  • 随机方式:从取值范围中均匀随机选择 i k ∈ { 1 , . . . , m } i_k\in \{1,...,m\} ik{1,...,m}
  • 循环方式:依次选取 i l = 1 , 2 , . . . , m , 1 , 2 , . . . , m , . . . i_l=1,2,...,m,1,2,...,m,... il=1,2,...,m,1,2,...,m,...

其中,随机方式是实践中最常用的,对于随机方式来说:
E [ ∇ f i k ( x ) ] = ∇ f ( x ) E[\nabla f_{i_k}(x)]=\nabla f(x) E[fik(x)]=f(x)

因此我们可以把SGD的每一步看做是梯度的无偏估计。
SGD将每个函数看成是独立的,每次只优化部分函数,可以大大节省内存消耗。

例子:随机逻辑回归(stochastic logistic regression)
给定 ( x i , y i ) ∈ R p × { 0 , 1 } , i = 1 , . . . , n (x_i,y_i)\in R^p\times \{0,1\},i=1,...,n (xi,yi)Rp×{0,1},i=1,...,n,逻辑回归定义为:
min ⁡ β 1 n ∑ i = 1 n ( − y i x i T β + l o g ( 1 + exp ⁡ ( x i T β ) ) ) \min_\beta \frac{1}{n}\sum^n_{i=1}(-y_ix^T_i\beta+log(1+\exp(x^T_i\beta))) βminn1i=1n(yixiTβ+log(1+exp(xiTβ)))

其梯度为 ∇ f ( β ) = 1 n ∑ i = 1 n ( y i − p i ( β ) ) x i \nabla f(\beta)=\frac{1}{n}\sum^n_{i=1}(y_i-p_i(\beta))x_i f(β)=n1i=1n(yipi(β))xi
对于完全梯度下降来说:每次batch迭代更新的花费为 O ( n p ) O(np) O(np),而对于SGD来说,每次随机迭代更新的花费为 O ( p ) O(p) O(p)
我们取 n = 10 n=10 n=10 p = 2 p=2 p=2来看一下两者收敛曲线的比较:
picture
我们可以看到SGD在离最优点比较远时收敛得比较快,而在接近最优点时比较难收敛到最优点。

步长的选择

通常SGD使用递减的步长,比如 t k = 1 / k t_k=1/k tk=1/k。如果使用固定步长,则在接近最优点时会很难继续收敛。

收敛率

在以前的章节里提到,对于凸函数 f f f,使用递减步长的梯度下降方法的收敛率为 O ( 1 / k ) O(1/\sqrt{k}) O(1/k )。当 f f f可微且有Lipshitz梯度时,对于合适的固定步长有 O ( 1 / k ) O(1/k) O(1/k)的收敛率。那么对于SGD如何呢?对于凸函数 f f f,使用递减步长的SGD的期望收敛率为 O ( 1 / ( k ) ) O(1/\sqrt(k)) O(1/( k))。然而,与梯度下降不同的是,SGD不会随着进一步假设 f f f有Lipshitz梯度而提升。甚至当 f f f是强凸时会变得更糟。
f f f是强凸且有Lipshitz梯度时,梯度下降有 O ( γ k ) O(\gamma^k) O(γk)的收敛率,其中 0 < γ < 1 0<\gamma<1 0<γ<1。但是相同条件下,SGD只有 O ( 1 / k ) O(1/k) O(1/k)的期望收敛率。那么有没有什么方法可以提升SGD呢?

小批量随机梯度下降

常用的SGD是小批量随机梯度下降(mini-batch stochastic gradient descent)。我们随机选取一个子集 I k ⊆ { 1 , . . . , m } ,   ∣ I k ∣ = b ≪ m I_k\subseteq \{1,...,m\},\ |I_k|=b\ll m Ik{1,...,m}, Ik=bm,然后重复迭代:
x ( k ) = x ( k − 1 ) − t k ⋅ 1 b ∑ i ∈ I k ∇ f i ( x ( k − 1 ) ) , k = 1 , 2 , 3 , . . . x^{(k)}=x^{(k-1)}-t_k\cdot \frac{1}{b}\sum_{i\in I_k}\nabla f_i(x^{(k-1)}),\qquad k=1,2,3,... x(k)=x(k1)tkb1iIkfi(x(k1)),k=1,2,3,...

使用小批量可以将方差减小 1 / b 1/b 1/b,但同样要多花费 b b b倍时间。同时收敛率也有所提升。
再次考虑上面例子中的逻辑回归问题,当 n = 10 , 000 , p = 20 n=10,000, p=20 n=10,000,p=20时,所有方法都用固定步长,可以得到:
在这里插入图片描述
但从总体结果来看,使用小批量随机梯度下降并不能显著提升总的开销和精度。

SGD在大规模机器学习中的应用

SGD被广泛应用于大规模机器学习(ML)中。

  • 在许多ML问题中,我们往往不需要优化到很高的精度,因此固定步长常常应用于ML中
  • 一个trick是在整个数据集上运行SGD之前,先在一小部分上进行训练,从而选取合适的步长。
  • 动量(mometum),自适应步长等许多SGD的变体都是实践中常用的方法(如Adagrad,Adam等)
  • SGD尤其流行于大规模、连续的非凸优化问题中

参考资料

CMU:Convex Optimization

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值