让深度学习模型的性能发挥到极致的方法

  深度学习的表示瓶颈

        在Sequential模型中,每个连续的表示层都构建于前一层之上,这意味着它只能访问前一层激活中包含的信息。如果某一层太小(比如特征维度太低),那么模型将会受限于该层激活中能够塞入多少信息。

        你可以通过类比信号处理来理解这个概念:假设你有一条包含一些列操作的音频处理流水线,每个操作的输入都是前一个操作的输出,如果某个操作将信号裁剪到低频范围(比如0~15kHz),那么下游操作将永远无法恢复哪些被丢弃的频段。任何信息的丢失都是永久性的。残差连接可以将较早的信息重新注入到下游数据中,从而部分解决了深度学习模型的这一问题。

深度学习中的梯度消失

        反向传播是用于训练深度神经网络的主要算法,其工作原理是将来自输出损失的反馈信号向下传播到更低部的层。如果这个反馈信号的传播需要经过很多层,那么信号可能会变得非常微弱,甚至完全丢失,导致网络无法训练。这个问题被称为梯度消失(vanishing gradient)。

        深度网络中存在这个问题,在很长序列上的循环网络也存在这个问题。在这两种情况下,反馈信号的传播都必须通过一长串操作。我们已经知道LSTM层是如何在循环网路中解决这个问题的:它引入了一个携带轨道(carry track),可以在与主处理轨道上传播信息。残差连接在前馈深度网络中的工作原理与此类似,但它更加简单:它引入了一个存线性的信息携带轨道,与主要的层堆叠方向平行,从而有助于跨越任意深度的层来传播梯度。

让模型的性能发挥到极致的方法

        如果只是想要让模型具有不错的性能,那么盲目的尝试网络架构足以达到目的。想要达到更好的效果,有如下三种方式:

1)残差连接【前面文章已经讨论过: resnet中的残差连接详解残差网络

2)标准化

3)深度可分离卷积

一、批标准化

        标准化(normalization)是一大类方法,用于让机器学习模型看到的不同样本彼此之间更加相似,这有助于模型的学习对新数据的泛化。最常见的数据标准化形式:将数据减去其均值使其中心0,然后将数据除以其标准差使其标准差为1.实际上,这种做法假设数据服从正态分布(也叫高斯分布),并确保让该分部的中心为0,同事缩放到方差为1.

       将数据输入模型之前对数据做标准化,但在网络的每一次变换之后都应该考虑数据标准化。即使输入网络的数据均值为0、方差为1,也没有理由假定网络输出的数据也是这样。

       批标准化(batch normalization)是Ioffe和Szegedy在2015年提出的一种层类型(在Keras中是BatchNormalization),即使在训练过程中均值和方差随时间发生变化,它也可以适应性地将数据标准化。批标准化的工作原理是,训练过程中在内部保存已读取每批数据均值和方差的指数移动平均值。批标准化的主要效果是,它有助于梯度传播(这一点和残差连接很像),因此允许更深的网络。对于有些特别深的网络,只有包含多个BatchNormalization层时才能进行训练。

二、深度可分离卷积

        深度可分离卷积(depthwise separable convolution)层(SeparableConv2D可以替代Conv2D,并可以让模型更加轻量(即更少的可训练权重参数)、速度更快(即更少的浮点数运算),还可以让任务性能提高几个百分点。

        深度可分离卷积层对输入的每个通道分别执行空间卷积,然后通过逐点卷积(1X1卷积)将输出通道混合。如下图

这相当于将空间特征学习和通道特征学习分开,如果你假设输入中的空间位置高度相关,但不同的通道之间相对独立,那么这么做是很有意义的。他需要的参数要少很多,计算量也更小,因此可以得到更小、更快的模型。因为它是一种执行卷积更高效的方法,所以往往能够使用更少的数据学到更好的表示,从而得到性能更好的模型。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值