随机梯度算法

 随机梯度下降–Stochastic Gradient Descent | 丕子 http://www.zhizhihu.com/html/y2012/3731.html

在求损失度最小值时,我们一般用到导数为0时求相应参数,但有时会导致很高的计算复杂度。这时,就要乃至随机梯度下降算法了,是用来简化求最小值的计算的。先给W一个初始值,然后朝梯度方向下降,直到不能下降为止,此时即可得到对应的极小值,但注意得到的是局部最小值,有时要对初始值进行不断修正。

但这样,每iteration一次就得用所有数据求一次导数,代价太大,那么每一步只随机抽几个数据点来算一个梯度如何呢?当然可以!这被称之为Stochastic Gradient Descent,非常高效(随机梯度下降算法)。

记得在ML中的目标函数通常是损失+罚(\ell(h)+\lambda f(h))的形式。例如ridge regression就是平方误差+\ell_2罚,lasso是平方误差+\ell_1罚,SVM是hinge loss+\ell_2罚。最小化这个目标函数可以等价于在f(h)\le\delta的限制下最小化\ell(h)\lambda\delta是一一对应的关系。实际上f(h)\le\delta就是定义了一个凸子空间,例如使用\ell_2罚时就是一个半径为\delta的球。所以,Online Gradient Descent可以online的解这一类目标函数,只是对于不同的罚选择不同的投影子。

下面是理论分析。记投影前的\tilde h_{t+1} = h_t-\eta_t\nabla\ell_t(h_t),以及offline最优解h^*=\arg\min_{h\in\mathcal{H}}\sum_{t=1}^T\ell_t(h)。因为\mathcal{H}是凸的且h^*在其中,所以对\tilde h_{t+1}投影只会减少其与h^*的距离,既\|h_{t+1}-h^*\|\le\|\tilde h_{t+1}-h^*\|。记\nabla_t=\nabla \ell_t(h_t),注意到

\displaystyle \|\tilde h_{t+1}-h^*\|^2=\|h_t-h^*\|^2+\eta_t^2\|\nabla_t\|^2-2\eta_t\langle\nabla_t,h_t-h^*\rangle.

由于\ell_t是凸的,所以有

\displaystyle \ell_t(h_t)-\ell_t(h^*)\le \langle\nabla_t,h_t-h^*\rangle \le \frac{1}{2\eta_t}\big(\|h_t-h^*\|^2 - \|h_{t+1}-h^*\|^2\big) + \frac{\eta_t}{2}\|\nabla_t\|^2.

取固定的\eta_t=\eta,对t进行累加就有R(T)\le \frac{1}{2\eta}\|w_1-w^*\|^2+\frac{\eta}{2}\sum_{t=1}^T\|\nabla_t\|^2。记\mathcal{H}的直径为D,且对所有t\|\nabla_t\|\le L成立(既Lipschitz常数为L),再取\eta=\frac{D}{L\sqrt{T}},那么

\displaystyle R(T)\le LD\sqrt{T}.

这个bound可以通过设置变动的学习率\eta_t加强。

 

你可能感兴趣的:(数学算法)