共计 1954 个字符,预计需要花费 5 分钟才能阅读完成。
作者:铁心核桃
链接:https://www.zhihu.com/question/448924025/answer/1813111436
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我认为attention和CNN是“形似而神不似”,如果再给attention加个“self”前缀,那就又不太一样了。 首先说attention和CNN“形似”的问题。无论是attention机制还是CNN中的卷积(亦或是全连接),在实现层面看,都是以加权求和的模式对数据进行加工。加权求和可以分为“加权”和“求和”两方面来看,前者是对数据进行有差别的对待,而后者是做数据融合。这一点看无论attention还是CNN中的卷积也差不多是干的都是这件事。尤其是在Transformer中,Multi-Head Attention在后面还有一个特征融合过程,在操作套路上和CNN中逐通道卷积最后沿着通道求和做特征融合就更像了。甚至可以认为CNN中的卷积是在全图范围内,只对当前卷积窗口中投射了全部的注意力而已。然后是attention和CNN“神不似”的问题。首先是操作模式不同:attention的注意力权重是动态的按照输入计算出来的,即是随着输入改变的,可谓“见人说人话,见鬼说鬼话”,但是卷积一但训练完毕就定死了,和输入无关了;attention考虑的是全输入,然后在全输入下“划重点”,而卷积上来就是窗口操作模式。然后是侧重点不同:attention的侧重点更加关注在一个大框架中如何决定在哪里投射更多注意力的问题,而CNN中的卷积更多侧重于获得输入信号(如图像)的另外一种特征表达,也就是说attention是一套机制,而卷积是一种操作。另外在Transformer中有明确的查询(Q)、键-值数据(K和V)的概念,这一点在卷积中是没有的。最后说说self-attention的问题。这个自注意力中的“自”是有大文章的,核心是如何用一个特征集合自己表示自己的问题,简单说就是“自嗨”,而CNN就和“自己表达自己”这件事儿没什么关系了。关于self-attention需要多说一点。Transformer对attention机制进行了形式化定义:attention机制可以被描述为一个函数,该函数将一个查询(query,简写为 )和一个具有 个元素的键-值(key-value,分别简写为 和 )集合(这个键-值集合也称之为“source”,即“源”)映射为一个值(value)。该函数可以表示为 。在上述attention机制的描述中涉及了三个集合:查询集合 、键集合 和值集合 。但是,这些集合并非一定要各不相同,常见情况分为三种:(A)如果 ,即三个集合完全不同,我们简称其为 模式;(B)如果 ,即键和值集合是同一个集合,我们简称这种模式为 模式;(C)如果 ,即查询、键和值三个集合实际是“一回事儿”,我们将这种模式简称为 模式。三种模式我用一个自己想的“融合试剂”的例子来说明: 模式:假设有一堆瓶装的纯净试剂,每个瓶子的标签上贴着试剂的品名。因此在这里,试剂本身就是值,而品名对应的就是键。现在有一个品名清单,要依次按照该清单中的品名制作混合试剂(不考虑化学反应),因此在这里,清单上的品名就是查询。混合试剂要用到所有单纯试剂,而且要求某单纯试剂在最终混合试剂中所占的比例由其标签品名与清单品名之间的相似度决定——相似度越高,占的比例也越高。这种模式即 模式。下图为 模式下的试剂混合示意。QKV模式下的试剂混合类比示意 模式:同样还是制作混合试剂的问题,只是现在没有品名清单,只有一些其他类型的少量试剂样本,而且纯净试剂的瓶子上也没有贴标签。现在的任务是选择当前的某一个试剂样本,取不同比例的纯净试剂进行混合,每个纯净试剂的混合比例是按照其与样本试剂之间的相似度决定——试剂本身约相似,占的比例也越高。在这一示例中,样本试剂即是查询,而纯净试剂本身既是键也是值,这种模式即简称为 模式。下图为 模式下的试剂混合示意。QVV模式下的试剂混合类比示意 模式:在上面问题的基础上再往前推进一步——标签也好,试剂样本也罢,一概都没有,就只有纯净试剂本身。现在的任务是通过混合纯净试剂的方式得到这些纯净试剂自己,这种模式下的混合比例取决于纯净试剂内部的相似度。这就意味着在此时此刻,每个纯净试剂本身既是键也是值,同时也是查询。下图为 模式下的试剂混合示意。VVV模式下的试剂混合类比示意上述三种注意力模式中, 和 两种模式应用最为广泛,因为二者蕴含了特征表示中的两个非常重要的问题: 模式代表着如何用一个特征集合表示另一个集合,而 模式代表了如何用一个特征集合表示自己。再次强调,只有其中的 这种“自嗨”模式才算self-attention!