博客
关于我
batch norm参数
阅读量:272 次
发布时间:2019-03-01

本文共 941 字,大约阅读时间需要 3 分钟。

在阅读深度学习模型的源码时,常常会遇到一些与批量归一化(Batch Normalization,BN)相关的新参数。这些参数在不同模型中可能会有细微差别,但总体上具有相似的功能。以下是几个值得关注的参数:

  • epsilon

    为了防止归一化过程中分母出现零的情况(这通常会导致计算结果异常),epsilon作为一个非常小的数值被引入。它的作用是确保分母始终保持一定的值,从而避免除以零的错误。在批量归一化的算法中,epsilon通常会被设置为一个很小的数值,如1e-5。

  • momentum

    批量归一化需要计算加权移动平均数(Moving Average,MA),而momentum参数则是这个加权平均数的权重。在代码实现中,momentum通常被设置为一个接近1的数值(如0.9、0.99或0.999)。它的作用是赋予加权平均数一定的“惯性”,即历史平均值不会被完全替代。

  • use_precise_stats

    在批量归一化的训练过程中,模型会根据当前批次的数据计算均值和方差来进行归一化。但是在测试过程中,由于没有批量数据,模型需要使用预先计算好的滑动平均值(EMA)。这个滑动平均值的计算方式决定了模型的性能。当训练过程中计算的EMA不能很好地估计测试时的均值和方差时,批量归一化可能会失效。因此,use_precise_stats参数被引入,其作用是控制EMA的计算方式。如果lambda值(通常在0.9到0.99之间)过小,最近的批次数据对EMA的影响会过大,导致估计值不准确;如果lambda值过大,则需要更多的迭代才能得到稳定的结果。

  • num_batches_precise

    在使用precise batch norm(精确批归一化)时,模型会根据指定的批量数量(num_batches_precise)来计算测试时的均值和方差。这批量数量也是一个超参数,其选择对模型性能有重要影响。

  • 需要注意的是,虽然use_precise_stats和num_batches_precise都是精确批归一化的核心参数,但这种方法并不是主流的选择。因为EMA通常是有效的(当lambda值足够大且模型经过充分训练时),因此大多数情况下直接使用EMA来估计测试时的均值和方差是足够的。

    转载地址:http://mrvx.baihongyu.com/

    你可能感兴趣的文章
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object.assign用法
    查看>>
    Object.create
    查看>>
    Object.keys()的详解和用法
    查看>>
    objectForKey与valueForKey在NSDictionary中的差异
    查看>>
    Objective - C 小谈:消息机制的原理与使用
    查看>>
    OBJECTIVE C (XCODE) 绘图功能简介(转载)
    查看>>
    Objective-C ---JSON 解析 和 KVC
    查看>>
    Objective-C 编码规范
    查看>>
    Objective-Cfor循环实现Factorial阶乘算法 (附完整源码)
    查看>>
    Objective-C——判断对象等同性
    查看>>
    objective-c中的内存管理
    查看>>
    Objective-C之成魔之路【7-类、对象和方法】
    查看>>
    Objective-C享元模式(Flyweight)
    查看>>
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>