师兄最近找工作笔试有遇到过~容易忘
作者:机器之心
链接:https://www.zhihu.com/question/52668301/answer/131573702
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果我们在输入内容的周围应用两次零填充,那么输入量就为 32×32×3。然后,当我们应用带有 3 个 5×5×3 的过滤器,以 1 的步幅进行处理时,我们也可以得到一个 32×32×3 的输出

如果你的步幅为 1,而且把零填充设置为

K 是过滤器尺寸,那么输入和输出内容就总能保持一致的空间维度。

计算任意给定卷积层的输出的大小的公式是

其中 O 是输出尺寸,K 是过滤器尺寸,P 是填充,S 是步幅。

选择超参数

我们怎么知道要用多少层、多少卷积层、过滤器尺寸是多少、以及步幅和填充值多大呢?这些问题很重要,但又没有一个所有研究人员都在使用的固定标准。这是因为神经网络很大程度上取决于你的数据类型。图像的大小、复杂度、图像处理任务的类型以及其他更多特征的不同都会造成数据的不同。对于你的数据集,想出如何选择超参数的一个方法是找到能创造出图像在合适尺度上抽象的正确组合。

ReLU(修正线性单元)层

在每个卷积层之后,通常会立即应用一个非线性层(或激活层)。其目的是给一个在卷积层中刚经过线性计算操作(只是数组元素依次(element wise)相乘与求和)的系统引入非线性特征。过去,人们用的是像双曲正切和 S 型函数这样的非线性方程,但研究者发现 ReLU 层效果好得多,因为神经网络能够在准确度不发生明显改变的情况下把训练速度提高很多(由于计算效率增加)。它同样能帮助减轻梯度消失的问题——由于梯度以指数方式在层中消失,导致网络较底层的训练速度非常慢。ReLU 层对输入内容的所有值都应用了函数 f(x) = max(0, x)。用基本术语来说,这一层把所有的负激活(negative activation)都变为零。这一层会增加模型乃至整个神经网络的非线性特征,而且不会影响卷积层的感受野。

作者:知乎用户
链接:https://www.zhihu.com/question/29021768/answer/43488153
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

第一个问题:为什么引入非线性激励函数?
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释balabala)。

第二个问题:为什么引入Relu呢?
第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失,参见@Haofeng Li答案的第三点),从而无法完成深层网络的训练。

第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

  • 参见 Geoffrey Hinton(即深度学习之父)的论文:Rectified Linear Units Improve Restricted Boltzmann Machines

池化层

在几个 ReLU 层之后,程序员也许会选择用一个池化层(pooling layer)。它同时也被叫做下采样(downsampling)层。在这个类别中,也有几种可供选择的层,最受欢迎的就是最大池化( max-pooling)。它基本上采用了一个过滤器(通常是 2x2 的)和一个同样长度的步幅。然后把它应用到输入内容上,输出过滤器卷积计算的每个子区域中的最大数字。

带有 2×2 和过滤器的且步幅为 2 的最大池化的例子

池化层还有其他选择,比如平均池化(average pooling)和 L2-norm 池化 。这一层背后的直观推理是:一旦我们知道了原始输入(这里会有一个高激活值)中一个特定的特征,它与其它特征的相对位置就比它的绝对位置更重要。可想而知,这一层大幅减小了输入卷的空间维度(长度和宽度改变了,但深度没变)。这到达了两个主要目的。第一个是权重参数的数目减少到了75%,因此降低了计算成本。第二是它可以控制过拟合(overfitting)。这个术语是指一个模型与训练样本太过匹配了,以至于用于验证和检测组时无法产生出好的结果。出现过拟合的表现是一个模型在训练集能达到 100% 或 99% 的准确度,而在测试数据上却只有50%。

Dropout 层

如今,Dropout 层在神经网络有了非常明确的功能。上一节,我们讨论了经过训练后的过拟合问题:训练之后,神经网络的权重与训练样本太过匹配以至于在处理新样本的时候表现平平。Dropout 的概念在本质上非常简单。Dropout 层将「丢弃(drop out)」该层中一个随机的激活参数集,即在前向通过(forward pass)中将这些激活参数集设置为 0。简单如斯。既然如此,这些简单而且似乎不必要且有些反常的过程的好处是什么?在某种程度上,这种机制强制网络变得更加冗余。这里的意思是:该网络将能够为特定的样本提供合适的分类或输出,即使一些激活参数被丢弃。此机制将保证神经网络不会对训练样本「过于匹配」,这将帮助缓解过拟合问题。另外,Dropout 层只能在训练中使用,而不能用于测试过程,这是很重要的一点。

  • 参考 Geoffrey Hinton 的论文:Dropout: A Simple Way to Prevent Neural Networks from Overfitting

网络层中的网络

网络层中的网络指的是一个使用了 1 x 1 尺寸的过滤器的卷积层。现在,匆匆一瞥,你或许会好奇为何这种感受野大于它们所映射空间的网络层竟然会有帮助。然而,我们必须谨记 1x1 的卷积层跨越了特定深度,所以我们可以设想一个1 x 1 x N 的卷积层,此处 N 代表该层应用的过滤器数量。该层有效地使用 N 维数组元素依次相乘的乘法,此时 N 代表的是该层的输入的深度。

  • 参阅 Min Lin 的论文:Network In Network

分类、定位、检测、分割

本系列第一部分使用的案例中,我们观察了图像分类任务。这个过程是:获取输入图片,输出一套分类的类数(class number)。然而当我们执行类似目标定位的任务时,我们要做的不只是生成一个类标签,而是生成一个描述图片中物体suo所在位置的边界框。

我们也有目标检测的任务,这需要图片上所有目标的定位任务都已完成。

因此,你将获得多个边界框和多个类标签。

最终,我们将执行目标分割的任务:我们需要输出类标签的同时输出图片中每个目标的轮廓。

关于目标检测、定位、分割的论文有很多,这里就不一一列出了。

迁移学习

如今,深度学习领域一个常见的误解在于没有谷歌那样的巨量数据,你将没有希望创建一个有效的深度学习模型。尽管数据是创建网络中至关重要的部分,迁移学习的思路将帮助我们降低数据需求。迁移学习指的是利用预训练模型(神经网络的权重和参数都已经被其他人利用更大规模的数据集训练好了)并用自己的数据集将模型「微调」的过程。这种思路中预训练模型扮演着特征提取器的角色。你将移除网络的最后一层并用你自有的分类器置换(取决于你的问题空间)。然后冻结其他所有层的权重并正常训练该网络(冻结这些层意味着在梯度下降/最优化过程中保持权值不变)。

让我们探讨一下为什么做这项工作。比如说我们正在讨论的这个预训练模型是在 ImageNet (一个包含一千多个分类,一千四百万张图像的数据集)上训练的 。当我们思考神经网络的较低层时,我们知道它们将检测类似曲线和边缘这样的特征。现在,除非你有一个极为独特的问题空间和数据集,你的神经网络也会检测曲线和边缘这些特征。相比通过随机初始化权重训练整个网络,我们可以利用预训练模型的权重(并冻结)聚焦于更重要的层(更高层)进行训练。如果你的数据集不同于 ImageNet 这样的数据集,你必须训练更多的层级而只冻结一些低层的网络。

  • Yoshua Bengio (另外一个深度学习先驱 )论文:How transferable are features in deep neural networks?

  • Ali Sharif Razavian 论文:CNN Features off-the-shelf: an Astounding Baseline for Recognition

  • Jeff Donahue 论文:DeCAF: A Deep Convolutional Activation Feature for Generic Visual Recognition

数据增强技术

现在我们对卷积网络中数据的重要性可能已经感到有些麻木了,所以我们来谈下如何利用一些简单的转换方法将你现有的数据集变得更大。正如我们之前所提及的,当计算机将图片当作输入时,它将用一个包含一列像素值的数组描述(这幅图)。若是图片左移一个像素。对你和我来说,这种变化是微不可察的。然而对计算机而已,这种变化非常显著:这幅图的类别和标签保持不变,数组却变化了。这种改变训练数据的数组表征而保持标签不变的方法被称作数据增强技术。这是一种人工扩展数据集的方法。人们经常使用的增强方法包括灰度变化、水平翻转、垂直翻转、随机编组、色值跳变、翻译、旋转等其他多种方法。通过利用这些训练数据的转换方法,你将获得两倍甚至三倍于原数据的训练样本。

深度 | 从入门到精通:卷积神经网络初学者指南(附论文)

CNN卷积层相关计算公式相关推荐

  1. 理解CNN卷积层与池化层计算

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 概述 深度学习中CNN网络是核心,对CNN网络来说卷积层与池化层的 ...

  2. CNN卷积层神经元数量、连接数量、权重数量的计算

    1. 神经元的数量: 和输入层类似,输出维度是多少,神经元就有多少 feature map大小 * feature map数量 2. 连接数量: 全连接: 输入层神经元数量*输出层神经元数量 CNN局 ...

  3. CNN 卷积层输出尺寸计算(长、宽)

    公式: 卷积后,池化后尺寸计算公式: (图像尺寸-卷积核尺寸 + 2*填充值)/步长+1 (图像尺寸-池化窗尺寸 + 2*填充值)/步长+1 假设输入图片大小是(H,W), 滤波器(卷积核)大小(FH ...

  4. CNN卷积层图像和矩阵转换函数

    将图像维度转换为矩阵,和将矩阵转换为图像维度.深度学习框架都会有这样的功能. import numpy as npdef im2col(input_data, filter_h, filter_w, ...

  5. DL之CNN可视化:利用SimpleConvNet算法【3层,im2col优化】基于mnist数据集训练并对卷积层输出进行可视化

    DL之CNN可视化:利用SimpleConvNet算法[3层,im2col优化]基于mnist数据集训练并对卷积层输出进行可视化 导读 利用SimpleConvNet算法基于mnist数据集训练并对卷 ...

  6. 基于Java机器学习自学笔记(第81-87天:CNN卷积神经网络的入门到全代码编写)

    注意:本篇为50天后的Java自学笔记扩充,内容不再是基础数据结构内容而是机器学习中的各种经典算法.这部分博客更侧重于笔记以方便自己的理解,自我知识的输出明显减少,若有错误欢迎指正! 目录 1. CN ...

  7. cnn卷积网络解决尺寸大小不确定的图片分类问题--银行凭证印章检查

    简 介 CNN卷积神经网络进行图像识别分类的技术很简单,一般神经网络初学者都做过mnist分类实验,简单的分类任务准确率跑到99%已经不成问题,这里不做过多的介绍.但是想用卷积神经网络解决实际问题,往 ...

  8. 机器学习16:简单, 直观的方法理解CNN(卷积神经网络)核心原理及实现

    1.CNN(卷积神经网络)的典型应用场景 1.1 WaveNet 模型: https://deepmind.com/blog/wavenet-generative-model-raw-audio/ 如 ...

  9. 经典CNN卷积神经网络发展史+论文+网络实现(PyTorch)

    网络搭建目录: Lenet 学习笔记 pytorch官方demo代码复现_放风筝的猪的博客-CSDN博客 AlexNet网络结构详解与代码复现_放风筝的猪的博客-CSDN博客 VGG网络结构详解与代码 ...

最新文章

  1. HA: InfinityStones靶机渗透测试
  2. 初级管理者,如何打通任督二脉
  3. nginx basic auth配置踩坑记
  4. 重磅开源!推荐一个以最优惠的方式购买极客时间课程的开源项目!
  5. mybatis简介-什么是Mybatis
  6. 传统公司部署OpenStack(t版)简易介绍(九)——控制台部署
  7. 如何将目录下几百个lib加入到vs项目属性下的链接器
  8. PHP框架编写和应用知识点,php框架知识点的整理和补充
  9. 曲线 神经网络_神经网络的数学基础-8(完结)
  10. 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之26---礼品卡支付...
  11. J2EE DAO模式解析(二)
  12. FFmpeg进行屏幕录像和录音
  13. PayPal付款状态解释-中英文对照
  14. 如何从数据库中选出最热的十个检索词
  15. QT-学生信息管理系统
  16. 折腾修改SQLCipher静态库的符号表
  17. 【FinE】单利与复利
  18. android10 三星升级计划,三星公布Android 10.0国行升级计划:规模庞大
  19. java如何删除一本图书_javaEE项目网上书城后台(如何删除一本书并且有提示)...
  20. C语言 打飞机 小游戏

热门文章

  1. flex使用手册翻译
  2. UniswapV2Router02.sol
  3. 内连接与外连接(全网最详细)
  4. Java Swing坦克小游戏
  5. labview图像视觉处理——连接硬件(PCO.panda相机)
  6. icalendar_家庭日历管理-在Outlook和Web日历之间共享生活以及iCalendar的魔力
  7. mplayer 所支持的音视频编解码;
  8. 华为鸿蒙系统使用技巧,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  9. 微信开发者模式实现图文消息发送
  10. ubuntu 看迅雷电影的方法