优化算法要点
权重初始化
image.png梯度下降优化:
假设有m个样本,如果m很大的话,处理速度就很慢。比如说,如果是500万或5000万或者更大的一个数,在对整个训练集执行梯度下降法时,你要做的是,你必须处理整个训练集,然后才能进行一步梯度下降法,然后你需要再重新处理500万个训练样本,才能进行下一步梯度下降法。
我们可以将500万个样本分为5000个组,每组1000个样本数据,每次对这1000个样本进行训练,然后执行梯度下降法,循环5000次,就是一个epoch,也就是说一个epoch是指把所有训练数据完整的过一遍。
如果训练集较小,直接使用batch梯度下降法,样本集较小就没必要使用mini-batch梯度下降法,你可以快速处理整个训练集,所以使用batch梯度下降法也很好,这里的少是说小于2000个样本,这样比较适合使用batch梯度下降法。不然,样本数目较大的话,一般的mini-batch大小为64到512,考虑到电脑内存设置和使用的方式,如果mini-batch大小是2的次方,代码会运行地快一些,64就是2的6次方,以此类推,128是2的7次方,256是2的8次方,512是2的9次方。所以我经常把mini-batch大小设成2的次方。在上一个视频里,我的mini-batch大小设为了1000,建议你可以试一下1024,也就是2的10次方。也有mini-batch的大小为1024,不过比较少见,64到512的mini-batch比较常见。
学习率衰减(learn-rate)
所以慢慢减少的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些。
学习率衰减.pngdecay-rate称为衰减率(这是需要调的超参),epoch-num为代数,为初始学习率
除此之外还有一些其它的衰减算法
这里的超参调整不是我们关注的要点
我们不太可能困在极差的局部最优中,条件是我们在训练较大的神经网络,存在大量参数,并且成本函数被定义在较高的维度空间。
第二点,平稳段是一个问题,这样使得学习十分缓慢,这也是像Momentum或是RMSprop,Adam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,尽早往下走出平稳段。
结果证实一些超参数比其它的更为重要,我认为,最为广泛的学习应用是,学习速率α是需要调试的最重要的超参数。
除了,还有一些参数需要调试,例如Momentum参数,0.9就是个很好的默认值。我还会调试mini-batch的大小,以确保最优算法运行有效。我还会经常调试隐藏单元,这三个是我觉得其次比较重要的,相对于而言。重要性排第三位的是其他因素,层数有时会产生很大的影响,学习率衰减也是如此。当应用Adam算法时,事实上,我从不调试β1,β2和ε,我总是选定其分别为0.9,0.999和10的-8次方。
Batch归一化操作
之前我们对输入特征X进行了归一化处理,对任何一个隐藏层而言,a也可以进行归一化处理,这里并不是直接对a进行归一化处理,而是对z进行归一化处理,类似于对w和b,减去平均值再除以方差。
在TensorFlow框架中,在dense层之后,激活层之前,加
model.add(tf.keras.layers.BatchNormalization())进行batch归一化操作