[深度学习]训练神经网路——深度调参
在课堂上学习cs231n的知识,外加上对于神的调参的学习甚少。(平时只是在学习算法和网络;用的时候才看一看)
所以在此将站在“巨人”的肩膀上,看一看调参的经验都有哪些。方便拓展下思维和为后来提高训练精度、突破训练瓶颈做好准备/
**函数使用
sigmoid-tanh-ReLU( ReLU,LeakyReLU,ELU ) - MaxOut<类似relu以及诡异华中参数学习.>
- 如标题所示,介绍了 **函数一步步的发展过程(因为出现了什么问题,继而提出了什么解决方案和**函数)。提高了多少性能,优点是什么、存在的问题又是什么等。
建议
数据预处理(Data Preprocessing)
- 首先介绍零均值归一化
- 然后介绍降维
- 最后进行总结 – 给出相应的建议.
权重初始化
权重初始化研究——所有层**输出,随着层数越深,**数值越趋向于零
**无修饰权重初始化:
tanh() 和 ReLU() **权重初始化方法<相应的论文给出了方法>
更多适合的权重初始化研究论文
BatchNormalization(批量标准化)–对比LN\IN\GN
批量标准化–BN
-
可以看到,由标准化的x得到第二层的输入h1的时候,经历了如下的步骤:
1、第一层的权重项w 和 输入x想成,得到s1
2、对s1进行0-1均值方差标准化,得到s2
3、设置两个参数γ 和 β ,计算γ * s2 + β 得到s3。注意,这里的γ 和 β是网络要学习的变量。
4、将s3经过**函数**之后得到h1 -
优点:
(1) 加速收敛速度
(2) 在一定程度上防止梯度爆炸 -
缺点:
(1) 依赖于batch size
(2) 只对批输入的数据有效。eg:训练集
(3) 对于处理序列化数据无效,因为序列数据间存在一定关系,另外要计算一个维度上的标准化不合理。
具体来看有以下几个方面:
LayerNorm + InstanceNorm + GroupNorm
注意区分:BN和LN ,参考: BatchNormalization、LayerNormalization、InstanceNorm、GroupNorm、SwitchableNorm总结
-
直观区别:
batch是“竖”着来的,各个维度做归一化,所以与batch size有关系。
layer是“横”着来的,对一个样本,不同的神经元neuron间做归一化。显示了同一层的神经元的情况。假设这个mini-batch一共有N个样本,则Batch Normalization是对每一个维度进行归一。而Layer Normalization对于单个的样本就可以处理。
bn和ln都可以比较好的抑制梯度消失和梯度爆炸的情况。
-
BN和LN主要区别为:
- LN中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
- BN中则针对不同神经元输入计算均值和方差,同一个batch中的输入拥有相同的均值和方差。
所以,LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。
-
IN针对图像迁移、图像风格化
BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布。但是图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。
-
GN
主要是针对Batch Normalization对小batchsize效果差,GN将channel方向分group,然后每个group内做归一化,算(C//G)HW的均值,这样与batchsize无关,不受其约束。 -
具体来看:
总结 – 四种使用方法对比 + 使用情况
归一化层,目前主要有这几个方法,Batch Normalization(2015年)、Layer Normalization(2016年)、Instance Normalization(2017年)、Group Normalization(2018年)Switchable Normalization(2018年);
将输入的图像shape记为[N, C, H, W],这几个方法主要的区别就是在,
- batchNorm是在batch上,对NHW做归一化,对小batchsize效果不好;
- layerNorm在通道方向上,对CHW归一化,主要对RNN作用明显;
- instanceNorm在图像像素上,对HW做归一化,用在风格化迁移;
- GroupNorm将channel分组,然后再做归一化;