【长期更新】深度学习术语简写总结
在阅读深度学习相关论文和代码经常见到一些常用的代称和简写,再次记录以便提高阅读效率。
网络结构术语
pretext task
预训练的任务被称为前置/代理任务(pretext task)
downstream task
对网络微调的任务被称为下游任务
end to end
端到端,其实和黑盒的理念一样。给了一个输入,我们就给出一个输出,不管其中的过程多么复杂,但只要给了一个输入,就一定会得到一个输出。
比如分类问题,你输入了一张图片,肯呢个网络有特征提取,全链接分类,概率计算什么的,但是跳出算法问题,单从结果来看,就是给了一张输入,输出了一个预测结果。End-To-End的方案,即输入一张图,输出最终想要的结果,算法细节和学习过程全部丢给了神经网络。
domain adaptation、domain generalization
域适应和域泛化。
域适应中,常见的设置是源域D_S完全已知,目标域D_T有或无标签。域适应方法试着将源域知识迁移到目标域。
第二种场景可以视为domain generalization域泛化。这种更常见因为将模型应用到完全未知的领域,正因为没有见过,所以没有任何模型更新和微调。这种泛化问题就是一种开集问题。
backbone
主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用的是resnet、VGG等,而不是我们自己设计的网络,因为这些网络已经证明了在分类等问题上的特征提取能力是很强的。在用这些网络作为backbone的时候,都是直接加载官方已经训练好的模型参数,后面接着我们自己的网络。
head
输出层,利用之前提取的特征,head利用这些特征,做出预测。
neck
放在backbone和head之间的,是为了更好的利用backbone提取的特征而做的相关处理,比如你再加些特征提取的手法,或者下文的bottleneck
bottleneck
瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。
代码术语
GAP
Global Average Pool全局平均池化.
将某个通道的特征取平均值,经常使用AdaptativeAvgpoold(1)
# pytorch
self.gap = nn.AdaptiveAvgPool2d(1)
Warm up
热身,用一个小的学习率先训练几个epoch,这是因为网络的参数是随机初始化的,一开始就采用较大的学习率容易数值不稳定。
temperature parameters
p
(
i
∣
x
t
,
i
)
=
exp
(
K
[
i
]
T
f
(
x
t
,
i
)
/
β
)
∑
j
=
1
N
t
exp
(
K
[
j
]
T
f
(
x
t
,
i
)
/
β
)
p\left(i \mid x_{t, i}\right)=\frac{\exp \left(\mathcal{K}[i]^{\mathrm{T}} f\left(x_{t, i}\right) / \beta\right)}{\sum_{j=1}^{N_{t}} \exp \left(\mathcal{K}[j]^{\mathrm{T}} f\left(x_{t, i}\right) / \beta\right)}
p(i∣xt,i)=∑j=1Ntexp(K[j]Tf(xt,i)/β)exp(K[i]Tf(xt,i)/β)
这里
β
\beta
β就是temperature parameter,可以起到平滑softmax输出结果的作用
import torch
x = torch.tensor([1.0,2.0,3.0])
y = torch.softmax(x,0)
print(y)
x1 = x / 2 # beta 为2
y = torch.softmax(x1,0)
print(y)
x2 = x/0.5 # beta 为0.5
y = torch.softmax(x2,0)
print(y)
结果:
tensor([0.0900, 0.2447, 0.6652])
tensor([0.1863, 0.3072, 0.5065])
tensor([0.0159, 0.1173, 0.8668])
当beta>1的时候,可以将输出结果变得平滑,当beta<1的时候,可以让输出结果变得差异更大一下,更尖锐一些。如果beta比较大,则分类的crossentropy损失会很大,可以在不同的迭代次数里