在课程学习之外,我还希望能够尽快将所学应用到实际项目中。本文会引用多篇博客,并在文末列出参考文献。
搜索Transformer的相关资料,你会发现高分结果大多源自一篇名为《The Illustrated Transformer》的论文,作者是Jay Alammar。其中提及最多的是Google发布的《Attention Is All You Need》。
对于Transformer的工作原理,我会以这篇论文为基础进行学习,并结合《Sklearn+Tensorflow》中的注意力机制章节来掌握基本概念。此外,我还会寻找一个基于Transformer的实际项目来实践。
这部分内容主要参考了张俊林的《放弃幻想,全面拥抱Transformer:自然语言处理三大特征提取器(CNN/RNN/TF)比较》这篇文章,正是这篇文章让我产生了深入了解Transformer的兴趣。
上一节中对Transformer有一个初步的认识,但理解起来较为复杂。为了巩固知识,我打算明天重温这篇文章,并记录读书笔记。
开篇即指出,在NLP领域,CNN和RNN各有优劣,而Transformer将成为未来的主流。尽管如此,作者仍详细论证了RNN的改进版——SRNN,其并行计算能力比GRU模型快5到15倍;而CNN通过增加网络深度也能改善效果。
作者认为,Transformer的核心不仅仅是Self Attention,还包括其Block内的所有元素,如Multi-head self attention、Skip connection、LayerNorm和FeedForward。
采用Padding填充的方法,类似于Seq2seq中的做法,找到最长的句子,其余句子用空格填充到相同长度。
与RNN或CNN不同,Transformer通过位置函数编码位置信息。Bert等模型则为每个单词添加一个Position embedding,将其与单词embedding相加形成最终的输入embedding。
Self Attention能够一次性解决长距离依赖问题,因为它在整合信息时,当前单词与句子中任意单词都建立了联系。相比之下,RNN需要通过隐层节点序列传递信息,而CNN则通过增加网络深度来捕捉远距离特征,Transformer在这一点上的设计更为简洁明了。
Transformer有两种版本:Base和Big。两者结构相似,主要区别在于Block的数量不同。Base版本包含12个Block,而Big版本则包含24个Block。Big版本在参数量和计算量上是Base版本的两倍,因此是一个更复杂的模型,但效果更好。
在语义特征提取方面,Transformer的表现显著优于RNN和CNN。在特定任务中,Transformer的性能领先RNN和CNN约4-8个百分点。
在长距离特征捕获方面,Transformer和RNN的表现相差不大,但都显著优于CNN。CNN的劣势在于其依赖深度堆叠来覆盖更长的输入长度,因此在处理长距离特征时不如RNN有效。
以机器翻译为例,Transformer的综合表现显著优于RNN和CNN。RNN和CNN的表现相当,但CNN略胜一筹。
RNN在并行计算方面存在天然缺陷,而Transformer在这方面具有优势。
综上所述,Transformer在NLP领域具有明显优势,而RNN和CNN则在特定领域各具特色。
通过对CNN和RNN进行改进,可以借鉴Transformer Block的设计思路。Transformer Block由multi-head attention、skip connection、LayerNorm和FeedForward Network等组件构成。将RNN或CNN替换为Transformer Block中的Multi-head Attention,可以实现不同程度的功能提升,但仍存在一定差距。