1.归一化输入特征(Normalizing input features)
归一化就是让训练数据均值为0,方差为1。一共两步,假设训练集有两个输入特征,x=。
①零均值化
:= -
②归一化方差(normalize the variances)
/=
第二个图是零均值化后的图,此时,特征x1的方差要比X2大。第三个图是归一化方差后的图。
归一化能加快训练神经网络,为什么?
J为成本函数。如果两个特征的范围不同,比如一个在[0,1],一个在[0,1000],成本函数如左图,归一化,如右图,梯度下降会更快一些。
2.梯度消失/爆炸(vanishing/exploding)
梯度消失/爆炸其实就是梯度过小或过大,导致梯度下降会花很多时间。
3.小批量梯度下降(Mini-batch gradient descent)
在巨大的数据集基础上训练神经网络,很慢,需要使用一些好的优化算法。
具体操作:
①将m个样本分成n个mini-batch。比如500万个样本,分成5000个mini-batch,每个mini-batch包含1000个样本。
②遍历这5000个mini-batch,在每个mini-batch里计算各自的梯度,更新参数。这样1 epoch我们就能进行1000次的梯度下降(训练一遍整个数据集称为"1 epoch")。
mini-batch size=样本总数m,=>批量随机梯度下降(batch gradient descent)
mini-batch size=1,=>随机梯度下降(stochastic gradient descent)
选择mini-batch大小的时候,不要太大,也不要太小。
批量梯度下降和小批量梯度下降对比