1、神经网络
人脑中有大量的脑神经元。每个脑神经元(图中黑点)都可以看做是一个小的记忆体负责不同的记忆,神经元之间通过树突(图中细线)连接起来。
假如人看到一只猫,一个神经元之前见过猫,那么就会把信息往后传,此时神经元处于激活状态;没有见过的啥也不做,处于静止状态。图片的信息就这样,一层一层的通过“见过猫且确信它是一只猫的”神经元往后传递,直到在最后输出一个结果。这个过程叫做大脑的推理。
那神经元的这些记忆是怎么获取的呢?当然是训练!那么计算机又该怎么模拟这个记忆过程呢?如果认识就乘以1,否则就乘以0。实际的网络中,是一个复杂的数值,称之为权值。权值乘以输入的信息(猫),然后经过激活函数去激活(类似于人脑神经元的激活)。如果能成功激活,那么信息就往下传,否则信息就在此丢失。
这个权值,就是 AI 的记忆。这个权值,就是 AI 在训练的过程中学到的东西:千百万次计算得出的最优解。而卷积这一算法,就天然存在一个记忆体,或者说权值,那就是卷积核,可以理解为人眼此时聚焦看到的区域。
图像特征主要有图像的颜色特征、纹理特征、形状特征和空间关系特征。随着神经网络深度的不断加深,卷积提取到的特征逐渐清晰起来。由浅层次的纹理特征,逐步到深层次的形状特征!这些网络里都大量使用了卷积这一算法。因此这些网络我们也可以称之为卷积神经网络(Convolution Neural Network, CNN)。
CNN基础结构如下图:
1)图像送入卷积层中。 在本例中,有两个筛选器,因此每个图像会生成两个特征图。
2)特征图传递到池化层,其中 2x2 池化内核将减小特征图的大小。
3)删除层会随机删除某些特征图,以帮助防止过度拟合。
4)平展层利用剩余的特征图数组,并将它们平展为向量。
5)向量元素送入一个完全连接的网络,该网络将生成预测。在本例中,网络是一个分类模型,可预测三个可能的图像类(三角形、正方形和圆圈)的概率。
2、卷积层
卷积是一种重要的信号处理方法,广泛应用于图像处理、语音识别、自然语言处理等领域。其作用主要有特征提取、降维、去噪、图像增强。其意义主要有模拟生物视觉、提升算法性能和数据压缩。
眼睛看图片大致有以下两个过程:瞳孔放大,盯着某一处细节如嘴巴看;瞳孔缩小,模糊的看一张图片的大致轮廓。那么神经网络是否可以模拟这种瞳孔放大、缩小的方式呢?卷积核的设计,人们通过调整卷积核的大小,来达到瞳孔张开、缩小的目的。并且大量的实验和论文表明,卷积这一针对图像局部性识别的算法,可以非常有效的模拟人眼识别物体的过程。
而卷积过程,就是用mxn的卷积核,去逐步扫描图片,横着扫完竖着扫,每扫一次,就将逐个像素点的值相乘然后加一起,得到一个输出数字。channel 代表的是图片的特征,如果我们想让图片呈现出100个特征,使用100个卷积核计算,输出图片就具有100个特征!说的数学一点,卷积算法,就是通过线性变换,将图片映射到特征空间!
2.1 1D卷积:
机器学习分类比如根据性别、年龄、身高来区分一个人是否喜欢打篮球,之后的处理过程是,权重参数都要和不同的特征分别相乘,然后再将不同的乘积加起来求和,而不会是将不同的特征相乘.
2.2 2D卷积-单通道卷积
2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动
在深度学习中,卷积是最基本的乘法和加法。对于一幅只有一个通道的图像输入a=5x5矩阵,如Convolution Filter过滤器b=3×3矩阵,设步长stride 为1,padding为0。b在a的每个位置上滑动,从左到右要3次,从上到下要3次,共滑动3x3=9次。每次滑动b均与a的元素做卷积得到一个数,最终的输出是一个3x3矩阵c。
2.3 2D卷积-多通道卷积
同上,a=5x5x3即有3个通道,则b=3x3x3也有3个通道,a与b的通道一一对应,三个通道分别执行单通道卷积得到3个 c,每个c均为3x3矩阵。然后这三个c相加形成一个单独的通道(3x3x1),其实3x3x1=3x3。
此过程可理解为3D Filter矩阵b滑过输入层a,输入层的通道数和Filter的Kernel数相同(每一个卷积核中的滤波器个数由输入图像的通道数来决定).
假设输入层具有Din通道,而我们希望输出层具有Dout通道。我们需要做的只是将Dout 个Filter应用于输入层,每个Filter都有Din个kernel,每个Filter提供一个输出通道。应用Dout个Filter后,我们将拥有Dout个通道,然后可以将它们堆叠在一起以形成输出层。输出层的Dout个通道也可称为Dout个Feature map。
2.4 3D卷积
2d是在3D数据(高度×宽度×通道数)上进行卷积,但由于Convolution Filter只能在高度和宽度方向上移动,因此仍被称为2D卷积,一个Filter和一张图像卷积只能生成一个通道的输出数据。
3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动
3D卷积使用的数据和2D卷积最大的不同就在于数据的时序性。3D卷积中的数据通常是视频的多个帧或者是一张医学图像的多个分割图像堆叠在一起,这样每帧图像之间就有时间或者空间上的联系。
3D卷积的输入层,在空间上看到的3维(即深度方向)不再表示通道数,而是图片的帧数,也就是说单个通道有多帧图片堆叠。因此对于三通道(RGB)图像组成的一段视频,实际应该包含三个这样的3D数据。
Convolution Filter(卷积核)的深度不再与通道数相同,只需要满足<=帧数(即输入层的深度)即可。
总结一下,输入层现在的维度是(组数g x Channel输入通道c1 ×f1帧数×H1×W1),
Filter的维度是(f2×H2×W2)
自然地,卷积核就可以在深度、高度、宽度三个方向上自由移动。此时卷积核是一个三维的立方体,输入层也是一个多通道 的三维立方体,两个立方体之间的每一层进行卷积后再在深度上逐元素相加,得到一个二维平面数据。
然后卷积核向深度方向移动,继续卷积,于是就输出了一个3D的Feature map(f1-f2+1, h1-h2+1, w1-w2+1)。
输出层的通道数就等价于输出层的Feature map数,最终得到(g, c1, f1-f2+1, h1-h2+1, w1-w2+1)。
3、池化层 https://zhuanlan.zhihu.com/p/545293528
池化一般接在卷积过程后,也叫Pooling,其本质其实就是采样,对其进行压缩,以加快神经网络的运算速度。池化过程和卷积类比,池化操作也有一个核(kernel),只负责框定某次池化计算需要的图片的范围,核里面并没有数据,不需要学习权重。在卷积的计算中,需要channel维度的数据累加,而池化层的channel维度的数据不需要累加。
3.1 最大池化
对一个图片邻域内的值,用一个 2x2 的池化kernel,步长为2进行扫描,选择最大值输出,这样的参数处理效果就是输出图片的高度、宽度减半,通道数不变。
图:
1,1,2,4 max(1,1,5,6)
5,6,7,8 => max(2,4,7,8) => 6,8
3,2,1,0 max(3,2,1,2) 3,4
1,2,3,4 max(1,0,3,4)
3.2 平均池化
和最大池化类似,就是将取区域内最大值改为求这个区域的平均值。
3.3 全局池化
全局池化的kernel大小和图片大小一样,因此最终输出的图片大小就是一个点。这种全局池化操作,后面一般用来接全连接层,从而进行分类。
3.4 作用
池化层支持了一定的平移、旋转、拉伸不变性,这个特性就是有点抽丝剥茧的意思,不断用小特征对大特征进行精简。
降维,可以减小图片的尺寸,同时又可以保留相应特征,所以主要用来降维。
防止过拟合,没有需要学习的参数,因此,在训练的过程中,可以在一定程度上防止过拟合的发生。
降低模型计算量,会在保留原始图片特征不变的情况下,将图片尺寸缩小,从而减少整个模型的计算量。
4、激活层
每一个卷积层的后面,都会跟着一个激活层。一个原因为了非线性。线性关系,最简单的 y = kx + b,画出来就是一条直线。这个函数就是一个线性函数,称 y 和 x 是线性关系。
而在深度学习任务中,如分类任务,具有线性关系的模型其分类效果是不好的,甚至是很差的。因为卷积算法是由大量的乘法和加法组成,所以,卷积算法也是线性的!
这就导致,由大量卷积算法组成的卷积神经网络(CNN),如果没有非线性因素的引入,会退化成一个简单的线性模型。这就使得多层卷积失去了意义。比如,Resnet50网络中的50层卷积,就会退化为一个卷积。而在神经网络中,使用多层卷积的一个重要目的,就是利用不同卷积核的大小,来抽取不同卷积核尺度下的图像特征。因此,在神经网络设计时,在每层的卷积后面,都增加一个非线性函数,就可以完成两个卷积层的线性隔离,确保每个卷积层完成自己的卷积任务。目前常见的激活函数,主要有Sigmoid、tanh、Relu等。
4.1 sigmoid 激活函数
Sigmoid 函数的图像看起来像一个 S 形曲线。公式为:f(z) = 1/(1+ e^-z)
Sigmoid 函数的输出范围是 0 到 1。由于输出值限定在 0 到 1,因此它对每个神经元的输出进行了归一化;梯度平滑,避免「跳跃」的输出值;函数是可微的。这意味着可以找到任意两个点的 sigmoid 曲线的斜率;明确的预测,即非常接近 1 或 0
4.2 tanh 激活函数
tanh 是一个双曲正切函数。tanh 函数和 sigmoid 函数的曲线相对相似。但是它比 sigmoid 函数更有一些优势。
首先,当输入比较大或者比较小时,函数的输出几乎是平滑的并且梯度较小,这不利于权重更新。输出间隔为 1,并且整个函数以 0 为中心,比 sigmoid 函数更好;在 tanh 图中,负输入将被强映射为负,而零输入被映射为接近零。
4.3 Relu 激活函数
当输入为正时,不存在梯度饱和问题。计算速度快得多。ReLU 函数中只存在线性关系,因此它的计算速度比 sigmoid 和 tanh 更快。
Dead ReLU 问题。当输入为负时,ReLU 完全失效,在正向传播过程中,这不是问题。有些区域很敏感,有些则不敏感。但是在反向传播过程中,如果输入负数,则梯度将完全为零,sigmoid 函数和 tanh 函数也具有相同的问题;我们发现 ReLU 函数的输出为 0 或正数,这意味着 ReLU 函数不是以 0 为中心的函数。文章来源:https://www.toymoban.com/news/detail-637187.html
5. 平展层
Flatten层用来将输入“压平”,即把多维的输入一维化,常用在从卷积层到全连接层的过渡。Flatten不影响batch的大小。
6. 全连接层 https://zhuanlan.zhihu.com/p/552186222
6.1 作用
全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。全连接层,指的是每一个结点都与上一层的所有结点相连,用来把前面几层提取到的特征综合起来。
例如一张画着猫咪的图片,经过几十层卷积的特征提取,很有可能已经提取出了几十个甚至上百个特征,那我们如何根据这几十上百个特征来最终确认,这是一只猫呢?那么就需要一种方法,把这些特征进一步融合,使得神经网络看到后可以区分。将这些特征进一步融合的算法,就是全连接。全连接需要把所有的节点都连接起来,尽可能的完成所有节点的信息共享。使得神经网络最终看到的特征是个全局特征(一只猫),而不是局部特征(眼睛或者鼻子)。具体怎么操作,如图片中猫在不同的位置,输出的feature Map值不同((1,0,0,0)或(0,0,0,1)),但特征值相同即都是猫,此时用一个filter((1,1,1,1))分别与这二个Fearture卷积一下,得到结果都是1,这就是全连接层的作用。只用一层fully connected layer 有时候没法解决非线性问题,而如果有两层或以上fully connected layer就可以很好地解决非线性问题了
因此,卷积操作,提取的特征是局部特征。而全连接层,提取的是全局特征。
6.2 原理
用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,FC层在keras中叫做Dense层,在pytorch中叫Linear层。
对于一个1D Tensor,记作 X=(x1,x2,x3,...,xn),每个样本都是标量。Dense层在神经元个数为1的情况下,本身相当于在做sum(wi* xi+b),其中i=1~n,这里w就是权重weights,b就是偏置量bias,这n个w外加1个b一共n+1个参数parameters,就是我们要让神经网络学习的参数。
对1D Tensor,相当于n个0维标量,Dense操作的对象是每个标量
对2D Tensor,相当于n个1维向量,Dense操作的对象是每个向量。
对3D Tensor,相当于n个2维矩阵,Dense操作的对象是每个矩阵
对4D Tensor,相当于n个3D Tensor,Dense操作的对象是每个3D Tensor.可以相像一段视频由若干张照片也就是我们常说的帧Frame连接构成,每个Frame照片是 (R,G,B) 的3D Tensr,加上时间,视频就是(R,G,B,t) 的4D Tensor了。在神经元个数为1的情况下,Dense在进行 ”w* xi+b操作,每个操作对象都是一帧照片。
那么对于一个具有m个神经元的Dense(m),其数学本质就是 Wm*nXn*1+bm*1,此时若操作对象不是1-D Tensor而是d-D Tensor,那么最终的推广形式就是: Wm*nXn*d + Bm*d
6.3 参数
输入维度: 输入向量的大小,用于指定数据中的特征数量。输入维度是784,那么输入数据就是一个形状为(N,784)的张量,其中N是选定的批次大小。
输出维度:输出向量的大小,指定层中的神经元数量。如果输出维度是 10,那么 Keras dense 层就会输出一个形状为(N,10)的张量。
1,全接解层的总层数(长度)
2,单个全连接层的神经元数(宽度),是一个列向量(单个样本)。
3,激活函数文章来源地址https://www.toymoban.com/news/detail-637187.html
到了这里,关于十四、深度学习之卷积+池化+全连接各层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!