神经网络训练细节part1下
-
权值初始化
-
批数据规范化Batch Normalization
-
超参数优化
权值初始化
(1)高斯随机数乘0.01
w = 0.01*np.random.randn(fan_in,fan_out)
特点:在层数较少的网络中效果较好,但在随着网络层数增多会出现梯度消失。
在上图的网络中,反向传播,求W1的导数,
由于网络权值初始化为小的随机数,W1的梯度值就很小,如果网络层数再增多,W1的梯度值就接近为0,因而出现梯度消失。
(2)高斯随机数乘1
w = 1.0*np.random.randn(fan_in,fan_out)
特点:权值不会过小,但是会造成几乎全部神经元饱和,梯度消失。
(3)Xavier初始化
w = np.random.randn(fan_in,fan_out)/np.sqrt(fan_in)
特点:考虑到数据方差,让高斯随机数除以输入单元个数的算术平方根,致使输入较多时权值变小,输入较少时权值较大。这个方法是考虑的线性数据的方差。但是在使用ReLU做激活函数时,由于对于负输入ReLU的输出为0,所以方差减半,故修改初始化方法为:
w = np.random.randn(fan_in,fan_out)/np.sqrt(fan_in/2)
批数据规范化
让一个batch的数据的每个特征分布是单位高斯分布的(均值为0,方差为1)
规范化后的数据依旧可微。批数据规范化层放在全连接层之后,激活函数之前。如下图:
但是无法确定网络是否需要高斯分布的数据。因而对其进一步改进,,是参数,是网络训练过程中可以学习的参数,这样在优化一开始的时候不会出现梯度消失的现象。但是存在一种情况,就是当网络学习到的参数,此时就抵消掉了批数据规范化BN的处理。
优点:(1)增强网络中的梯度流。(2)允许网络的学习速率较大,网络训练速度较快。(3)减少了网络对权值初始化的依赖性。(4)也是一种正则化的形式。这样理解本来一个batch中的n个数据是独立地进入网络然后更新权值,但是在BN中要让每个数据减去这个batch数据的均值,然后再除以这个Batch数据的方差。所以这些数据互相还是有影响的。
测试时,BN层是如何工作的?关键在于BN中的数据减去的均值是什么?除以的方差是什么?
两种方式:(1)计算整个训练集的方差和均值。(2)在训练过程中保留每一个batch的均值和方差,分别将全部的均值和方差加起来。
超参数优化
超参数:学习率、正则化
随机产生在一定范围内的随机数作为参数,然后观察其优化效果,选择效果较优的区间。
最好在对数空间采样。