前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何系统性掌握深度学习模型设计和优化

如何系统性掌握深度学习模型设计和优化

作者头像
用户1508658
发布2019-08-09 15:15:42
7630
发布2019-08-09 15:15:42
举报
文章被收录于专栏:有三AI有三AI

模型是深度学习的核心技术之一,我们平时在从事相关工作时,有很大一部分精力都在模型设计和优化上。对于新手朋友们来说,往往只会跑一跑别人的模型或者只会盲目的简单修改一下参数,不知道该如何进行设计和优化。

今天便来谈谈这个问题,同时介绍一个好的学习社区供大家讨论与提升。

文/编辑 | 言有三

1 需要掌握哪些内容

根据不同的用途(刷榜或者工业级部署),模型设计需要实现以下目标:

(1) 获得更高的任务指标。

(2) 获得更快的运行速度。

(3) 获得更小的模型体积。

(4) 获得稳定可靠的性能。

以上各类要求其实对模型设计的侧重点又不同。要获得更高的任务指标,需要不断提高模型的学习能力。要获得更快的运行速度和更小的模型体积,需要优化模型结构。要获得性能稳定的模型,需要保证模型的通用性。

具体涉及的技术又非常多了,下面列举一些常用的。

(1) 模型深度和宽度的设计。

(2) 分辨率和感受野的设计。

(3) 卷积类型,大小,步长的设计。

(4) 正则化技术的设计。

(5) 网络拓扑结构的设计。

(5) 多尺度与信息融合的设计。

(6) 注意力等感知机制的使用。

(7) 量化与剪枝技术的使用。

(8) 半监督/无监督技术的使用。

(9) 一些工程技巧的使用。

(10) AutoML技术的使用。

除了这些内容,还涉及模型的具体训练,部署,转换等各种问题。

2 有三AI已经做了什么

有三从至少三四年之前就致力于CNN网络架构相关的设计和优化研究,至今公众号已经写过很多的文章,知乎也回答过相关的问题,直播也做过几次分享,首先我们回顾一下已有的内容!

在两年多前,有三AI就开始关注模型优化并撰写了相关综述文章和实验文章,如下:

为了压榨CNN模型,这几年大家都干了什么

【技术综述】如何Finetune一个小网络到移动端(时空性能分析篇)

在有三的新书第8章,非常详细地讨论了模型压缩理论和实战。

从去年开始,我们公众号发了非常多的模型结构解读,比如主流的图像分类,分割模型。

【完结】总结12大CNN主流模型架构设计思想

【完结】12篇文章带你逛遍主流分割网络

现在我们又开始了GAN模型结构相关的分享,如果时间容许还会有其他任务,比如目标检测,跟踪等,很多很多。

另外,我们在《AI修行之路》的不惑境界系列中深刻探讨过网络的宽度和深度对模型性能的影响,并进行了一系列实验的验证!讲述了残差网络,分组网络,多尺度网络,注意力机制等网络的设计。

【AI不惑境】网络深度对深度学习模型性能有什么影响?

【AI不惑境】网络的宽度如何影响深度学习模型的性能?

【AI不惑境】残差网络的前世今生与原理

【AI不惑境】移动端高效网络,卷积拆分和分组的精髓

【AI不惑境】深度学习中的多尺度模型设计

有三在知乎上也开设过三个相关的直播,分别是《如何设计更加强大的CNN架构》,《如何设计更加高效的CNN架构》,《千奇百怪的CNN网络架构》内容如下:

在这个网络上,比有三更熟悉各种各样的模型架构设计的朋友,已知的恐怕真不多。

3 哪里有更多更新

以上就是全部了吗?当然远远不是,仅仅是九牛一毛。几个月前开始,有三在知识星球平台每天更新各种各样的模型结构,涉及或者即将涉及几乎所有领域。

已经更新有多少不记得了,可能接近200期了,最近的一个总结是这篇,【知识星球】超3万字的网络结构解读,学习必备

不过现在应该已经超过4万字的解读了,为了方便大家收藏阅读,有三将分享做成了卡片的形式,案例如下:

有三AI知识星球-网络结构1000变

DeepRebirth

在深度学习模型中有许多的非tensor网络层虽然参数很少,但是有较大的计算量,因此模型在最终部署到移动端时经常合并这些网络层从而进一步提高推理速度。

作者/编辑 言有三

模型压缩有许多的方法,比如使用小卷积,多尺度,去除全连接层,瓶颈结构等思路设计紧凑的网络,也有对权重进行量化剪枝等方法,而DeepRebirth则采用了另外一种思路,即将Non-tensor layer(包括pooling、BN、LRN、ReLU等)合并到tensor层中,因为它们虽然参数不多,但是有很大的计算量,下面首先看看经典网络中这些层的计算时间比例:

可以看出这些非卷积层占据了很大比例的计算时间,在Intel x86上甚至能占到一半,如果能够将其去除将大幅度的提升模型的运算速度。

作者提出了两种思路,分别是StreamLine Merging和Branch Merging。

StreamLine Merging是一种串行的合并方式,如下:

通常来说,就是将Pooling、LRN,BN等网络层与相邻近的Conv层进行合并,上图的案例中经过合并后从153.8ms直接降低到了16.6ms。这里卷积本身的计算时间也大大降低,是因为pool2融合进了conv,使其步长从1变为2。

现今更为常见的情况是将BN,Scale等网络层和相邻的Conv层合并,也能降低不少计算量。

Branch Merging是一个分支的合并方式,如下:

如上图,将1*1卷积层以及Pooling层分支分别合并到和它并行的3*3卷积和5*5卷积分支中。另外考虑到3*3卷积和5*5卷积分支输出通道增加会增大参数量和运算量,因此调整这些分支的输入通道进行压缩。

在进行以上的合并后,模型的性能通常会降低,所以需要重新训练,作者采用的方式是合并得到的新层使用标准的初始化方式,将其他层的参数固定不变,然后将新层的学习率设置为其他层的10倍后进行finetuning。

那么实验效果如何呢?以GoogLeNet为基准模型的实验结果如下:

上表展示了对不同的网络层使用以上合并策略,可以发现各种网络层的速度都有很大提升,在精度只降低0.4%的时候,能有超过3倍的速度提升。

这是非常实用且强大的一个提升模型运行速度的方法,在实际进行模型部署时,常常会对BN等网络层进行合并。

[1] Li D, Wang X, Kong D. Deeprebirth: Accelerating deep neural network execution on mobile devices[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.

更多的内容,下面从其中10类中随机挑选出一些给大家感受一下。

今年的目标只有一个:做到500期以上

4 最后要说的话

老朋友们应该都知道,有三做内容不喜欢推送信息,而是喜欢做原创,系统彻底的原创。因此,每次讲述一个模型,我不会只是告诉大家有什么,而是会细致剖析解读。

在这个系列上,我每天花的时间就超过了3个小时,后面还要增加模型训练和部署相关的内容。

因此,更多的内容都会在有三AI知识星球分享,不会继续在公众号分享。有三AI没有广告收入,希望大家能够理解支持。

如果真的需要,就加入有三AI知识星球,一起讨论学习吧。

另外,网络结构只是有三AI知识星球中的一个板块,还有很多重磅,相信你不会失望。

已经加入的朋友,邀请一位新朋友加入,就可以获得超过50元微信红包的即时奖金噢,系统自动发放。

转载文章请后台联系

侵权必究

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有三AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档