[机器学习] UFLDL笔记 - Convolutional Neural Network - 矩阵运算
Posted WangBo_NLPR
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习] UFLDL笔记 - Convolutional Neural Network - 矩阵运算相关的知识,希望对你有一定的参考价值。
前言
卷积神经网络的核心操作就是各种矩阵运算,在前向传播和反向传播中的各种形式的矩阵运算构成了CNN的计算体系,本文将在卷积神经网络(Convolutional Neural Network)的背景下对相关的矩阵运算进行梳理,涉及矩阵乘积(matrix product)、元素对应乘积(element-wise product)、卷积操作(convolution)、相关操作和克罗内克积(kronecker product)等,在学习CNN的反向传播之前,我们必须先搞清楚这几种矩阵操作的计算过程,希望本文可以帮助大家理解卷积神经网络(CNN)提供一些帮助!
文章小节安排如下:
1)矩阵乘积(matrix product)
2)元素对应乘积(element-wise product)
3)卷积操作(convolution)
4)相关操作
5)克罗内克积(kronecker product)
6)总结
一、矩阵乘积(matrix product)
1.1 矩阵乘积(matrix product)定义
矩阵的乘法运算不多说了,回顾一下最基本的定义:
设 A 为 m x p 的矩阵,B为 p x n 的矩阵,则称 C = AB 为矩阵A与B的乘积,且C为 m x n的矩阵,其中矩阵C中的第 i 行第 j 列元素可以表示为:
1.2 矩阵乘积的运算规律
分配律:A(B+B) = AB + AC
结合律:A(BC)=(AB)C
二、元素对应乘积(element-wise product)
2.1 元素对应乘积(element-wise product)定义
元素对应乘积也称为Hadamard乘积(Hadamard product),矩阵A,B的Hadamard乘积定义为二者对应位置的乘积,也有人称作相关操作,记作:A⊙B
令C=A⊙B,则矩阵C中的第 i 行第 j 列元素可以表示为:
2.2 Hadamard乘积计算示意图
Hadamard乘积的计算图示如下:
2.3 Hadamard乘积的运算规律
交换律:A⊙B=B⊙A
结合律:A⊙(B⊙C)=(A⊙B)⊙C
分配律:A⊙(B+C)=A⊙B+A⊙C
参考:
Hadamard product (matrices)
https://en.wikipedia.org/wiki/Hadamard_product_(matrices)
三、卷积操作(convolution)
3.1 卷积操作(convolution)定义
卷积是一种应用非常广泛的数学计算方式,例如统计学、概率论、物理学、声学和计算机科学等。在一些领域比如信号与系统这门课中,卷积是基础理论,把卷积的概念弄清楚就可以很好的理解这门课中的其他概念了。正因为卷积在信号系统中的中哟啊行,所以很多文章都是从信号处理的角度来解释卷积。
图像也是一种信号,因此时间充裕的话,我也建议各位从信号系统的角度深入学习一下卷积概念,不仅要理解卷积的数学概念,同时也应该多关注卷积的物理意义,这样会非常有助于我们理解和研究深度学习算法。换句话说,我们不仅要知道CNN中的核心卷积操作是怎么计算的,还要知道从信号的角度分析,为什么卷积操作如此适用于CNN!
本文在这里只给出卷积操作在CNN中的定义,用于帮助理解CNN的反向传播和梯度计算(仅关注在数学上的计算过程)。关于卷积的更多知识,各位可以利用Google去学习。
卷积操作记作:A∗B
令c=A∗B,则实数值标量c可以表示为:
3.2 卷积操作计算示意图
卷积操作的计算示意图如下:
卷积操作是CNN中的核心计算模式,在后面文章中会看到,CNN在反向传播中,误差的传递依靠的就是卷积操作,所以务必要搞清楚是怎么算的!
参考:
如何通俗易懂解释卷积
https://www.zhihu.com/question/22298352
四、相关操作
4.1 相关操作定义
相关操作这个名称是在网上看到,具体的数学定义并没有查到,这里我就试着给出一个定义吧。
相关操作就是同型矩阵执行Hadamard乘积后再将所有元素相加(对应元素相乘将结果相加),得到一个实数值,符号可以记作:sum(A⊙B)
令c=sum(A⊙B),则实数值标量c可以表示为:
4.2 相关操作计算示意图
相关操作的计算示意图如下:
4.3 相关操作 or 卷积操作
在CNN的前向传播中,其实真正执行的是“相关操作”,而不是“卷积操作”,只是因为在具体实现时可以使用卷积的方式进行计算(A与B执行相关操作=A翻转180度以后再与B执行卷积操作),所以就使用了这样一个名字,所以CNN称为卷积神经网络。我们在这里一定要区分清楚CNN中的矩阵操作,但我们平时并不会过分强调到底是相关操作还是卷积操作,而是统一用“卷积”来描述,这有助于相互之间的交流(不必纠结细节)。
再来回顾一下经典的“卷积操作”:
五、克罗内克积(kronecker product)
5.1 克罗内克积(kronecker product)定义
克罗内克积也是非常好理解的,这里就引用wiki百科的定义吧:
If A is an m × n matrix and B is a p × q matrix, then the Kronecker product A ⊗ B is the mp × nq block matrix:
5.2 克罗内克积计算示意图
A is an m × n matrix and B is a p × q matrix, more explicitly of kronecker product:
5.3 example
克罗内克积的计算示例:
六、总结
矩阵运算是深度学习的重要基础,做深度学习基本就是在和各种矩阵打交道,前文只是在CNN的背景下对矩阵运算做了最基本的解释,并未深入探讨,如果想要深入研究深度学习,还死活建议抽出时间加强这方面的学习!!!
参考文献
Hadamard product (matrices)
https://en.wikipedia.org/wiki/Hadamard_product_(matrices)
如何通俗易懂解释卷积
https://www.zhihu.com/question/22298352
Convolution
https://en.wikipedia.org/wiki/Convolution
Kronecker product
https://en.wikipedia.org/wiki/Kronecker_product
以上是关于[机器学习] UFLDL笔记 - Convolutional Neural Network - 矩阵运算的主要内容,如果未能解决你的问题,请参考以下文章
[机器学习] UFLDL笔记 - Autoencoders and Sparsity
[机器学习] UFLDL笔记 - Autoencoders and Sparsity
[机器学习] UFLDL笔记 - Sparse Coding(稀疏编码)
[机器学习] UFLDL笔记 - Sparse Coding(稀疏编码)