戳一戳!和我一起走进深度学习的世界
导读
深度学习发展已久,我们经常听到别人说神经网络,如果做计算机视觉,我们也会经常听到别人说卷积神经网络。
今天要分享这篇文章带我们一起了解什么是卷积,什么是卷积神经网络,卷积神经网络都有哪些组成部分。让我们走进这篇文章,一起来了解一下吧!
如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。
本文目录
1 说在前面的话
2 卷积
A 啥是卷积
B 卷积的离散形式
C 卷积的连续形式
3 卷积神经网络
A 啥是卷积神经网络
B 卷积神经网络的结构
C 卷积神经网络的流程
4 敲黑板
1 说在前面的话
A 我为什么要写这一系列博客
我一直在想,我该从哪里起步写?我该传递什么样的东西,给我的每一位读者?最近,有很多事情发生,每一个中华儿女都感慨祖国的伟大,对啊!传承了几千年的文化,孕育出这么伟大的民族,骄傲地站在世界的东方!
那我想,
就从对对祖国的这份爱开始说起吧!
就从对中华民族的爱开始说起吧!
我断断续续接触计算机视觉领域,已经三年了,如果放在研究生三年,一直来做计算机视觉,我觉得,我最起码能做出一小点点的成绩出来。可惜,没有,总是放下又拿起,拿起又放下,可能就只能当个兴趣,慢慢自己学了吧!
这三年,偶尔看看机器学习,我曾经觉得机器学习太美了,这个唯美的名称让我魂牵梦绕,不能自拔,直到考研失利,才选择妥协,走向现实。了解过深度学习,也蛮喜欢深度学习的,了解过一些基本概念,但是一直没有系统学习过。
因为疫情原因,我把opencv的系列基础博客更新完毕,我会把自己的理解写进去,很多人看了我的文章,叫我一声大佬,但是对“大佬”这两个字,我觉得,这可能是我终其一生追求的目标,从不敢妄称自己是大佬,相反,在这个领域,我觉得,我还是个菜鸡,以后,我还会以菜鸡的身份,坚持努力下去!
写卷积神经网络系列文章,算是重拾,也算是新学。有很多概念,我是不懂的,甚至我可能都说不上来一些概念,可能别人一说,我会想起,啊,这个概念,我听到过,或者,啊,这个概念,我知道是啥!
所以,在写这一系列博客的时候,我也在学,我的读者,每一个你,你们就是我的老师。
我爱机器学习吗?我爱深度学习吗?好像并不是那么爱,我会因为现实而妥协。
其实,我真正爱的是数学!
我真正爱的是数学!
爱的是数学!
我也曾迷茫过,但是我从不曾质疑过数学在我心中的地位!
数学带给我一切,我坚信我现在拥有的,都是数学带给我的!当然,我也要感谢我的父母,老师和每一个在数学领域跟我探讨过的朋友们。是你们带给我数学!从而让我拥有这一切。
写这一系列博客,第一是为了一群人,我上面提到的技术群,里面有一群为了理想而坚持拼搏奋斗的人。第二,是为了自己心中的梦,不管未来我选择什么,至少作为数学应用的一个领域,机器学习和深度学习,我深爱过。
如果非要说真正的内心深处最大的那份冲动,我觉得,我想做一个布道者,我想把我心中对数学的那份坚持和爱,传递给每一个人。
因为我坚信,数学可以让一个人变得更好,能让中国的科技事业发展的更好,能让我最深爱的中华民族变得更好,能让我最深爱的中国变得更好!
这是我的初心,是我内心永远炙热的渴望!我也希望,通过自己的努力,为中华民族的发展贡献自己的力量,是我们每一个中华儿女的初心。
B 为什么要写卷积神经网络
不得不说,机器学习深度学习发展太快了,现在很少有人在说,我研究深度学习,我研究机器学习,真正的大佬,研究的是一个小的点。卷积神经网络,就是其中的一个比较大的小点。
为什么卷积神经网络会成为“被选中的孩子”?一方面卷积神经网络我了解一些,对于一些基本的卷积神经网络,相对来说还是比较熟悉的,那写的时候,就能少些错误,少些误导。另一方面,因为我群里的孩子们,他们很多都是做视觉的,会经常接触到卷积神经网络。那就借着这个机会,我们一起交流吧!
C 这一系列文章都有什么
我想了很久,我该从哪里写起?该写哪些东西?该如何结束?
我想到了开始,可能我猜不到那结尾,但是我要说,在未来的日子里,我至少要跟大家一起来分享:
什么是卷积神经网络
卷积神经网络的发展历程
几类卷积神经网络的原理及代码实现
什么是卷积神经网络
附:卷积神经网络相关概念等
可能你会问了,你刚开始不就讲了什么是卷积神经网络了吗?为什么还要再在最后再分享一次呢?
我想说,可能你看我第一篇文章的时候,你并没有对卷积神经网络有很深刻的认识,当我提到卷积神经网络的时候,你可能认识也比较浅。当我们真的把前面所有的都说完了,那我们再来一起探讨一下卷积神经网络,我想我们就会有更加深刻的认识了。
那么,让我们现在就开始吧!
2 卷积
要说什么是卷积神经网络,我觉得,得从什么是卷积说起,得给大家说一说卷积的概念,卷积的原理,然后我们再来说卷积神经网络。
A 啥是卷积
我们经常说卷积,那啥是卷积呢?
卷积本身是一个数学概念,表达的是两个函数生成第三个函数的一种运算。卷积的定义如下:
通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与 g 经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。
通过定义,我们再来理解一下卷积这个名词。
卷:两个函数的反转和平移,可以理解为两个函数通过运算纠缠到了一起,卷到了一起。把两个函数卷成一个函数。
积:积分(本质就是运算的求和)。
上面的解释是我的个人理解,如果大家有别的意见,欢迎一起交流。
B 卷积的离散形式
了解了卷积,也知道了这两个字表达的含义,我们就能更好地来理解,卷积的数学公式了,我们先来讲卷积的离散形式:
看上面这个公式,我们怎么来理解呢?
我们看两个函数f和g,他们相乘的时候,两个函数的参数的和是不变的,都是n,我们考虑一下,在实际应用中,什么东西是前后两次操作,要求和一致的呢?
举个简单的例子就是,掷骰子。连续掷两次,这个时候n的取值可能为:2到12。i表示第一个骰子的点数,f(i) 表示第一个骰子投掷i的概率,n-i表示第二个骰子的点数,g(n-i) 表示第二个骰子投掷i的概率,我们举几个例子:
通过这几个例子我们发现,他们卷积之后的结果,就是前后两次投掷的点数和为n的概率。
图像处理中我们经常会对图像做卷积操作,比如我们自定义一个线性滤波,其实就是自定义一个卷积核,然后对图像做卷积操作。
具体的解释,大家可以看下面这篇博客,我也希望大家能先详细看一下卷积的介绍:卷积介绍:
https://blog.csdn.net/shuiyixin/article/details/104438655
C 卷积的连续形式
讲完了离散形式,我们接着来说连续形式,连续形式公式如下:
我们知道,积分的过程就是无穷求和。连续我们一般在概率论汇中会涉及到,跟上面的一样,假设我们有两个相互独立的随机变量,这两个变量的和是x,其中一个变量是t,f表示t的边缘概率密度,g表示另一个变量的边缘概率密度,那x的概率密度就是卷积的连续形式啦。
3 卷积神经网络
讲完了卷积,现在我们开始讲一下卷积神经网络吧!
A 啥是卷积神经网络
卷积神经网络的英文简称,我想大家都耳熟能详,CNN,它的全称我也希望大家能够掌握:
Convolutional Neural Networks
卷积神经网络是一种深度学习模型或类似于人工神经网络的多层感知器,是用于图像处理的一个非常重要的工具,它的提出也几乎是为了图像检测,物体识别等。
为什么卷积神经网络可以做到这样呢?这就是因为卷积的存在,卷积操作让图像的特征更加的明显。
我们用计算机视觉中的示例来简单的理解一下,我们知道,对图像的卷积操作,就是通过一系列的卷积核对图像进行卷积处理,例如我们使用Sobel算子的卷积核,操作完前后的对比图如下:
当然,如果你想详细了解怎么做到的,你可以看这篇博客:Sobel算子与Scharr算子:
https://blog.csdn.net/shuiyixin/article/details/104484635
回归正题,我们发现,经过卷积核的操作,我们可以很好地提取图像中物体的轮廓,我们人区分物体和背景,区分物体和其他物体,就是通过轮廓。除此之外,同一个物体的某些轮廓是类似的。比如一个人的正脸,头稍微偏一点,头发稍微多一点,肤色稍微黑一点,脸稍微胖一点,没有关系,他们求得的轮廓是类似的,只要是符合这个轮廓的,那我们就认为这是一个人。这就是卷积神经网络比较简单的理解方式。
当然,我不打算在这里从真实的案例中详细解释这个概念,我不会去讲一个图像通过每一层得到什么结果去给大家讲解,如果你有疑惑,我希望你能保留,慢慢看我后续的文章,学习到每一个具体的卷积神经网络之后等到最后我们再来学习的时候,我们就会有一个更加深刻的认识。这远比我现在讲给你听,你听得云里雾里好得多。
B 卷积神经网络的结构
我们知道了卷积神经网络的定义,了解了卷积神经网络可以用于图像处理,接下来,我们就要了解一下它的层次结构了。
卷积神经网络主要有五层:
数据输入层 / Input layer
卷积层 / CONV layer
ReLU层 / ReLU layer
池化层 / Pooling layer
全连接层 / FC layer
接下来我们来详细讲解一下每一层:
1.数据输入层
这一层是所有层里面最好理解的,所以在一些文章里,都没有把它算作一层。也有的把这个当做一层,然后把卷积操作之前的所有操作都归到这一层来。比如我们要做的归一化操作,可能我们输入的图像不是都一样大的,也可能我们输入的图像的大小和模型要求的大小是不一样的,所以我们哟啊进行归一化处理。总的来说,我们可能进行如下的操作:
(1)归一化:将图像尺寸归一化到同样的范围,减少不同维度数据取值范围的不同,防止其不同量级的值的差异干扰最终结果。
(2)去均值:每个数据减去均值,相当于把样本中心点变为坐标系中的原点。
(3)PCA:主成分分析法,对数据进行降维操作,通过正交变换将一组可能存在相关性的变量数据转换为一组线性不相关的变量。
(4)白化:对数据各个特征轴上的幅度归一化。
2.卷积层
这一层可以说是卷积神经网络最重要的一层了,为什么这么说呢?因为这一层是CNN这个名字的由来。这步的核心其实就是利用卷积核对图像不断做卷积操作,提取特征。
我们前面讲到,通过卷积操作,可以获得图像的轮廓,提取到图像的特征,假设我们有一个行列都为10的单通道图像,有一个行列为3的卷积核。
这里涉及到一个概念:单通道,图像有单通道灰度图像,图像只有一层,我们也说图像的深度为1,;图像也有三通道彩色图像,图像有BGR三层,分别表示蓝绿红三色,这样的图像的深度是三层的。我们要注意:图像深度是多少,卷积核的深度就是多少。
做完卷积操作的时候,得到的图像如下:
也就是说图像变为了行列为8的图像。当我们使用不同的卷积核的时候,我们就可以得到更多的行列为8的图像,得到的这些图像,都是特征图。也就是说,我们通过不同的卷积核,得到图像的多个特征图。这很重要,因为一张复杂的图像,几个特征,是很难区分的,所有特征的联合,我们才能告诉计算机,这个图像中的某个东西是什么。
如果大家理解了上面的内容,那我们就可以继续理解下面的内容了:
假设,我们有一张行列为n的三通道图像,有一个行列为k的卷积核。我么就能得到一个行列为(n-k+1),深度为1的特征图。(为什么要用n和k,我希望能让大家知道,特征图的尺寸是怎么来的。)当我们有m个卷积核的时候,我们就能得到m个特征图:
这就是卷积层做的操作。
3.ReLU层
花里胡哨的,还搞英文,其实这一层是线性整流层,它有个洋气的英文名字:Rectified Linear Unit。我们取第一个单词的前两个字母和后两个单词的首字母,得到的就是ReLU,所以我们以后不仅要知道ReLU,还要知道它叫线性整流层。
在每个卷积层之后,通常会立即应用一个线性整流层,这一层中涉及到的函数叫线性整流函数,也叫修正线性单元,是神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。线性整流被认为有一定的生物学原理,并且由于在实践中通常有着比其他常用激活函数更好的效果,广泛使用于计算机视觉领域。斜坡函数如下:
斜坡函数的图像如下:
很多人就会问了,为什么要引入这一层呢?
我们看他的名字叫做线性整流,就是说这一层的作用就是把线性的进行整流变成非线性的,这是因为在一些分类中,线性的可能分类效果不是很好,所以引入非线性,提高分类的准确度。
4.池化层
池化层的作用是对图像做压缩,池化操作也叫降采样,对于降采样相关介绍,大家可以看如下的博客:上采样与降采样:
https://blog.csdn.net/shuiyixin/article/details/104415952
池化层最常用的是最大池化(max pooling)和平均池化(mean pooling):
最大池化是将输入的图像划分为若干个矩形窗口,对每个窗口输出最大值。一般每个矩形窗口都是2×2像素的正方形窗口,示例如下:
右边的每个数据都是左边对应颜色数据中的最大值。
平均池化是将输入的图像划分为若干个矩形窗口,对每个窗口输出窗口平均值。一般每个矩形区域都是2×2像素的正方形窗口,示例如下:
右边的每个数据都是左边对应颜色数据中的平均值。
经过池化之后,我们发现图像缩小为原来的四倍,做过图像处理的同学,大家都知道,图像像素大大缩小,参与到运算中的像素就会减少,运算效率就会大大提高。
所以池化层的主要目的就是对图像进行缩放,提高运算效率。
既然可以对图像进行缩放,提升效率,那是不是我可以把矩形区域设计的大一点呢?这样运算效率不就更高了吗?确实是这样,但是池化对图像的尺寸压缩太大,就会导致某些图像特征丢失,影响图像识别的准确度。所以我们的窗口一般都是行列均为2的正方形窗口。
池化层还有一个辅助的目的,就是通过池化操作,去除一些噪点,减少过拟合的情况发生。
5.全连接层
全连接,自然要把所有的都连接起来,一个都不放过。通过我们之前的操作,我们不断地提取特征,当提取足够特征来进行识别的时候,我们就需要把这些特征结合起来,这就是全连接层要做的。
全连接层大家应该能注意到一个问题,就是计算量实在是太大了,所以一般在全连接层之前要使用池化层对图像进行放缩。
C 卷积神经网络的流程
了解完它的结构,我们自然要来了解一下流程,先做哪一步,再做哪一步。
我们复习一下每一层:
输入层,输入图像;
卷积层,提取图像特征;
ReLU层:对图像特征图做整流从而激活图像;
池化层,缩小图像尺寸,降低运算量;
全连接层,将所有特征图得到的特征联合进行识别。
输入层自然是最先的,没有输入,就没有后面什么事了。有了图像,我们自然要对图像做卷积操作,得到多个图像的特征图。然后我们需要激活特征图,优化图像特征,但是一次卷积操作,无法得到复杂图像的特征,难以识别,所以要多次卷积,再激活,所以在输入层之后,有多个卷积层和ReLU层。池化层就穿插在多个卷积层和ReLU层构成的小组中,最后是线性整流层,将得到的特征整合,对图像进行识别。
举个栗子:
4 敲黑板
卷积的概念。
为什么卷积神经网络能够进行图像识别。
卷积神经网络的结构。(重点)
卷积神经网络的流程。
注:敲黑板是对这篇文章重点的简要总结,大家可以在下面评论留言自己的学习笔记,学习感悟。