Deep learning with python --深度学习与视觉

关于卷积的理解

  • 关于卷积的故事
    在这里插入图片描述
    这就是卷积公式,它本质上说系统(人)在连续激励下(挨板子)所的得到的结果(疼)。翻译的学术一点:卷积将是过去所有连续信号经过系统的响应之后得到的在观察那一刻的加权叠加。而现实生活中,我们就是要解大量的这种问题,这也就是为啥卷积这么常见这么重要的原因。
  • 卷积定理: 卷积定理是傅立叶变换满足的一个重要性质。卷积定理指出,函数卷积的傅立叶变换是函数傅立叶变换的乘积。具体分为时域卷积定理和频域卷积定理,时域卷积定理即时域内的卷积对应频域内的乘积;频域卷积定理即频域内的卷积对应时域内的乘积,两者具有对偶关系。

卷积运算

  • Dense层从输入特征空间中学到的是全局模式(对于MNIST数字,涉及所有像素的模式),而卷积层学到的是局部模式,对于图像来说,学到的就是在输入图像的二维小窗口中发现的模式。

  • 卷积神经网络的两个有趣性质:
    (1)卷积神经网络学到的模式具有平移不变性。(视觉世界从根本上具有平移不变性)对于密集连接网络来说,如果模式出现在新的位置,它只能重新学习这个模式。
    (2)卷积神经网络可以学到模式的空间层次结构。 第一层卷积层会学到较小的局部模式(比如边缘),而第二层将第一层的特征组合成更大的模式,从而使卷积层越来越复杂, 如下图。(视觉世界从根本上具有空间层次结构)
    在这里插入图片描述
    在这里插入图片描述

  • 神经网络参数个数计算:weight∗x+bias
    卷积层参数个数:(1)一个卷积核参数 = 卷积核大小 x 卷积核大小 x 图像通道数 ; (2) 卷积核总参数 = 卷积核个数 x 一个卷积核参数个数 + 卷积核个数
    全连接层参数个数:Dense层总参数 = 全连接层神经元个数 x 通道数 + 全连接层神经元个数
    在这里插入图片描述
    在这里插入图片描述

  • 卷积后的图片尺寸计算公式:N = (W − F + 2P )/S+1
    输入图片大小: W×W
    Filter 大小: F×F
    步长: S
    padding 的像素数: P
    输出图片的尺寸为:N×N

  • 卷积由以下两个关键参数所定义:
    (1)从输入中提取的图块尺寸;
    (2)输出特征图的深度;

  • 卷积的工作原理
    在这里插入图片描述
    在这里插入图片描述
    (1)权值矩阵在图像里表现的像一个从原始图像矩阵中提取特定信息的过滤器。一个权值组合可能用来提取边缘(edge)信息,另一个可能是用来提取一个特定颜色,下一个就可能就是对不需要的噪点进行模糊化。
    (2)先对权值进行学习,然后损失函数可以被最小化,类似于多层感知机(MLP)。因此需要通过对参数进行学习来从原始图像中提取信息,从而来帮助网络进行正确的预测。当我们有多个卷积层的时候,初始层往往提取较多的一般特征,随着网络结构变得更深,权值矩阵提取的特征越来越复杂,并且越来越适用于眼前的问题。
    (3)注意,输出的宽度和高度可能与输入的宽度和高度不同。不同的原因可能有两点。边界效应,可以通过对输入特征图进行填充来抵消。使用了步幅(stride),稍后会给出其定义。

  • 边界填充效应
    如果你希望输出特征图的空间维度与输入相同,那么可以使用填充(padding)。填充是在输入特征图的每一边添加适当数目的行和列,使得每个输入方块都能作为卷积窗口的中心。对于 3×3 的窗口,在左右各添加一列,在上下各添加一行。对于 5×5 的窗口,各添加两行和两
    列(见图 )。
    在这里插入图片描述
    对于 Conv2D 层,可以通过 padding 参数来设置填充,这个参数有两个取值:“valid” 表示不使用填充(只使用有效的窗口位置);“same” 表示“填充后输出的宽度和高度与输入相同”。padding 参数的默认值为 “valid”。

  • 步幅: 两个连续窗口的距离。步进卷积就是步幅大于1的卷积。步幅为2意味着特征图的宽度和高度都被做了2倍下采样,虽然对某些模型可能有用,但实践中很少用。为了对特征图进行下采样,我们不用步幅,而是通常使用最大池化运算(max-pooling)!

最大池化运算

  • 最大池化的作用:对特征图进行下采样,与步进卷积类似。
  • 工作原理:最大池化是从输入特征图中提取窗口,并输出每个通道的最大值。它的概念与卷积类似,但是最大池化使用硬编码的 max 张量运算对局部图块进行变换,而不是使用学到的线性变换(卷积核)。最大池化与卷积的最大不同之处在于,最大池化通常使用 2×2 的窗口和步幅 2,其目的是将特征图下采样 2 倍。与此相对的是,卷积通常使用 3×3 窗口和步幅 1。
  • 思考一个问题: 如果只有卷积层,没有池化层,这种架构有什么不好的地方?
    (1)这种架构不利于学习特征的空间层级结构;
    (2)最后一层的特征图对每个样本的元素太多了,对于一个小模型来说会导致严重过拟合。
  • 使用下采样的原因: 一是减少需要处理的特征图的元素个数,二是通过让连续卷积层的观察窗口越来越大(即窗口覆盖原始输入的比例越来越大),从而引入空间过滤器的层级结构。
  • 注意:最大池化不是实现这种下采样的唯一方法。你已经知道,还可以在前一个卷积层中使用步幅来实现。此外,你还可以使用平均池化来代替最大池化,其方法是将每个局部输入图 块变换为取该图块各通道的平均值,而不是最大值。但最大池化的效果往往比这些替代方法更好。 简而言之,原因在于特征中往往编码了某种模式或概念在特征图的不同位置是否存在(因此得名特征图),而观察不同特征的最大值而不是平均值能够给出更多的信息。因此,最合理的子采 样策略是首先生成密集的特征图(通过无步进的卷积),然后观察特征每个小图块上的最大激活, 而不是查看输入的稀疏窗口(通过步进卷积)或对输入图块取平均,因为后两种方法可能导致错过或淡化特征是否存在的信息。
  • 小结: 卷积神经网络是用于计算机视觉任务的最佳机器学习模型。即使在非常小的数据集上也可以从头开始训练一个卷积神经网络,而且得到的结果还不错。在小型数据集上的主要问题是过拟合。在处理图像数据时,数据增强是一种降低过拟合的强大方法。利用特征提取,可以很容易将现有的卷积神经网络复用于新的数据集。对于小型图像数据集,这是一种很有价值的方法。作为特征提取的补充,你还可以使用微调,将现有模型之前学到的一些数据表示应用于新问题。这种方法可以进一步提高模型性能。现在你已经拥有一套可靠的工具来处理图像分类问题,特别是对于小型数据集。

深度学习局限性

  • 深度学习模型只是将一个向量空间映射到另一个向量空间的简单而又连续的几何 变换链。它能做的只是将一个数据流形 X 映射到另一个流形 Y,前提是从 X 到 Y 存在可学习的 连续变换。深度学习模型可以被看作一种程序,但反过来说,大多数程序都不能被表示为深度 学习模型。对于大多数任务而言,要么不存在相应的深度神经网络能够解决任务,要么即使存 在这样的网络,它也可能是不可学习的(learnable)。后一种情况的原因可能是相应的几何变换 过于复杂,也可能是没有合适的数据用于学习。
  • 通过堆叠更多的层并使用更多训练数据来扩展当前的深度学习技术,只能在表面上缓解一 些问题,无法解决更根本的问题,比如深度学习模型可以表示的内容非常有限,比如大多数你 想要学习的程序都不能被表示为数据流形的连续几何变形。
  • 简而言之,深度学习模型并不理解它们的输入,至少不是人类所说的理解。我们自己对图 像、声音和语言的理解是基于我们作为人类的感觉运动体验。机器学习模型无法获得这些体验, 因此也就无法用与人类相似的方式来理解它们的输入。通过对输入模型的大量训练样本进行标 记,我们可以让模型学会一个简单几何变换,这个变换在一组特定样本上将数据映射到人类概念, 但这种映射只是我们头脑中原始模型的简化。我们头脑中的原始模型是从我们作为具身主体的 体验发展而来的。机器学习模型就像是镜子中的模糊图像(见图)。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值