深度学习笔记之卷积神经网络(二)图像卷积操作与卷积神经网络

news2024/9/28 21:27:18

深度学习笔记之卷积神经网络——图像卷积操作与卷积神经网络

  • 引言
    • 回顾:图像卷积操作
      • 补充:卷积核不是卷积函数
    • 卷积神经网络
      • 卷积如何实现特征描述/提取
      • 卷积神经网络中的卷积核的反向传播过程
        • 场景构建与前馈计算
        • 卷积层关于卷积核的反向传播过程
        • 卷积层关于输入的反向传播过程

引言

上一节介绍了卷积的基本思想以及图像卷积操作,本节将介绍卷积神经网络,并从反向传播角度认识卷积神经网络。

回顾:图像卷积操作

基于图像卷积的一次卷积过程可描述为:
基于某像素点周围像素点的影响,构建相应大小的卷积核 ( Convolution Kernel ) (\text{Convolution Kernel}) (Convolution Kernel);卷积核与被卷积核覆盖的像素点做卷积并最终生成一个像素点。

以某像素点周围一圈的像素点为例,也就是 3 × 3 3 \times 3 3×3大小卷积核,这个生成过程可表示为:
基于3x3卷积核的一次卷积过程
从图中明显看出,新像素值 ( New Pixel Value ) (\text{New Pixel Value}) (New Pixel Value)可看作是由源像素点 ( Souce Pixel ) (\text{Souce Pixel}) (Souce Pixel)与其周围像素点的一次卷积产生的更新结果。

补充:卷积核不是卷积函数

下图描述某图像局域像素点的表示。其中 ( x , y ) (x,y) (x,y)表示横纵坐标,用来描述像素点在某图像中唯一确定的位置;而 f ( x , y ) f(x,y) f(x,y)表示该位置像素点的颜色信息,它有可能是一个基于 3 3 3通道的向量(描述彩色的颜色信息),也可能是一个单通道的向量(描述黑白的颜色信息),但这并不是重点。

同理, f ( x − 1 , y + 1 ) , f ( x , y + 1 ) , ⋯ f(x-1,y+1),f(x,y+1),\cdots f(x1,y+1),f(x,y+1),描述像素点 ( x , y ) (x,y) (x,y)周围像素点的颜色信息。而红色箭头表示像素点 ( x , y ) (x,y) (x,y)卷积操作后的加权过程。
某局域像素表示
既然是执行卷积操作,那么就必然有卷积函数。根据卷积的定义:
这里是指‘包含两个离散型随机变量’的卷积过程。
h ( x , y ) = ∑ f ( x , y ) ⋅ g ( m − x , n − y ) = f ( x , y ) ∗ g ( m , n ) \begin{aligned} h(x,y) & = \sum f(x,y) \cdot g(m - x,n-y) \\ & = f(x,y) * g(m,n) \end{aligned} h(x,y)=f(x,y)g(mx,ny)=f(x,y)g(m,n)
在各维度在不同位置 ( m , n ) (m,n) (m,n)下,对应位置的卷积函数 g ( m , n ) g(m,n) g(m,n)可表示为:
以像素点 f ( x − 1 , y + 1 ) f(x-1,y+1) f(x1,y+1)为例。它的位置可表示为 ( x − 1 , y + 1 ) (x-1,y+1) (x1,y+1),该位置与中心点 f ( x , y ) f(x,y) f(x,y)之间的相对位置表示为 ( x − 1 − x , y + 1 − y ) ⇒ ( − 1 , 1 ) ⇒ g ( − 1 , 1 ) (x-1-x,y+1-y) \Rightarrow(-1,1) \Rightarrow g(-1,1) (x1x,y+1y)(1,1)g(1,1),以此类推。
对应位置卷积函数
但在执行卷积的过程中,各像素点是如何执行的 ? ? ?依然以 f ( x − 1 , y + 1 ) f(x-1,y+1) f(x1,y+1)为例。由于需要将 f ( x − 1 , y + 1 ) f(x-1,y+1) f(x1,y+1)加权到核心像素点 f ( x , y ) f(x,y) f(x,y)上,因此该点对应的权重 g g g应该是:
注意方向。当前状态是 f ( x − 1 , y + 1 ) f(x-1,y+1) f(x1,y+1),目标状态是 f ( x , y ) f(x,y) f(x,y)
g [ x − ( x − 1 ) , y − ( y + 1 ) ] = g ( 1 , − 1 ) g[x - (x-1),y-(y+1)] = g(1,-1) g[x(x1),y(y+1)]=g(1,1)
可以发现,这个 g ( 1 , − 1 ) g(1,-1) g(1,1)的位置与f(x-1,y+1)关于中心点对称。而图像卷积操作对应位置相乘再相加。因此,真正的卷积核应该是如下格式:
卷积核表示
可以发现,卷积核并不是卷积函数,而是将卷积函数按照中心点旋转 180 180 180的对应结果
但是我们平常都是直接使用’卷积核‘执行计算,实际上中间还有一步卷积函数,只不过省略掉了。

总结:图像卷积运算本质是周围像素点对中心像素点产生影响(有顺序),而 g g g函数针对如何影响中心像素点做出了规定

卷积神经网络

卷积如何实现特征描述/提取

在上一节,以平滑操作为例,描述了卷积核的一种表达。旨在对目标图像进行模糊处理(均值滤波):
后续卷积操作这里仅描述卷积核核对应效果,函数不修改。

import numpy as np
import cv2

def FilterOperation(Kernel):
    Img = cv2.imread(r'C:\Users\Administrator\Desktop/PicSample.jpg',cv2.IMREAD_GRAYSCALE)
    FilterOut = cv2.filter2D(Img, -1, kernel=Kernel)

    htich = np.hstack((Img, FilterOut))
    cv2.imshow("merged_img", htich)
    cv2.waitKey(0)

if __name__ == '__main__':
    Kernel = np.array([
        [1/9, 1/9, 1/9],
        [1/9, 1/9, 1/9],
        [1/9, 1/9, 1/9]],
        dtype=np.float32)
    FilterOperation(Kernel)

对比效果图如下:
左侧为正常图像,右侧为卷积后效果,下同。
模糊处理——对应效果图
再例如锐化操作,使图片看起来更加有立体感。

Kernel = np.array([
        [0, -1, 0],
        [-1, 5, -1],
        [0, -1, 0]],
        dtype=np.float32)

对比效果图如下:
锐化处理——对应效果图
不可否认的是,我们确实能够通过调整卷积核的格式得到我们想要的效果。它们本质上依然是:周围像素点对中心像素点产生的影响

卷积神经网络是通过滤波器卷积的方式对图片的特征进行描述,那么卷积是如何描述/提取特征的呢 ? ? ?
介绍一个滤波器汇总的文章。文章见下方链接,侵删。

例如:垂直边界过滤器 ( Vertical Filter ) (\text{Vertical Filter}) (Vertical Filter)

Kernel = np.array([
        [1, 0, -1],
        [1, 0, -1],
        [1, 0, -1]],
        dtype=np.float32)

对比效果如下:
垂直边界过滤器——对比效果
很明显,我们能够很容易地通过卷积后的图片中观测到物品的垂直方向的边界特征。而其他的特征信息被过滤掉。因而这种卷积核也被称作过滤器 ( Filter ) (\text{Filter}) (Filter)
虽然也是在做卷积操作,但这种核能够将图片中的信息’挑‘出来。

同理,还有横向边界过滤器 ( Horizontal Filter ) (\text{Horizontal Filter}) (Horizontal Filter)

Kernel = np.array([
        [1, 1, 1],
        [0, 0, 0],
        [-1, -1, -1]],
        dtype=np.float32)

对比效果如下:
横向边界滤波器——对比效果
通过上面的描述,可以观察到卷积的一种功能:如果挑选的卷积核合适,那么对图片的卷积过程中就可以对图片进行过滤。而这个过滤的目的是将图片中的某些特征保留下来,而其他的特征就被过滤掉了

由于卷积就是通过周围像素点对中心像素点的一种加权描述,因而如果从权重的角度观察:

  • 对于一张图片,如果想要对某些特征进行更多的关注,那么调整的手段就是增大卷积核内某元素的对应位置
  • 相反,如果需要避开某些不必要的特征,同样可以通过减小卷积核内某元素的位置进行实现。

而如何去对关注进行分配——如何对分配关注度,从而基于关注度对卷积核元素进行调整,自然是神经网络对卷积核中元素的参数更新的结果。

卷积神经网络中的卷积核的反向传播过程

那么卷积神经网络是如何实现反向传播过程呢 ? ? ?在反向传播算法一节中介绍过常规的全连接神经网络它的反向传播过程。它的特点是:网络中的每一个神经元,其神经元内的每个输入均包含一个权重信息与其映射:
神经元模型架构
卷积神经网络的特点在于:卷积层在执行卷积的过程中,对于输入的任意一个像素点,在卷积核的视角中都是一视同仁的。也就是说,在某次迭代过程中,某卷积层内的前馈计算,所有像素点(层输入特征)均公用同一个卷积核

那么通过卷积层得到的输出结果,每一个分量都能够更新梯度,但是卷积核就那么大,它是如何获取输出结果所有分量的梯度的 ? ? ?

场景构建与前馈计算

这里我们仅选择通道数 C = 1 \mathcal C = 1 C=1的灰度图像作为示例。已知一个 3 × 3 3 \times 3 3×3大小的灰度图像,它的矩阵格式表示如下:
X = ( x 11 , x 12 , x 13 x 21 , x 22 , x 23 x 31 , x 32 , x 33 ) \mathcal X = \begin{pmatrix} x_{11},x_{12},x_{13} \\ x_{21},x_{22},x_{23} \\ x_{31},x_{32},x_{33} \end{pmatrix} X= x11,x12,x13x21,x22,x23x31,x32,x33
构建一个 2 × 2 2 \times 2 2×2大小的卷积核,其矩阵格式表示如下:
F = ( f 11 , f 12 f 21 , f 22 ) \mathcal F = \begin{pmatrix} f_{11},f_{12} \\ f_{21},f_{22} \end{pmatrix} F=(f11,f12f21,f22)
使用卷积核 F \mathcal F F X \mathcal X X执行卷积操作。设其卷积结果 O \mathcal O O。假设卷积过程中,其步长 ( Stride ) = 1 (\text{Stride}) = 1 (Stride)=1,并且不添加 0 0 0填充 ( Padding=0 ) (\text{Padding=0}) (Padding=0)。那么其卷积结果 O \mathcal O O应该是一个 2 × 2 2 \times 2 2×2的矩阵格式:
O = ( o 11 , o 12 o 21 , o 22 ) \mathcal O = \begin{pmatrix} o_{11},o_{12} \\ o_{21},o_{22} \end{pmatrix} O=(o11,o12o21,o22)
对应的输出结果 o o o可表示为:
{ o 11 = x 11 ⋅ f 11 + x 12 ⋅ f 12 + x 21 ⋅ f 21 + x 22 ⋅ f 22 o 12 = x 12 ⋅ f 11 + x 13 ⋅ f 12 + x 22 ⋅ f 21 + x 23 ⋅ f 22 o 21 = x 21 ⋅ f 11 + x 22 ⋅ f 12 + x 31 ⋅ f 21 + x 32 ⋅ f 22 o 22 = x 22 ⋅ f 11 + x 23 ⋅ f 12 + x 32 ⋅ f 21 + x 33 ⋅ f 22 \begin{cases} o_{11} = x_{11} \cdot f_{11} + x_{12} \cdot f_{12} + x_{21} \cdot f_{21} + x_{22} \cdot f_{22} \\ o_{12} = x_{12} \cdot f_{11} + x_{13} \cdot f_{12} + x_{22} \cdot f_{21} + x_{23} \cdot f_{22} \\ o_{21} = x_{21} \cdot f_{11} + x_{22} \cdot f_{12} + x_{31} \cdot f_{21} + x_{32} \cdot f_{22} \\ o_{22} = x_{22} \cdot f_{11} + x_{23} \cdot f_{12} + x_{32} \cdot f_{21} + x_{33} \cdot f_{22} \end{cases} o11=x11f11+x12f12+x21f21+x22f22o12=x12f11+x13f12+x22f21+x23f22o21=x21f11+x22f12+x31f21+x32f22o22=x22f11+x23f12+x32f21+x33f22
这里暂时不考虑池化以及其他全连接层,仅考虑该卷积层一项的反向传播操作。

卷积层关于卷积核的反向传播过程

假设该任务的损失函数 L \mathcal L L,并且已知 L \mathcal L L关于输出矩阵 O \mathcal O O的梯度信息 ∂ L ∂ O \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal O}\end{aligned} OL
∂ L ∂ O = ( ∂ L ∂ o 11 , ∂ L ∂ o 12 ∂ L ∂ o 21 , ∂ L ∂ o 22 ) \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal O} = \begin{pmatrix} \begin{aligned} \frac{\partial \mathcal L}{\partial o_{11}},\frac{\partial \mathcal L}{\partial o_{12}} \\ \frac{\partial \mathcal L}{\partial o_{21}},\frac{\partial \mathcal L}{\partial o_{22}} \end{aligned} \end{pmatrix}\end{aligned} OL= o11L,o12Lo21L,o22L
假设使用的方法是梯度下降法 ( Gradient Descent,GD ) (\text{Gradient Descent,GD}) (Gradient Descent,GD),那么卷积核 F \mathcal F F内参数的更新过程可表示为:
F update ⇐ F − η ⋅ ∂ L ∂ F \mathcal F_{\text{update}} \Leftarrow \mathcal F - \eta \cdot \frac{\partial \mathcal L}{\partial \mathcal F} FupdateFηFL
依然使用链式求导法则 ∂ L ∂ F \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal F}\end{aligned} FL进行求解:
∂ L ∂ F = ∂ L ∂ O ⋅ ∂ O ∂ F \begin{aligned} \frac{\partial \mathcal L}{\partial \mathcal F} = \frac{\partial \mathcal L}{\partial \mathcal O} \cdot \frac{\partial \mathcal O}{\partial \mathcal F} \end{aligned} FL=OLFO
这里以 ∂ L ∂ f 11 \begin{aligned}\frac{\partial \mathcal L}{\partial f_{11}}\end{aligned} f11L为例。观察哪些输出结果中用到了 f 11 f_{11} f11——都用到了。因此, ∂ L ∂ f 11 \begin{aligned}\frac{\partial \mathcal L}{\partial f_{11}}\end{aligned} f11L可表示为:
这里所说的’都用到了‘是必然的,无论多大的输入数据,只要使用这种方式执行卷积,所有被卷积的像素点都会被 F \mathcal F F计算。
∂ L ∂ f 11 = ∂ L ∂ o 11 ⋅ ∂ o 11 ∂ f 11 + ∂ L ∂ o 12 ⋅ ∂ o 12 ∂ f 11 + ∂ L ∂ o 21 ⋅ ∂ o 21 ∂ f 11 + ∂ L ∂ o 22 ⋅ ∂ o 22 ∂ f 11 \begin{aligned} \frac{\partial \mathcal L}{\partial f_{11}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot \frac{\partial o_{11}}{\partial f_{11}} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot \frac{\partial o_{12}}{\partial f_{11}} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot \frac{\partial o_{21}}{\partial f_{11}} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot \frac{\partial o_{22}}{\partial f_{11}} \end{aligned} f11L=o11Lf11o11+o12Lf11o12+o21Lf11o21+o22Lf11o22
其中 ∂ L ∂ o ′ ( o ′ = o 11 , o 12 , o 21 , o 22 ) \begin{aligned}\frac{\partial \mathcal L}{\partial o'}(o'=o_{11},o_{12},o_{21},o_{22})\end{aligned} oL(o=o11,o12,o21,o22)都是已知项,以 ∂ o 11 ∂ f 11 \begin{aligned}\frac{\partial o_{11}}{\partial f_{11}}\end{aligned} f11o11为例,它的可表示为:
其他项同理,这里就不展开了。
∂ o 11 ∂ f 11 = x 11 \frac{\partial o_{11}}{\partial f_{11}} = x_{11} f11o11=x11
至此, ∂ L ∂ f 11 \begin{aligned}\frac{\partial \mathcal L}{\partial f_{11}}\end{aligned} f11L表示为:
∂ L ∂ f 11 = ∂ L ∂ o 11 ⋅ x 11 + ∂ L ∂ o 12 ⋅ x 12 + ∂ L ∂ o 21 ⋅ x 21 + ∂ L ∂ o 22 ⋅ x 22 \frac{\partial \mathcal L}{\partial f_{11}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot x_{11} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot x_{12} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot x_{21} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot x_{22} f11L=o11Lx11+o12Lx12+o21Lx21+o22Lx22

同理,其他三个参数 f 12 , f 21 , f 22 f_{12},f_{21},f_{22} f12,f21,f22的偏导表示为如下形式:
{ ∂ L ∂ f 12 = ∂ L ∂ o 11 ⋅ ∂ o 11 ∂ f 12 + ∂ L ∂ o 12 ⋅ ∂ o 12 ∂ f 12 + ∂ L ∂ o 21 ⋅ ∂ o 21 ∂ f 12 + ∂ L ∂ o 22 ⋅ ∂ o 22 ∂ f 12 ∂ L ∂ f 21 = ∂ L ∂ o 11 ⋅ ∂ o 11 ∂ f 21 + ∂ L ∂ o 12 ⋅ ∂ o 12 ∂ f 21 + ∂ L ∂ o 21 ⋅ ∂ o 21 ∂ f 21 + ∂ L ∂ o 22 ⋅ ∂ o 22 ∂ f 21 ∂ L ∂ f 22 = ∂ L ∂ o 11 ⋅ ∂ o 11 ∂ f 22 + ∂ L ∂ o 12 ⋅ ∂ o 12 ∂ f 22 + ∂ L ∂ o 21 ⋅ ∂ o 21 ∂ f 22 + ∂ L ∂ o 22 ⋅ ∂ o 22 ∂ f 22 \begin{cases} \begin{aligned} \frac{\partial \mathcal L}{\partial f_{12}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot \frac{\partial o_{11}}{\partial f_{12}} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot \frac{\partial o_{12}}{\partial f_{12}} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot \frac{\partial o_{21}}{\partial f_{12}} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot \frac{\partial o_{22}}{\partial f_{12}} \\ \frac{\partial \mathcal L}{\partial f_{21}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot \frac{\partial o_{11}}{\partial f_{21}} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot \frac{\partial o_{12}}{\partial f_{21}} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot \frac{\partial o_{21}}{\partial f_{21}} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot \frac{\partial o_{22}}{\partial f_{21}} \\ \frac{\partial \mathcal L}{\partial f_{22}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot \frac{\partial o_{11}}{\partial f_{22}} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot \frac{\partial o_{12}}{\partial f_{22}} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot \frac{\partial o_{21}}{\partial f_{22}} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot \frac{\partial o_{22}}{\partial f_{22}} \\ \end{aligned} \end{cases} f12L=o11Lf12o11+o12Lf12o12+o21Lf12o21+o22Lf12o22f21L=o11Lf21o11+o12Lf21o12+o21Lf21o21+o22Lf21o22f22L=o11Lf22o11+o12Lf22o12+o21Lf22o21+o22Lf22o22
对应的结果可表示为:
{ ∂ L ∂ f 12 = ∂ L ∂ o 11 ⋅ x 12 + ∂ L ∂ o 12 ⋅ x 13 + ∂ L ∂ o 21 ⋅ x 22 + ∂ L ∂ o 22 ⋅ x 23 ∂ L ∂ f 21 = ∂ L ∂ o 11 ⋅ x 21 + ∂ L ∂ o 12 ⋅ x 22 + ∂ L ∂ o 21 ⋅ x 31 + ∂ L ∂ o 22 ⋅ x 32 ∂ L ∂ f 22 = ∂ L ∂ o 11 ⋅ x 22 + ∂ L ∂ o 12 ⋅ x 23 + ∂ L ∂ o 21 ⋅ x 32 + ∂ L ∂ o 22 ⋅ x 33 \begin{cases} \begin{aligned} \frac{\partial \mathcal L}{\partial f_{12}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot x_{12} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot x_{13} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot x_{22} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot x_{23} \\ \frac{\partial \mathcal L}{\partial f_{21}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot x_{21} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot x_{22} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot x_{31} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot x_{32} \\ \frac{\partial \mathcal L}{\partial f_{22}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot x_{22} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot x_{23} + \frac{\partial \mathcal L}{\partial o_{21}} \cdot x_{32} + \frac{\partial \mathcal L}{\partial o_{22}} \cdot x_{33} \\ \end{aligned} \end{cases} f12L=o11Lx12+o12Lx13+o21Lx22+o22Lx23f21L=o11Lx21+o12Lx22+o21Lx31+o22Lx32f22L=o11Lx22+o12Lx23+o21Lx32+o22Lx33

根据上述结果,我们可以发现,损失函数 L \mathcal L L关于卷积核 F \mathcal F F的导数 ∂ L ∂ F \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal F}\end{aligned} FL就是:数据矩阵 X \mathcal X X导数矩阵 ∂ L ∂ O \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal O}\end{aligned} OL卷积结果。其中卷积核就是导数矩阵
∂ L ∂ F = Convolution [ ( x 11 , x 12 , x 13 x 21 , x 22 , x 23 x 31 , x 32 , x 33 ) , ( ∂ L ∂ o 11 , ∂ L ∂ o 12 ∂ L ∂ o 21 , ∂ L ∂ o 22 ) ] \frac{\partial \mathcal L}{\partial \mathcal F} = \text{Convolution} \left[\begin{pmatrix} x_{11},x_{12},x_{13} \\ x_{21},x_{22},x_{23} \\ x_{31},x_{32},x_{33} \end{pmatrix},\begin{pmatrix} \begin{aligned} \frac{\partial \mathcal L}{\partial o_{11}},\frac{\partial \mathcal L}{\partial o_{12}} \\ \frac{\partial \mathcal L}{\partial o_{21}},\frac{\partial \mathcal L}{\partial o_{22}} \\ \end{aligned} \end{pmatrix}\right] FL=Convolution x11,x12,x13x21,x22,x23x31,x32,x33 , o11L,o12Lo21L,o22L

卷积层关于输入的反向传播过程

依然基于上述的场景构建,区别在于此时的 X \mathcal X X不是输入层,而是某一个隐藏层的输出,以为特征 x 11 x_{11} x11例,计算它的反向传播过程

  • 基于梯度下降法条件下, x 11 x_{11} x11参数更新过程可表示为:
    x 11 ⇐ x 11 − η ⋅ ∂ L ∂ x 11 x_{11} \Leftarrow x_{11} - \eta \cdot \frac{\partial \mathcal L}{\partial x_{11}} x11x11ηx11L
  • 其中 ∂ L ∂ x 11 \begin{aligned}\frac{\partial \mathcal L}{\partial x_{11}}\end{aligned} x11L通过链式求导法则可表示为如下形式:
    回归上式,其中 x 11 x_{11} x11仅在 o 11 o_{11} o11中出现过一次,并且 ∂ o 11 ∂ x 11 = f 11 \begin{aligned}\frac{\partial o_{11}}{\partial x_{11}} =f_{11}\end{aligned} x11o11=f11,后续同理。
    ∂ L ∂ x 11 = ∂ L ∂ O ⋅ ∂ O ∂ x 11 = ∂ L ∂ o 11 ⋅ f 11 \begin{aligned} \frac{\partial \mathcal L}{\partial x_{11}} & = \frac{\partial \mathcal L}{\partial \mathcal O} \cdot \frac{\partial \mathcal O}{\partial x_{11}} \\ & = \frac{\partial \mathcal L}{\partial o_{11}} \cdot f_{11} \end{aligned} x11L=OLx11O=o11Lf11
  • 其他项 x 12 , x 13 , ⋯ x_{12},x_{13},\cdots x12,x13,同理。(这里仅示例 x 12 , x 22 x_{12},x_{22} x12,x22这两个出现次数不同的项,其余略)
    有意思的是,越趋近于边缘上的项,与其相关的导数项就越少。其中 x 22 x_{22} x22位于矩阵的最中间,在输出中出现了 4 4 4次;相反,在角落处的 x 11 x_{11} x11仅出现了一次。
    { ∂ L ∂ x 12 = ∂ L ∂ o 11 ⋅ f 12 + ∂ L ∂ o 12 ⋅ f 11 ∂ L ∂ x 22 = ∂ L ∂ o 11 ⋅ f 22 + ∂ L ∂ o 12 ⋅ f 21 + ∂ L ∂ o 21 ⋅ f 12 + ∂ L ∂ o 22 f 11 \begin{cases} \begin{aligned} & \frac{\partial \mathcal L}{\partial x_{12}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot f_{12} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot f_{11} \\ & \frac{\partial \mathcal L}{\partial x_{22}} = \frac{\partial \mathcal L}{\partial o_{11}} \cdot f_{22} + \frac{\partial \mathcal L}{\partial o_{12}} \cdot f_{21} +\frac{\partial \mathcal L}{\partial o_{21}} \cdot f_{12} + \frac{\partial \mathcal L}{\partial o_{22}} f_{11} \end{aligned} \end{cases} x12L=o11Lf12+o12Lf11x22L=o11Lf22+o12Lf21+o21Lf12+o22Lf11
    可以发现:此时输入部分 9 9 9项的梯度,均可以使用 ∂ L ∂ O \begin{aligned}\frac{\partial L}{\partial \mathcal O}\end{aligned} OL旋转 180 180 180度卷积核完全卷积进行表达:
    • 其中翻转后的卷积核 F T \mathcal F^T FT表示为:
      F T = ( f 22 , f 21 f 12 , f 11 ) \mathcal F^T = \begin{pmatrix}f_{22},f_{21} \\ f_{12},f_{11}\end{pmatrix} FT=(f22,f21f12,f11)
    • 所谓完全卷积 就是指两矩阵任意重合的方式,其重合部分的内积是 ∂ L ∂ X \begin{aligned}\frac{\partial \mathcal L}{\partial \mathcal X}\end{aligned} XL内的一个解:
      感兴趣的小伙伴可以将所有的 9 9 9项列出来试一试。
      ∂ L ∂ X = Convolution [ Related ( F ) , ∂ L ∂ O ] \frac{\partial \mathcal L}{\partial \mathcal X} = \text{Convolution} \left[\text{Related}(\mathcal F),\frac{\partial \mathcal L}{\partial \mathcal O}\right] XL=Convolution[Related(F),OL]

相关参考:
【低层视觉】低层视觉中常见的卷积核汇总
从“卷积”、到“图像卷积操作”、再到“卷积神经网络”,“卷积”意义的3次改变
超详细一步一步推导反向传播(4)—卷积层卷积核的反向传播过程
超详细一步一步推导反向传播(5)—卷积层输入的反向传播过程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《花雕学AI》新版必应 Bing 登场:轻松注册,一站式搜索、聊天与绘画应有尽有

引言: 你是否曾经在网上搜索信息时感到困惑或沮丧?你是否曾经想要在网上创造一些有趣或有用的内容,却不知道从何开始?你是否曾经想要用文字描述一个图像,却无法找到合适的图片?如果你的答案是肯定的&#x…

ChatGPT将抢占谁的工作,未来如何应对

“AI人工智能领域里程碑式应用” ChatGPT影响力已经越来越大,激起大家强烈好奇心的同时,也让一些人发出了“感觉自己快要失业了”的焦虑,今天先说一下哪些人的工作会受到 ChatGPT等AI人工智能影响 从工业时代到数字时代这100多年的发展历程来…

【华为机试】——HJ4 字符串分隔

【华为机试】——HJ5 进制转换😎 前言🙌HJ4 字符串分隔方法一:巧用scanf的输入格式方法二:循环分解思想 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上…

泛型的特点和深浅拷贝的区别以及不相等对象的hashcode值的问题

永远都不为自己选择的道路而后悔,人生如同坐火车,风景再美也会后退,流逝的时间和邂逅的人终会渐行渐远,前行的始终是自己 泛型常用特点 泛型是JavaSE1.5之后的特性,《Java核心技术》中对泛型的定义是: “…

数据血缘分析工具SQLFLow自动画出数据库的 ER 模型

马哈鱼数据血缘分析器通过分析你所提供的 SQL 脚本,或者连接到数据库,可以自动画出数据库的 ER 模型,可视化表和字段的关系,帮助你迅速了解数据库的设计模型,进行高效的团队沟通。 马哈鱼通过两种途径来为你自动可视化…

MySQL中使用delete_at(时间戳)作为逻辑删除标记时如何使用MyBatis-Plus逻辑删除组件插入时间戳,以及如何解决自动填充失效的问题

背景 MySQL中使用delete_at(时间戳)作为逻辑删除标记 在业务中,使用逻辑删除是普遍做法,通常会使用一个名为deleted(0/1)的字段表示删除状态。 但是如果遇到有唯一约束,且可能反复删除和重新…

chatgpt如何引入本地知识?我们来看下emnlp 2022如何将本地图谱知识引入到任务型对话系统中

一、概述 title:Injecting Domain Knowledge in Language Models for Task-Oriented Dialogue Systems 论文地址:https://arxiv.org/abs/2212.08120 代码:GitHub - amazon-science/domain-knowledge-injection 1.1 Motivation 如何在PLM…

SIFT描述子实现

参考&#xff1a;SIFT图像匹配原理及python实现&#xff08;源码实现及基于opencv实现&#xff09; #include <iostream> #include <opencv2/opencv.hpp> #define _USE_MATH_DEFINES #include <math.h> #include <numeric>float mod_float(float x, f…

YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析

前言 最近我在研究YOLOv5的改进&#xff0c;一个模型的好坏、改进后效果如何都是需要一系列指标来判断的。这篇就是我将这几天学到的内容做一下总结。 友情提醒&#xff1a;本篇干货较多&#xff0c;建议先再慢慢看噢&#xff01; ​ &#x1f340;本人YOLOv5源码详解系列&…

大规模并行处理架构Doris入门操作

目录 1 基本概念1.1 Row & Column1.2 Tablet & Partition 2 创建用户2.1 创建数据库并赋予权限2.2 Doris 建表、数据导入与删除 3 建表&#xff08;Create Table&#xff09;3.1 字段类型3.2 数据划分3.3 关于 Partition 和 Bucket 的数量和数据量的建议3.4 演示单分区…

UML状态图详解

上篇文章&#xff0c;介绍了UML的基础知识&#xff0c;并详细介绍了UML中类图的知识点与画法。 本篇&#xff0c;来继续介绍UML中的另一种图——状态图。 1 UML状态图简介 状态图&#xff0c;显示一个状态机&#xff0c;属于UML活动图。 UML具有许多不同类型的图表&#xff…

<代码分享> 分支定界算法的 Python 代码框架

本文以求解整数规划模型为例&#xff0c;提供分支定界算法的 Python 代码框架&#xff0c;期待完善、指正和交流。 文件结构 具体代码 problem.py 定义问题的格式&#xff1a; from typing import Listclass Problem(object):"""problem"""de…

OneAPI 编译cp2k 9.1和cp2k 2023.1

环境信息&#xff1a; Rocky Linux 8.6 Linux server 4.18.0-425.19.2.el8_7.x86_64 gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC) OneAPI 2023 Intel(R) oneAPI DPC/C Compiler 2023.0.0 (2023.0.0.20221201) ifort version 2021.8.0 一、编译cp2k 9.1 这里用的…

linux系统下常用软件的安装与操作实现

本文来介绍下如何在 Linux 上安装 Windows 上常用的软件&#xff0c;桌面更多的用的是 Ubuntu &#xff0c;下面就以 Ubuntu 为例。 目录 一、安装环境 二、安装步骤 三、总结 一、安装环境 本文使用的安装环境&#xff0c;如下所示&#xff1a; linuxylinuxy:~$ cat /proc…

【Python】【进阶篇】25、Django for标签详解

目录 25、Django for标签详解1. for标签的使用2. for标签嵌套使用3. forloop变量详解 25、Django for标签详解 通过上一节的《Django if标签详解》的讲解&#xff0c;我相信大家对于模板标签已经不再陌生&#xff0c;在本节我们再给大家隆重介绍一位最熟悉的陌生人&#xff0c…

如何熟练的使用trtexec

目录 如何熟练的使用trtexec前言1. 参数解释1.1 Model Options1.2 Build Options1.3 Inference Options1.4 Reporting Options1.5 System Options1.6 完整的参数 如何熟练的使用trtexec 前言 杜老师推出的 trtexec 工具的使用课程&#xff0c;链接。记录下个人学习笔记&#x…

禁止Windows更新自动安装驱动程序

禁止Windows更新自动安装驱动程序 问题解决方案方案1&#xff1a;修改系统设置方案2&#xff1a;修改组策略方案3&#xff1a;修改注册表方案4&#xff1a;回退驱动 问题 Windows更新时&#xff0c;会自动更新驱动程序&#xff0c;甚至有时会将驱动程序反向更新&#xff0c;替…

使用 webdriver API 编写自动化脚本的基本语法

文章目录 1. 打开和关闭浏览器1&#xff09;打开浏览器并访问 URL2&#xff09;关闭浏览器窗口 2. 元素的定位1&#xff09;以 id 定位元素2&#xff09;以 name 定位元素3&#xff09;以 tag name 定位元素4&#xff09;以 class name 定位元素5&#xff09;以 xpath 定位元素…

第九章 控制单元的功能课后习题

指令周期有四个阶段&#xff1a;取值 间址 执行 中断 &#xff0c;控制单元为了完成不同指令会发出不同的操作命令&#xff0c;这些操作信号控制着计算机所有部件有次序的完成不同的操作&#xff0c;以达到执行程序的目的。 控制单元的外特性 9.2控制单元的功能是什么?其输入…

【Java+GS】GeoServer——使用Java发布图层(SHP文件和DB数据库),附自用工具类

文章目录 SHP文件发布逻辑 1、获取到geoserver的manager对象2、调用createWorkArea方法&#xff0c;参入manager&#xff0c;创建空间空间 workArea3、调用createShpDataPool方法&#xff0c;创建数据存储4、发布样式Style.5、发布图层 调用业务层库发布shp文件图层业务逻辑如下…