手把手教你理解卷积神经网络

简介: 卷积神经网络是一种识别和理解图像的神经网络。本文将从不同的层次来介绍卷积神经网络。

    手把手教你理解卷积神经网络(一)

         本文将继续为你介绍关于卷积神经网络的知识。为了保持文章的简洁性和全面性我将为你提供研究论文的链接,里边会有更为详细的解释。

确定宽度和填充(Stride and Padding)

让我们看看转换层,还记得滤波器、接受域和卷积吗?现在我们可以改变两个主要参数来修改每层的运行状态。在选择滤波器大小之后,还要选择宽度和填充。

用宽度来控制滤波器如何在输入量的上下范围内进行卷积。例如,一个7*7的输入量,一个3*3滤波器(忽略第三维度的简单性),宽度为1

197af7000dffba1ffe8ab2e31be1d3a77709a44f 

看看你是否能尽力猜出随着宽度增加到2,输出量会发生什么变化。

43b4392bdcbe626ca550a0447da71e642f098b30 

因此,正你所看到的那样,接受域现在在两个单元之间来回变换,并且输出体积也缩小了。请注意,如果我们试图将宽度调整为3,那么我们就有间隔的问题了,还要确保接受域适合输入量。通常来说,开发者如果希望接受域重叠较少,并且希望有较小的空间维度,则会增大宽度。

让我们看看填充部分,但是在开始之前,让我们考虑一个场景。当你把三个5*5*3滤波器应用到一个32*32*3的输入量时会发生什么呢?输出量会是28*28*3。注意,空间维度减少了。当我们保持应用转换层时,输出量的大小将比我们想象的减少的快。在我们网络的前面的那些层中,我们想尽可能多地保存原始输入量的信息,这样我们就可以提取那些低级的特性了。这样说吧,我们想应用同样的转换层,但想要的输出量要保持在32 x 32 x 3。要做到这一点,我们可以对该层应用一个大小为2的零填充。零填充在边界上以零为输入的量。如果我们考虑两个中的一个零填充,那么这将会导致一个36*36*3的输入量。

7783b1083b59fe4b69fb1c5d7065df02dbbf119a 

如果你有一个为1的宽度,并且你把零填充的大小设置为:

e2061dc07b86ed0e821f4f09eb01433ab4d6ed6e

当滤波器的大小为K时,输入量和输出量将始终具有相同的空间维度。

对于任何给定的转换层的输出量的计算公式是:

acfc4d1fb6a8ef7972c7a121728fc346b1aa9f1d

上面的公式中,O是输出的高度/长度,W是输入的高度/长度,K滤波器的大小,P是填充,S是宽度。

选择参数(Choosing Hyperparameters)

我们如何知道用了多少层,有多少转换层,滤波器的大小是多少,或者宽度和填充是什么值呢?这些问题我们都不知晓,因为网络将在很大程度上依赖于你的数据类型。数据可以根据大小、图像的复杂度、图像处理任务的类型以及更多的不同因素而变化。当看着你的数据集时,一个考虑如何选择参数的方式是在一个适当的规模找到正确的创建图像抽象的组合。

ReLU (被调整的线性单元)

在每个转换层的后面,就是常规的应用非线性层(或激活层)。这一层的目的是非线性地引入一个系统,这个系统基本上是在转换层一直计算线性操作(只是元素方式的乘法和加法运算)。

在之前,一直用的是非线性函数,如tanhsigmoid,但研究人员发现ReLU层的效率远远更好,这是因为在对精度没有产生显著不同的情况下,网络能训练的更快(因为计算效率更高)。它也有助于缓和消失梯度的麻烦,这是一个问题,因为较低层的网络训练是非常缓慢的,因为在这些层里梯度呈指数级别的下降层(解释这个问题可能超出了本文的范围,点击这里这里来查看具体的解释和描述)。ReLU层调用函数fx= max0x)来提供输入量的所有值。基本上来说,这一层刚好改变所有的负激活为0。这一层在不影响转换层的接受域的情况下,提高了模型和整个网络的非线性的属性。

池化层Pooling Layers

经过一些ReLU层,开发者可以选择应用一个池化层,它也被称为缩减采样层。在这一类别中,也有其它几个层的选择,与最大池化maxpooling)一起是最受欢迎的。这基本上需要一个滤波器(通常大小为2*2)和相同尺寸的宽度。然后将其应用于输入量和在每个有滤波器卷积的子区域中输出的最大数量。

4a3c89c082ec7f249544c3f225ac15efe53e04cf 

池化层的其他选项是平均池化L2-norm池化。这个层背后的直观理解是,一旦我们知道一个特定的特征是在原始输入量中(将会有一个高激活值),它的确切位置并不像它相对于其它特征的位置那么重要。可以想象,这一层极大地减少了输入量的空间维度(长度和宽度的变化,而不是深度)。这有两个主要目的。首先,参数或权重的数量减少了75%,从而降低了计算的成本。其次,它将控制过度拟合,这指的是当一个模型被调整到训练样本时,它不能很好地为验证和测试集进行标准化。过度拟合的表现是,有一个模型,在训练集上得到100%99%的表现,但在测试数据上只有50%

Dropout Layers

现在,Dropout Layers在神经网络中有一个非常特殊的功能。在上一节中,我们讨论了过度拟合的问题,训练结束后,网络的权重被调整到了已给的训练样本,当提供了新的训练样本时网络就执行的不那么好了。Dropout的想法在本质上是过于简单化的。这一层删除一个随机激活集,通过将它们设置为零。即使某些激活被删除了,网络也应该能够为特定的样本提供正确的分类或输出。它确保网络变得不适合训练数据,从而有助于缓解过度拟合的问题。一个重要的注意事项是,这一层仅用于训练期间,而不是在测试期间使用。

网络层的网络(Network in Network Layers

网络层的网络指的是一个应用1 x 1大小的滤波器的转换层。首先,既然接受域通常要比它们映射到的空间大,你可能想知道为什么层的类型会有帮助。然而,我们必须记住,这些1x1卷积的跨度是有一定深度的,所以可以认为它是一个1 x 1 x N的卷积,其中N滤波器在这一层中应用的数量。

分类、定位、检查、分割(Classification, Localization, Detection, Segmentation

当我们执行一个类似于对象本地化这样的任务时,不仅仅是生成一个类标签,还包括一个用来描述对象在图片中位置的包围盒(bounding box)。

d1accc56419c2925ffa93ce10b25ce8b7ce5ab59 

我们也有对象检测的任务,需要对图像中的所有对象进行定位。因此,将有多个包围盒和多个类标签。

最后,我们还进行了对象分割,其中的任务是输出一个类标签以及一个输入图像中每个对象的轮廓。

fa0b0b032c79b7f0a6dce1ec4d95e50b8cf3e933 

迁移学习Transfer Learning

现在,在深度学习社区的一个常见的误解是:没有超大的数据量,你不可能创建有效的深度学习模型。数据固然是创建网络的关键部分,但也不是决定部分迁移学习的思想有助于减少数据需求。迁移学习是接受预训练模型(由其他人在大数据集上训练过的网络的权重和参数)并用自己的数据集对模型进行微调的过程。这个想法是这个预先训练的模型将作为一个特征提取器。你将删除网络的最后一层,并用自己的分类器来代替。然后冻结所有其它层的权重,并正常地训练网络(冻结这些层意味着在梯度下降/优化过程中不改变权重)。

我们正在探讨的是预训练模型在ImageNet上训练(ImageNet是一个数据集,在1000以上个类里包含1400万幅图像)。当考虑网络上那些较低的层时,我们知道它们将检测到像边缘和曲线这样的特征。现在,除非你有一个非常独特的问题空间和数据集,你的网络也将需要检测曲线和边缘。与其通过一个随机的权重初始化值来训练整个网络,我们可以使用预训练模型的权重,并致力于在更重要的层(更高的层)上进行训练。如果你的数据集与ImageNet完全不同,那么你就要训练更多的层并冻结两个较低的层。

数据扩展技术(Data Augmentation Techniques

现在,我们可能对数据在卷积神经网络中的重要性没什么感觉了,因此让我们谈论一下让你的数据集变大的方法,仅仅是用两个简单的变换。正如我们前面提到过的,当计算机用一个图像作为输入时,它将输入一个像素值的数组。假设整个图像被左移1个像素。对你和我来说,这个变化是潜移默化的。然而,对于一个计算机来说,这一改变可能相当地重要,因为图像的分类或标签不会改变,而数组改变了。以改变数组表示的方式改变训练数据的方法,同时保持标签相同,称为数据扩展技术。这是一种人工扩展数据集的方法。人们使用的一些流行的扩展是灰度、水平翻转、垂直翻转、随作物、色恐慌、平移、旋转等等。通过将其中的两个转换应用到训练数据中,你就可以轻松地将训练样本的数量扩大一倍或三倍。


数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

 以上为译文。

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。

文章原标题《A Beginner's Guide to Understanding Convolutional Neural Networks》,译者:Mags,审校:袁虎。

文章为简译,更为详细的内容,请查看原文 

相关文章
|
1天前
|
机器学习/深度学习 监控 自动驾驶
卷积神经网络有什么应用场景
【10月更文挑战第23天】卷积神经网络有什么应用场景
6 2
|
1天前
|
机器学习/深度学习 自然语言处理 算法
什么是卷积神经网络
【10月更文挑战第23天】什么是卷积神经网络
9 1
|
4天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
12 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
5天前
|
机器学习/深度学习 人工智能 自动驾驶
深度学习中的卷积神经网络(CNN)及其应用
【10月更文挑战第21天】本文旨在深入探讨深度学习领域的核心组成部分——卷积神经网络(CNN)。通过分析CNN的基本结构、工作原理以及在图像识别、语音处理等领域的广泛应用,我们不仅能够理解其背后的技术原理,还能把握其在现实世界问题解决中的强大能力。文章将用浅显的语言和生动的例子带领读者一步步走进CNN的世界,揭示这一技术如何改变我们的生活和工作方式。
|
12天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
42 1
|
16天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
2天前
|
机器学习/深度学习 算法 计算机视觉
深度学习与生活:如何利用卷积神经网络识别日常物品
【10月更文挑战第24天】在这篇文章中,我们将探索深度学习如何从理论走向实践,特别是卷积神经网络(CNN)在图像识别中的应用。通过一个简单的示例,我们将了解如何使用CNN来识别日常生活中的物体,如水果和家具。这不仅是对深度学习概念的一次直观体验,也是对技术如何融入日常生活的一次深刻反思。文章将引导读者思考技术背后的哲理,以及它如何影响我们的生活和思维方式。
|
8天前
|
机器学习/深度学习 人工智能 自动驾驶
深入理解深度学习中的卷积神经网络(CNN)
【10月更文挑战第18天】深入理解深度学习中的卷积神经网络(CNN)
19 0
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
本项目展示了贝叶斯优化在CNN中的应用,包括优化过程、训练与识别效果对比,以及标准CNN的识别结果。使用Matlab2022a开发,提供完整代码及视频教程。贝叶斯优化通过构建代理模型指导超参数优化,显著提升模型性能,适用于复杂数据分类任务。
|
13天前
|
机器学习/深度学习 编解码 算法
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
【深度学习】经典的深度学习模型-01 开山之作:CNN卷积神经网络LeNet-5
21 0