深度学习-卷积神经网络CNN

卷积介绍

卷积神经网络是包含卷积计算,具有深度结构的前馈神经网络。例如常用的二维卷积运算,就是二维互相关运算,

CNN核心步骤:

  • 最左边是数据输入层(input layer),对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
  • CONV:卷积计算层(conv layer),线性乘积求和。
  • RELU:激励层(activation layer),下文有提到:ReLU是激活函数的一种。
  • POOL:池化层(pooling layer),简言之,即取区域平均或最大。
  • FC:全连接层(FC layer)。

常用数据处理方法:

  1. 去均值(常用)

    • AlexNet:训练集中100万张图片,对每个像素点求均值,得到均值图像,当训练时用原图减去均值图像。
    • VGG:对所有输入在三个颜色通道R/G/B上取均值,只会得到3个值,当训练时减去对应的颜色通道均值。(此种方法效率高)

            注:在训练集和测试集上都是减去训练集的均值。

  2. 归一化:幅度归一化到同样的范围。

  3. PCA/白化(很少用)

    • 用PCA降维
    • 白化是对数据每个特征轴上的幅度归一化。

        在CNN中,滤波器filter(带着一组固定权重的神经元)对局部输入数据进行卷积计算,每计算完一个数据窗口内的局部数据后,数据窗口不断平移滑动,直到计算完所有数据。

        原始输入有多少个通道,对应的卷积核就必须要有多少个通道,这样才能与输入匹配,完成卷积操作,如果输入数据的形状为[n,n,c],则每个卷积核的通道数也为 c。

        用 k 个卷积核对输入做卷积,最后得到的特征图一定会含有k个通道。例如,输入为[n,n,c],用k个卷积核对其进行卷积,则卷积核的形状为 [w1, w2, c, k],特征图形状为 [h1, h2, k];其中w1, w2为卷积核的宽度,h1, h2 为卷积后特征图的宽度。

        卷积输出形状的公式:O = ((I + 2 * p - f) / s) + 1,O 为输出的大小,I 为输入的高度,p 为填充数量,f 为卷子核(filter)的宽,s 为步长。

  • 深度depth:神经元个数,决定输出的depth厚度,也代表滤波器个数。
  • 步长stride:决定滑动多少步可以到边缘。
  • 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。
  • 参数共享机制

    假设每个神经元连接数据窗的权重是固定对的。固定每个神经元连接权重,可以看做模板每个神经元只关注一个特性(模板),这使得需要估算的权重个数减少:一层中从1亿到3.5万。

  • 一组固定的权重和不同窗口内数据做内积:卷积

  • 作用在于捕捉某一种模式,具体表现为很大的值。

卷积操作的本质特性包括稀疏交互和参数共享

把卷积层输出结果做非线性映射:

  • sigmoid:在两端斜率接近于0,梯度消失。
  • relu:修正线性单元,斜率可能为0,很少出现,因为mini-batch是一批样本损失求导之和。

注意:

  • CNN慎用sigmoid
  • 首先试relu,因为快,但要小心。
  • 如果relu失效,请用 Leaky ReLU或者Maxout。
  • 某些情况下 tanh 有不错的结果,但很少。

池化层:下采样层,就算通过了卷积层,维度还是很高 ,需要进行池化层操作。

  • 夹在连续的卷积层中间。
  • 压缩数据和参数的量,降低维度。
  • 减小过拟合。
  • 具有特征不变性。

方式有:Max pooling、average pooling

全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来。由于其全连接的特性,一般全连接层的参数也是最多的。

  • 两层之间所有神经元都有权重连接
  • 通常全连接层在卷积神经网络尾部

优点:

  • 共享卷积核,优化计算量。
  • 无需手动选取特征,训练好权重,即得特征。
  • 深层次的网络抽取图像信息丰富,表达效果好。
  • 保持了层级网络结构。
  • 不同层次有不同形式与功能。

缺点:

  • 需要调参,需要大样本量,GPU等硬件依赖。
  • 物理含义不明确。

        NLP/Speech共性:都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。

不同维度的卷积

Conv1D、Conv2D 和 Conv3D 是三种不同的卷积层,处理一维、二维、三维数据的卷积运算。

Conv1D 层是对一维数据进行卷积,常用于处理序列数据,如文本、音频和时间序列,输入是一个二维张量,第一维表示时间步数,第二维表示每个时间步的特征维度。

使用conv1d的一维卷积时,不管输入时1d还是2d的数据,输出都是1d矩阵,如果使用了多个卷积核,则将结果堆叠为二维数据;当输入数据为2d时,卷积核的宽为kernal_size大小,高要和输入保持一致,经过卷积后变为一维数据的上的点。都是对输入数据做宽度上的卷积,当使用conv1d处理二维输入时,例如处理文本,输入shape为(8,16,256)-》每批16个词,每个词特征256,在输入conv1d前应该将16和256调换,这样卷积时才不会把一个词的特征拆分。

Conv2D 层是对二维数据进行卷积,常用于处理图像数据,输入是一个三维张量,第一维和第二维表示图像的高度和宽度,第三维表示图像的通道数。

Conv3D 层是对三维数据进行卷积,常用于处理视频数据或三维图像数据,输入是一个四维张量,第一维、第二维和第三维表示三维图像的长、宽和高,第四维表示图像的通道数。

参考:

ML-NLP/Deep Learning/11. CNN at master · NLP-LOVE/ML-NLP (github.com)

【深度学习基础】卷积是如何计算的_卷积计算_Half_A的博客-CSDN博客

Pytorch中Conv2d的使用_pytorch conv2d_yihanyifan的博客-CSDN博客

pytorch中Conv1d、Conv2d与Conv3d详解-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值