【深度学习学习笔记】数值计算——矩阵

深度学习中总会牵扯到大量的数值计算,且对于计算机视觉而言,其中很大一部分都是对于矩阵进行操作。

对于矩阵而言,卷积是很重要的一个操作,相对于平常函数的卷积: ∫ f ( τ ) ∗ g ( x − τ ) d τ \int f(\tau)*g(x-\tau) d\tau f(τ)g(xτ)dτ
矩阵在进行卷积时,与之相类似,利用卷积核从左上角开始取与卷积核尺寸相同的元素进行对应元素相乘再相加。

卷积的方式有三种:full、same、valid
假设一矩阵image尺寸为n×n,卷积核filter尺寸为f×f,则image * filter为:

  • full
    对于full而言,卷积核刚刚接触矩阵时就开始进行计算。


    【深度学习学习笔记】数值计算——矩阵_第1张图片

  • same
    对于same,是指当filter的中心接触到image时开始进行计算。


    【深度学习学习笔记】数值计算——矩阵_第2张图片

  • valid
    对于valid是指filter需全部在image中才可以进行计算。


    【深度学习学习笔记】数值计算——矩阵_第3张图片

我们看到,在进行full和same模式的卷积运算时,卷积核会与超出已有矩阵的范围计算。因此我们需要另一个操作——padding,在已有的矩阵周围补充一些像素点并初始化为零。
若给定padding=p,经过padding之后的图片尺寸变为 ( n + 2 p ) × ( n + 2 p ) (n+2p)×(n+2p) (n+2p)×(n+2p)
若要保证padding之后卷积前后尺寸不变,需要: p = f − 1 2 p=\frac {f-1} {2} p=2f1

在进行卷积运算时,还有一项概念——步长stride。
步长是指在卷积核与相应矩阵区域进行卷积之后,下一次计算的区域与本次计算区域的距离。


【深度学习学习笔记】数值计算——矩阵_第4张图片

如上图所示,设stride(s)为2,表格中1表示第一次计算的区域,2表示经过步长=2之后的计算区域。

综上,若一矩阵image尺寸为n×n,卷积核filter尺寸为f×f,令padding=p,stride=s,则image * filter的输出尺寸为: ( n + 2 p − f s + 1 ) ∗ ( n + 2 p − f s + 1 ) (\frac {n+2p-f} {s}+1)*(\frac {n+2p-f} {s}+1) (sn+2pf+1)(sn+2pf+1)

至此,下面介绍矩阵的求导。
矩阵的求导根据法则见:
https://blog.csdn.net/jmh1996/article/details/85040660
有矩阵对元素的求导,矩阵对向量的求导,矩阵对矩阵的求导等等。
具体的总结见:
https://blog.csdn.net/a493823882/article/details/81324037

下面是我对矩阵对向量求导的推导过程。
假设有一矩阵A A = [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] A= \begin{bmatrix} a11 & a12 & a13 \\ a21 & a22 & a23 \\ a31 & a32 & a33 \\ \end{bmatrix} A=a11a21a31a12a22a32a13a23a33有一向量x x = [ x 1 x 2 x 3 ] x= \begin{bmatrix} x1 \\ x2 \\ x3 \\ \end{bmatrix} x=x1x2x3则令y y = A x = [ a 11 × x 1 + a 12 × x 2 + a 13 × x 3 a 21 × x 1 + a 22 × x 2 + a 23 × x 3 a 31 × x 1 + a 32 × x 2 + a 33 × x 3 ] y=Ax= \begin{bmatrix} a11×x1+a12×x2+a13×x3 \\ a21×x1+a22×x2+a23×x3 \\ a31×x1+a32×x2+a33×x3 \\ \end{bmatrix} y=Ax=a11×x1+a12×x2+a13×x3a21×x1+a22×x2+a23×x3a31×x1+a32×x2+a33×x3那么根据Jacobian矩阵:


J i , j = ∂ ∂ x j f ( x ) i J_{i,j}=\frac {\partial} {\partial x_j}f(x)_i Ji,j=xjf(x)i

y第一个元素对x1、x2、x3分别求导为输出的第一列,第二个元素对x1、x2、x3分别求导为输出的第二列,第三个元素对x1、x2、x3分别求导为输出的第三列,以此类推。
那么yx的导数为 [ a 11 a 21 a 31 a 12 a 22 a 32 a 13 a 23 a 33 ] \begin{bmatrix} a11 & a21 & a31 \\ a12 & a22 & a32 \\ a13 & a23 & a33 \\ \end {bmatrix} a11a12a13a21a22a23a31a32a33y=Ax中, ∂ y ∂ x = A T \frac {\partial y} {\partial x}=A^T xy=AT

第一次写学习笔记,希望也相信自己可以坚持下去。
种一棵树最好的时间是十年前,其次是现在。

你可能感兴趣的:(深度学习,卷积)