梯度下降
调整学习率learning rate
- 学习率过大,发生震荡。学习率过小,学习效率低
- 较好的方法是在较平坦的地方步子迈大些,陡峭的地方步子迈小些
自适应学习率
- 随着迭代次数的增加,通过因子来减小学习率
- 刚开始,初始点距离最低点远,使用大的学习率
- 迭代若干次数后靠近最低点,采用小的学习率
Adagrad算法
一般梯度下降: $$ L=\sum_n(\tilde{y}^n - (b+\sum w_ix_i^n))^2 \ w^{t+1}\gets w^t-\eta^tg^t\ \eta^t=\frac{\eta}{\sqrt{t+1}} $$ Adagrad: $$ w^{t+1}\gets w^t-\frac{\eta^t}{\sigma}g^t\ g^t=\frac{\partial L(\theta^t)}{\partial w}\ \eta^t = \frac{\eta}{\sqrt{t+1}}\ \sigma^t=\sqrt{\frac{1}{t=1}\sum^t_{i=0}(g^i)^2} $$ 化简: $$ w^{t+1}\gets w^t-\frac{\eta}{\sqrt{\sum^t_{i=0}(g^i)^2}}g^t\ $$
随机梯度下降 Stochastic Gradient Descent
- 常规梯度下降是将 所有训练集数据处理后才开始更新参数
- 随机梯度下降是计算一个例子的损失函数 $L$ 后就开始更新梯度
- 更新既可以按顺序更新,也可以随机挑选数据更新
特征缩放
-
两个输入数据分布的范围不一样,差别较大,建议进行缩放处理,使得数据分布的范围一样
-
数据不进行处理,会导致特征间的影响程度差异大,对于同一个学习率,更新数据偏差大
-
实际上就是将数据分布由椭圆进行坐标变换,化为同心圆。
-
常规做法:$$x_i^r \gets \frac{x_i^r - \bar{x}}{\sigma _i},\bar{x}是平均值,\sigma_i是标准差$$
泰勒展开式
如果$h(x)在x=x_0$ 点的某个领域内有无限阶导数,则有泰勒级数: $$ \begin{split} h(x)&=\sum^\infty_{k=0}\frac{h^k(x_0)}{k!}(x-x_0)^k\ &=h(x_0)+h'(x_0)(x-x_0)+\frac{h''(x_0)}{!}(x-x_0)^2+... \end{split} $$ 二元泰勒: $$ h(x,y)=h(x_0,y_0)+\frac{\partial h(x_0,y_0)}{\partial x}(x-x_0)+\frac{\partial h(x_0,y_0)}{\partial y}(y-y_0)+... $$
梯度下降理论基础
在小范围的圆里面找到最小值,然后不断递归,直到找到全局最小值。
基于泰勒展开式,化简:
两个向量内积如何最小,一定是反向180°即可。因此有:
最后有:
梯度下降法的局限
- 陷入局部最小值
- 掉入鞍点
- 陷入一个平原地区
来源:oschina
链接:https://my.oschina.net/u/4389837/blog/3633437