热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

卷积神经网络(CNN)的原理和我对其的个人理解

文章目录

  • 一、卷积运算
    • 对比数学中的卷积运算
  • 二、**函数
  • 三、池化层
  • 四、输入输出通道
  • 五、参考文章

卷积神经网络,也就是convolutional neural networks (简称CNN)
卷积神经网络的主要核心结构:输入->卷积+**函数->池化->输出

一、卷积运算

卷积神经网络(CNN)原理以及个人理解
盗图1

中间黑色大图就是我们的输入数据。蓝色框就是我们的卷积核所在的位置
左上角为卷积核(大小是3*3)。将卷积核这个“小纸片”,盖到原图的大纸片上,卷积核与原图对应位置的数据作乘法,并写到相应的地方,作为运算的结果。

卷积神经网络(CNN)原理以及个人理解盗图2

整个蓝色框计算结束后,我们会得到一个充满数据的新框框(上分白色小正方形)。然后我们需要对其求**均值**,让这个均值作为这片区域特征的一个代表。

均值只是一种处理方式,也可以使用求和作为区域特征的代表。一样可以实现核心思想:框内每个小格的值越大,和卷积核的特征越符合

新的理解:可以把卷积核当做一个滤波器,传入图像为信号。越符合滤波器(卷积核)的信号(图像),通过卷积核后保留的部分越多(乘积越大)。

卷积神经网络(CNN)原理以及个人理解盗图3
卷积神经网络(CNN)原理以及个人理解盗图4

盖上卷积核,计算对应位置乘积,然后求均值。接下来按照给定的stride(步长)进行卷积核的移动,直到把整个输入都完全覆盖。stride=1,向平移1格
将整个图计算一遍之后,会得到一个特征图(feature map)。特征图是输入通过卷积核运算后,反映特征的所在位置的图。(特征图size必定比输入size小,除非kernel_size = 1)

卷积神经网络(CNN)原理以及个人理解盗图5

在取值(-1,1)的灰度图中,越接近1,表示这片区域的特征越匹特配。越接近-1,和特征的反面越匹配。越接近0,说明和特征的匹配不明显。

卷积神经网络(CNN)原理以及个人理解盗图6 不同的卷积核(滤波器)运算后的结果

对比数学中的卷积运算

卷积的数学公式:
连续:
(fg)(n)=+f(τ)g(nτ)dτ(f*g)(n)=\int ^{+\infty}_ {-\infty} f(\tau) g(n-\tau){\rm d}\tau
离散:
(fg)(n)=+f(τ)g(nτ)dτ(f*g)(n)=\sum ^{+\infty}_ {-\infty} f(\tau) g(n-\tau){\rm d}\tau

PS:关于卷积有意思的解释。卷积的数学意义在于加权叠加。怎么理解呢?
另外一个关于卷积的有意思的解释
看了好多关于卷积的答案,看到这个例子才彻底地理解了这个过程~
关于卷积的一个血腥的讲解
比如说你的老板命令你干活,你却到楼下打台球去了,后来被老板发现,他非常气愤,扇了你一巴掌(注意,这就是输入信号,脉冲),于是你的脸上会渐渐地(贱贱地)鼓起来一个包,你的脸就是一个系统,而鼓起来的包就是你的脸对巴掌的响应,好,这样就和信号系统建立起来意义对应的联系。下面还需要一些假设来保证论证的严谨:假定你的脸是线性时不变系统,也就是说,无论什么时候老板打你一巴掌,打在你脸的同一位置(这似乎要求你的脸足够光滑,如果你说你长了很多青春痘,甚至整个脸皮处处连续处处不可导,那难度太大了,我就无话可说了哈哈),你的脸上总是会在相同的时间间隔内鼓起来一个相同高度的包来,并且假定以鼓起来的包的大小作为系统输出。好了,那么,下面可以进入核心内容——卷积了!
如果你每天都到地下去打台球,那么老板每天都要扇你一巴掌,不过当老板打你一巴掌后,你5分钟就消肿了,所以时间长了,你甚至就适应这种生活了……如果有一天,老板忍无可忍,以0.5秒的间隔开始不间断的扇你的过程,这样问题就来了,第一次扇你鼓起来的包还没消肿,第二个巴掌就来了,你脸上的包就可能鼓起来两倍高,老板不断扇你,脉冲不断作用在你脸上,效果不断叠加了,这样这些效果就可以求和了,结果就是你脸上的包的高度随时间变化的一个函数了(注意理解);如果老板再狠一点,频率越来越高,以至于你都辨别不清时间间隔了,那么,求和就变成积分了。可以这样理解,在这个过程中的某一固定的时刻,你的脸上的包的鼓起程度和什么有关呢?和之前每次打你都有关!但是各次的贡献是不一样的,越早打的巴掌,贡献越小,所以这就是说,某一时刻的输出是之前很多次输入乘以各自的衰减系数之后的叠加而形成某一点的输出,然后再把不同时刻的输出点放在一起,形成一个函数,这就是卷积,卷积之后的函数就是你脸上的包的大小随时间变化的函数。本来你的包几分钟就可以消肿,可是如果连续打,几个小时也消不了肿了,这难道不是一种平滑过程么?反映到剑桥大学的公式上,f(a)就是第a个巴掌,g(x-a)就是第a个巴掌在x时刻的作用程度,乘起来再叠加就ok了,大家说是不是这个道理呢?我想这个例子已经非常形象了,你对卷积有了更加具体深刻的了解了吗?

数学卷积公式和卷积神经网络相关性体现
卷积神经网络中的卷积运算,和数学当中的卷积也是有联系的。卷积之所以能提取特征,是因为输入信号和滤波器(卷积核)的相关性,反映到了输出当中。我想要的特征,反映在卷积核上,输入图片的特征和卷积核越是相似,输出越大(被过滤的越少)

二、**函数

卷积神经网络(CNN)原理以及个人理解盗图7

**函数的目的是进一步的筛选数据特征。举例常见的Relu函数:当x<=0,y=0;x>0,y=x。对于小于0的部分,经过**函数后,被抹除。而大于0的部分,特征的情况得以保留。

三、池化层

池化的目的是为了进一步的减少无关信息,突出有效信息的部分。

以max_pool为例:
max_pool将区域内的最大值进行输出。然后根据设定的ride(步长)进行移动。卷积神经网络(CNN)原理以及个人理解盗图8
卷积神经网络(CNN)原理以及个人理解盗图9

四、输入输出通道

卷积神经网络(CNN)原理以及个人理解盗图10

如图,28*28的原始输入,分成3个通道输出,进入卷积层运算。每个卷积的通道之间互相独立(权重、偏移不共享)。单个卷积通道的权重和偏移量(bias)共享。

输入的通道数取决于上一层。例如原始输入为彩色图时,可以三通道(RGB)作为卷积层的输入通道。若为灰度图,可以一通道输入。

五、参考文章

1.https://zhuanlan.zhihu.com/p/27908027
2.https://blog.csdn.net/bitcarmanlee/article/details/54729807


推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入剖析 DEX 赛道:从 60 大头部项目看五大趋势
    本文通过分析 60 大头部去中心化交易平台(DEX),揭示了当前 DEX 赛道的五大发展趋势,包括市场集中度、跨链协议、AMM+NFT 结合、新公链崛起以及稳定币和衍生品交易的增长潜力。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 基因组浏览器中的Wig格式解析
    本文详细介绍了Wiggle(Wig)格式及其在基因组浏览器中的应用,涵盖variableStep和fixedStep两种主要格式的特点、适用场景及具体使用方法。同时,还提供了关于数据值和自定义参数的补充信息。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
author-avatar
UIleader
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有