一、网络设计

(1) 网路设计要点

网络设计考虑重点:1. 精度 2.容量 3. 效率
精度:网络预测样本的精度(TP / (TP +FP))
容量:容纳数据量的多少,神经元越多,容量越大。
效率:网络运行的效率,这是一个很重要的指标。

总结:层次要深,信息要充分融合,计算量要足够小。

(2)、网络计算成本

H x W 表示输出特征图的空间大小,N代表输入通道数,K x K 代表卷积核的大小,M代表输出通道数,那么标准卷积的计算成本就变成了H * W * N * K * K * M
这里重要的一点就是,标准卷积的计算成本与以下因素成比例:
(1) 输出特征图的空间大小 H * W
(2) 卷积核的大小 K * K
(3)输入通道和输出通道的数量N x M

从以上几个因素对网络的性能进行改进。

(3) 高效的卷积网络

高效的网络应该具备以下特点:

  1. 参数量小,占用内存低
  2. 效率高
  3. 计算量低
  4. 并行化程度高
  5. 性能与大的网络模型相当

二、网络设计技术

(1) 网络深度的设计

为什么加深网络可以提升性能?
答:1. 更深的网络模型具有更好的非线性表达能力。2. 网络更深每一层要做的事情更加简单,各个深度的网络各司其职。

具体设计怎样的深度?
答:一般常见的深度是5~8层,不超过30层。

加深网络容易出现的问题?
答:

  1. 达到一定深度后性能反而下降,难以优化。
  2. 更加容易过拟合。
  3. PLD (processing level deprivation )现象,网络无法学到简单但是必要的函数来描述数据
  4. PLS (processing level saturation)现象,网络的浅层饱和,无法发挥网络的性能。
(2) 网络宽度的设计

宽度:一般都指输出的通道数。

网络宽度变大有什么作用?
答:网络宽度变大会提取更加丰富的不同颜色和纹理信息。如:AlexNet 第一个卷积层输出96个通道,使它提取更加丰富的特征信息。

一般网络宽度怎么设置?
答: 1. 第一层输出通道32 即可,此后逐渐增加,计算量随通道数的增加为O(N ^2)。 但提高网络宽度可以提高性能,在达到一定临界点后饱和。

网络宽度设计的原则?
答:

  1. 主流模型第一个卷积层宽度不超过64,加宽后参数的增长量比较块。
  2. 增加网络宽度比增加网络深度更有利于性能的提升,但是计算量也增加的较快。
  3. 多使用1 * 1 卷积、分组卷积、 跨层连接等技术。
(3) Dropout 和 BN 设计
  1. Dropout基本结构

它的主要思想就是:在训练神经网络的每一轮迭代中,随机地关闭一些神经元,以此降低神经网络的复杂程度
Dropout可以有效的缓解过拟合的发生,在一定程度上达到正则化的效果,它能够提高模型的泛化能力。
对于一个有n个节点的神经网络,有了dropout后,就可以看作是2^n个模型的集合了,消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强泛化能力。

  1. Dropout的优点
  1. 使用dropout正则化的神经网络,不会过分依赖于某个或某些特征,使得权重分散。因为在每一轮迭代中隐藏层的任何一个结点都有可能被删除,那么原本属于它的权重就会被分配到其他结点上,多次迭代平均下来,就能降低对某个特征或者是某个结点的依赖了。
  2. 缓解Relu的dead issue 。dead issue 是指:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了,那么这个神经元的梯度就永远都会是 0.
  1. Dropout 使用的注意事项
  1. Dropout降低了模型的性能,所以对于原本需要容量为N的网络才能解决的问题,现在需要N/p, p表示保留该节点的概率,这个概率一般是0.5~0.9之间,在测试的时候需要乘以p。
  2. Dropout 相当于增加了噪声,造成梯度的损失,所以需要更大的学习率和动量项,训练更久才能收敛。
  1. BN 概述
    BN(Batch Normalization), 归一化分布,增强梯度有效性。
  1. Batch Normalization的作用是他适用的归一化过程不只是输入层,甚至同样适用于神经网络的深度隐藏层。
  2. 在用于隐藏层时,我们也许不想隐藏单元值必须是平均值0和方差1(比如使用sigmoid函数的时候)。
  3. 有了γ和β两个参数后,我们可以确保所有Z(i)的值是我们想赋予的任意值(均值和方差由两个参数γ和β控制)。
  4. 它的真正作用是保证隐藏的单元均已使用均值和方差标准化(即:Z(i)有固定的均值和方差)
  1. BN 的优点
  1. 调整了数据的分布,不考虑激活函数,它让每一层的输出归一化到均值为0,方差为1的分布,这保证了梯度的有效性,减轻了对参数初始化的依赖。
  2. 训练更快,可以使用更高的学习率。
  3. 使得损失平面更加平滑。
  1. BN 使用注意事项
  1. 小的Batchsize不稳定
  2. 尝试Layer Normalization、group Normalization、instance Normalization等变种。
(4) 卷积核、步长、池化的设计

1、 卷积核设计

大型卷积核比较少用,3 * 3 卷积核用的较多。
为什么要使用3 * 3 卷积核:1. 使用多个较小的卷积核代替大的卷积核,使得网络层数增加,所以非线性表达能力增强。2. 小的卷积核使得网络参数量减少,更加容易训练。

2、步长设计

  1. 保证输出分辨率的情况下,分类任务中网络低层的分辨率很重要,对于目标检测/图像分割等任务,需要同时保证最后特在图的分辨率。所以一般第一个卷积层步长不超过2,如果步长过大就会影响图片的分辨率,进而影响后续特征的提取。
  2. 建议: a. 使用带步长的卷积代替池化 b. 前两个卷积层不要超过2倍的下采样率。
  3. 高性能网络可以采用大卷积核+大采样率。

3、池化设计

  1. 刚开始训练网络的时候,池化确实有利于提高抗变形能力,不管池不池化,模型最后学习完都能获得同样的抗变形能力。
  2. 初始化的时候不同的池化方法是有差异的,但是学习完之后不管什么池化方法效果都差不多。

(5)卷积方式的使用和设计

  1. 卷积拆分(分组卷积)
  2. 通道补偿和特征重用:
    a. 提升单层通道利用率:特征通道补偿
    b. 提升多层通道利用率:密集连接网络
  3. 分数 + 整数的分组卷积

(6) 剪枝

剪枝发生在模型训练完之后。它的步骤:

  1. 训练一个网络
  2. 删除权重小于一定阈值的连接,得到稀疏网络。
  3. 对稀疏网络再训练

(7) 量化

量化:从高精度(位宽)转化成低精度(位宽),如32位浮点数到8位。
量化分为:权重量化 输入量化 激活值量化 误差量化
量化优点:a. 更小的模型尺寸 b.更低的内存和缓存 c.更快的计算d. 更低的功耗

(8) 通道混洗

import torch
x = torch.randn(1, 6, 6, 6)
x = x.reshape(1, 2, 3, 6, 6)# 分组,每组3个通道
x = x.permate(0, 2, 1, 3, 4)# 交换轴
x = x.reshape(1, 6, 6, 6)# 重新变为1,6,6,6
print(x)

深度学习中的网络设计技术(一) ——理论概述相关推荐

  1. 深度学习中的知识蒸馏技术(下)

    本文概览: 写在前面: 这是一篇介绍知识蒸馏在推荐系统中应用的文章,关于知识蒸馏理论基础的详细介绍,请看我的这篇文章: 深度学习中的知识蒸馏技术(上) 1. 背景介绍 1.1 简述推荐系统架构 如果从 ...

  2. 深度学习中的隐私保护技术综述

    摘要:如今机器学习以及深度学习在各个领域广泛应用,包括医疗领域.金融领域.网络安全领域等等.深度学习的首要任务在于数据收集,然而在数据收集的过程中就可能产生隐私泄露的风险,而隐私泄露将导致用户不再信任 ...

  3. 【模型蒸馏】从入门到放弃:深度学习中的模型蒸馏技术

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要17分钟 跟随小博主,每天进步一丢丢 来自 | 知乎   作者 | 小锋子Shawn 地址 | https://zhuanlan.zhihu.c ...

  4. 深度学习中的网络表征学习的算法目标简介

    https://www.toutiao.com/a6639983875458073095/ 2018-12-28 18:08:39 深度学习网络表征学习算法的目标是获得网络的低维稠密表示.对于大规模网 ...

  5. 【深度学习】深度学习中的知识蒸馏技术(上)简介

    本文概览: 1. 知识蒸馏介绍 1.1 什么是知识蒸馏? 在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的.化学蒸馏条件:( ...

  6. 深度学习中的知识蒸馏技术(上)

    本文概览: 1. 知识蒸馏介绍 1.1 什么是知识蒸馏? 在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的.化学蒸馏条件:( ...

  7. 深度学习中的知识蒸馏技术!

    本文概览: 1. 知识蒸馏介绍 1.1 什么是知识蒸馏? 在化学中,蒸馏是一种有效的分离不同沸点组分的方法,大致步骤是先升温使低沸点的组分汽化,然后降温冷凝,达到分离出目标物质的目的.化学蒸馏条件:( ...

  8. 深度学习中经典网络结构图和代码

    Inception网络与其它网络的性能对比 PyTorch-Networks: 包含了分类.检测以及姿态估计等网络的pytorch代码 caffe-model-zoo: AlexNet.VGGNet. ...

  9. 深度学习中的正则化技术(附Python代码)

    作者:SHUBHAM JAIN 翻译:和中华 校对:丁楠雅 本文约3500字,建议阅读20分钟. 本文简单介绍了什么是正则化以及在深度学习任务中可以采用哪些正则化技术,并以keras代码具体讲解了一个 ...

最新文章

  1. Tomcat 源码阅读记录(1)
  2. 【HDU5306】【DTOJ2481】Gorgeous Sequence【线段树】
  3. js动态添加,删除option及add的使用方法
  4. Javascript实现导航锚点滚动效果实例
  5. java mvc 批量插入_请教mysql spring mvc +mybatis中批量插入的问题?
  6. android的findviewbyid,Android O预览findViewById编译错误
  7. Package has no installation candidate
  8. centos7使用kubeadm部署高可用k8s集群
  9. manual 离线手册 韩顺平php_传智播客韩顺平php视频教程(400集全)
  10. php中文离线手册 chm_PHP官方中文手册2017最新完整版 带用户注释 chm
  11. 0x00007FFE81272FE1 (ucrtbased.dll) (Project1.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x0000000000000000 时发
  12. 成本、利润分析法在企业管理中的应用
  13. mysql主从配置duxi_做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table...
  14. javascript无限请求_SockJS - 重新连接后无限xhr-streaming呼叫
  15. 对话西门子Mendix:低代码与亚马逊云科技Serverless的底层融合,助力企业提效降本...
  16. c语言多文件编译 实例霓虹灯,单片机51c语言编程20种不同霓虹灯亮法
  17. pycharm 使用matplotlib 绘图时图片不能显示中文
  18. 511遇见易语言流程控制返回和结束和销毁
  19. Hololens2初入——解决HL真机到PC图像传输的实时性问题
  20. 成品直播源码推荐,登录界面实现插入背景

热门文章

  1. npm run build打包产生的build文件夹通过nginx部署到服务器上访问(centos8)
  2. 用遥控器的例子逐步介绍命令模式
  3. 在树莓派上使用Grbl Controller
  4. 如何在ownCloud/NextCloud/丰盘ECM等免费企业网盘集成在线Office?
  5. 英雄远征Erlang源码分析(11)-物品相关操作解析
  6. n支队伍循环赛安排(附完整代码)
  7. 如何封禁IP和IP段 看完这篇我会了
  8. C# 微信开发-----微信会员卡(三)激活会员卡
  9. Unity编辑器—Excel转Xml和Asset数据
  10. APIStore-一招学会,秒变幽默风趣小王子!