Encoding word order in complex embeddings稿

过去的positional embedding

  首先介绍为什么需要位置编码。对于语言来说,单词的位置和顺序十分的重要。举个简单的例子:我在上山和我在山上,虽然这两句话组成的字都一样,但由于顺序不一样导致了完全不一样的语义。rnn的网络结构是一种顺序结构,能够学习到字符之间的顺序关系。而transformer的网络结构完全是一种self attention的叠加,是无法学习到语句的顺序关系的。因此需要我们主动的为这种网络结构提取位置信息。这时候我们就需要使用position embedding的方式来表达位置信息。除了nlp,cv和语音也都会用到positional embedding的方式来添加位置信息,为网络提供更多的信息。
  我们常用的两种positional embedding的方式分别是可学习的和cos-sin形式的。可学习的形式十分简单,设置一个embedding矩阵之后随即初始化之后,通过网络训练得到。但是这种方式是一种绝对的位置编码,每个位置的向量都相对独立,之间没有联系。第二种方法就是transformer中用的cos-sin形式的位置编码方式。
{ P E ( p o s , 2 i ) = s i n ( p o s 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i + 1 ) = c o s ( p o s 1000 0 2 i / d m o d e l ) \begin{cases}PE(pos,2i)=sin(\frac{pos}{10000^{2i/d_{model}}})\\PE(pos,2i+1)=cos(\frac{pos}{10000^{2i/d_{model}}})\end{cases} { PE(pos,2i)=sin(100002i/dmodelpos)PE(pos,2i+1)=cos(100002i/dmodelpos)pos代表的就是词在语句中的位置,而i则代表在向量中的位置。向量中偶数位置用sin来表示,奇数位置用cos来表示。 d m o d e l d_{model} dmodel代表的是向量的维度。为什么使用这种方式来建立位置编码呢?首先这种方式能够保证每个位置向量不重复而且不同之间的位置之间存在联系。这个联系就是可以使用线性变换,通过对一个位置向量做线性变换得到另一个位置上的位置向量。下面会用公式说明,在这假设词向量维度是2, w k = 1 1000 0 2 i / d m o d e l w_k=\frac{1}{10000^{2i/d_{model}}} wk=100002i/dmodel1,那么我们就可以把一个位置向量经过一个线性变换转变为另一个位置向量的公式表示为: M ∗ [ s i n ( W k ∗ p ) c o s ( W k ∗ p ) ] = [ s i n ( W k ∗ ( p + ϕ ) ) c o s ( W k ∗ ( p + ϕ ) ) ] M*\begin{bmatrix}sin(W_k*p) \\cos(W_k*p) \end{bmatrix} = \begin{bmatrix}sin(W_k*(p+\phi)) \\cos(W_k*(p+\phi)) \end{bmatrix} M[sin(Wkp)cos(Wkp)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值