[机器学习入门] 笔记1 卷积神经网络 CNN 的相关概念理解

注:本文是自己在学习过程中,对于概念理解的搜寻过程,便于自己的回顾学习,同时点赞收藏了相关博客、视频等。

视频学习B站UP主@王木头学科学
从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变_哔哩哔哩_bilibili在自学卷积神经网络的时候,想彻底搞明白卷积的意义。想从卷积的定义出发,一步一步地理解,结果没有想到这个想法给自己挖了坑。因为卷积从最初的定义,到卷积神经网络,它的含义有过3次变化。对最初含义了解越多,越容易进入理解的死胡同。20多分钟,让你避免和我走同样的弯路, 视频播放量 204136、弹幕量 1816、点赞数 17295、投硬币枚数 19850、收藏人数 16189、转发人数 2613, 视频作者 王木头学科学, 作者简介 学习永在进行时,累了那就歇一歇,相关视频:【小动画】彻底理解卷积【超形象】卷的由来,小元老师,卷积究竟卷了啥?——17分钟了解什么是卷积,大白话讲解卷积神经网络工作原理,卷积神经网络的底层是傅里叶变换,傅里叶变换的底层是希尔伯特空间坐标变换,5G,华为,土耳其——我花了两个月,搞懂了5G背后的秘密,[双语字幕]吴恩达深度学习deeplearning.ai,【吴恩达-2022-中英字幕】令人醍醐灌顶的机器学习(我愿称之为人工智能AI教程天花板),“拉格朗日对偶问题”如何直观理解?“KKT条件” “Slater条件” “凸优化”打包理解,从不懂到会用!PID从理论到实践~,快速傅里叶变换(FFT)——有史以来最巧妙的算法?https://www.bilibili.com/video/BV1VV411478EYoutube上迄今为止最好的卷积神经网络入门教程https://www.bilibili.com/video/av16175135

 1.卷积的认识

如何通俗易懂地解释卷积https://www.zhihu.com/question/22298352这个是知乎上很多人赞同的回答,但是看了这么多,令我印象最为深刻的是B站的一个评论:

首先卷积的公式是这样的:

 评论是这样的:

        几乎所有卷积的解释中最失败的就是将g和f两个函数放到同一个维度去考虑,说到底就是还没有理解卷积的物理意义。

        f  可以理解为描述个体状态随时间变化的函数,不涉及空间的影响;

        g 可以理解为描述空间对个体状态某一个时间点的影响的函数,不随时间发生变化;

        这两个函数从物理性质上看,是正交的,不会相互影响,但从观察者的角度看到的现象是受空间和时间共同影响的,即卷积的结果。

        

        还是那个学生在教室里说话被老师听到的例子,学生在哪里都能说相同的话,不管是操场还是教室,不受空间影响;教室里的各种反射体,即对声音的影响,不受时间影响(不考虑腐蚀、老化之类的影响);老师听到的声音是受到学生讲的话和教室里的反射共同影响的,即时间信号和空间系统卷积得到。看到的人能不能看懂我管不了了,随缘吧。

         其实卷积有个更符合直觉的解释:如果f是一个物体的本征规律g是一个外部作用,当g不是“一锤子买卖”,而是沿时间持续的时候,某个时刻物体的状态,取决于他在此前收到的所有外部作用留下的“痕迹”的叠加。要把这个叠加的值算出来,方法就是卷积运算。

        理解卷积的核心是,要理解为什么g函数要“倒过来”参与运算。这是因为g函数是一个随时间变化的函数,当你掐表观察的时候,越“新”的时刻,也就是越接近你最后观察的时刻,对应的g函数的t取值不是越接近你掐表看到的那个t,而是越接近0。闭上眼睛思考一下,就懂了。

维基百科https://zh.m.wikipedia.org/zh-hans/%E5%8D%B7%E7%A7%AF维基百科写的也蛮好的。

不同的领域,会拿不同的例子进行类比。

在图像处理里,我暂且将卷积理解为

一个卷积核就是规定了周围像素点对当前像素点的产生的影响(类似于g函数,不过与时间无关)。
在卷积神经网络的图像预处理中,一个过滤器的卷积核就是规定了,一个像素点会对周围像素点的试探,筛选图像的特征

如果要硬套公式的话:

在这里插入图片描述

 

 将g函数旋转180度,得到卷积核。

在这里插入图片描述

2、 卷积核(过滤器)与 卷积运算 

参考博文:[CNN]Youtube上迄今为止最好的卷积神经网络入门教程——笔记_Kenn7的博客-CSDN博客_卷积神经网络入门CNN NotebookKenn 2018/11/1最近在学CNN,大学的同学给我推了一个视频,感觉写得简单易懂,所以记了篇笔记。笔记差不多到视频17分钟左右,但基本把CNN的原理、结构都讲了一遍,而且个人感觉很好理解。笔记用很low的英文写的(也是为了四六级?)。我在本篇blog中加入了一些代码,帮助理解。如果我的理解有差错,请大家指出,谢谢。同时我还有超多不理解的地...https://blog.csdn.net/kane7csdn/article/details/83617086

大白话讲解卷积神经网络工作原理 - 知乎本文介绍了计算机视觉常用工具:卷积神经网络。用大白话讲解了其应用领域、卷积、池化(下采样)、全连接、梯度下降、反向传播算法。并用三维可视化工具展示了手写字体识别的卷积神经网络案例,最后介绍了几个经典…https://zhuanlan.zhihu.com/p/49184702卷积运算:识别图片中指定特征

用卷积核在原图上滑动,进行卷积运算,得到特征图feature map。

卷积的本质:将原图中符合卷积核特征的特征提取出来,展示在feature map里面。

下面三个矩阵就是从X图像里提取的卷积核。

 

 

 

Filtering: The math behind the match 过滤器(卷积核)---卷积过程,下面有动图

1.Line up the feature and the image patch
2.Multiply each image pixel by the corresponding feature pixel.(将每个图像像素与对应的特征像素相乘)
3.Add them up 
4.Divide by the total number of pixels in the feature

总体的意思就是用一个filter去和每个image patch相运算,如果这个filter的特征与image patch的特征相似,则计算出的数值高(接近1)。

如果原图是X,卷积核是X,那么卷积核在原图上卷积运算之后生成的feature map也是X。

如果原图是O,卷积核是O,那么卷积核在原图上卷积运算之后生成的feature map也是O。

如果原图是O,卷积核是X,那么卷积核在原图上卷积运算之后生成的feature map就是乱码。

权值共享:卷积核扫过整张图片的过程中,卷积核参数不变。

 下图的动画中,绿色表示原图像素值,红色数字表示卷积核中的参数,黄色表示卷积核在原图上滑动。右图表示卷积运算之后生成的feature map。

下图展示了RGB三个通道图片的卷积运算过程,共有两组卷积核,每组卷积核都有三个filter分别与原图的RGB三个通道进行卷积。每组卷积核各自生成一个feature map。 

 原图最外圈补0:zero padding,便于提取图像边缘的特征。

3、卷积层 Convolution layer

Convolution layer: filtering everywhere in a picture

那么上面filter做的数学运算呢,其实就是convolution卷积过程。

This following picture demonstrate that how and why does the depth of the fed picture change.

For example in following picture, if we process a picture with three filters, we will get three new pictures.

 

如果你用三个卷积核filter,那么原本的一张图片,在进行完卷积运算后,将会变成三张图片。

也就是说,图片的depth变高了。

同时可以看出,虽然depth变大了(1-->3),但width和height减小了(9*9-->7*7),这与卷积核的数量和尺寸有关。 

4、池化(下采样):保留特征的同时压缩数据量

池化(Pooling)也叫做下采样(subsampling),用一个像素代替原图上邻近的若干像素,在保留feature map特征的同时压缩其大小。

池化的作用:

  • 防止数据爆炸,节省运算量和运算时间。
  • 用大而化之的方法防止过拟合、过学习。防止培养出高分低能,在考场(训练集)称霸但在社会上(测试集)混不下去的人工智障。

可以用这些像素的最大值作为代表,也可以用平均值作为代表。

5、Normalization 标准化

CNN 入门讲解:什么是标准化?_bobo_jiang的博客-CSDN博客_cnn标准化此文章首发于卷积神经网络(CNN)入门讲解​zhuanlan.zhihu.com内容如有修改,不在此处修改,请关注知乎:蒋竺波----------------------------分割线------------------------------------------------------------大家在看一些机器学习或者深度学习的文章时,在数据预处理的时候,会不会经常看到一个步骤:(输入...https://blog.csdn.net/bobo_jiang/article/details/79954417?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166616437116782248512782%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166616437116782248512782&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-79954417-null-null.142%5Ev59%5Epc_search_tree,201%5Ev3%5Econtrol_2&utm_term=%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E6%A0%87%E5%87%86%E5%8C%96&spm=1018.2226.3001.4187

keep the math from breaking by tweaking each of the values just a bit.
Change everything negative to zero
通过稍微调整每个值来防止数学被破坏。
将所有负数都更改为零

视频中提到的方法是relu,就是把正数保持不变,负数变为零。至于为什么用relu函数来这样处理,可以参考以下链接,神经网络中的激活函数具体是什么?为什么ReLu要好过于tanh和sigmoid function?https://www.sohu.com/a/214965417_100008678

主要是1)解决梯度消失问题 2)为了快

卷积计算中的一个基本流程为:卷积,ReLU(修正线性单元 Rectified Linear Units, 线性修正单元激活函数),池化(下采样)

 6、Layers get stacked(层的堆叠)

 你可以反复这样的操作 卷积 标准化 池化。

 7. Fully connected layer (全连接层)

参考文章:

CNN 入门讲解:什么是全连接层(Fully Connected Layer)? - 知乎新年第一更 祝大家新年快乐万事如意 这个时候还愿意点进来,新的一年肯定要起飞了 这情人节和新年连着过啊 这对情侣意味着什么,意味着要带情人去见家长了 当然对一些情侣意味着,情人节过不好,估计年也过不好 对…https://zhuanlan.zhihu.com/p/33841176

以上图为例,我们仔细看上图全连接层的结构,全连接层中的每一层是由许多神经元组成的(1x 4096)的平铺结构,上图不明显,我们看下图 

全连接层的作用是什么:

把分布式特征representation映射到样本标记空间

即   把特征representation整合到一起,输出为一个值

这样做,有一个什么好处?就是大大减少特征位置对分类带来的影响

例子:

从上图我们可以看出,猫在不同的位置,输出的feature值相同,但是位置不同

对于电脑来说,特征值相同,但是特征值位置不同,那分类结果也可能不一样

因为空间结构特性被忽略了,所以全连接层不适合用于在方位上找Pattern的任务,比如segmentation

我们突然发现全连接层有两层1x4096fully connected layer平铺结构(有些网络结构有一层的,或者二层以上的)

但是大部分是两层以上:

我们用许多神经元去拟合数据分布

但是只用一层fully connected layer 有时候没法解决非线性问题

而如果有两层或以上fully connected layer就可以很好地解决非线性问题了

全连接层的作用主要就是实现分类(Classification)。

假设这个神经网络模型已经训练完了

全连接层已经知道

当我们得到以上特征,我就可以判断这个东东是猫了

红色的神经元表示这个特征被找到了(激活了)

同一层的其他神经元,要么猫的特征不明显,要么没找到

当我们把这些找到的特征组合在一起,发现最符合要求的是猫

ok,我认为这是猫了

那我们现在往前走一层

那们现在要对子特征分类,也就是对猫头,猫尾巴,猫腿等进行分类

比如我们现在要把猫头找出来

猫头有这么些个特征

于是我们下一步的任务

就是把猫头的这么些子特征找到,比如眼睛啊,耳朵啊

道理和区别猫一样

当我们找到这些特征,神经元就被激活了(上图红色圆圈)

这细节特征又是怎么来的?

就是从前面的卷积层,下采样层来的

全连接层的组成如下:
 

那么全连接层对模型影响参数就是三个:

  1. 全接解层的总层数(长度)
  2. 单个全连接层的神经元数(宽度)
  3. 激活函数

那么手写卷积神经网络识别手写字体步骤可以如下:
 

1、把手写字体图片转换成像素矩阵

2、对像素矩阵进行第一层卷积运算,生成六个feature map

3、对每个feature map进行下采样(也叫做池化),在保留feature map特征的同时缩小数据量。生成六个小图,这六个小图和上一层各自的feature map长得很像,但尺寸缩小了。

4、对六个小图进行第二层卷积运算,生成更多feature map

5、对第二次卷积生成的feature map进行下采样

6、第一层全连接层

7、第二层全连接层

8、高斯连接层,输出结果

猜你喜欢

转载自blog.csdn.net/qq_51533157/article/details/127407350
今日推荐