AI 课程网站首页
返回知识库

张量形状、参数量与计算成本

计算输出形状、参数数量与运算成本。

本篇目录
  1. 轴、向量维数与矩阵秩
  2. 卷积输出尺寸的推导
  3. 激活值、参数与运算
  4. 分组与逐通道卷积
  5. 感受野跨度
  6. 参考文献

形状计算可以在运行网络之前回答实际设计问题:两个模块能否连接、激活值需要多少存储,以及卷积需要多少运算。先注明各轴,才能把八乘八乘三到四乘四乘六的变化分解为可计算的设计决定,而不是笼统地称作维度变化。

张量形状记录各个已命名轴的长度,但不能单独确定可训练参数量、计算成本或变换保留的信息。这些量需要分别定义与计算。

1. 轴、向量维数与矩阵秩

对于通道在最后一轴的图像,(H,W,C)(H,W,C) 分别表示高、宽与通道数。批量形状为 (N,H,W,C)(N,H,W,C);通道在前的约定则为 (N,C,H,W)(N,C,H,W)。仅凭一串没有轴标签的数字,不能可靠判断各分量的含义。

数组库有时将轴的数量称为张量的 rank,但这不同于计量线性无关列数量的矩阵秩。向量维数则表示坐标数量。因此,“维度”的含义需要结合具体对象说明。

形状为 (8,8,3)(8,8,3) 的图像包含 8⋅8⋅3=1928\cdot8\cdot3=192 个标量。保持数值顺序时,展平可得到 R192\mathbb R^{192} 中的向量,而不丢弃元素。不过,元素数量本身并不是信息量的度量。

2. 卷积输出尺寸的推导

考虑长度为 HH 的输入轴,两侧各填充 pp,核长度为 kk,膨胀率为 DD,步幅为 ss。要求 k,D,sk,D,s 为正整数,pp 为非负整数。核中首尾采样位置的跨度给出有效核尺寸:

keff=D(k−1)+1k_{\mathrm{eff}}=D(k-1)+1

在填充后的输入中,窗口起点为 0,s,2s,…,qs0,s,2s,\ldots,qs。最后一个窗口能够放下的条件为 qs+keff≤H+2pqs+k_{\mathrm{eff}}\le H+2p,因此有效起点数量为:

Hout=⌊H+2p−D(k−1)−1s⌋+1H_{\mathrm{out}}=\left\lfloor\frac{H+2p-D(k-1)-1}{s}\right\rfloor+1

宽度可采用相同推导。填充后的轴必须至少容纳一个窗口;非对称填充时,将 2p2p 替换为两侧填充量之和。当可用跨度不能被步幅整除时,不能省略向下取整。[1]

3. 激活值、参数与运算

取 H=W=8H=W=8、Cin=3C_{\mathrm{in}}=3、Cout=6C_{\mathrm{out}}=6、k=3k=3、p=1p=1、s=2s=2、D=1D=1,则:

Hout=Wout=⌊7/2⌋+1=4H_{\mathrm{out}}=W_{\mathrm{out}}=\lfloor7/2\rfloor+1=4

形状变化为 (8,8,3)→(4,4,6)(8,8,3)\to(4,4,6):高与宽减半,通道数翻倍。每个样本包含 192 个输入元素、96 个输出元素。计入每个输出通道的一个偏置,共享参数量为:

P=3⋅3⋅3⋅6+6=168P=3\cdot3\cdot3\cdot6+6=168

将每个输出位置、每个核系数对应的一次乘加计为一个 MAC,暂不计偏置加法,则:

MACs=4⋅4⋅6⋅3⋅3⋅3=2592\mathrm{MACs}=4\cdot4\cdot6\cdot3\cdot3\cdot3=2592

批量大小为 NN 时,激活值数量与 MAC 数乘以 NN,参数量仍为 168。运算统计需要注明口径,因为一次 MAC 也可能被计为两次浮点运算。

形状变化:高度与宽度从八变为四,通道数从三变为六。

4. 分组与逐通道卷积

采用 gg 组卷积时,输入与输出通道数均需被 gg 整除。每个输出通道只访问 Cin/gC_{\mathrm{in}}/g 个输入通道,因此参数量为:

Pg=khkwCinCoutg+CoutP_g=k_hk_w\frac{C_{\mathrm{in}}C_{\mathrm{out}}}{g}+C_{\mathrm{out}}

当 g=Cing=C_{\mathrm{in}},且 CoutC_{\mathrm{out}} 为 CinC_{\mathrm{in}} 的整数倍时,对应逐通道卷积。分组限制了通道连接关系,因此较低参数量并不保留普通稠密卷积中的全部交互。[1]

5. 感受野跨度

设 rlr_l 为第 ll 层的理论感受野跨度,jlj_l 为相邻输出在原始输入坐标中的间隔。从 r0=j0=1r_0=j_0=1 出发,有:

rl=rl−1+(kl−1)Dljl−1,jl=sljl−1r_l=r_{l-1}+(k_l-1)D_lj_{l-1},\qquad j_l=s_lj_{l-1}

新增跨度包含 (kl−1)Dl(k_l-1)D_l 个间隔,每个间隔在原始输入中占 jl−1j_{l-1}。对于两个核尺寸为三、膨胀率为一、步幅先二后一的层,得到 (r1,j1)=(3,2)(r_1,j_1)=(3,2)、(r2,j2)=(7,2)(r_2,j_2)=(7,2)。

跨度表示可能存在的输入依赖,并不意味着每个位置具有相同影响。边界处还需区分真实输入与填充坐标。因此,完整的形状分析应分别说明变化的轴、激活值与参数数量、运算量以及可能的空间依赖。[2]

参考文献