我正在通过残留学习阅读,我有一个问题。什么是"线性投影"在3.2中提到?一旦得到这个,看起来很简单,但无法得到这个想法...
有人可以提供简单的例子吗?
首先,了解 x
, y
和 F
是什么,以及为什么它们完全需要任何投影。我将尝试简单地解释,但需要对Convnet的基本理解。
x
是该层的输入数据(称为 tensor ),如果convnets的等级为4。您可以将其视为4维数组。F
通常是Cons层(本文中的conv+relu+batchnorm
),y
将两者结合在一起(形成输出通道)。F
的结果也为等级4,大多数维度将与x
中的大部分相同,除了一个。这正是转换应该修补的。
例如, x
形状可能是 (64, 32, 32, 3)
,其中64是批处理大小,32x32是图像大小,3个代表(r,g,b)颜色通道。F(x)
可能是(64, 32, 32, 16)
:批处理大小永远不会更改,为简单起见,Resnet Conv -Layer也不会更改图像大小,但可能会使用不同数量的过滤器-16。
因此,为了使y=F(x)+x
成为有效的操作,x
必须从(64, 32, 32, 3)
"重塑"到(64, 32, 32, 16)
。
我想在这里强调"重塑"这不是numpy.reshape
所做的。
相反,x[3]
用13个零填充,例如:
pad(x=[1, 2, 3],padding=[7, 6]) = [0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
如果您考虑一下,这是3维矢量在16个维度上的投影。换句话说,我们开始认为我们的向量是相同的,但是那里还有13个维度。其他x
维度都没有更改。
这是tensorflow中代码的链接。
线性投影是每个新功能简单的原始特征的加权总和。与本文一样,这可以通过矩阵乘法表示。如果x
是N
输入功能的向量,并且W
是M
-by N
矩阵,则矩阵产品Wx
产生M
新功能,其中每个功能都是x
的线性投影。W
的每一行都是一组权重,它定义了M
线性投影之一(即W
的每一行都包含x
加权总和之一的系数。
在pytorch中(特别是torchvision models resnet.py),在瓶颈的结尾,您要么有两个方案
-
输入向量X的通道,例如x_c(不是空间分辨率,而是通道),小于瓶颈的conv3层之后的输出,例如D尺寸。然后可以通过1乘1卷积来缓解平面= x_c和out_planes = d的1次卷积,并以1次步长1,然后进行批处理归一化,然后如果X和F(x)具有X和F(x)的添加f(x) x相同的空间分辨率。
-
x的空间分辨率及其通道数不匹配瓶颈层的输出以及匹配元素添加的通道数(在添加之前再次使用X的批归归量化)。