5.1 调试处理(Tuning process)
学习速率是需要调试的最重要的超参数。
此外,还有一些参数需要调试,例如Momentum参数,0.9就是个很好的默认值。还会调试mini-batch的大小,以确保最优算法运行有效。还会经常调试隐藏单元,用橙色圈住的这些,这三个是觉得其次比较重要的,相对于而言。重要性排第三位的是其他因素,层数有时会产生很大的影响,学习率衰减也是如此。当应用Adam算法时,事实上,我从不调试β1,β2 和 ε,我总是选定其分别为0.9,0.999和 1 0 − 8 10^{-8} 10−8。
红色圈出的,无疑是最重要的,接下来是用橙色圈住的那些,然后是用紫色圈住的那些。
5.2 为超参数选择合适的范围(Using an appropriate scale to pick hyperparameters)
总结一下,在对数坐标下取值,取最小值的对数就得到a的值,取最大值的对数就得到b的值,所以在对数轴上 1 0 a 10^a 10a的 1 0 b 10^b 10b到区间取值,在a,b间随意均匀的选取r值,将超参数设置为 1 0 r 10^r 10r,这就是在对数轴上取值的过程。
5.3 Batch Norm 为什么奏效?(Why does Batch Norm work?)
为什么Batch归一化会起作用呢?
一个原因是,有一些从0到1而不是从1到1000的特征值,通过归一化所有的输入特征值,以获得类似范围的值,可以加速学习。所以Batch归一化起的作用的原因,直观的一点就是,它在做类似的工作,但不仅仅对于这里的输入值,还有隐藏单元的值。
Batch归一化有效的第二个原因是,它可以使权重比你的网络更滞后或更深层,比如,第10层的权重更能经受得住变化,相比于神经网络中前层的权重,比如第1层。
Batch归一化的意思是,尤其从神经网络后层之一的角度而言,前层不会左右移动的那么多,因为它们被同样的均值和方差所限制,所以,这会使得后层的学习工作变得更容易些。
Batch归一化还有一个作用,它有轻微的正则化效果。
类似于dropout,Batch归一化有轻微的正则化效果,因为给隐藏单元添加了噪音,这迫使后部单元不过分依赖任何一个隐藏单元,类似于dropout,它给隐藏层增加了噪音,因此有轻微的正则化效果。因为添加的噪音很微小,所以并不是巨大的正则化效果,可以将Batch归一化和dropout一起使用,如果想得到dropout更强大的正则化效果。
也许另一个轻微非直观的效果是,如果应用了较大的mini-batch,比如说,用了512而不是64,通过应用较大的min-batch,减少了噪音,因此减少了正则化效果,这是dropout的一个奇怪的性质,就是应用较大的mini-batch可以减少正则化效果。
Batch归一化将数据以mini-batch的形式逐一处理:
在训练时,这些就是用来执行Batch归一化的等式。在一个mini-batch中,将mini-batch的
z
(
i
)
z^{(i)}
z(i)值求和,计算均值,所以这里只把一个mini-batch中的样本都加起来,用m来表示这个mini-batch中的样本数量,而不是整个训练集。然后计算方差,再算
z
n
o
r
m
(
i
)
z_{norm}^{(i)}
znorm(i),即用均值和标准差来调整,加上ε是为了数值稳定性。
z
−
z^{-}
z−是用γ和β再次调整得到的。