缺陷检测学习笔记20240912
文章目录
- 跳跃连接(Skip Connections)
- 基本原理
- 目的
- 维度提升层
- 步骤
- 作用
- 反卷积
- 1. 反卷积层的概念
- 2. 反卷积的操作原理
- 具体步骤:
- 3. 反卷积与上采样的对比
- 插值上采样
- 反卷积上采样
- 4. 反卷积的优势与挑战
- 优势:
- **查询(Query)**、**键(Key)**和**值(Value)** **注意力机制(Attention Mechanism)**
- 1. 基本概念
- 2. 计算流程
- 自注意力机制
- 注意力得分
- 3. 维度解释
- 4. 多头注意力机制
- 5. 总结
- 具体例子
- 场景设置
- 具体的查询、键和值
- 1. 查询(Query)、键(Key)和值(Value)初始化
- 2. 计算注意力权重
- 3. 计算加权和值
- 4. 使用权重组合值向量
- 总结
- 光谱角度距离函数(SAD)
- 光谱角距离的公式
- 例子
跳跃连接(Skip Connections)
基本原理
Skip Connections(跳跃连接) 是深度神经网络中的一种结构,它允许在网络中跨越一个或多个层,将较早的层的输出直接传递到后续的层。
这种设计最初是为了缓解梯度消失和梯度爆炸的问题,帮助训练更深层的神经网络。跳跃连接通过提供额外的路径使得信息可以在网络中更快地传播。
在传统的神经网络中,每一层的输出都传递给下一层,而在Skip Connections中,某一层的输出可以绕过中间的一些层,直接传递给后面的层,最常见的形式是残差连接(Residual Connection)。其数学表达如下:
y = F ( x ) + x y = \mathcal{F}(x) + x y=F(x)+x
其中,
F
(
x
)
\mathcal{F}(x)
F(x) 是经过若干层处理后的输出,x
是直接跳跃连接的输入。
目的
-
缓解梯度消失和梯度爆炸:深层网络容易出现梯度消失或爆炸的问题,特别是在训练时。Skip Connections提供了从早期层直接传播梯度的路径,使得反向传播时梯度能够顺畅通过多个层。
-
避免信息丢失:随着层数的增加,网络可能丢失一些有用的信息。通过Skip Connections,早期层的信息可以直接传递到后面的层,减少了信息的损失。
-
加速训练:Skip Connections减少了深层网络训练的难度,因为它为网络提供了多条路径,使得信息可以更有效地流动。
-
提高模型的表达能力:跳跃连接为网络提供了一个更加灵活的结构,使其能够学习到更复杂的特征表示。
维度提升层(或称 维度扩展层)主要用于将输入的低维特征扩展为更高维度的特征,以适应后续模型中对高维特征的处理需求。在深度学习中,维度提升通常发生在处理时空、光谱等多维数据时,如 2D 图像转换为 3D 卷积操作的场景。
维度提升层
步骤
-
Unsqueeze 操作:
- 在 PyTorch 和其他深度学习框架中,
unsqueeze
是一种常见操作。它通过在指定的维度插入一个大小为 1 的维度,从而扩展数据的维度。 - 例如,将 2D 图像数据(宽 × 高)通过
unsqueeze
操作提升为 3D 数据(通道 × 宽 × 高),以便进行 3D 卷积操作。
- 在 PyTorch 和其他深度学习框架中,
-
全连接层(Fully Connected Layer):
- 全连接层可以通过权重矩阵将低维数据映射到高维空间,从而提升特征的维度。
- 例如,输入数据可以通过全连接层的权重矩阵转换为更高维的特征表示,用于后续的高维特征提取。
-
卷积层(Convolution Layer):
- 卷积操作不仅可以提取特征,还可以通过设置不同的卷积核尺寸和步长,提升数据的维度。
- 比如在 2D 卷积的基础上,通过 3D 卷积来将输入的 2D 图像扩展到 3D 特征空间。
- 3D 卷积核会在输入数据的三个维度上滑动(例如:宽度、高度和深度),通过对局部的三维邻域进行加权求和,从而提取具有空间和时间(或光谱)信息的特征。时间维度(例如视频的帧序列) 或深度维度(例如多光谱图像的光谱通道)
作用
- 信息丰富度:维度提升可以将输入的低维信息扩展到更高维度,使得模型能够捕捉到更多的上下文或局部特征。
- 空间与光谱的联合表示:在一些应用场景中(如遥感图像、医学成像),不同维度包含不同类型的信息,通过维度提升可以同时考虑空间特征和光谱特征的关联。
- 适应不同的模型结构:有时为了适配后续的网络结构(如 3D 卷积网络或 Transformer 结构),需要将低维输入提升到与目标网络输入相匹配的高维。
反卷积
反卷积层(Transposed Convolution Layer),也称为转置卷积层、反向卷积或上采样卷积,是深度学习中常用于**上采样(upsampling)**的操作。它与卷积层的主要区别在于,它可以将低分辨率的特征图变换为高分辨率的特征图。反卷积广泛应用于生成模型(如 GANs)、图像分割、语义分割等任务中。
1. 反卷积层的概念
与传统的卷积操作相反,反卷积层是将输入数据的空间尺寸(宽度和高度)放大,而不是缩小。具体来说,反卷积层能够将输入的低分辨率特征图通过学习的卷积核生成一个更大尺寸的输出特征图。虽然名字叫“反卷积”,但它并不是普通卷积的数学逆操作,而是一种结构化的上采样过程。
2. 反卷积的操作原理
以 2D 反卷积为例,假设输入特征图为大小为 3 × 3 3 \times 3 3×3 的矩阵,卷积核大小为 2 × 2 2 \times 2 2×2,步长为 2。在执行反卷积操作时,输入的每一个值将扩展到输出矩阵的较大区域,类似于普通卷积的反向操作。
具体步骤:
- 插入空隙:反卷积将输入张量“扩展”到更大的输出空间。例如,对于步长为 2 的反卷积,原始输入的元素之间插入零,扩展成更大的张量。
- 卷积操作:使用预定义的卷积核,对扩展后的输入进行标准的卷积运算,从而计算得到最终的上采样结果。
3. 反卷积与上采样的对比
反卷积是一种上采样方法,但与插值法(如双线性插值、最近邻插值)不同。反卷积是一种可学习的上采样,通过反向传播算法优化卷积核,使得它能够学习到更加复杂的上采样变换。
插值上采样
- 最近邻插值和双线性插值是两种常见的上采样方法,它们根据固定的插值规则将图像或特征图扩展为更高分辨率。
- 这些插值方法不具备学习能力,无法根据任务学习到更复杂的特征映射。
反卷积上采样
- 反卷积通过学习卷积核的权重,可以实现比插值方法更加灵活和有效的上采样,尤其是在图像生成任务中具有优势。
- 它可以根据数据特性和目标任务自动学习最佳的上采样参数。
4. 反卷积的优势与挑战
优势:
- 可学习的上采样:相比于简单的插值上采样,反卷积可以通过学习卷积核的权重,获得更加灵活和高效的上采样结果。
- 广泛的应用:反卷积被广泛应用于生成模型、图像分割、自动编码器等任务中,在这些任务中需要将低维特征映射到高维输出。
查询(Query)、键(Key)和值(Value) 注意力机制(Attention Mechanism)
1. 基本概念
- 查询(Query,Q):表示查询输入信息的向量,通常代表一个要寻找相关性或注意力权重的目标。
- 键(Key,K):表示潜在匹配的向量,每个键与某个输入向量相关联,它可以帮助决定查询应该关注哪些值。
- 值(Value,V):与键配对的向量,表示实际输入信息的内容,是最后加权求和后输出的部分。
注意力机制的核心思想是,对于每一个查询,我们计算它与所有键的相似度(通常通过点积或其他相似度度量),然后利用这个相似度加权对应的值,得到最终的输出。每一个查询都对应一个加权求和的输出值。
2. 计算流程
在注意力机制中,查询、键和值通过相似度计算来确定它们之间的相关性,具体计算过程如下:
自注意力机制
假设有一个输入矩阵
X
∈
R
n
×
d
model
X \in \mathbb{R}^{n \times d_{\text{model}}}
X∈Rn×dmodel,其中
n
n
n 是序列长度,
d
model
d_{\text{model}}
dmodel 是每个词向量的维度。对于该输入,我们首先通过线性变换得到查询矩阵
Q
Q
Q、键矩阵
K
K
K 和值矩阵
V
V
V:
Q
=
X
W
Q
,
K
=
X
W
K
,
V
=
X
W
V
Q = XW_Q, \quad K = XW_K, \quad V = XW_V
Q=XWQ,K=XWK,V=XWV
其中,
W
Q
,
W
K
,
W
V
∈
R
d
model
×
d
k
W_Q, W_K, W_V \in \mathbb{R}^{d_{\text{model}} \times d_k}
WQ,WK,WV∈Rdmodel×dk 是参数矩阵,
d
k
d_k
dk 是键的维度,
d
v
d_v
dv 是值的维度(通常在实现中,
d
k
=
d
v
d_k = d_v
dk=dv)。
注意力得分
查询和键的点积结果经过缩放处理后通过 softmax 函数得到注意力得分,具体公式为:
Attention
(
Q
,
K
,
V
)
=
softmax
(
Q
K
T
d
k
)
V
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
Attention(Q,K,V)=softmax(dkQKT)V
其中,
1
d
k
\frac{1}{\sqrt{d_k}}
dk1 是缩放因子,用来避免点积结果过大引起梯度消失问题。
- Q K T QK^T QKT:计算查询和键的相似性,结果是一个 n × n n \times n n×n 的矩阵,表示每个查询与所有键的相似度。
- softmax:将相似度转换为概率权重。
- V V V:通过加权的方式将值矩阵进行加权求和得到最终的输出。
3. 维度解释
- 查询(Q)、键(K)和值(V)的维度:
- 假设输入序列长度为 n n n,输入特征的维度为 d model d_{\text{model}} dmodel。
- 查询矩阵 Q Q Q 的维度为 n × d k n \times d_k n×dk,其中 d k d_k dk 是键的维度(通常 d k = d model d_k = d_{\text{model}} dk=dmodel)。
- 键矩阵 K K K 的维度也是 n × d k n \times d_k n×dk。
- 值矩阵 V V V 的维度为 n × d v n \times d_v n×dv,其中 d v d_v dv 是值的维度(通常 d v = d k d_v = d_k dv=dk)。
其中, d k d_k dk 和 d v d_v dv 是超参数,可以独立设定,通常 d k = d v = d model d_k = d_v = d_{\text{model}} dk=dv=dmodel,但在多头注意力(Multi-Head Attention)中,它们的具体维度可能会变化。
4. 多头注意力机制
为了提升模型的表达能力,Transformer 使用了多头注意力机制,将查询、键和值分割成多个子空间(注意力头),每个子空间执行独立的注意力计算。
在多头注意力中,查询、键和值会被分成
h
h
h 个头,每个头的维度为
d
k
/
h
d_k / h
dk/h,即:
Q
h
=
X
W
Q
h
,
K
h
=
X
W
K
h
,
V
h
=
X
W
V
h
Q_h = XW_Q^h, \quad K_h = XW_K^h, \quad V_h = XW_V^h
Qh=XWQh,Kh=XWKh,Vh=XWVh
每个头的计算结果都会合并起来,最终通过一个线性层回到原始维度。
5. 总结
- 查询(Query,Q):要进行注意力操作的目标。
- 键(Key,K):用来计算与查询的相关性。
- 值(Value,V):用来加权求和的目标。
- d k d_k dk:键的维度,是一个可调的超参数。
通过注意力机制,可以动态地选择输入信息的相关部分,从而提升模型的性能。
具体例子
前面只要看下大概是什么意思即可。直接看下面的例子,直接感受。让我们通过一个简单的例子来理解查询(Query)、**键(Key)和值(Value)**在注意力机制中的作用。
好的,接下来我将通过一个具体的图像例子,详细展示查询(Query)、**键(Key)和值(Value)**的计算过程。
场景设置
我们假设有一张2x2像素的图像,它非常简单,只有4个像素。每个像素有3个通道(RGB),也就是说每个像素有一个3维的向量表示颜色信息。
- 该图像被分成4个区域,分别表示每个像素的特征。
为了简化表示,我们用以下数字矩阵表示每个像素的RGB值:
Pixel 1: [1, 0, 1]
Pixel 2: [0, 1, 0]
Pixel 3: [1, 1, 0]
Pixel 4: [0, 0, 1]
具体的查询、键和值
在注意力机制中,假设我们想要计算 Pixel 1 与其他像素的相关性,然后基于此生成一个新的表示。我们将每个像素生成一个查询向量、键向量和值向量,这些向量将用于计算注意力权重。
1. 查询(Query)、键(Key)和值(Value)初始化
假设我们有如下的查询、键和值向量,每个像素都可以生成它们:
Pixel 1 (Query/Key/Value):
Query: [1, 0, 1]
Key: [1, 0, 1]
Value: [1, 0, 1]
Pixel 2 (Query/Key/Value):
Key: [0, 1, 0]
Value: [0, 1, 0]
Pixel 3 (Query/Key/Value):
Key: [1, 1, 0]
Value: [1, 1, 0]
Pixel 4 (Query/Key/Value):
Key: [0, 0, 1]
Value: [0, 0, 1]
在这里,Pixel 1
的查询向量是 [1, 0, 1]
,而每个像素都有各自的键和值向量。
2. 计算注意力权重
为了计算Pixel 1与其他像素的相关性,我们需要计算它的查询向量与其他像素的键向量之间的相似度。这里我们使用**点积(Dot Product)**来衡量相似度。
-
Pixel 1 和 Pixel 1 的相似度:
[ 1 , 0 , 1 ] ⋅ [ 1 , 0 , 1 ] = 1 × 1 + 0 × 0 + 1 × 1 = 2 [1, 0, 1] \cdot [1, 0, 1] = 1 \times 1 + 0 \times 0 + 1 \times 1 = 2 [1,0,1]⋅[1,0,1]=1×1+0×0+1×1=2 -
Pixel 1 和 Pixel 2 的相似度:
[ 1 , 0 , 1 ] ⋅ [ 0 , 1 , 0 ] = 1 × 0 + 0 × 1 + 1 × 0 = 0 [1, 0, 1] \cdot [0, 1, 0] = 1 \times 0 + 0 \times 1 + 1 \times 0 = 0 [1,0,1]⋅[0,1,0]=1×0+0×1+1×0=0 -
Pixel 1 和 Pixel 3 的相似度:
[ 1 , 0 , 1 ] ⋅ [ 1 , 1 , 0 ] = 1 × 1 + 0 × 1 + 1 × 0 = 1 [1, 0, 1] \cdot [1, 1, 0] = 1 \times 1 + 0 \times 1 + 1 \times 0 = 1 [1,0,1]⋅[1,1,0]=1×1+0×1+1×0=1 -
Pixel 1 和 Pixel 4 的相似度:
[ 1 , 0 , 1 ] ⋅ [ 0 , 0 , 1 ] = 1 × 0 + 0 × 0 + 1 × 1 = 1 [1, 0, 1] \cdot [0, 0, 1] = 1 \times 0 + 0 \times 0 + 1 \times 1 = 1 [1,0,1]⋅[0,0,1]=1×0+0×0+1×1=1
所以我们得到的相似度权重是:
[2, 0, 1, 1]
3. 计算加权和值
接下来,我们将这些相似度权重转换为概率分布,使用Softmax函数进行归一化:
Softmax ( 2 , 0 , 1 , 1 ) = [ e 2 e 2 + e 0 + e 1 + e 1 , e 0 e 2 + e 0 + e 1 + e 1 , e 1 e 2 + e 0 + e 1 + e 1 , e 1 e 2 + e 0 + e 1 + e 1 ] \text{Softmax}(2, 0, 1, 1) = \left[ \frac{e^2}{e^2 + e^0 + e^1 + e^1}, \frac{e^0}{e^2 + e^0 + e^1 + e^1}, \frac{e^1}{e^2 + e^0 + e^1 + e^1}, \frac{e^1}{e^2 + e^0 + e^1 + e^1} \right] Softmax(2,0,1,1)=[e2+e0+e1+e1e2,e2+e0+e1+e1e0,e2+e0+e1+e1e1,e2+e0+e1+e1e1]
计算后得到大致的概率分布:
[0.49, 0.09, 0.21, 0.21]
这些值就是Pixel 1
对自身和其他像素的注意力权重。
4. 使用权重组合值向量
最后,我们将这些注意力权重与每个像素的值向量进行加权求和,得到最终的输出表示。
输出向量为:
Output
=
0.49
×
[
1
,
0
,
1
]
+
0.09
×
[
0
,
1
,
0
]
+
0.21
×
[
1
,
1
,
0
]
+
0.21
×
[
0
,
0
,
1
]
\text{Output} = 0.49 \times [1, 0, 1] + 0.09 \times [0, 1, 0] + 0.21 \times [1, 1, 0] + 0.21 \times [0, 0, 1]
Output=0.49×[1,0,1]+0.09×[0,1,0]+0.21×[1,1,0]+0.21×[0,0,1]
逐项计算:
Output
R
=
0.49
×
1
+
0.09
×
0
+
0.21
×
1
+
0.21
×
0
=
0.70
\text{Output}_R = 0.49 \times 1 + 0.09 \times 0 + 0.21 \times 1 + 0.21 \times 0 = 0.70
OutputR=0.49×1+0.09×0+0.21×1+0.21×0=0.70
Output
G
=
0.49
×
0
+
0.09
×
1
+
0.21
×
1
+
0.21
×
0
=
0.30
\text{Output}_G = 0.49 \times 0 + 0.09 \times 1 + 0.21 \times 1 + 0.21 \times 0 = 0.30
OutputG=0.49×0+0.09×1+0.21×1+0.21×0=0.30
Output
B
=
0.49
×
1
+
0.09
×
0
+
0.21
×
0
+
0.21
×
1
=
0.70
\text{Output}_B = 0.49 \times 1 + 0.09 \times 0 + 0.21 \times 0 + 0.21 \times 1 = 0.70
OutputB=0.49×1+0.09×0+0.21×0+0.21×1=0.70
最终输出的值向量为:
Output
=
[
0.70
,
0.30
,
0.70
]
\text{Output} = [0.70, 0.30, 0.70]
Output=[0.70,0.30,0.70]
这个结果就是通过注意力机制,结合查询、键和值的加权计算后,得到的Pixel 1
的更新表示。
总结
在这个例子中:
- 查询来自
Pixel 1
,表示我们希望关注的内容。 - 键来自每个像素,表示要与查询进行对比的特征。
- 值也来自每个像素,表示最终用于生成输出的特征。
- 通过查询和键的相似度计算,生成权重,并根据权重对值进行加权组合,生成新的输出特征。
光谱角度距离函数(SAD)
光谱角距离(Spectral Angle Distance, SAD)是一种用于衡量两个光谱向量之间相似性的重要度量方法,常用于高光谱图像处理和遥感领域。SAD 通过计算两个光谱向量的夹角来判断它们的相似性。因为它关注的是向量的方向而非大小,因此对光谱的亮度变化不敏感,这使得它在处理光谱反射率数据时十分有效。
光谱角距离的公式
假设有两个光谱向量 X \mathbf{X} X 和 Y \mathbf{Y} Y,它们分别表示某个像素在不同波段下的反射率值。光谱角距离的计算公式为:
SAD ( X , Y ) = cos − 1 ( X ⋅ Y ∣ X ∣ ∣ Y ∣ ) \text{SAD}(\mathbf{X}, \mathbf{Y}) = \cos^{-1} \left( \frac{\mathbf{X} \cdot \mathbf{Y}}{|\mathbf{X}| |\mathbf{Y}|} \right) SAD(X,Y)=cos−1(∣X∣∣Y∣X⋅Y)
其中:
- X ⋅ Y \mathbf{X} \cdot \mathbf{Y} X⋅Y 表示两个向量的点积;
- ∣ X ∣ |\mathbf{X}| ∣X∣ 和 ∣ Y ∣ |\mathbf{Y}| ∣Y∣ 分别表示向量 X \mathbf{X} X 和 Y \mathbf{Y} Y 的模(即长度);
- cos − 1 \cos^{-1} cos−1 表示反余弦函数,用于将点积值转换为角度。
很简单的向量求角度。
例子
假设我们有两个波段为3的光谱向量:(原来就是高中时学的向量求夹角)
X = [ 0.4 , 0.5 , 0.6 ] , Y = [ 0.35 , 0.55 , 0.65 ] \mathbf{X} = [0.4, 0.5, 0.6], \quad \mathbf{Y} = [0.35, 0.55, 0.65] X=[0.4,0.5,0.6],Y=[0.35,0.55,0.65]
-
计算点积:
X ⋅ Y = ( 0.4 × 0.35 ) + ( 0.5 × 0.55 ) + ( 0.6 × 0.65 ) = 0.14 + 0.275 + 0.39 = 0.805 \mathbf{X} \cdot \mathbf{Y} = (0.4 \times 0.35) + (0.5 \times 0.55) + (0.6 \times 0.65) = 0.14 + 0.275 + 0.39 = 0.805 X⋅Y=(0.4×0.35)+(0.5×0.55)+(0.6×0.65)=0.14+0.275+0.39=0.805 -
计算向量的模:
∣ X ∣ = 0. 4 2 + 0. 5 2 + 0. 6 2 = 0.16 + 0.25 + 0.36 = 0.77 = 0.877 |\mathbf{X}| = \sqrt{0.4^2 + 0.5^2 + 0.6^2} = \sqrt{0.16 + 0.25 + 0.36} = \sqrt{0.77} = 0.877 ∣X∣=0.42+0.52+0.62=0.16+0.25+0.36=0.77=0.877
∣ Y ∣ = 0.3 5 2 + 0.5 5 2 + 0.6 5 2 = 0.1225 + 0.3025 + 0.4225 = 0.8475 = 0.92 |\mathbf{Y}| = \sqrt{0.35^2 + 0.55^2 + 0.65^2} = \sqrt{0.1225 + 0.3025 + 0.4225} = \sqrt{0.8475} = 0.92 ∣Y∣=0.352+0.552+0.652=0.1225+0.3025+0.4225=0.8475=0.92 -
计算余弦值:
cos θ = 0.805 0.877 × 0.92 = 0.805 0.807 = 0.997 \cos \theta = \frac{0.805}{0.877 \times 0.92} = \frac{0.805}{0.807} = 0.997 cosθ=0.877×0.920.805=0.8070.805=0.997 -
计算光谱角距离:
SAD = cos − 1 ( 0.997 ) = 0.076 radians \text{SAD} = \cos^{-1}(0.997) = 0.076 \text{ radians} SAD=cos−1(0.997)=0.076 radians
今天的深度学习就学到这里。玛德,永远学不完呀!