tips for deep learning

当有一个网络结构时,该网络结构应用于某个问题上,那么du对于该网络结构的衡量就有不同的标准,可能是在训练集上的效果就不好;可能是在训练集上的效果很好,但是在测试集上的效果不好。如下图所示。

如上图所示,模型表现不好并不仅仅是过拟合,还有可能是欠拟合,即在训练集上的效果就很差。当出现不同的问题时,我们需要使用不同的方法来解决。我们通常很难利用深度学习的强大之处,并不是网络结构越深其效果越好。网络结构太深可能导致梯度消失问题。

接近输出层的层往往梯度更大,学习更快,但是远离输出层的层往往梯度很小,学习就会特别慢。为什么远离输出层的梯度很小,直观来说就是梯度的求解是很多个数字相乘,所以如果数字都是小于1的,那其乘积就会很小。用下面的图来分析为啥梯度会变小。

当激活函数为sigmoid时,假设有两个输入值,这两个输入值相差较大,但是经过sigmoid函数,该两个输入值对应的两个输出值的差距会变小。也就是到达输出层的时候,原来的差距被放小了,然后在离输出层很近的地方可以基本认识到这个差距,但是当远离输出层时,这个差距基本已经捕捉不到了。所以就产生了梯度消失问题。这个也是在训练集上效果不佳的一个表现。接下来我们讲当在训练集上效果不佳时我们可以采取的措施。

第一个方法,修改激活函数

relu激活函数。

用下图来说明为啥使用relu函数,为啥relu函数可以避免梯度消失问题。

relu函数要不是一个线性表达式,要不是0,它不会放小输入数据的差距,所以不会导致在离输入层很近的地方其梯度很小。

relu函数还有变体形式。

激活函数-maxout

maxout是一个可学习的激活函数。如下图所示。

relu是maxout函数的一个特例,当让部分单元结果为0时,maxout函数就变成了relu函数,如下图所示

和relu函数相比,maxout函数应该学到得更多,如下图所示

maxout函数的特性

当使用maxout函数时的训练:

在训练集上效果不好时另一种做法就是使用自适应的学习率。比如adagrad,rmsprop。有时甚至很难找到最优点。

在这里我们引入动量(融入惯性原理),在现实生活中,当一个物体在一个陡坡上运动时,当在下坡时物体会急速下降并且产生动量,从而在遇到一般的上坡时会利用下坡时产生的冲力,冲过上坡。所以我们将动量用在了学习率中。一般的梯度更新如下图所示。

引入动量之后,参数的更新如下所示

也许动量不能完全解决问题,但是给了我们希望

adam优化器是rmsprop+动量

在训练集上表现很好,但是在测试集上表现不好,那就是过拟合的问题了,我们也有一些解决方法。

第一个 early stopping早停

第二个 regularization正则化

l2正则化

l1正则化

正则化被形象化的理解为:

第三个 dropout

dropout的训练如下:

在测试阶段,dropout的使用如下所示

在测试阶段并没有使用dropout,而是给权重都乘以了1-p%。

形象化的理解为:

或者理解为,我的同伴会学的,那我就不学了,用了dropout的时候,我的同伴不会xue,那我要好好学。如下图所示

为什么要乘以1-p%,是为了保证测试阶段的权重之和基本等于训练阶段的权重之和。如下图所示

dropout是ensemble的一种

在训练阶段

每个mini-batch都会训练一个网络结构,网络结构中的一些参数是共享的。

在测试阶段

另一个角度分析为啥在测试阶段乘以1-p%,测试阶段所有网络结构结果的平均是不是和乘以1-p%的结果相当。我们用一个有两个输入单元的网络结构为例证明,其中dropout的p=0.5。如下图所示

使用dropout之后产生4个网络结构,这四个网络结构的结果之和为w1x1+w2x2+w2x2+w1x1=2w1x1+2w2x2,取其平均值为,而直接给原来网络结构乘以1-p%=0.5,也得到结果。两个结果相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值