Tips for training DNN
1. 选择合适的损失函数 choose proper loss
当选择softmax作为输出层时,选择交叉熵为损失函数。从文中给出的图来看,在空间中,不管以谁为损失函数,其全局最小值肯定是相同的。但是在以交叉熵为损失函数时,坡度更抖,能更快的逼近最小值。而以MSE为损失函数时,函数非常平缓。(不知道咋形容)
2. mini-batch 不去寻求所有样本的loss最小值。
将整个样本集作为整体,切分为n份。在每次迭代过程中,只计算这个batch的样本的损失函数。这样使得计算速度更快,且效果更优。
3. 新的激励函数
深层的神经网络,在进行参数迭代时,靠近输入层的参数,会出现梯度扩散问题,这些参数的学习速度会很慢。
ReLU优点
4. 自适应学习率
学习率太大,在更新后,损失函数可能并不会变小,导致无法逼近最小值。
学习率太小的话,模型训练需要很长的时间。
因此,在训练的初始阶段,学习率可以比较大。在几次迭代后,可以降低学习率(根据某个值进行计算 如
5.对是否达到全局最优保持怀疑,避免陷入局部最优。momentum不知道咋翻译呢。
在进行梯度下降时,在负梯度的方向,加上一点前进的动力。呵呵呵
6. 为什么会过拟合
训练数据和测试数据不一样,以训练数据最优得到的模型,在测试数据上的表现不一定最优。呵呵呵呵,咋解决,肯定是想着要更多更全的训练数据,让模型见识更多。ppt上的灵丹妙药,就是造数据。
7. early stoping
选择在测试集上表现最优的点stop
8. 权值衰减 weight decay 可使得网络结构更简洁,通过将权值逐渐变小达到目的
9. dropout is kind of ensemble
在每次更新参数前,每个神经元都有一定的概率 dropout ,也会使得网络更简洁。如果是mini-batch 的话,会对已经dropout的神经元进行重采样。
在测试时,no dropout。假设 dropout 概率是40%,在训练时 权值 w=1,那么在测试时 𝑤=0.6。
10 网络结构