【深度学习】神经网络调参实战经验

一、关于超参数

1、学习率

训练经过几个批次 (batch or step) 模型的目标函数损失值就急剧上升,这说明模型训练的学习率过大,此时应该减小学习率,从头训练。

学习率减缓机制

1. 轮数减缓(step decay)
2. 指数减缓(exponential decay)
3. 分数减缓(1/t decay)

应用最多的为轮数减缓

不同学习率下loss随轮数的变化

2、batch size

 

在合理范围内,增大 Batch_Size 的好处

  • 内存利用率提高了,大矩阵乘法的并行化效率提高。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  • 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

盲目增大 Batch_Size 的坏处

  • 内存利用率提高了,但是内存容量可能撑不住了。
  • 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
  • Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

二、Batch Normalization

在模型每次进行梯度下降时,通过mini-batch对activation进行规范化,使得结果(输出信号的各个维度)的均值为0,方差为1

在卷积神经网络中,一般应用在非线性映射函数 (activation function)前。

在神经网络训练中遇到收敛速度较慢或梯度爆炸时BN往往会起很大的作用。

常规情况下,BN可以加快训练速度,甚至提高模型精度。

三、Fine-tuning

由于网络已在原始数据上收敛,应设置更小的学习率,实践中发现1e-4以下较好

神经网络前程拥有更泛化的特征,深层对应更抽象的高层语义,在新数据集上微调时,高层语义特征更新的可能性更大,所以对深层网络设置更大的学习率会有很好的效果

 

你可能感兴趣的:(tensorflow,深度学习)