首页 > 其他分享 >6.卷积神经网络

6.卷积神经网络

时间:2023-10-18 17:12:17浏览次数:28  
标签:平移 输出 卷积 矩阵 神经网络 不变性 输入

卷积层的作用一

在说卷积层之前, 我想先说一下为什么会有卷积层; 前面几个博客提到的神经网络都是用矩阵乘法来建立输入和输出之间的关系, 如果有n个输入和m个输出, 那么就需要n*m个参数; 如果n和m很大并且有多个全连接层的话需要的参数数量是庞大的; 卷积层就是通过三个特性来解决这个问题: 稀疏连接, 参数共享, 平移不变性;

稀疏连接

假设有n个输入ai和m个输出bi, 对于全连接层, 输出bi是由n个输入共同决定的, 这也是参数需求量大的原因, 而对于卷积层, bi则是由局部的输入来决定;
输入一个二维矩阵, 卷积的稀疏连接实现主要是来源于卷积核, 卷积核也是一个二维矩阵, 但是其大小要远小于输入的矩阵大小, 然后用滑窗的形式遍历整个输入矩阵得到输出矩阵, 而输出矩阵的每个元素都是由卷积核大小的局部输入矩阵决定的;

参数共享

参数共享是指在一个模型的多个函数中使用相同的参数; 在全连接层中, 计算每层输出时, 权重矩阵中的元素只作用于某一个输入元素一次; 而在卷积神经网络中, 输出矩阵的每个元素都是由同一个卷积核和不同的局部输入矩阵得到的; 根据参数共享的思想, 我们只需要学习一组参数集合, 而不需要针对每一个位置的每一个参数进行优化学习;

平移不变性

如果一个函数的输入做了一些改变, 那么输出也跟着做出同样的改变, 这就是平移不变性; 平移不变性是由参数共享的物理意义所得; 在计算机视觉中, 假如要识别一个图片中是否有一只猫, 那么无论这只猫在图片的什么位置, 我们都应该识别出来, 即就是神经网络的输出对于平移不变性来说是等变的;

卷积层的作用二

卷积可以提取出图像中的特征,这些特征可以用来进行图像分类和识别。因为卷积可以捕捉到输入中的局部信息,比如边缘、形状、纹理等,这些信息对于区分不同的物体是非常重要的。卷积还可以通过叠加多个卷积核来生成多个特征图(或特征层),从而提取出更高层次和更抽象的特征。

示例: 垂直边缘检测

X = torch.ones((6, 8)) #构造一个6X8像素的黑白图像
X[:, 2:6] = 0 #2到6列为黑, 其余为白
X
K = torch.tensor([[1.0, -1.0]]) #一个1X2的卷积核
Y = corr2d(X, K)
Y
tensor([[1., 1., 0., 0., 0., 0., 1., 1.], 
        [1., 1., 0., 0., 0., 0., 1., 1.], 
        [1., 1., 0., 0., 0., 0., 1., 1.], 
        [1., 1., 0., 0., 0., 0., 1., 1.], 
        [1., 1., 0., 0., 0., 0., 1., 1.], 
        [1., 1., 0., 0., 0., 0., 1., 1.]])

tensor([[ 0., 1., 0., 0., 0., -1., 0.], 
        [ 0., 1., 0., 0., 0., -1., 0.], 
        [ 0., 1., 0., 0., 0., -1., 0.], 
        [ 0., 1., 0., 0., 0., -1., 0.], 
        [ 0., 1., 0., 0., 0., -1., 0.], 
        [ 0., 1., 0., 0., 0., -1., 0.]])

输出Y中1表示从白色到黑色的边缘, -1表示从黑色到白色的边缘

卷积层的作用三

卷积可以增加网络的非线性,提高网络的表达能力和泛化能力。因为卷积后通常会接一个非线性激活函数,比如ReLU,这样可以使网络能够学习更复杂的函数,并且避免过拟合的问题。

卷积层的缺点

  1. 卷积会导致空间信息的损失。因为卷积是在局部区域上进行的,它会忽略掉全局的信息和结构。比如,在图像识别中,卷积可能只能检测到物体的局部特征,而不能识别物体的整体形状和位置。这就需要增加更多的卷积层和滤波器来提高感受野,但这也会增加模型的复杂度和计算量。
    补充一下: 滤波器就是卷积核, 感受野是指对于某一层的一个元素x, 在其先前层中所有会影响到x的运算的元素称为x的感受野; eg: 卷积核大小为2x2, 那么输出中的某个元素x就与输入的某个2x2的区间的元素有关, 如果输入也是某个卷积层的输出, 那么x就与前一个卷积层的输入也有个, 也是x的感受野;
  2. 卷积会导致平移不变性, 只要输入数据中存在某些特征,卷积就能检测到它们。这在一些场景下是有用的,比如图像分类和语音识别,但在一些场景下是不利的,比如图像分割和目标检测。因为在这些场景下,我们需要知道物体的具体位置和大小,而不仅仅是它们是否存在。



池化层的作用

同样, 我们先说一下为什么一般要在卷积层后面接一个池化层, 它解决了卷积层的哪些问题:

  1. 池化层可以进一步减小参数数量, 提高运算速度;
  2. 池化层可以增大网络的感受野, 使网络捕捉到更大范围和更高层次的特征;
  3. 卷积层的位置敏感性过强,导致模型对输入数据的位置变化过于敏感,降低模型的泛化能力和鲁棒性。池化层可以增强网络的不变性,使网络更关注是否存在某些特征而不是特征具体的位置,从而提高模型的泛化能力和鲁棒性 。

其中第3点是最主要的问题, 就以前面的垂直边缘检测为例, 现实情况很难实现绝对的垂直, 可能会有一两个像素点的抖动, 但是卷积层会敏感地识别到这些误差, 所以此时可以接一个池化层用来过滤掉这些误差;
这里要理解清楚卷积层平移不变性和位置敏感性之间的区别, 平移不变性是因为输入的每个局部都是用的同一个卷积核, 所以就算识别对象向各个方向平移, 最后还是会被该卷积核处理, 得到的结果不会因为位置的不同而不同; 而位置敏感性是因为卷积核会对每个局部进行处理, 而淡化了整体性, 所以局部的一些小误差会被识别到;

标签:平移,输出,卷积,矩阵,神经网络,不变性,输入
From: https://www.cnblogs.com/mostimali/p/17772853.html

相关文章

  • 神经网络入门篇:为什么深度学习会兴起?
    为什么深度学习会兴起?这篇我们来讲故事,关于为什么深度学习会兴起的故事~深度学习和神经网络之前的基础技术理念已经存在大概几十年了,为什么它们现在才突然流行起来呢?因为多亏数字化社会的来临,现在的数据量都非常巨大,我们花了很多时间活动在这些数字的领域,比如在电脑网站上、......
  • Python神经网络编程pdf电子版 Tariq Rashid
    Python神经网络编程pdf电子版TariqRashid作者:[英]TariqRashid原作名:MakeYourOwnNeuralNetwork出版年:2018-4ISBN:9787115474810连接提取码:c75z本书对初学者极为友好,并且篇幅短小精悍,概念讲解明晰易懂,很适合作为神经网络入门第一书。书中作为例子实现的神经网......
  • 神经网络入门篇:神经网络到底是什么东西
    神经网络到底是什么东西我们常常用深度学习这个术语来指训练神经网络的过程。有时它指的是特别大规模的神经网络训练。那么神经网络究竟是什么呢?举例说明-通俗易懂第一个例子从一个房价预测的例子开始讲起。假设你有一个数据集,它包含了六栋房子的信息。所以,你知道房屋的面......
  • 各神经网络模型全称
    博客地址:https://www.cnblogs.com/zylyehuo/人工神经网络--ANN--ArtificialNeuralNetworks卷积神经网络--CNN--RecurrentNeConvolutionalNeuralNetworks递归(循环)神经网络--RNN--RecurrentNeuralNetworks长短期记忆递归网络--LSTM(特殊的RNN)--LongSho......
  • 动手学深度学习--卷积神经网络
    frompixiv从全连接层到卷积现在我们给自己一个任务:用神经网络去识别区分出百万级像素的不同图片回顾一下以前:我们是通过多层感知机来实现的,当面对一张图片的时候,我们将其看成一个像素点矩阵,然后将其从二维拉直到一维上,再通过MLP进行训练但是我们这次的任务每张照片具有百......
  • 在全基因组选择中,基因组数据是如何输入进神经网络中的
    在全基因组选择(GS)中,通常使用基因分型数据,这些数据来源于一个组织或个体的DNA。这些数据通常是由高通量测序或基因分型技术得到的。为了将这些数据用作神经网络的输入,我们需要将它们转换为合适的格式。以下是这一过程的详细步骤:基因分型数据:通常,基因分型数据表示为二进制或三类......
  • 《动手学深度学习 Pytorch版》 8.6 循环神经网络的简洁实现
    importtorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)8.6.1定义模型num_hiddens=256rnn_layer=nn.RNN(len(......
  • pytorch(8-6) 循环神经网络的简洁实现
     https://zh.d2l.ai/chapter_recurrent-neural-networks/rnn-concise.html# 86循环神经网络的简洁.pyimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lfromAPI_86import*batch_size,num_steps=32,35tra......
  • pytorch(8-6) 循环神经网络的简洁实现
    https://zh.d2l.ai/chapter_recurrent-neural-networks/rnn-concise.html API_85.pyimportcollectionsimportrefromd2limporttorchasd2limportrandomimportmathimporttorchimportrandomdraw_pic=0#@saved2l.DATA_HUB['time_machine']=......
  • 《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现
    %matplotlibinlineimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)#仍然使用时间机器数据集......