写在前面的话
Transformer模型设计的哲学思想:大道至简 **
即:完全基于attention机制,无差别对待序列中任意token与其他token的关系计算,用李宏毅老师的话讲就是天涯若比邻
模型的设计哲学对比:
拓扑结构好神奇
从数据的拓扑结构来讲,Transformer将序列化数据看成了完全连通图(也就是没有所谓的终点和起点)而RNN则是看成了其最小连通子图(且有明确的起点和终点,即信息流定向传导,即便是双向RNN也没有改变时间轴的存在的本质)。
编码阶段的差异清晰可见,RNN被一条隐藏的时间轴所束缚,当前时间的编码嗷嗷待哺前面的结果。所以 慢!!!
而Transformer模型结构中就没有时间轴 图上的节点(序列的token)可以自由与其他节点通过边交互(也就是attention),且任意两个不同节点的行动完全互相不干扰。
天涯若比邻带来的问题
前面有说,Transformer的设计哲学,注定是将时间轴抹去了,进而加速了信息编码的速度。可是让我们回到模型的本质,任何模型提出都是为了解决改进任务,很明显我们的任务就摆在那里,编码序列信息,而这个序列信息本身是有序的!注意了,原来的RNN为了体现这个序**,所付出的代价就是在一条隐形的时间轴进行编码,自然的将序列本身的序信息嵌入到时间信息中,代价就是速度很慢。而Transoformer为了也把序列每一个token在序信息编码进去,所以加入了Position Embedding。总结来说,Transformer牺牲了时间轴提供的序列的位置信息,换来了速度的提升和编码计算的并行,通过Position Embedding的技巧给找补回来了。Fairseq中也是这么做的。
Talk is cheap show me the code
笔者通过实现的一段Transformer玩具代码,展示Transformer都做了什么
假设我们有一个翻译任

最低0.47元/天 解锁文章
6437





