Bert_Position_Embedding

因为没有循环神经网络做迭代,所以我们加上位置编码,以避免计算机无法区分“我是你爸”和“你是我爸”等等。

对于一个维度762的字向量
我们需要一个762维度的位置编码
之后相加操作喂入Transformer
位置嵌入的公式如下:
在这里插入图片描述
我对其纹理进行可视化:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(15, 10))
sns.set()
np.random.seed(0)
max_sequence_lenth = 500
embeding_dim=762
jishu=10000
i_max=int((embeding_dim-1)/2)
datas=[]
for pos in range(max_sequence_lenth):
    posithon_embeding = []
    for i in range(i_max+1):
        posithon_embeding.append(np.sin(pos/(pow(jishu,(2*i)/embeding_dim))))
        posithon_embeding.append(np.cos(pos/(pow(jishu,(2*i)/embeding_dim))))
    datas.append(posithon_embeding)
uniform_data = np.array(datas)
ax = sns.heatmap(uniform_data)
plt.show()

横坐标是位置纹理维度,纵坐标是一句话的第几个字

对于0-1之间的线性维度标注法(那种按照位置1,2,3,4……500……这样不在0-1的编码可以完全pass了)

还有啊如果用i/sequence_length的也不行。
在短文本中字与字相差0.1可能代表相邻的两个字,而在长文本中0.1可能中间还间隔了几个字。

而同一采用上述的sin cos的纹理能很好得将训练完的模型适用于喂入各种长度的文本,不论文本长短,其位置编码按上图从上往下固定不变,(要采用该模型,就不变其维度762)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值