如何在训练数据上得到更好的结果?
改变激活函数
sigmoid 会把输入的大变化压缩成较小的输出变化,因此在网络加深时会导致梯度消失现象
ReLU
Q:ReLU 会导致神经网络变为线性的吗?
A: 对于使用 ReLU 的网络,整体还是非线性的,当输入做较大改变的时候,激活的神经元就会发生变化
ReLU-variant
Maxout
Maxout 让每一个神经元自动去学习他的激活函数
如图所示,Maxout 将固定数量 (需要自己调整) 的神经元分为一组,并取组中最大的值作为输出。通过这样的方法,Maxout 可以拟合出 ReLU 以及其他任意的分段线性凸激活函数
Q:Maxout 是否会导致未被选择的神经元不能训练?
A: 对于不同的输入数据,Maxout 所选择激活的神经元在训练的过程中不断地进行变化,因此理论上每一个 weight 都会被训练到
调整学习率
AdaGrad
AdaGrad 会使用到历史梯度的信息,对于当前当前需要更新的 w,如果其平常的 gradient 都比较大,那么当前所处位置应该比较 “陡峭”,所以选取比较小的 learning rate;反之,如果平常 gradient 都比较小,那么当前所处位置应该比较 “平坦”,所以选取比较大的 learning rate
RMSProp
RMSProp 与 AdaGrad 的不同之处在于,AdaGrad 使用历史所有的梯度平均来对当前的学习率进行限制,而对于某一个方向,有可能会出现一会陡峭一会平坦的情况。所以 RMSProp 通过 α 来对历史梯度的比重进行限制,将 α 设置的更小,模型就会更加注重新的梯度对当前学习率的影响。
Momentum
Adam
如何在测试数据上得到更好的结果?
早停 (Early Stopping)
正则化 (Regularization)
L1 and L2
L1 和 L2 都会使得参数减小
- L1 在每次更新的时候减去一个固定值
- L2 在每次更新时乘上一个小于 1 的固定值
L1 会使得有很多参数都接近 0,但是会存在很大的值;L2 会使得参数的平均都是比较小
梯度衰减(Weight Decay)
Dropout
Dropout 是指在训练时以概率 p 随机的丢弃一些神经元
- 在 testing 的时候不做 dropout
- 在 training 时,假设 Dropout 的概率为 p,则 training data 中训练出的所有 weight 需要乘上 (1-p) 才能被当作 testing 的 weight 使用
如果网络很接近于线性模型,Dropout 所得到的结果会比较好,因此采用 ReLU 和 Maxout 的网络通常会和 Dropout 配合使用