级联矩阵乘法是否比多个非级联矩阵快?如果是这样,为什么?

时间:2019-02-21 04:42:40

标签: tensorflow matrix lstm pytorch gpu-programming

LSTM单元的定义包括与输入的4个矩阵乘法和与输出的4个矩阵乘法。通过连接4个小矩阵(现在的矩阵大4倍),可以使用单个矩阵乘以简化表达式。

我的问题是:这会提高矩阵乘法的效率吗?如果是这样,为什么?因为我们可以将它们放在连续的内存中?还是因为代码简洁?

无论是否连接矩阵,我们乘以的项目数都不会改变。 (因此,复杂性不应改变。)所以我想知道为什么我们要这样做。

这是torch.nn.LSTM(*args, **kwargs)的pytorch文档的摘录。 W_ii, W_if, W_ig, W_io已连接。

weight_ih_l[k] – the learnable input-hidden weights of the \text{k}^{th}k 
th
  layer (W_ii|W_if|W_ig|W_io), of shape (4*hidden_size x input_size)

weight_hh_l[k] – the learnable hidden-hidden weights of the \text{k}^{th}k 
th
  layer (W_hi|W_hf|W_hg|W_ho), of shape (4*hidden_size x hidden_size)

bias_ih_l[k] – the learnable input-hidden bias of the \text{k}^{th}k 
th
  layer (b_ii|b_if|b_ig|b_io), of shape (4*hidden_size)

bias_hh_l[k] – the learnable hidden-hidden bias of the \text{k}^{th}k 
th
  layer (b_hi|b_hf|b_hg|b_ho), of shape (4*hidden_size)

1 个答案:

答案 0 :(得分:0)

LSTM的结构并不是要提高乘法效率,而是要绕过递减/爆炸梯度(https://stats.stackexchange.com/questions/185639/how-does-lstm-prevent-the-vanishing-gradient-problem)。已经进行了一些研究来减轻梯度递减的影响,而GRU / LSTM细胞+窥孔很少能缓解这种情况。