CS231n李飞飞计算机视觉 神经网络训练细节part1下

神经网络训练细节part1下

  1. 权值初始化

  2. 批数据规范化Batch Normalization

  3. 超参数优化

权值初始化

(1)高斯随机数乘0.01

w = 0.01*np.random.randn(fan_in,fan_out)

特点:在层数较少的网络中效果较好,但在随着网络层数增多会出现梯度消失。

在上图的网络中,反向传播,求W1的导数,

\frac{\partial f}{\partial w_1}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial w_1}=x\frac{\partial f}{\partial q}=xzw_3w_4

由于网络权值初始化为小的随机数,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)

\hat{x}^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}

规范化后的数据依旧可微。批数据规范化层放在全连接层之后,激活函数之前。如下图:

但是无法确定网络是否需要高斯分布的数据。因而对其进一步改进,y^{(k)}=\alpha ^{(k)}\tilde{x}^{(k)}+\beta^{(k)}\alpha ^{(k)},\beta^{(k)}是参数,是网络训练过程中可以学习的参数,这样在优化一开始的时候不会出现梯度消失的现象。但是存在一种情况,就是当网络学习到的参数\alpha ^{(k)}=E[x^{(k)}],\beta^{(k)}=\sqrt{Var(x^{(k)})},此时就抵消掉了批数据规范化BN的处理。

优点:(1)增强网络中的梯度流。(2)允许网络的学习速率较大,网络训练速度较快。(3)减少了网络对权值初始化的依赖性。(4)也是一种正则化的形式。这样理解本来一个batch中的n个数据是独立地进入网络然后更新权值,但是在BN中要让每个数据减去这个batch数据的均值,然后再除以这个Batch数据的方差。所以这些数据互相还是有影响的。

测试时,BN层是如何工作的?关键在于BN中的数据减去的均值是什么?除以的方差是什么?

两种方式:(1)计算整个训练集的方差和均值。(2)在训练过程中保留每一个batch的均值和方差,分别将全部的均值和方差加起来。

超参数优化

超参数:学习率、正则化

随机产生在一定范围内的随机数作为参数,然后观察其优化效果,选择效果较优的区间。

最好在对数空间采样。

猜你喜欢

转载自blog.csdn.net/wangchy29/article/details/86685917