通过在线编程彻底搞懂transformer模型之四:Positional Encoding位置编码

本文详细介绍了Transformer中的位置编码Positional Encoding,解释了为何需要位置编码以及其数学公式。通过在线编程实践,展示了如何用JavaScript实现位置编码,并提供了相关代码示例。位置编码与词嵌入向量相加,为模型提供句子中词的位置信息。

这期我们将讲一讲Transformer里面的 positional encoding位置编码

视频讲解在这个地方,建议看视频,讲得清楚一些

写代码彻底搞懂大语言模型transformer-- 位置编码 Positional encoding

在前几期里面我们讲了transformer模型里面两个重要的观点分别是embedding和attention mechanism注意力机制;我们来简单回顾一下,embedding将词转换成由语义的向量,注意力机制则利用这些机制,找到了在上下文中embedding的相关程度,并引入了可训练的权重,是的transformer模型有了很好的上下文处理能力。

回到位置编码。在一个句子中一个词的位置隐含着重要的信息:比如我是你哥哥,你是我哥哥;这两个句子中词位置不同造成的意义完全不一样

那如果位置编码我能想到最简单的位置编码就是它的索引号,问题在于如果这个句子太大,这个索引编号就会越来越大,而且它输入不一样它的长度就不一样放到模型里面不好处理;

于是引入了另外一种位置编码的方式,让不同位置他都输出固定长度的向量
他的公式是这样子的我们来看一下
在这里插入图片描述
具体定义如下:

L:这个句子的长度,也就是token的数量
k:是这个句子中第k个词
d:输出向量的维数
i:列的索引,0<=i<d/2;比如输出向量是100位的,那么i就是一个从0~49的数字,
n:用户自定义的一个数字,在 Attention is all you need 这个论文里面这个 数是10000,也可以定义成其他的值
P(k, x): 一个函数用于计算对于句子中第k个词,输出向量的x个值是多少
P(k, 2i): 句子中第k个词,输出向量的第2i个值
P(k, 2i+1): 句子中第k个词,输出向量的第2i+1个值

图示如下:
在这里插入图片描述

我们可以用JavaScript来实现位置编码,我给大家准备了一个在线编码的网站,大家可以直接在上面进行人工智能编程,地址如下:
https://chn.ai/plotly.html

我把这次用到的代码放到了gitee上,供参考:
https://gitee.com/fribble01/js-machine-learning/blob/master/posEncoding/example01.js

function posEnc(seqLen, d, n=10000) {
   
   
	let pe = Array.from({
   
    length: seqLen }, () => Array(d).fill(0))
	
	for(var k = 0; k < seqLen; k++) {
   
   
		for(var i = 0; i < Math.floor(d/2); i++) {
   
   
            var denominator = Math.pow
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值