热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

matlab卷积核旋转,CNN中卷积核与卷积运算的前向推导与推导过程

CNN神经网络算法是常用的模式识别算法,该算法通过卷积运算将图片特征存储到多个卷积核中,卷积核通过算法的反向传输一步步逼近于图片特征,最常

CNN神经网络算法是常用的模式识别算法,该算法通过卷积运算将图片特征存储到多个卷积核中,卷积核通过算法的反向传输一步步逼近于图片特征,最常用的反向传导方法是BP反向传导方法,采用最速下降法,将结果误差传递到每一个过程参数中,对于该方法在后面会做专门的介绍,本文主要介绍CNN神经网络中卷积步骤的前向与反向传导过程。

为何会专门开这个题目来讨论,因为在很多的博文中,只是很随意介绍该算法的过程,更多的是通过抄袭而来,让很多的读者感到困惑,另外,由于matlab中的conv2函数是严格按照卷积运算而来,因此很多人会困惑翻转问题,因此本博文将仔细介绍下整个卷积过程与反向卷积过程。后面将会推出关于卷积意义的探讨。

1、卷积过程

根据离散二维卷积公式,有:

daaaeb718aed

其中A为被卷积矩阵,K为卷积核,B为卷积结果,该公式中,三个矩阵的排序均从0开始,即A矩阵的序号如下所示:

daaaeb718aed

由于该矩阵的序号排列方式与我们平时的书写方式不同,为了方便,我将上面卷积公式改写成下面的公式,后面的分析也用该公式进行分析:

daaaeb718aed

该公式所用矩阵就是我们所熟悉的从A11开始的矩阵了:

daaaeb718aed

现在对于上面卷积过程进行分析:我们用来做例子的A矩阵为m*m(3*3)二维矩阵,K为n*n(2*2)的二维矩阵。

daaaeb718aed

卷积过程先将卷积核旋转180°,被卷积矩阵扩展到(m+n)*(m+n)大小,将扩展部分用0代替,其序号用负数代替,即如下所示:

daaaeb718aed

即有B11=A00*K22+A01*K21+A10*K12+A11*K11(1)

同理:

B12=A01*K22+A02*K21+A11*K12+A12*K11

B13=A02*K22+A03*K21+A12*K12+A13*K11

B14=A03*K22+A04*K21+A13*K12+A14*K11

B21=A10*K22+A11*K21+A20*K12+A21*K11

B22=A11*K22+A12*K21+A21*K12+A22*K11

B23=A12*K22+A13*K21+A22*K12+A23*K11

B24=A13*K22+A14*K21+A23*K12+A24*K11

B31=A20*K22+A21*K21+A30*K12+A31*K11

B32=A21*K22+A22*K21+A31*K12+A32*K11

B33=A22*K22+A23*K21+A32*K12+A33*K11

B34=A23*K22+A24*K21+A33*K12+A34*K11

B41=A30*K22+A31*K21+A40*K12+A41*K11

B42=A31*K22+A32*K21+A41*K12+A42*K11

B43=A32*K22+A33*K21+A42*K12+A43*K11

B44=A33*K22+A34*K21+A43*K12+A44*K11

以上便是整个卷积计算过程,在Matlab中可用conv2函数进行卷积计算:

B=conv2(A,K,’full’);

Conv2函数的第一个输入参数为被卷积矩阵,第二个为卷积核,第三个参数可输入卷积输出形式,总共有三个:‘full’,‘same’和‘valid’,用下面的例子便可以看出这三个的区别:

A=[1 2 3

4 5 6

7 8 9];

K=[1 2

3 4];

B=conv2(A,K,'full')

C=conv2(A,K,'same')

D=conv2(A,K,'valid')

输出结果为:

B =

1     4    7    6

7    23   33   24

19  53   63  42

21   52  59   36

C =

23   33   24

53   63   42

52   59   36

D =

23   33

53   63

‘full’的输出结果为n+m-1,’same’的输出结果为m,’valid’的输出结果为m-n+1。在CNN算法的前向过程,其卷积是’valid’型卷积,因此我们只对’valid’型卷积的反向推导过程进行推导,另外两种类型的推导类似。

2、卷积过程的反向推导

假设最终误差E传递到B处的误差为C,B11的误差为C11,B12的误差为C12......,当其前向运算为’valid’类型时则其误差矩阵可表示为以下C矩阵:

daaaeb718aed

(a)对A矩阵进行求导

根据矩阵传递规则,有下面传递性质:

daaaeb718aed

现将上面公式组(1)进行组合,举例对A22进行求导:

B11+B12+B13+B14+B21+B22+B23+B24+B31+B32+B33+B34+B41+B42+B43+B44=A00*K22+A01*K21+A10*K12+A11*K11+A01*K22+A02*K21+A11*K12+A12*K11+A02*K22+A03*K21+A12*K12+A13*K11+A03*K22+A04*K21+A13*K12+A14*K11+A10*K22+A11*K21+A20*K12+A21*K11+A11*K22+A12*K21+A21*K12+A22*K11+A12*K22+A13*K21+A22*K12+A23*K11+A13*K22+A14*K21+A23*K12+A24*K11+A20*K22+A21*K21+A30*K12+A31*K11+A21*K22+A22*K21+A31*K12+A32*K11+A22*K22+A23*K21+A32*K12+A33*K11+A23*K22+A24*K21+A33*K12+A34*K11+A30*K22+A31*K21+A40*K12+A41*K11+A31*K22+A32*K21+A41*K12+A42*K11+A32*K22+A33*K21+A42*K12+A43*K11

E=C22+C23+C32+C33

daaaeb718aed

则有:

daaaeb718aed

同理,可对A矩阵其他成员进行求导,可得出规律是:矩阵A的误差是矩阵B的误差C与卷积核K’(K’是卷积核K旋转180°的矩阵)的卷积。

因此当matlab中,输入的前向函数为:B=conv2(A,K,’valid’);

其对A误差的反向传递为:

daaaeb718aed

(b)对卷积核K矩阵进行求导

与对A求导原理相同,现对K11进行求导如下:

daaaeb718aed

则有:

daaaeb718aed

K的其他成员的求导同样可以用该方式求取,为了方便我们观察,我们再对K22求导:

daaaeb718aed

我们可以总结规律:

当matlab中,输入的前向函数为:

B=conv2(A,K,’valid’);

其对K的反向函数为:

daaaeb718aed

由于网上多个编辑的版本,导致有时候在是否转动180°的问题上犯困难,因此

应为其前向与反向统一公式

另外,我也给出了另外一种习惯的前向反向公式:

当个输入前向函数为:

B=conv2(A,rot90(K,2),’valid’);

其对A的反向函数为:

daaaeb718aed

对K的反向函数为:

daaaeb718aed

若有matlab编程或者算法研究等技术需求,可加QQ(3141104423)或者加QQ群(479888200)交流平台



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
_妃妃教主
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有