当前位置: 首页 > article >正文

深度学习中的卷积和反卷积(一)——卷积的介绍

1 背景

卷积和反卷积是深度学习中常用的运算,常见于CNN、GAN等模型。

2 卷积概念介绍

卷积是一种数学运算,记(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)}

从定义式中可发现卷积的要点:(1)卷积的入参为n;(2)2个函数遍历所有可能的入参,求乘积后求和;(3)在此过程中保证2个函数的入参之和为n。

单纯看计算公式不算复杂,但让人疑惑为什么设计成这种形式?下面我们举一些例子加深理解。

3 卷积实例

笔者收集了网络上各种关于卷积的例子,帮助读者理解。

3.1 抛骰子

来源:如何通俗易懂地解释卷积? - 马同学的回答 - 知乎
https://www.zhihu.com/question/22298352/answer/228543288

比如抛出2个骰子,记f(x)g(x)分别为两个骰子点数为x的概率。现在求出两枚骰子点数之和为4的概率,则此概率可以表示为卷积

(f*g)(4)=\sum_{\tau=1 }^{3}{f(\tau)g(4-\tau)}

从公式可以看出,g函数先对\tau求了相反数,又增加了4,相当于g先做了翻转,变成654321,再做了平移,平移量就是n。

3.2 信号分析

来源:如何通俗易懂地解释卷积? - palet的回答 - 知乎
https://www.zhihu.com/question/22298352/answer/637156871

(一)基本设定

系统每一时刻都会接收到一个输入信号,这个信号会随着时间衰减,系统某时刻的输出是历史所有信号在当前时刻衰减后的叠加。可以想象到上一时刻的信号衰减是最小的,而很早之前时刻的信号已经衰减到0了。

对应到卷积中的概念如下表所示

概念含义
f输入信号,随时间变化
g响应函数,即信号的衰减速度
卷积结果最终的输出是之前所有输入信号考虑衰减后的叠加

假设f和g是下图所示的函数。

(二)求解输出信号

假设横轴单位是秒,在第10秒,输出的信号由以下部分叠加:是第0秒信号衰减了10秒加上第1秒信号衰减了9秒

(三)先翻转再平移的解释

从上图可以看出,计算最终结果时传入f和g的参数之和为10,把对应关系连线之后是拧巴的,为了更好地展示,先将g做翻转,即转变为g(-t)

然后再平移,即往右平移10秒,转变成g(10-t)

这样上下对应相乘即可求出卷积。卷代表着翻转,积代表着最后对应位置求和。

3.3 复利

来源:如何通俗易懂地解释卷积? - 果程C的回答 - 知乎
https://www.zhihu.com/question/22298352/answer/50940942

假设小明往银行存入100元,年利率是5%,按复利计算,则之后第n年的金额会变为100*(1.05)^n

假设小明每年都这么存,那么第5年小明的银行总存款为多少?

可将小明的总存款分解为6次存款得到的总资金。

存款序号享受利息的年数第5年总资金
初始存款(第0次存款)5年100*(1.05)^5
第1次存款4年100*(1.05)^4
第2次存款3年100*(1.05)^3
第3次存款2年100*(1.05)^2
第4次存款1年100*(1.05)^1
第5次存款0年100*(1.05)^0

小明总资金为上表最后一列之和,记f(x)为第x年存入的本金(本例中恒等于100),记g(x)为享受x年的利息,即g(x)=1.05^{x},则可表示为

(f*g)(5)=\sum_{\tau=0 }^{5}{f(\tau)g(5-\tau)}

3.4 Moba游戏

来源:如何通俗易懂地解释卷积? - 周赛克的回答 - 知乎
https://www.zhihu.com/question/22298352/answer/257790355

以英雄联盟游戏为例,诺手(其中一个英雄角色)对敌方英雄攻击有特殊的机制,这种机制机制叫“流血”,即接下来5秒内,敌方英雄每秒都会受到伤害。现在如果要求得第3秒敌方受到的伤害,即为第0秒、第1秒、第2秒、第3秒攻击在第3秒时造成的伤害之和。现实中我们不要轻易伤害其他人,因为每一次伤害都会在对方心里埋下种子,这种伤害会累加到以后的每时每刻。

3.5 图像处理

来源:如何通俗易懂地解释卷积? - 马同学的回答 - 知乎
https://www.zhihu.com/question/22298352/answer/228543288

关于卷积在图像中的计算,笔者在介绍CNN时已有讨论,不再赘述。详见《卷积神经网络CNN(一)基本概念、卷积》

本文中笔者拓展讨论以下2个问题。

3.5.1 图像卷积核与g的关系

在深度学习中,卷积核并不等同函数g,而是对g做了翻转和平移的结果,只有这样,卷积核才能直接与图像做点乘求和。

下面我们尝试理解卷积核与g的对应关系

假设原始图像f(像素为3*3)为

f=\begin{Bmatrix} a_{0,0} &a_{0,1} &a_{0,2} \\ a_{1,0} &a_{1,1} &a_{1,2} \\ a_{2,0} & a_{2,1} &a_{2,2} \end{Bmatrix}

g为

g=\begin{Bmatrix} b_{-1,-1} &b_{-1,0} &b_{-1,1} \\ b_{0,-1} &b_{0,0} &b_{0,1} \\ b_{1,-1} & b_{1,0} &b_{1,1} \end{Bmatrix}

现在对图像f求卷积后得到新的图像c,则c_{1,1}的计算步骤如下图所示。注意到每一部分横纵坐标之和都为1,符合卷积运算的定义。

在图像卷积计算中,卷积核是直接与原始图像做点乘的,因此根据c_{1,1}公式可以反推出卷积核。例如发现a_{0,0}是与b_{1,1}相乘的,那么应该将b_{1,1}放到第一个位置,卷积核表示如下

kernel=\begin{Bmatrix} b_{1,1} &b_{1,0} &b_{1,-1} \\ b_{0,1} &b_{0,0} &b_{0,-1} \\ b_{-1,1} & b_{-1,0} &b_{-1,1} \end{Bmatrix}

可以发现,卷积核相当于对g做了翻转180°操作。

在实际训练中,我们是直接训练卷积核的,对于g长什么样其实并不关心。

3.5.2 不同卷积核的效果

卷积核效果
各元素平均每个像素点都用周围像素点的平均值覆盖,可用作图像池化/模糊化/羽化,去除噪声
某种形状高亮符合这个形状的区域,常用于特征识别
中间为较大的数,周围是-1轮廓提取,因为这种卷积核相当于邻近像素相减,而边缘处的像素差较大

3.6 以上例子的归纳

(1)函数f表示一个输入,随时间变化

(2)输入对输出结果有持续的影响,这个影响用函数g表示

(3)最终的结果是若干历史时刻对当前时刻影响的线性叠加

例子f的含义g的含义卷积的结果
抛骰子第一个骰子点数概率在此例子中似乎并不明显,可以这么理解:例如第1个骰子的点位是1,对于最终结果点位之和是2、3、4、5、6、7都有影响。第2个骰子的概率反映了第一个骰子多大程度影响了最终结果第一个骰子点数叠加g的影响后得到点数之和为4的概率
信号输入信号,随时间变化响应函数,影响了信号的衰减最终的输出是之前所有输入信号考虑衰减后的叠加
复利历年的存款历年存款对当前金额的影响,即复利计算历年存款复利到当前金额之和
Moba游戏攻击的伤害攻击会分5秒给对手造成伤害之前所有的攻击在此时造成的伤害之和
图像处理原始图像卷积核,可理解为原始图像每个像素对最终图像的影响卷积后的结果,所有相关像素经过卷积叠加后的图像

 参考资料

《如何通俗易懂地解释卷积?》icon-default.png?t=O83Ahttps://www.zhihu.com/question/22298352

《数据不够?GAN来凑!》icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/66489938


http://www.kler.cn/a/472936.html

相关文章:

  • 云安全博客阅读(三)
  • Openwrt @ rk3568平台 固件编译实践(二)- ledeWRT版本
  • ArrayList和HashMap区别
  • 用OpenCV实现UVC视频分屏
  • nodejs的降级
  • Docker Compose 启动 Harbor 并指定网络
  • client-go中watch机制的一些陷阱
  • EntityFrameworkCore 跟踪查询(Tracking Queries)
  • 转移指令jmp以及其他转移指令
  • 【Uniapp-Vue3】watch和watchEffect监听的使用
  • 分享一次面试经历
  • 缓存-Redis-API-Redission-自动续期-watch dog
  • 关于FPGA(现场可编程门阵列)工程技术人员的详细介绍
  • 2025最新解决方案:新买的mac鼠标和这个触控板反向
  • 『SQLite』更新和删除表记录
  • 开源靶场1
  • vscode 配置c/c++环境 中文乱码
  • Linux系统中解决端口占用问题
  • SpringBoot之核心配置
  • vs2022编译webrtc步骤
  • 搭建个人知识库,支持Word、PDF、txt等,一般电脑也能玩。
  • Vue3 el-tree-v2渲染慢的问题
  • Linux系列(二)安装Linux和Linux目录结构
  • <代码随想录> 算法训练营-2025.01.03
  • xxl-job回调执行器,发生NPE空指针异常
  • ios脚本巨魔商店多巴胺越狱基本操作教程