美文网首页实习日记~
菜鸟实习日记~day14(BN层)

菜鸟实习日记~day14(BN层)

作者: 飞翔的小瓜瓜 | 来源:发表于2017-10-20 15:07 被阅读0次

    科研:

    BN层

    Batch Normalization是由google提出的一种训练优化方法。参考论文:Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift

    个人觉得BN层的作用是加快网络学习速率,论文中提及其它的优点都是这个优点的副产品。

    How to use BN?

    Normalization是数据标准化(归一化,规范化),Batch 可以理解为批量,加起来就是批量标准化。

    先说Batch是怎么确定的。在CNN中,Batch就是训练网络所设定的图片数量batch_size。

    Normalization过程,引用论文中的解释:

    输入:输入数据x1..xm(这些数据是准备进入激活函数的数据)

    计算过程中可以看到,

    1.求数据均值;

    2.求数据方差;

    3.数据进行标准化(个人认为称作正态化也可以)

    4.训练参数γ,β

    5.输出y通过γ与β的线性变换得到原来的数值

    在训练的正向传播中,不会改变当前输出,只记录下γ与β。

    在反向传播的时候,根据求得的γ与β通过链式求导方式,求出学习速率以至改变权值

    (特征图里的值,作为BN的输入,也就是这9个数值通过BN计算并保存γ与β,通过γ与β使得输出与输入不变)

    Why to use BN?

    为了防止梯度爆炸或梯度弥散

    When to use BN?

    OK,说完BN的优势,自然可以知道什么时候用BN比较好。例如,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度

    在finetune Resnet时,网络结构文件中BatchNorm层的参数要注意:

    1.在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false)

    2.在测试时所有BN层要设置use_global_stats: true

    影响:

    1.训练如果不设为false,会导致模型不收敛

    2.测试如果不设置为true,会导致准确率极低

    (亲测,测试时为false时acc=0.05,为true时acc=0.91)

    区别:

    use_global_stats: false是使用了每个Batch里的数据的均值和方差;

    use_global_stats: true是使用了所有数据的均值和方差

    相关文章

      网友评论

        本文标题:菜鸟实习日记~day14(BN层)

        本文链接:https://www.haomeiwen.com/subject/okuwyxtx.html