赞
踩
最近在学习Transformer框架,在此记录相关学习心得及个人理解,欢迎各位前辈的指正与批评,也欢迎同样在学习transformer的小伙伴一起交流。
该篇学习笔记更注重于对基础概念,理论的理解与推导,可能在后续会发布相关代码编程方面的学习笔记。
在学习Transformer时,向很多优秀的前辈学习到了宝贵的知识,附上链接供感兴趣的小伙伴查阅:
1.深入理解深度学习——注意力机制(Attention Mechanism):位置编码(Positional Encoding)2.史上最小白之Transformer详解
3.Transformer从零详细解读(可能是你见过最通俗易懂的讲解)
关于Transformer的结构,相信各位都有所了解,最基础的理解就是Encoder与Decoder的结构,那么如图一所示,在Inputs的位置上还包含了两个重要的结构,即Embedding与Positional encoding。
图1 Transformer结构
首先从Embedding层入手,Embedding层也被称为文本嵌入层。
那么该层有何作用呢?可以设想一下,如何才能让计算机理解我们输入的词或句子呢?
显而易见,就是将输入的词或句子转化成计算机可以识别的语言,在这个环节中很多优秀的前辈应用了One-hot进行了解释。为了更加通俗的理解,或许我们可以认为Embedding层的作用就是将输入的词或句子映射为计算机可以理解的向量,更加通俗的讲就是通过Embedding层将输入的文本转化成计算机能识别的符号。
举个例子:如图2所示,假设我现在要输入“我爱你”三个字进入到计算机内,那么我们首先能想到的就是通过矩阵或向量的形式来进行表达。而Embedding恰好帮助我们去完成这个事情,无需过多纠结它是怎么完成这个任务的,在实际的操作当中,我们只需要关注输入词的数量,以及映射为向量的维度。在该示意图中,我们设置输入词的数量为3,映射后词的向量为4维(当然也可以是更多维度,比如512维。)那么经过Embedding层后,可以发现,“我”被映射成了[0,1,2,3],这里的列也就是我们所说的维度。同理,“爱”和“你”同样被映射成了相应的词向量。至此,我们完成了文本的输入的第一个环节。
图2 Embedding层示意图
完成Embeding后,可能有小伙伴不禁疑惑,就单纯将“我爱你”三个字输入到计算机中,计算机虽然能够识别每一个字,但是无法理解“我爱你”所代表的含义,或者说三个字之间的关系啊。
不错,计算机确实无法理解“我爱你”三个字之间的关系,但是回想之前学过的知识,关于RNN循环神经网络逐个字的输入,循环是否就能很好的解决这个问题了呢。但是在Transformer结构中,并没有设置这样一层。通过对Transformer结构进行观察,不难发现进入Multi-Head Attention时,数据是并行进入的,也就是说同时处理“我”、“爱”、“你”这三个字,这样虽然能大大提升处理速度,但是回归第三节开头的问题,这还是无法让计算机理解其中的关系啊。这时就引出了Positional encoding了,这也就是Pe在Transformer中的作用,即赋予输入文本之间的位置关系。
对于Positional encoding(位置编码)而言,想要更好了理解它,不妨观察一下公式。
先别跳过公式,耐心观察一下,左边的PE是不是代表位置编码;(pos,2i)和(pos,2i+1)看着是不是有些眼熟,它像不像行列式中用来表达特定位置的坐标。不错,pos代表了行,2i和2i+1代表了列,这里的列还要注意一点,就是2i代表偶数列,2i+1代表奇数列。
再来看看右边,都认识sin、cos,那么也就是说在第pos行的第2i列,我采用sin()函数处理一下,在2i+1列,采用cos()函数处理一下不就行了吗。至于为什么要这么处理呢,大家可以回想一下sin与cos函数的函数图像。
那具体是怎么操作的呢,我们依旧用“我爱你”举例:
图3 Positional encoding示意图
如图3所示,假设在计算机中,“我”的位置编码可以表示用(pos,2i)表示为“我”(0,2i):[0 1 2 3],同理”爱“(1,2i): [0 1 2 3]。那么经过位置编码公式,就可以转化为下图所示:
图4 位置编码计算示意图
最终得到“我”的位置编码为[0 1 0 1],同理,将“爱”的pos=2带入,得到爱的位置编码为[0.841 0.54 0.01 0.99]。至此,位置编码环节逐渐接近尾声,最后的操作只需要将每个词的位置编码与先前embedding输出的对应词向量相加就可以了。
在Embedding中,我们完成了将输入文本转换为计算机可以识别的词向量任务。为了让计算机理解输入的文本之间存在的关系,我们采用Positional encoding的方式,赋予了词向量的位置关系,为后续计算机高效理解文本提供了坚实的基础。
虽然,Embedding和Positional encoding是Transformer中最基础的内容,但是我觉得将这一部分理解能更有助于进一步理解Transformer框架,文中用了很多自己理解的含义进行表达,难免存在理解错误,希望小伙伴们能够多多指正,也希望能够在大家的指正中快速进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。