20170225#cs231n#3.最优化问题

来源:互联网 发布:交换机端口抓包 编辑:程序博客网 时间:2024/06/05 13:28

Optimization:Stochastic Gradient Descent

Optimization是寻找一个W使得LossFunction最小化的过程

SVMcostFunction就是一个convex function(凸函数),然后这就涉及到了 ConvexOptimization(凸优化)
但是神经网络的代价函数就是non-convex的了

然后会有很多lossfunction是Non-differentiable 不可导的,(例如最大值函数)。这个时候我们使用subgradient次梯度和gradient梯度交替结合的方法

 Optimization最优化问题

核心在于利用梯度下降,有两种计算梯度的方法

  • analytic gradient解析梯度
    df(x)dx=limh0f(x+h)f(xh)2h

    • 解析梯度算法的速度快结果精确但是实现的时候容易出错
  • numerical gradient数值梯度(近似解)
    f(x+h)f(xh)2h

    • 上式称为中心差值公式(centered difference formula),h的值特别小(例如1e-5),
    • 中心差值公式的结果误差比较小,看wiki
    • 数值梯度算法速度慢但是实现简单

csdn-DeepLearning梯度检验
CSDN-cs231-最优化问题

其他关于数值梯度下降的东西可以看之前的Courseraweek1-3笔记,cs231n和Coursera大同小异
计算数值梯度的复杂性和参数的量线性相关,现代的NeuralNetwork经常有上千万个参数,所以数值梯度的方法其实效率很低,我们需要更好的办法

用微积分的方法计算解析梯度
数值梯度有个明显缺点就是它是个近似值,但是由于实现起来简单所以结果收敛到全局最优一般没有太大问题

不过解析梯度计算效率很高,但实现起来并不简单所以容易出错

因此我们经常计算出解析梯度analytic gradient的值之后和数值梯度numerical gradient的值进行对比,check一下结果,来检查我们的解析梯度analytic gradient实现是否正确

这个过程称之为Gradient Check

Gradient Descent 梯度下降

梯度下降是对神经网络的LossFunction最优化中最常用的方法

Mini-batch gradient descent小批量梯度下降

它运行得比较好的原因在于效率高,小批量的梯度其实就是对整个数据集梯度的近似,而由于数量较少所以运算速率较高,所以收敛得更快

Stochastic Gradient Descent (SGD) 随机梯度下降

这就是一个mini-batch中只有1个数据的情况
有时候也称为on-line gradient descent在线梯度下降,但是随机梯度下降在实际中几乎没有人用。不过经常还是有人用SGD来去指代mini-batch gradient descent(或者用MGD指代)

一个mini-batch的size虽然是一个超参数,但其实一般不会用交叉验证来调参。这个size经常是决定于存储器的限制,或者就是直接使用32,64,128等
在实际中size的大小一般为2的n次幂。因为当输入的大小是 powers of 2 的时候,很多向量化操作实现会运算的更快一些


mini-batch的lossfuction与迭代次数图像会有很大的噪声但最后的趋势仍然是下降的。如果是Full-batch的话lossfunction与迭代次数的图像会是平滑的

0 0
原创粉丝点击