李宏毅深度学习笔记 1 - 深度学习的一些技巧

如何在训练数据上得到更好的结果?

改变激活函数

sigmoid 会把输入的大变化压缩成较小的输出变化,因此在网络加深时会导致梯度消失现象

ReLU

ReLU1.png

Q:ReLU 会导致神经网络变为线性的吗?
A: 对于使用 ReLU 的网络,整体还是非线性的,当输入做较大改变的时候,激活的神经元就会发生变化

ReLU-variant

relu-variant.png

Maxout

Maxout 让每一个神经元自动去学习他的激活函数

maxout1.png

如图所示,Maxout 将固定数量 (需要自己调整) 的神经元分为一组,并取组中最大的值作为输出。通过这样的方法,Maxout 可以拟合出 ReLU 以及其他任意的分段线性凸激活函数

maxout2.png

Q:Maxout 是否会导致未被选择的神经元不能训练?
A: 对于不同的输入数据,Maxout 所选择激活的神经元在训练的过程中不断地进行变化,因此理论上每一个 weight 都会被训练到

调整学习率

AdaGrad

img

AdaGrad 会使用到历史梯度的信息,对于当前当前需要更新的 w,如果其平常的 gradient 都比较大,那么当前所处位置应该比较 “陡峭”,所以选取比较小的 learning rate;反之,如果平常 gradient 都比较小,那么当前所处位置应该比较 “平坦”,所以选取比较大的 learning rate

RMSProp

img

RMSProp 与 AdaGrad 的不同之处在于,AdaGrad 使用历史所有的梯度平均来对当前的学习率进行限制,而对于某一个方向,有可能会出现一会陡峭一会平坦的情况。所以 RMSProp 通过 α 来对历史梯度的比重进行限制,将 α 设置的更小,模型就会更加注重新的梯度对当前学习率的影响。

Momentum

img

Adam

img

如何在测试数据上得到更好的结果?

早停 (Early Stopping)

正则化 (Regularization)

L1 and L2

L1 和 L2 都会使得参数减小

  • L1 在每次更新的时候减去一个固定值
  • L2 在每次更新时乘上一个小于 1 的固定值

L1 会使得有很多参数都接近 0,但是会存在很大的值;L2 会使得参数的平均都是比较小

梯度衰减(Weight Decay)

Dropout

img

Dropout 是指在训练时以概率 p 随机的丢弃一些神经元

  • 在 testing 的时候不做 dropout
  • 在 training 时,假设 Dropout 的概率为 p,则 training data 中训练出的所有 weight 需要乘上 (1-p) 才能被当作 testing 的 weight 使用

如果网络很接近于线性模型,Dropout 所得到的结果会比较好,因此采用 ReLU 和 Maxout 的网络通常会和 Dropout 配合使用

丨fengche丨 wechat
来找我聊天吧~
-------------本文结束感谢您的阅读-------------