优化transformer

优化transformer_第1张图片使用transformer而导致的时间长,可能会由于self-attention计算Query和key的值才导致的时间长,也可能会因为feed forward中的计算导致时间长。这里我们只针对第一种情况下进行优化。
优化transformer_第2张图片
第一种情况:有些问题,我们可能不需要看整个句子,只看位置上左右的邻居,就可以得到正确的答案。所以我们可以把其他值直接设置为0。

优化transformer_第3张图片
上一种,每次只看相邻的马,可能不足得到答案。我们也可以跳两格,去看更远地方的信息。右图为,每次跳一格。
优化transformer_第4张图片另外一种global attention,我们在句子中选择几个作为special token 或者在句子中添加几个special token。 special token可以观察到全局的信息。其他的token只计算与special token的值就可以了。我们可以通过special token来传递token之间的信息。
优化transformer_第5张图片

这一种方法就是将Query和Key进行分类,将相关性比较大的分到一类中。我们可以采取快速但是相对没有那么准确的方法,来进行分类。
优化transformer_第6张图片
然后计算相应分类中的值,其他的直接设为0。
优化transformer_第7张图片还有一种就是,input seq上的每一个位置在经过网络学习后,会产生一段向量。将向量拼接起来后,就是Query,Key矩阵。其中生成的向量中的每个值,可能是float,我们通过一些变换,将其转变为0或者1。
优化transformer_第8张图片
我们还可以挑选一些具有特点的key和value作为代表,来与query进行计算。其中query的数量,不宜进行减少,因为query减少了,那么对应的输出就会减少。假设后面是一个分类问题,就会造成错误。优化transformer_第9张图片
第一种选择的方法,就是将输入的向量放入cnn中,将cnn的结果看作是有代表性的key。第二种,就是乘以一个N*K的矩阵,将结果作为有代表性的key。

你可能感兴趣的:(transformer,深度学习,人工智能)