0
点赞
收藏
分享

微信扫一扫

百战程序员-Java架构-互联网P7架构师

资源已上传B站

">

">">https://space.bilibili.com/1911355757


一起学习

(4)  为何使用Batch Normalization:


若用多个梯度的均值来更新权重的批量梯度下降法可以用相对少的训练次数遍历完整个训练集,其次可以使更新的方向更加贴合整个训练集,避免单个噪音样本使网络更新到错误方向。然而也正是因为平均了多个样本的梯度,许多样本对神经网络的贡献就被其他样本平均掉了,相当于在每个epoch中,训练集的样本数被缩小了。batch中每个样本的差异性越大,这种弊端就越严重。一般的解决方法就是在每次训练完一个epoch后,将训练集中样本的顺序打乱再训练另一个epoch,不断反复。这样重新组成的batch中的样本梯度的平均值就会与上一个epoch的不同。而这显然增加了训练的时间。同时因为没办法保证每次更新的方向都贴合整个训练集的大方向,只能使用较小的学习速率。这意味着训练过程中,一部分steps对网络最终的更新起到了促进,一部分steps对网络最终的更新造成了干扰,这样“磕磕碰碰”无数个epoch后才能达到较为满意的结果。


为了解决这种“不效率”的训练,BN首先是把所有的samples的统计分布标准化,降低了batch内不同样本的差异性,然后又允许batch内的各个samples有各自的统计分布。


(5)  神经网络模型优化的常用方案


1、增加(减少)隐藏层的复杂度,如增加隐藏层数,调整隐藏层的神经元个数,或者在隐藏层使用更加复杂的网络结构,如CNN、RNN、LSTM、GRU或者增加Attention层等等;


2、添加Dropout层,使用Dropout的原理优化网络参数,防止过拟合;


3、尝试不同的优化器,常用的优化器包括SGD、Adam、RMSprop(动量相关);


4、增加迭代次数,一般为了快速检验模型效果训练次数比较少,优化过程中可以增加训练次数;


5、调整优化器的学习率,学习率太小会造成模型收敛速度下降,还有可能求出的是局部最优解,训练模型时的损失函数下降慢;学习率过大会引起模型无法到达最优解,在最优解附近来回跳转,但是一般情况下学习率并不是一成不变的,而是随着模型的训练在优化;


6、增加批处理的大小,采用批处理的方式训练数据时每个batch的数据进行一次反向传播,更新参数,所以每个batch的数据分布对模型训练有着一定的影响,调整batch_size的大小,对模型优化有一定的作用;


7、正则化,可以优化模型太过复杂而引起运行时间过长的问题,也可以在一定程度上防止模型过拟合。(过拟合也就是模型把训练数据的内部关系都记下来了,在训练集损失函数很小,但是在测试集上损失函数开始增大,也就是在测试集上的效果开始下降)

----------------------------------

举报

相关推荐

0 条评论