为了一个目标,我试图计算稀疏矩阵和稠密矩阵的MultiHead注意矩阵。我知道默认情况下,Keras MultiHead注意API需要两个密集矩阵,然后在使用Vaswani集的查询、键和值进行Softmax操作后返回注意值。一篇文章“关注是你所需要的”。
但是,我有一个用例,其中我有一个稀疏和密集的矩阵,我希望将它们分别作为查询和值传递到MultiHead注意层。
默认情况下,不支持,转换为密集和返回不是一个选项,因为时间复杂性增长了很多。有没有任何方法可以覆盖与稀疏密集组合不兼容的内部应用程序,或者用诸如sparse_dense_matmul这样的混合API来代替它们来进行注意力计算?尽管如此,文档指出,对于sparse_dense_matmul来说,矩阵的等级必须是2,这就是为什么类重写对我来说似乎也不可信,除非我编写自己的类稀疏密度计算块。注意:对于变压器来说,排位通常是3,因为形状是(批次大小,序列长度,Dim)的格式。
举一个例子:
att = layers.MultiHeadAttention(num_heads=num_heads,
key_dim=embed_dim)
attn_output = att(query=inputs1, value=inputs2) # I would like to pass this query as sparse, this value as dense.我很感谢你的帮助。
发布于 2022-10-15 15:04:18
您可以查看发布了稀疏关注点(如稀疏变压器 )的实现的官方回复。
https://stackoverflow.com/questions/72914854
复制相似问题