【学习笔记】神经网络的计算量和参数量估计

本文详细探讨了衡量GPU运算能力的FLOPS和MACC指标,以及它们在全连接层、激活函数(ReLU、Sigmoid、Tanh)、LSTM和卷积层中的计算量和参数量计算。此外,还介绍了深度可分离卷积和BatchNormalization的计算特点,以及池化层和Concate层的作用。通过对这些关键计算单元的分析,为理解和优化深度学习模型的效率提供了基础。
摘要由CSDN通过智能技术生成

评估计算量指标

  • 每秒浮点操作次数FLOPS(FLoating point OPerations per Second),来衡量GPU的运算能力。
  • 乘加数MACC(Multiply-ACCumulate operation),或者叫MADD,来衡量模型的计算量。

模型最终的的速度,不仅仅是和计算量多少有关系,还和诸如内存带宽、优化程度、CPU流水线、Cache之类的因素也有很大关系。

全连接层计算量和参数量估计

对于输入为 I I I,输出为 J J J的全连接层,其权重 W W W存储在 I × J I \times J I×J的矩阵中。

  • 计算量为 I × J I \times J I×J MACC 或 ( 2 I − 1 ) × J (2I-1) \times J (2I1)×J FLOPS。
  • 它的参数分别是权重 W W W和偏置 b b b,所以参数量为 I × J + J = ( I + 1 ) × J I \times J + J=(I+1) \times J I×J+J=(I+1)×J

激活函数计算量

激活函数没有参数,所以参数量为0。

  • ReLU计算操作为 y = max ⁡ ( x , 0 ) y=\max(x,0) y=max(x,0),所以对于输出为 J J J个神经元,计算量为 J J J FLOPS。
  • Sigmoid计算操作为 y = 1 / ( 1 + exp ⁡ ( − x ) ) y=1/(1+\exp(-x)) y=1/(1+exp(x)),所以对于输出为 J J J个神经元,计算量为 J × 4 J \times 4 J×4 FLOPS。
  • Tanh计算操作为 y = ( exp ⁡ ( x ) − exp ⁡ ( − x ) ) / ( exp ⁡ ( x ) + exp ⁡ ( − x ) ) y=(\exp(x)-\exp(-x))/(\exp(x)+\exp(-x)) y=(exp(x)exp(x))/(exp(x)+exp(x)),所以对于输出为 J J J个神经元,计算量为 J × 8 J \times 8 J×8 FLOPS。

LSTM计算量和参数量估计

LSTM包含4个非线性变换,每一种非线形变换可视作一个全连接层。令 E E E=embedding_size, H H H=hidden_size。其中,第一层是 x i x_i xi h i h_i hi的结合,维度就是 E + H E+H E+H,第二层就是输出层,维度为 H H H。四个非线性变换中,还会对全连接层的输出进行激活函数计算(三个Sigmoid和一个Tanh)。除此之外,LSTM除了在四个非线性变换中的计算,还有三个矩阵乘法(不是点积)、一个加法、一个Tanh计算。

  • 计算量为 ( E + H ) × H × 4 (E+H) \times H \times 4 (E+H)×H×4 MACC,或 E × H × 8 + H × ( H + 20 ) E \times H \times 8 + H \times (H+20) E×H×8+H×(H+20) FLOPS。
  • 参数量为: ( ( E + H ) × H + H ) × 4 ((E+H) \times H +H) \times 4 ((E+H)×H+H)×4

卷积层计算量和参数量估计

对于输入为 H i n × W i n × C i n H_{in} \times W_{in} \times C_{in} Hin×Win×Cin,输出为 H o u t × W o u t × C o u t H_{out} \times W_{out} \times C_{out} Hout×Wout×Cout的卷积层,输出的每一个像素对应了一个立体卷积核 K × K × C i n K \times K \times C_{in} K×K×Cin

  • 计算量为 K × K × C i n × H o u t × W o u t × C o u t K \times K \times C_{in} \times H_{out} \times W_{out} \times C_{out} K×K×Cin×Hout×Wout×Cout MACC。
  • 参数量为 K × K × C i n × C o u t + C o u t K \times K \times C_{in} \times C_{out} + C_{out} K×K×Cin×Cout+Cout

深度可分离卷积层

深度可分离卷积分为两个操作,深度卷积和 1 × 1 1\times1 1×1常规卷积。

  • 计算量为: K × K × C i n × H o u t × W o u t + C i n × H o u t × W o u t × C o u t = C i n × H o u t × W o u t × ( K × K × C o u t ) K \times K \times C_{in} \times H_{out} \times W_{out} + C_{in} \times H_{out} \times W_{out} \times C_{out}=C_{in} \times H_{out} \times W_{out} \times (K \times K \times C_{out}) K×K×Cin×Hout×Wout+Cin×Hout×Wout×Cout=Cin×Hout×Wout×(K×K×Cout)
  • 参数量为 K × K × C i n + 1 × 1 × C i n × C o u t = C i n × ( K × K + C o u t ) K \times K \times C_{in} + 1 \times 1 \times C_{in} \times C_{out}=C_{in} \times (K \times K + C_{out}) K×K×Cin+1×1×Cin×Cout=Cin×(K×K+Cout)

Batch normalization

BN的计算操作为 z = γ y − μ σ 2 + ϵ + β z = \gamma \frac{y-\mu}{\sqrt{\sigma^{2}+\epsilon}}+\beta z=γσ2+ϵ yμ+β。每个通道都有自己的 γ , β , μ , σ 2 \gamma,\beta,\mu,\sigma^{2} γ,β,μ,σ2,因此,如果卷积层的输出中有 C C C个通道,则BN层将学习 C × 4 C \times 4 C×4个参数。

池化层

池化操作不使用点积,因此不能用MACC测量。这种附加层的计算量与卷积层、全连接层相比非常小,通常可以忽略不计。

Concate层

连接操作通常不需要单独的复制步骤,不需任何参数和计算。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值