估模型参数量其实不用跑代码,手算就能对个大概。思路就一条:参数基本都在各层的权重矩阵里,一层层算出来再加总。
- 全连接层:输入维 × 输出维,再加偏置。权重要把每个输入连到每个输出,所以是乘法关系;偏置是每个输出一个,量很小。
- 卷积层:卷积核尺寸 × 输入通道 × 输出通道,偏置另加。和全连接不同,它的参数只跟核和通道有关,跟输入的图多大没关系。
- Transformer:主要吃在两块,一块是注意力里的几组投影矩阵,另一块是后面的前馈层。前馈那块的中间维通常是隐藏维的好几倍,所以占大头,估的时候先抓它准没错。
- 每层加起来,就是总量。
想偷懒的话,框架里一般有直接统计参数量的接口,一行就能打印出来,正好拿来核对手算的结果,差得多就说明哪层漏算了。
那还手算干嘛?我觉得意义在于心里有数:看到一个模型的结构,大概知道显存是怎么被吃掉的、哪部分最占地方,之后改结构或者挑模型的时候,就不至于全凭感觉拍脑袋。