📚卷积神经网络CNN
type
status
date
slug
summary
tags
category
icon
password
Convolutional Neural Network
用来做特征提取、超分辨率重构(变清晰)、医学任务、识别
传统神经网络的权重参数矩阵过大,过拟合风险很高,卷积神经网络来解决这个问题

卷积层越多,我们能提取到的高层次特征就越多,神经网络对像素空间就越敏感。反过来看,这时网络复杂度也高了,容易产生过拟合。
卷积
手电筒扫描

在机器学习术语中,这个手电筒是filter(神经元/卷积核),每次照亮的这块5×5的区域是receptive field(感受野)。filter也是一个数组(权重/参数),而且深度必须和输入图像深度一致,这样才能确保计算。
传统网络输入层输入的是若干个像素点,卷积神经网络输入层是一个原始的图片,输入的是三维矩阵h*w*c,
空间平移不变
每个filter都可以被看作是特征标识符( feature identifiers),这里的特征指的是直线边缘、曲线、黑白等,它们是每个图像的都具备的最简单的特征。假设我们有一个7×7×3的能检测曲线的filter,它会给带有曲线像素结构的区域更高数值。
过滤
单一一层不可能完全实现对于图像所有部分的细节、特征提取,在某个地方的输出结果好其在另一个地方的输出结果就可能会很差,这就起到了过滤的作用(比如只能分辨出左突出)
注:这里的曲线、直线、色彩都是假设,事实上我们并不清楚CNN捕捉的特征是什么,我们只能从数据中看出它有没有得到新特征,切勿认为计算机看到的就等同于人眼看到的。
整体架构
输入层
卷积层
卷积做了什么事情?
有一个小的方框,每次映射在目标的大图像上,将其各格子数字的乘积相加得到和,(内积)从而提取出某一个小方框部分对应的特征,通过移动小方框来实现对于整个大图像的特征提取
(输入数据矩阵与权重参数矩阵逐位置取内积,得到新的矩阵,会得到特征图,会变小)
图像通道(比如RGB)会将三个通道分别做特征提取,然后整合起来就是整体的特征,不同通道的参数矩阵不同,图像和参数矩阵的第三位数字要一样
偏置项(Bias)如果存在的话使得整体计算后的特征值偏移
使用不同的参数矩阵得到不同的特征图,可以堆叠在一起得到更加丰富的特征
对于每一次的卷积,核必须相同,但不同的卷积之间的核可以不同
h*w*c(长,宽,深度(特征图个数))
很显然一次卷积得到的结果是不够好的,需要不断地在已经提取出的特征上继续卷积提取
卷积层涉及的参数:
- 滑动窗口的步长。步长小得到的特征图大,提取到的特征丰富,效率比较低
- 卷积核尺寸。即选择区域的大小,越小提取的越细致
- 边缘填充。使得滑动窗口的移动能够扫描到全部的特征(边缘的)。弥补边界点在原始情况下与中心点的地位不对等
- 卷积核的个数。最终要得到的特征图的个数
实际计算中的公式:
W,H表示输入的宽度、长度,W‘、H’表示输出特征图的宽度、长度;F表示卷积核长和宽的大小,S表示滑动窗口的步长,P表示边界填充
经过卷积操作之后矩阵的大小也有可能不变
卷积参数共享:用同样的卷积核来对不同的区域来处理(框扫描)
池化层
将卷积层中得到的很多特征进行压缩(下采样)
e.g. 最大池化 MAX_POOLING,每个位置中拿出最大的值(筛选)
为什么选大的?因为权重参数矩阵,得到的大的认为他比较重要
目前使用最大池化的比较多(22年,之后未知)
ReLU修正线性单元 = max(x,0)
作用:
- 引入非线性,使得网络能够学习和逼近复杂的非线性函数关系。否则只能进行线性变换
- 计算简单
- 避免梯度消失,与Sigmoid等相比,其在正值区域的梯度是常数1,有效缓解反向传播中的梯度消失问题
缺点:Dead ReLU:对于一些神经元,当输入一直为负值时,ReLU的输出始终为0,这个神经元会永久“死亡”,在训练过程中可能无法恢复
全连接层
全连接层(Fully Connected Layer, FC Layer)
计算是矩阵相乘加偏置
其中:
- x是输入,通常是从前一层传递过来的特征向量。
- W是权重矩阵,表示连接权重。
- b是偏置向量。
- y是输出结果,表示当前层的输出向量。
无论之前是卷积层的输出还是ReLu、池化层的输出,全连接层基本只接受一个输入,并输出一个N维向量,其中N是必须从中选择的分类数。
简而言之,全连接层的作用就是观察前一层的输出(一般是包含高层次特征的activation map),然后确定哪些特征与特定类最相关。以人类类比,如果要辨别图像里的是不是狗,我们会注意里面有没有爪子、四肢;如果要辨别是不是鸟,翅膀和喙就特别重要。全连接层会赋予这些相关性更强的特征更多权重,以便当我们计算权重和上一层之间的乘积时,我们可以得到图像属于不同类别的正确概率。
训练
通过反向传播来实现:filter直到自己要找哪些低层次的特征,全连接层来筛选activation map,计算机自动选取filter中的权重
反向传播由4个不同步骤组成:正向传递、损失函数、反向传递和权重更新。
正向传递时,我们输入一张图像,一个尺寸为32×32×3的像素值数组,然后将其传递给整个网络。在我们的第一个训练示例中,由于所有权重/filter值都是随机初始化的,因此输出结果可能类似[.1 .1 .1 .1 .1 .1 .1 .1 .1],它在分类上“不偏不倚”。
损失函数开启了“反向”的第一步。当网络现有权重无法提取低层次特征时,这就意味着它没法得出合理的分类结果。但训练数据,包含图像和标签两种信息,这就意味着损失函数能计算预测标签和真实标签的差异,差异越小,CNN预测正确的可能性就越大,性能也越好。损失函数有很多,其中最常用的MSE(均方误差):

既然目的是把损失值降到最低,那这就成了一个优化问题——找出对输出影响最大的输入,也就是dL / dW,其中W是特定层的权重。

通过网络进行反向传递,确定哪些权重对损失影响最大,并找到调整它们的方法从而减少损失。一旦我们计算出这个导数,我们就会进入最后一步,权重更新。

上一篇
简单神经网络
下一篇
千山有雪,明月泠绛
Loading...