炼丹笔记七:卷积神经网络模型设计

炼丹笔记七:卷积神经网络模型设计

欢迎大家关注微信公众号:baihuaML白话机器学习

码字不易,如转载请私信我!!

在这里,我们一起分享AI的故事。

您可以在后台留言,关于机器学习、深度学习的问题,我们会选择其中的优质问题进行回答!

正文:炼丹的过程实际上就是模型参数求解的过程,而前提就是模型已经设计好。今天,我们就来聊一聊深度学习中的模型设计

主要从以下几个方面来看:

1. 如何去设计一个神经网络?

2. 如何去优化一个神经网络?

3. 在设计网络的时候,我们需要注意那几点问题?


如何去设计一个神经网络?


这里我们主要关注baseline方法的搭建,如果想要更好的设计,需要在去针对任务做调优。

比较常见的思路,就是直接采用已经设计好的backbone。选择最多的应该是就Inception结构或者ResNet结构。

以tensorflow为例,标准的网络结构目前google已经开源出来,所以我们直接使用就可以。

下载链接:

github.com/tensorflow/m
这里包括了非常多的网络结构。可以挑选我们需要的模型。

通常使用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上去。

卷积神经网源码清单如下:github.com/baihuaml/dl_

最新春招袭来!

一大波实习,招聘机会也陆续出现!为了大家能够更好地交流。我们也拉了几个算法面试群,感兴趣的小伙伴可以加我微信,欢迎入群~注明:面试群。另外,我们也有算法群,欢迎各位加入,注明:算法群!扫码加下面微信好友!特别提醒:不要骚扰小姐姐~~


欢迎加入深度学习、机器学习技术研讨群!

745224003

欢迎关注我们的微信公众号:baihuaML,白话机器学习

关注知乎“会写代码的好厨师”

编辑于 2019-02-26

文章被以下专栏收录

    主要介绍机器学习中涉及到各种疑惑问题,希望能够介绍更多的干货,一方面带大家入门,另一方面让大家少踩坑