zoukankan      html  css  js  c++  java
  • CNN 细节一 batch和epoch以及找最小loss值的关系 Batch size选取

    半路出家,一直没搞懂CNN底层运行关系,现在才慢慢清楚点

    例子是出其理论学习者最好的帮手,So,我来个example

    Example: 

    15000个样本,我们训练模型的目的是找一组参数,使得该参数对应的模型能最大可能地符合所有样本的值

    (1)其实是根据loss function做梯度下降进行寻找能使loss functionz值最小的参数

       假设loss function 为f(X, A), 其中X=[x1,x2,.....xn]为一组我们要找的参数, A=[a1,a2,....,an]为我们的训练样本。

      通过在样本A的基础上对f(X, A)分别求x1,x2,x3...xn的偏导,来寻找函数f的最优解。

    (2)15000个样本,每个batch是15,一个epoch就是对15000个样本跑一遍,一遍中有1000次迭代,每次迭代都通过 f(X,A)寻找到当前这组15个样本情况下的最优参数。 然后进行1000迭代后就完成了一个epoch,也就对所有样本跑了一遍。

    (3)在进行多个epoch后,最终能找到最优的参数,训练好模型。

    梯度下降:

    Gradient descent: 所有样本算出来的梯度值更新下一步,每一步计算量巨大,但容易陷入局部最小值,overfitting;

    Stochastic descent:一个样本算出来的梯度更新每一步。 它的随机性有利于跳出鞍点,又具有加强普遍性 (测试集上表现优秀) 的作用。但训练耗时,同时过大的样本差异会使训练比较震荡;

     Minibatch Gradient Descent: 以 [公式] 个样本算出的梯度的平均值来更新每一步;

    Batch size的大小选取问题:

    1. 如果样本数量不大(小于2000),则直接使用所有的样本同时训练, 就是batch-GD梯度下降法

    2. 使用mini-batch, 每个epoch多次更新所有参数。 对于一个epoch来说,小batch能快速收敛,大batch收敛更慢。同样的epoch数量,小batch更耗时。mini-batch每次更新时由于没有使用全量数据而仅仅使用batch内数据,从而人为给训练带来了噪声,而这个操作却往往能够带领算法走出局部最优(鞍点)

    3. mini-batch能够解决训练集过大,不能一次性输入内存的问题

    4. 大的batch 能更准确地算出模型梯度,模型更稳定,更容易收敛,但容易陷入鞍点。所以并不是batch-size越大越好

    总结: mini-batch的提出是为了加快收敛,节省内存,但同时带来了一些每次更新不准的副作用, 不过这些副作用也变成了它的优点,让他能够跳出局部鞍点。

  • 相关阅读:
    jQuery源码分析-01总体架构
    JS框架的一些小总结
    jquery validate表单验证插件
    jQuery $.extend()用法总结
    详解;(function ($,window,document,undefined){...})(jQuery,window,document);
    (function(){... })();
    同源策略 JSONP(实践篇)
    **字符集--发展史
    Django X 和 druid
    Django xadmin的使用 (三)
  • 原文地址:https://www.cnblogs.com/xinyuePhd/p/9998911.html
Copyright © 2011-2022 走看看