优点:
相比CNN,计算两个位置之间的关联所需的操作次数不随距离增长(任意两个单词的距离变成1)
突破了RNN模型不能并行计算的限制(只能从前往后移,一步一步的进行计算),特征抽取能力比RNN系列的模型要好。多头注意力机制是可以并行计算的。而且不同的头可以提取到不同的子空间的特征
全局信息的有效处理(因为每个单词都要和所有的单词进行attention计算),可编码更长的序列。
可解释性强
缺点:
序列较长时,计算耗时严重。计算任意两个词的权重,所以他的计算复杂度是N方,当序列长度很长的时候,这个耗时是非常严重的。
transformer需要一种方式来表示序列中元素的相对或绝对位置关系,
缺乏归纳偏置能力(例如:不具备CNN那样的平移不变性和局部性,因此在数据不足时不能很好的泛化到新的任务上),transformer 不具备先验的知识,他只是给了你一个数据,然后给了你一堆的模型让你自己去学习,然后学习出来的效果挺好,正好对应了某些句子空间的表示,那就真强了可解释性,那就不具备先验的假设在里边的。所以在数据量较少的时候,不一定能取得比CNN或者RNN 较好的效果。
没有局部特征的捕获能力, 这个时候其实可以和RNN或者CNN这个具有局部特征表示的 模块结合起来使用可能会有更好的效果。