炼丹笔记七:卷积神经网络模型设计
欢迎大家关注微信公众号:baihuaML,白话机器学习。
码字不易,如转载请私信我!!
在这里,我们一起分享AI的故事。
您可以在后台留言,关于机器学习、深度学习的问题,我们会选择其中的优质问题进行回答!
正文:炼丹的过程实际上就是模型参数求解的过程,而前提就是模型已经设计好。今天,我们就来聊一聊深度学习中的模型设计。
主要从以下几个方面来看:
1. 如何去设计一个神经网络?
2. 如何去优化一个神经网络?
3. 在设计网络的时候,我们需要注意那几点问题?
如何去设计一个神经网络?
这里我们主要关注baseline方法的搭建,如果想要更好的设计,需要在去针对任务做调优。
比较常见的思路,就是直接采用已经设计好的backbone。选择最多的应该是就Inception结构或者ResNet结构。
以tensorflow为例,标准的网络结构目前google已经开源出来,所以我们直接使用就可以。
下载链接:
https://github.com/tensorflow/models/tree/master/research/slim/nets
这里包括了非常多的网络结构。可以挑选我们需要的模型。
通常使用inception-v3/v4或者resnet-50:
模型如何调用呢?
我们只需要添加,该文件到我们项目中,然后:
from resnet_v2 import * (粗暴一点)
直接调用函数就可以正常使用,不过需要注意的是,输出结构为Feature Map,也就是一个四维的张量。在后续使用的时候,需要在加FC层等其他的层或者以及LOSS层。
这个主干网络可以用于分类、检测、分割等不同任务的主干网络,在框架结构不变的前提下,我们就能够得到针对不同主干网络的baseline方法的效果。
2. 如何去优化一个神经网络?
在上述过程中,我们拿到了baseline方法。但是这离我们最终的目标还有些差距,主要体现在以下两个方面:
- 我们需要从backbone的角度来提高模型的性能
- 我们需要减少模型的计算量,压缩模型的大小
通常的做法有哪些呢?
(1)从backbone角度来优化模型的性能主要有以下几点可以考虑:
- 考虑更大的channel数量(增大了计算量)
- 考虑使用空洞卷积增大感受野
- 考虑resnet + inception结构
- 考虑FPN结构(检测、分割网络中)
- 考虑attention结构,比如: SENet
(2)如何去较少backbone的网络参数/网络计算量呢?
- 多个小卷积核代替大卷积核
- 考虑轻量型卷积,也就是使用深度可分离卷积来代替常规卷积,比如:mobilenet系列、shuffleNet系列等
- 考虑stride=2代替掉pooling层
- 计算每一层参数量和计算量,对参数量规模叫大的层调整channel
- 使用1*1的卷积核来进行channel降维和升维
- 模型剪枝
- 模型定点化/量化
- 教师网络
3. 在设计网络的时候,我们需要注意那几点问题?
- 除去第一层会采用大卷积核一般也不会超过7*7,其它层均使用3*3或者1*1卷积核
- 学会巧妙的使用1*1的卷积核来进行通道降维和升维
- 使用batchnorm层,加快收敛速度(在tensorflow,注意设置batchnorm参数,在caffe中,bn层要和scale配合使用)
- 网络通常为block堆叠,每一个block都是一个最小重复单元(由多个卷积组成)
- 通常在进行下采样的时候会进行 channel数量的翻倍
- 在shuffleNet V2中,作者也给出CNN 网络结构设计的准则来帮助神经网络可以更高效。下面先贴出文中观点:
- a. 输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,MAC)。
- b. 分组卷积中使用过多的分组数会增加内存访问成本(MAC)
- c. 网络结构太复杂(分支和基本单元过多)会降低网络的并行程度
- e. Element-wise 的操作消耗也不可忽略(包括ReLU,Tensor的相加,偏置的相加等等操作)
- 主干网络优先考虑resnet+FPN网络结构作为baseline在进行额外的优化。
最后,推荐Git仓库:https://github.com/baihuaml/dl_code,近期会放一些关于CNN常用的demo上去。
卷积神经网源码清单如下:https://github.com/baihuaml/dl_code/blob/master/CNN_source_code.md
最新春招袭来!
一大波实习,招聘机会也陆续出现!为了大家能够更好地交流。我们也拉了几个算法面试群,感兴趣的小伙伴可以加我微信,欢迎入群~注明:面试群。另外,我们也有算法群,欢迎各位加入,注明:算法群!扫码加下面微信好友!特别提醒:不要骚扰小姐姐~~
欢迎加入深度学习、机器学习技术研讨群!
745224003
欢迎关注我们的微信公众号:baihuaML,白话机器学习
关注知乎“会写代码的好厨师”