您的位置:首页 > Web前端

DeepLearning(基于caffe)优化策略(1)--Normalization篇:BN、WN、LN

2017-05-31 11:01 274 查看
        我们知道,深度学习是一种高性能的解决模式识别问题的模型算法,尤其是在计算机视觉方面,但随之而来的,对深度学习进行优化也成为了一个大家讨论的话题。这次总结的是三种深度学习的Normalization。

一、Batch Normalization

什么是Batch Normalization?

        即批标准化,和普通的标准化类似,是将数据进行归一化的操作,在网络(Network)中也属于一层操作。

为什么需要Batch Normalization?

        众所周知,深度学习中的学习率(Learning Rate)是我们需要调整的参数之一,学习率太高,会导致Loss值“爆炸”(所谓爆炸,就是loss值过于大,失去了其的意义);学习率太小,Loss值一直处于平缓的状态,寻找一个合适的Rate,与你初始的学习率是有关的,如果初始的太大,会导致需要太多的时间,如果初始的太小,有可能错失了“最优参数”,于是BN算法就此诞生。

Batch Normalization的优点

        1.因为BN可以使得训练的速度飙升,所以就可以选择较大的初始学习率,它能够使得衰减的速度变快,从而得到“最优学习率”,再也不用慢慢的调整学习率了
        2.采用BN之后,你就可以移除dropout、L2正则项参数了,因为BN可以提高网络泛化的能力(有待以后去体会)
        3.不用再使用局部相应归一化层了,因为BN本身就是归一化操作

怎么使用Batch Normalization?

        具体操作如下:

        我们需要输入的是待归一化的Xi,最后我们得到的是BN之后的Xi



        特此说明:提出BN的大佬为了保持模型的表达能力,又增加了两个变量参数

        


Batch Normalization用在何处?

        一般情况下,用在非线性激活函数之前,或者非线性激活函数之后

如何在caffe中进行应用呢?

        在caffe中,BN被拆成两个文件(scale_layer.cpp和batch_normalization_layer.cpp)

        训练时,在deploy.prototxt中写如下代码:

layer{
bottom: "conv1"
top: "conv1"
name: "bn_conv1"
type: "BatchNorm"
batch_norm_param {
use_global_stats: false
}
}

layer{
bottom: "conv1"
top: "conv1"
name: "scale_conv1"
type: "Scale"
scale_param {
bias_term: false
}
}


        测试时,在deploy.prototxt中写如下代码:

layer{
bottom: "conv1"
top: "conv1"
name: "bn_conv1"
type: "BatchNorm"
batch_norm_param {
use_global_stats: true
}
}

layer{
bottom: "conv1"
top: "conv1"
name: "scale_conv1"
type: "Scale"
scale_param {
bias_term: false
}
}


二、Layer Normalization

什么是Layer Normalization?

         即层标准化,和普通的标准化类似,是将网络中的层进行归一化的操作。

为什么需要Layer Normalization?

        对于RNN模型来说,归一化的时候Batch Normalization不再适合,在RNN模型里,sequence的长度是不一致的,正是由于这种不一致的问题,导致BN使用起来效果不佳,借用网上的一句话,RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊的sequence比其sequence长,所以对sequence进行Batch
Normalization计算起来比较麻烦。于是乎,Layer Normalization登场了。

Layer Normalization的优点

        跟BN类似,也具有Normalization的优点,更适用于RNN模型

怎么使用Layer Normalization?

        我们需要明确的是LN是对层进行归一化的,但是也是对某一层所有的dataset进行归一化的。

        具体操作如下:

        一般的通式:



        针对RNN的公式:



        由此可见,LN中同层输入拥有相同的均值和方差,不同输入拥有不同的均值和方差;而BN是同一个minibatch中的输入拥有相同的均值和方差,而不同minibatch的输入拥有不同的均值和方差。

三、Weight Normalization

什么是Weight Normalization?

        即权重归一化,也就是对权重值进行归一化。

Weight Normalization的优点

        1.WN是通过重写深度网络的权重来进行加速的,没有引入对minibatch的依赖,更适合于RNN网络

        2.引入更少的噪声

        3.不需要额外的空间进行存储minibatch的均值和方差,对时间的开销也小,所以速度会更快
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: