Author: Cao Shengming
Email: [email protected]
Company: Trio 北京(三角兽)科技有限公司


0.关于Neural Network 的复杂度

NN 模型的复杂度一般可以从两个方面来刻画:
时间复杂度:

时间复杂度与硬件执行息息相关,但是一般表示模型时间复杂度的方法,可以是某一层、或者产生某个结果所需要的操作(operation)数、所需要处理的元素(elements)个数或者完成某个操作所需要经历的路径长度(path length)。

空间复杂度:

空间复杂度与模型容量是息息相关的,这里我们可以将空间复杂度简单理解为模型的参数数量,也就是说 parameters per layer 就可以认为是该层的模型复杂度。

(Note: 下边如果不做特殊说明,我们将先讲述空间复杂度的状况。)

1.CNN 模型复杂度

常见的 CNN 模型一般包含以下集中类型的层,卷积层、池化层和全连接层。假设卷积核大小为 H*W,input channel 为 I,out channel 为 O。

输入层和输出层暂时先不考虑,输入层没有参数,而输出层一般是全连接层,就不做单独分析。

  1. Convolutional Layer:
    该层 filter 数量总数为 H*W*I,而每个将被映射到64个新的通道,加上每个filter 的计算要有一个 bias,所以总的参数数量为(H*W*I+1)*O。
  2. Pooling Layer:
    一般的池化层属于固定操作,没有权重系数。
  3. Fully Connected Layer:
    全连接层也好理解,前后要是 n,m 维的输入输出,所以其参数数量为(n+1)*m。

2.LSTM 模型复杂度

CNN 与 LSTM 模型复杂度分析

如图所示LSTM将一共维护4套参数,分别对应输入门、输出门、遗忘门和候选态。所以总的参数数量如下所示:

Number_of_weight = 4 * Hidden_size * (Input_size + Bias + Output_size)

其中当不做 project 的时候,Output_size 和 Hidden_size 实际上是一致的。
其中 Input_size + Output_size 实际上就是 concat[ht1h_{t-1}, x] 。假设只有一个 hidden unit 那么参数数量为num(ht1h_{t-1}) + num(x) + num(bias),所以所有的 hidden unit 加起来只需要在前边乘以 hidden_size 就可以。

但我们还可以整体来理解,LSTM 中的参数我们可以简化为 U ,V 两个矩阵,其分别对输入和输出做映射,U 的维度为 hidden*Input,V 的维度是 hidden*hidden。所以这样分开理解也可以,网络在学习的就是这两个矩阵,所以总的数量为 4(hidden*Input + hidden*hidden + hidden) 这也就是我们常看到的 4(nm+ n2n^2 +n),其中 n 为 hidden_size,m 为 input_size。

3.References

  1. https://datascience.stackexchange.com/questions/10615/number-of-parameters-in-an-lstm-model
  2. https://stackoverflow.com/questions/38080035/how-to-calculate-the-number-of-parameters-of-an-lstm-network
  3. http://wap.sciencenet.cn/blog-578676-1019567.html
  4. http://colah.github.io/posts/2015-08-Understanding-LSTMs/

相关文章: