目录
卷积
对图像进行卷积操作
卷积神经网络
卷积(Filtering)
池化(下采样)(Pooling)
修正线性单元(Rectified Linear Units)(ReLus激活函数)
全连接层(每个神经元都和之前的神经元相联系)
历史
意义:一个系统,f函数为不稳定输入,g函数为稳定输出,用卷积求系统存量
理解:过去对现在的影响。g函数规定如何影响。在某时刻t发生了一件事,而这件事的产生会受到之前发生事情的影响,比如x时刻发生的事情会对t时刻产生影响,具体如何影响要看x时刻到t时刻经历的时间,规定影响随着时间而变化,即g函数。影响力的变化也有可能不是随着时间而变化而是随着距离而变化,那么横坐标就不是时间而是位置(或距离)
电脑里的图片都可以看做是一个一个的像素点组成的,也就是一个大的表格,表格里就是像素点的具体信息(比如灰度值、RGB值等)。
用一个3*3的点阵(这个3*3的点阵被称为卷积核)扣在图像的点阵上,对应的两个格子相乘,3*3的点阵应该得到9个数,然后把9个相乘的结果相加,得到一个新的像素值。接下来用卷积核把整个图像都扫一遍,就得到卷积操作后的新图像了。当然,这样得到的图像少了一圈,只需要在图像处理之前给图像外面加一圈都是0的像素值,最后就能得到一个同样大小的图片了。(补0 (Zero Padding )还有助于提取图像边缘特征)
这里,图像是函数f(不稳定,变化的),卷积核是函数g(稳定,不变的)
理解:图像的卷积操作,即看很多像素点对某一个像素点是如何产生影响的。卷积核点阵里的数字不一样,处理出的图像效果也不一样。
例子:如下所示的卷积核(找了一个像素点,把它周围的像素点全部加起来然后求平均),对图像进行卷积操作,效果就会让图像更平滑、更朦胧,所以称之为平滑卷积操作。平滑操作指的是让周围的像素点和自己相差不大。
垂直卷积操作、水平卷积操作:
卷积核就是规定了周围的像素点是如何对当前像素点产生影响的。我们看的3*3的卷积核,其实就是规定周围一圈像素点对当前像素点如何产生影响,那是不是会有5*5的,7*7的作为2圈像素点,3圈像素点对当前像素点如何产生影响?(从理论数学上看,从无限远处对当前像素点如何产生影响都可以被规定好)
理解:
表示中间这个点以及它周围一圈的点对新的像素点是如何影响的,这里的对应还是有点拧巴,如果将g函数旋转180°,对应就比较清晰了,每一个点都是一个直接的对应。
所以说
卷积神经网络CNN可以看做封装的黑箱,输入为二维像素阵列,输出为识别结果即图片是X、O,但是重点不是识别这种规整的情况,而是识别不规整的情况。我们发现下图整体对比是不相同的,但是局部是有相同的地方的。
所以卷积神经网络识别图像中把图片输入全连接网络之前,要对原始数据进行预处理(挑选局部特征),让每个像素点保存的不再是和图片特征关系不大的RGB数值,而是一个它和周围像素点的相对关系的特征值,这样神经网络就能进行它擅长的事情了,直接对特征进行各种组合,然后进行判断。其中,挑选局部特征就是对图像进行卷积操作。
(如果挑选的卷积核合适,就可以对图片进行过滤,把某些特征保存下来,把其他特征过滤掉。这样的卷积核也称为过滤器。相乘再相加还可以看做是自己对周围像素点的一个试探,卷积核就是试探的模板,不想考虑某个位置可以设置为0,想重点考虑某个位置可以这个位置的数值设置高一点,从而把周围有用的特征保留下来)
上右图中三个局部特征(绿、橙、紫框)作为卷积核(或者称为特征提取器),对原图进行卷积操作。
用第一个局部特征对原图进行卷积操作(完全一样,值为1,不一样程度越大,得出的数字越小)
最后得到下图,可以看出提取出的新图(新图称为feature map)内容大致和卷积核(特征提取器)类似,保持“㇏”形状,表明原图中包含“㇏”的特征,且被卷积核提取到新图中(如果用圆圈型卷积核进行卷积出来就是一堆乱码,表明原图不包含圆圈的特征)
用不同的卷积核对原图进行卷积就能提取出不同的特征
将得到的feature map缩小,减少数据量,但也意味着牺牲一部分信息(可接受范围内)
池化分为两种:max pooling、average pooling。第一种是将框内最大值作为新值,第二种是将框内数值取平均值作为新值。第一种应用更加广泛,因为它在保留原图特征的同时,把图片的尺寸降下来,把计算量降下来。如下右图(原图为“㇏”)
原图提取出来的三个特征进行池化
Normalization:把图中负数变成0(好处:1、矩阵运算里,0和其他做运算比较好算 2、在梯度下降中可以看到比其他激活函数好很多)
卷积、ReLu(抹零)、池化可以多次操作
把得到的二维矩阵全都排成一列,各自乘以各自的权重,加起来,就能判断出是“X”的概率是多少。
上图算出是“X”的概率为0.92,是"O”的概率为0.51,故判断为“X”
权重:ImageNet网站训练而得
反向传播(backpropagation):神经网络得出一个结果,把这个结果和真实结果进行比较 ,进行误差计算,称之为损失函数。目标就是把损失函数降到最低(损失函数求导,找最小值),不改卷积核的参数,修改全连接每一层的参数,修改每一个神经元的权重来进行微调,最后使得损失函数最小。它是一层一层把误差反馈回去,所以称之为反向传播算法。经过不停地训练,用大数据喂,最后它自己就学会了采用哪些卷积核,全连接网络中每一个神经元的权重是多少,称之为机器学习。
梯度下降(gradient descent):损失函数求导,求最小值
超参(hyperparameters):设置初始值,预先设置好卷积核数目、尺寸,用随机生成的数值放在卷积核里,预先设置好池化的大小、步长,全连接神经元的数目。先把大的框架设置好,通过对神经网络喂大量数据,在这个框架中对参数进行优化,找到损失函数的最小值,把所有的参数都调到最佳。
卷积神经网络可以处理“类似”图像的数据,不只二维,还有3D,比如视频(随时间变化,一帧一帧的),声音(随时间变化,用颜色表示频谱中的强度变化),文本(句子,词在词典中的位置)
1998年,LeNet-5(Yann LeCun提出,扬∙乐昆,法国人),当初被设计用来识别手写数字,是最早的CNN网络之一,被后续学者奉为经典。
ImageNet(李飞飞提出)每年都会办一个图像分类比赛,之前用传统方法错误率一直很高,2012年AlexNet(Hinton和他的学生Alex提出)夺冠,卷积神经网络(cnn)横空出世, 错误率降下来很多;2014年GoogleNet(Google提出)冠军,VGG(牛津大学提出)当年亚军,VGG模型在迁移学习任务中的表现要优于GoogleNet,2015年ResNet(微软提出,何凯明)(深度残差网络,152层卷积神经网络,残差:不是一层层连贯的,可以抄近道到下下层,衍生出ResNet-50等旁支)