机器学习笔记:SGD (stochastic gradient descent)的隐式正则化

1 随机梯度下降的梯度

对于满足分布D的数据集(x^{(1)},x^{(2)}),我们做以下标记:

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第1张图片

mini-batch的梯度,也就是SGD带来的梯度,可以看成是期望的梯度加上一个误差项

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第2张图片

 那么,这个误差项,对于机器学习任务来说,有没有增益呢?

结论是:对于优化问题来说,可以逃离鞍点、极大值点,有时也可以逃离一些不好的极小值点

SGD的隐式正则化:找寻宽的极小值点(flat optima)

2 逃离极大值和鞍点 

首先回顾一下这张图:

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第3张图片

当一阶导数为0的时候,根据二阶导数(hessian矩阵)的正定和负定性,我们可能出现极小值、极大值和鞍点三种情况

 使用SGD后,当我们有一个微小的误差扰动后,我们就可以逃离鞍点和局部极大值了。

3 收敛到flat minimum

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第4张图片

对于比较sharp的局部极小值,x一点点的不同就会导致f(x)很大的区别。所以落入sharp minimum就需要很精准的梯度下降。

而SGD是自带小误差的,所以不太会落入sharp minimum

 至于为什么不希望落入sharp minimum,我们可以通过下面这个例子说明

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第5张图片

红色和蓝色代表了两个类别,我们希望找到它们的边界。

左图所有的红色点都是在红颜色的区域内,蓝色点都在蓝颜色的区域内。所以边界很平缓。通过SGD可以很合理地学习他的边界;

右图某一个红/蓝点周围全是另外一个颜色的区域,这样的边界是很sharp的。(这很可能是训练集的问题)。如果使用全数据进行训练,那么就会这几个特定的点被分类成一个类别,它们周围的区域则是另一个类别。

但是对于右图,换一个测试集,可能那些特殊的点就不存在了(因为不是每个数据集都会有这些error的)。所以全数据集训练的话,可能会导致训练集和测试集的效果不相当。

但是对于右图,如果我们使用SGD的话,这些单独的点(也就是sharp minimum点),会由于SGD的微小扰动而不会最终收敛到这些点。

4 跳出不好的局部极小值 

局部极小值在实际问题中是很常见的:

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第6张图片

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第7张图片

SGD带来的小量波动,可以让我们跳出上图红圈的那些不好的局部最小值

5 batch gradient descent, stochastic gradient descent 和 mini-batch gradient batch

batch gradient descent stochastic gradient descent mini-batch gradient batch
计算梯度需要的数据大小

全部数据集

单个数据

 

 

一个小batch数量的数据

 

优点 保证收敛到凸函数的全局最小值,非凸函数的局部最小值。
  • 比batch gradient descent 快
  • 可以在线学习
  • 比batch gradient descent 快(比SGD慢一点)
  • 相比于stochastic gradient descent, 更新的方差小了
  • 可以在线学习
缺点
  • 梯度下降非常慢
  • 不适用于很大的数据集
  • 无法在线学习
  • 更新过程中会有很大的方差

机器学习笔记:SGD (stochastic gradient descent)的隐式正则化_第8张图片

 

  • mini-batch 大小是一个超参数,需要进行调参

注:有的时候不区分stochastic gradient descent和mini-batch gradient descent,我们会把mini-batch 也称作 SGD

你可能感兴趣的:(机器学习,机器学习,神经网络,python)