【深度学习基础】深入理解 卷积与卷积核

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光

 

目录

1. 卷积

1.1 卷积的定义

1.2 卷积的意义 

例子:信号分析

2. 卷积核与卷积

2.1 卷积

2.2 卷积核

2.3 深度学习中的卷积

 3. 总结


1. 卷积

从数学上讲,卷积就是一种运算。

某种运算,能被定义出来,至少有以下特征:

  • 首先是抽象的、符号化的
  • 其次,在生活、科研中,有着广泛的作用

比如加法:

  • a+b ,是抽象的,本身只是一个数学符号
  • 在现实中,有非常多的意义,比如增加、合成、旋转等等

卷积,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分、级数,所以看起来觉得很复杂。

核心思想:

        1、卷积是一种运算

        2、卷积和加法、减法等运算相同,都有其服务的现实意义

1.1 卷积的定义

我们称 (f*g)(n) 为 f,g 的卷积

其连续的定义为:

(f*g)(n)=\int_{-\infty}^\infty f(\tau)g(n-\tau)d\tau

其离散的定义为:

(f*g)(n)=\sum_{\tau=-\infty}^\infty f(\tau)g(n-\tau)

这两个式子有一个共同的特征:

t以及n-t存在,也就是说两者相加永远为n

这就好像把一个毛巾卷起来,变为两部分:一边为t;另一边为n-t

到这里,大家可能就知道这个卷积中的卷是什么意思啦~~~~

拿一个经典例子卷毛巾:

1、卷毛巾就是将毛巾的其中一个角和另一个角连接起来

2、在卷积中就是t和n-t连接起来


1.2 卷积的意义 

那么,在实际应用中我们又为什么需要引入卷积这个计算方式呢?

我来举两个例子大家就明白了!!!

例子:信号分析

如下图所示,输入信号是 f(t) ,是随时间变化的。系统响应函数是 g(t) ,图中的响应函数是随时间指数下降的,它的物理意义是说:如果在 t=0 的时刻有一个输入,那么随着时间的流逝,这个输入将不断衰减。换言之,到了 t=T时刻,原来在 t=0 时刻的输入f(0)的值将衰减为f(0)g(T)。

输入信号:

 系统响应时间:

考虑到信号是连续输入的,也就是说,每个时刻都有新的信号进来,所以,最终输出的是所有之前输入信号的累积效果。如下图所示,在T=10时刻,输出结果跟图中带标记的区域整体有关。其中,f(10)因为是刚输入的,所以其输出结果应该是f(10)g(0),而时刻t=9的输入f(9),只经过了1个时间单位的衰减,所以产生的输出应该是 f(9)g(1),如此类推,即图中虚线所描述的关系。这些对应点相乘然后累加,就是T=10时刻的输出信号值,这个结果也是f和g两个函数在T=10时刻的卷积值。

​​显然,上面的对应关系看上去比较难看,是拧着的,所以,我们把g函数对折一下,变成了g(-t),这样就好看一些了。看到了吗?这就是为什么卷积要“卷”,要翻转的原因,这是从它的物理意义中给出的。 

​​上图虽然没有拧着,已经顺过来了,但看上去还有点错位,所以再进一步平移T个单位,就是下图。它就是本文开始给出的卷积定义的一种图形的表述:

​​所以,在以上计算T时刻的卷积时,要维持的约束就是: t+ (T-t) = T 。

本质上就是在信号处理中,在处理随时间递减的信号量之间乘积求和的关系时,存在这种约束关系。

再比如:

小明在1时刻,吃了100kcal热量,2时刻吃了80kcal热量;同时在1时刻热量剩余90%,在2时刻热量会剩余70%。那么到2时刻热量剩余将是:100*70%+80*90*

如果把小明的进食热量看作一个函数,把热量剩余百分比看作第二个函数。那么小明在任何时刻的热量剩余,都是这两个函数做卷积操作

卷积本质:翻转+乘积求和

2. 卷积核与卷积

不知道看到这里的大家会不会很纳闷。

这这这,和我们深度学习里面的卷积核的卷积操作完全不同呀!!!!!

晕晕晕~~~

你说的没错,就是不同的(无语住了)

区别就是:卷积到底要不要翻转

2.1 卷积

这个卷积是指数学中的卷积

在数学中,两个矩阵进行卷积操作,卷积核是要翻卷的,如下面动图所示,它们的位置翻转对应。

数学中的卷积:计算要翻转180度

再来个例子:

对于一个公式:

x+y=n

计算这个公式的卷积操作,就是下图直线

2.2 卷积核

讲卷积核就让我们从一个例子开始讲

图像处理:

有这么一副图像,可以看到,图像上有很多噪点:

高频信号,就好像平地耸立的山峰:

看起来很显眼。

平滑这座山峰的办法之一就是,把山峰刨掉一些土,填到山峰周围去。用数学的话来说,就是把山峰周围的高度平均一下。

平滑后得到:

卷积可以帮助实现这个平滑算法。

有噪点的原图,可以把它转为一个矩阵:

然后用下面这个平均矩阵(说明下,原图的处理实际上用的是正态分布矩阵,这里为了简单,就用了算术平均矩阵)作为卷积核g,来平滑图像:

g=\begin{bmatrix}\frac19&\frac19&\frac19\\\frac19&\frac19&\frac19\\\frac19&\frac19&\frac19\end{bmatrix}

记得刚才说过的算法,把高频信号与周围的数值平均一下就可以平滑山峰。

比如我要平滑:a11

就在矩阵中,取出a11点附近的点组成矩阵:f

和卷积核g进行卷积计算后,再填回去:

再来一张卷积的动态图:


那么最关键的来了:卷积核和矩阵的运算具体是如何的,也就是f和g具体是如何计算的

看到有的博主说是这样的

这在数学上来看是没有错的

但是在深度学习操作中,我们从来没有看到人是这么算的

2.3 深度学习中的卷积

概念辨析:

  1. 卷积核:深度学习中的概念,执行的是深度学习中的卷积操作
  2. 深度学习的卷积:不需要翻转的卷积
  3. 数学中的卷积:翻转+乘积求和
  4. 深度学习的卷积:乘积求和
  5. 深度学习的卷积:又叫滤波
  6. 深度学习的卷积核:又叫滤波器

1.上文可以清晰地看到数学中卷积运算的特点:
卷积核与原始的矩阵乘积,是围绕着中心元素进行180度旋转后,才是对应的元素。

2.卷积神经网络的卷积本质上是一种spatial filter(滤波)
我们来看两种图像空间滤波的常见操作
a)平滑滤波
b)边缘提取
这两种件事情,很容易通过设计特定的“卷积核”,然后将其与像素矩阵的对应元素(不进行上述的旋转)相乘得到。
3.此“卷积”与彼“卷积”的联系与区别 :
**最直观的就是:是否进行翻转,然后再进行对应元素的加权求和。 **
其实本质上来说是两者的用途不同

  • 数学中卷积,主要是为了诸如信号处理、求两个随机变量和的分布等而定义的运算,所以需要“翻转”是根据问题的需要而确定的
  • 卷积神经网络中“卷积”,是为了提取图像的特征,其实只借鉴了“加权求和”的特点
  • 还有一点一定要说的是:数学中的“卷积核”都是已知的或者给定的,卷积神经网络中“卷积核”本来就是trainable的参数,不是给定的,根据数据训练学习的,那么翻不翻转还有什么关系呢?因为无论翻转与否对应的都是未知参数!

 3. 总结

  1. 卷积核:深度学习中的概念,执行的是深度学习中的卷积操作
  2. 深度学习的卷积:不需要翻转的卷积
  3. 数学中的卷积:翻转+乘积求和
  4. 深度学习的卷积:乘积求和
  5. 深度学习的卷积:又叫滤波
  6. 深度学习的卷积核:又叫滤波器

如果想要学习更多深度学习知识,大家可以点个关注并订阅,持续学习、天天进步

你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/464635.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字身份发展趋势前瞻:身份韧性与安全

身份韧性与安全是身份与访问管理IAM发展的重要趋势,身份既是防御者的盾牌,也是攻击者的目标。面对日益复杂的网络威胁和不断增长的身份盗窃风险,身份韧性与安全不仅仅涉及产品的防御能力,还包括应对突发事件、快速恢复的弹性和灵活…

QChart中柱形图的简单使用并实现【Qt】

预备工作 如果qt没下载去下载一个,下载太慢了可以试试它[点击跳转]  (https://blog.csdn.net/qq_19319481/article/details/131655379)。   如果已经下载了qt发现自己的组件中没有QCharts,可以去试试它点击跳转。 都搞定了以后在pro文件里面添加QT …

智能语音机器人智能在哪里?AI人工智能电话机器人部署

随着科技的不断进步,人工智能已经成为了我们生活中不可或缺的一部分。AI人工智能机器人电话正是其中的一种形式,可以帮助企业或组织更好地实现电话营销的目标,那么智能语音机器人智能在哪里?我们来看看: 智能语音机器人&#xf…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中,通过特定的方法或策略来准确识别和定位页面上的元素,以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

Unity 使用Netcode实现用户登录和登出

Unity之NetCode for GameObjets 基本使用 说明思路相关API代码实现Tips 说明 最近项目需要联机,项目方案选用Unity提供的NetCode for GameObjets(以下简称NGO),踩了不少坑,本文不介绍基础使用,围绕双端&…

专业网页设计服务重要是什么

当在搜索引擎中键入“网页设计”,您将获得超过2000万个相关结果。在如此众多的网站制作公司中,应该如何做出明智的选择呢?首先,让我们深入探讨一下网页设计的重要性。网站设计需要综合各种不同领域的专业知识,它是一个…

【UART异步串口协议及verilog实现】

UART异步串口协议 1 UART1.1 数据格式1.2 波特率 2 UART的发送和接收模块2.1 uart发送模块2.2 uart的接收模块 【博客首发于微信公众号《 漫谈芯片与编程》】 本篇文章介绍常用的芯片外围低速协议:UART; 1 UART UART是异步串行传输协议,即…

彻底解决idea不识别java项目

需求背景 下载了一个java swing的项目,通过idea导入后,项目无法识别。打开java文件,也不会报错,也不编译。 无法识别效果图 可以看到左侧的菜单,项目是没有被识别。 打开java文件,可以看到没有识别,java的图标也没有出现。 解决方法 1、打开Project Structure 2、修改…

仿真APP助力汽车零部件厂商打造核心竞争力

汽车零部件是汽车工业的基石,是构成车辆的基础元素。一辆汽车通常由上万件零部件组成,包括发动机系统、传动系统、制动系统、电子控制系统等,它们共同确保了汽车的安全、可靠性及高效运行。 在汽车产业快速发展的今天,汽车零部件…

【Nginx】前端项目开启 Gzip 压缩大幅提高页面加载速度

背景 Gzip 是一种文件压缩算法,减少文件大小,节省带宽从而提减少网络传输时间,网站会更快更丝滑。 // nginx roothcss-ecs-1d22:/etc/nginx# nginx -v nginx version: nginx/1.24.0// node ndde v18.20.1// dependencies "vue": …

【Linux】从零开始使用多路转接IO --- epoll

当你偶尔发现语言变得无力时, 不妨安静下来, 让沉默替你发声。 --- 里则林 --- 从零开始认识多路转接 1 epoll的作用和定位2 epoll 的接口3 epoll工作原理4 实现epollserverV1 1 epoll的作用和定位 之前提过的多路转接方案select和poll 都有致命缺点…

CSS中常见的两列布局、三列布局、百分比和多行多列布局!

目录 一、两列布局 1、前言: 2. 两列布局的常见用法 两列布局的元素示例: 代码运行后如下: 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例: 代码运行后如下: 三、多行多列 1.前言 2&…

DCRNN解读(论文+代码)

一、引言 作者首先提出:空间结构是非欧几里得且有方向性的,未来的交通速度受下游交通影响大于上游交通。虽然卷积神经网络(CNN)在部分研究中用于建模空间相关性,但其主要适用于欧几里得空间(例如二维图像&a…

StandardThreadExecutor源码解读与使用(tomcat的线程池实现类)

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java源码解读-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 目录 1.前言 2.线程池基础知识回顾 2.1.线程池的组成 2.2.工作流程 2…

Unreal5从入门到精通之如何解决在VR项目在头显中卡顿的问题

前言 以前我们使用Unity开发VR,Unity提供了非常便利的插件和工具来做VR。但是由于Unity的渲染效果不如Unreal,现在我们改用Unreal来做VR了,所有的VR相关的配置和操作都要重新学习。 今天就来总结一下,我在开发VR过程中碰到的所有问题。 1.编辑器,以VR运行 默认运行方式…

centos7 kafka高可用集群安装及测试

前言 用三台虚拟机centos7 搭建高可用集群,及测试方法 高可用搭建的方法,参考:https://blog.csdn.net/u011197085/article/details/134070318 高可用搭建 1、安装配置zookeeper集群 下载zookeeper 注:zookeeper链接如果失效&a…

Redis(2):内存模型

一、Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情…

C++笔试题之实现一个定时器

一.定时器(timer)的需求 1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务 2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务…

0.STM32F1移植到F0的各种经验总结

1.结构体的声明需放在函数的最前面 源代码: /*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //开启USART1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructu…

在Microsoft Outlook日历中添加多个时区

在Microsoft Outlook日历中添加多个时区 1.单击Outlook中的文件选项卡,单击选项 2.左侧菜单中选择日历 3.向下滚动到时区部分,并标记当前时区,比如China 4.选中“显示第二个时区”框 5.选择第二个时区并给它一个标签,比如Germa…