题解|位置编码计算器

位置编码计算器

https://www.nowcoder.com/practice/57453b800bce47b3928714fae912cd01?tpId=377&tags=&title=&difficulty=&judgeStatus=&rp=0&sourceUrl=%2Fexam%2Foj&gioEnter=menu

位置编码是Transformer模型中用于处理序列数据的一种技术,它通过将输入序列中的每个位置映射到一个固定长度的向量,从而为模型提供位置信息。其具体步骤如下:

1. 初始化位置编码矩阵

  • 创建一个与输入序列长度相同的矩阵,用于存储每个位置的编码向量。

2. 计算位置编码

  • 对于输入序列中的每个位置 ,计算其位置编码向量
  • 数学表达式为: 其中, 是位置索引, 是维度索引, 是嵌入维度。

这个计算公式的原理是基于正弦和余弦函数的周期性和对称性,通过将位置索引和维度索引进行组合,来生成位置编码向量。其具体推导过程可以参考论文《Attention is All You Need》。

3. 返回位置编码矩阵

  • 将计算得到的位置编码向量存储在位置编码矩阵中,并返回。

标准代码如下

def pos_encoding(position: int, d_model: int):
    if position == 0 or d_model <= 0:
        return np.array(-1)
    # 初始化位置编码矩阵和对应索引
    pos = np.array(np.arange(position), np.float32)
    ind = np.array(np.arange(d_model), np.float32)
    pos = pos.reshape(position, 1)
    ind = ind.reshape(1, d_model)
    # 计算角度
    def get_angles(pos, i):
        angles = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
        return pos * angles
    # 计算正弦和余弦
    angle1 = get_angles(pos, ind)
    sine = np.sin(angle1[:, 0::2])
    cosine = np.cos(angle1[:, 1::2])
    # 拼接正弦和余弦
    pos_encoding = np.concatenate([sine, cosine], axis=-1)
    # 转换为16位浮点数
    pos_encoding = np.float16(pos_encoding)
    return pos_encoding
全部评论

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
球1个offer:每个行业都是不一定的,例如计算机开发岗,只要是92学历,完全可以冲互联网大厂,没进去抛开运气因素,就是不够努力,准备的晚没有实习等等。计算机算法岗还是要读研的,研究生是基本要求。现在太多人无脑考研了,因为本科秋招春招啥都没准备过,只能读研
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务