Trax的AttentionQKV

问题描述

由Trax实现的AttentionQKV层如下:AttentionQKV

def AttentionQKV(d_feature,n_heads=1,dropout=0.0,mode='train'):
  """Returns a layer that maps (q,k,v,mask) to (activations,mask).
  See `Attention` above for further context/details.
  Args:
    d_feature: Depth/dimensionality of feature embedding.
    n_heads: Number of attention heads.
    dropout: Probababilistic rate for internal dropout applied to attention
        activations (based on query-key pairs) before dotting them with values.
    mode: One of `'train'`,`'eval'`,or `'predict'`.
  """
  return cb.Serial(
      cb.Parallel(
          core.Dense(d_feature),core.Dense(d_feature),),PureAttention(  # pylint: disable=no-value-for-parameter
          n_heads=n_heads,dropout=dropout,mode=mode),)

特别是,三个平行的密集层的目的是什么?该层的输入是q,k,v,掩码。为什么q,k,v穿过一个密集层?

解决方法

此代码段是Attention is all you need论文第5页顶部的等式的实现,该等式在2017年推出了Transformer模型。计算如图2所示:

enter image description here

隐藏状态投射到 h 注意头中,这些注意头并行执行缩放的点积注意。投影可以解释为与头部相关的信息的提取。然后,每个负责人都根据不同的(学习的)标准进行概率检索。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...