从零开始了解transformer的机制|第二章:Positional Encoding

文章介绍了Transformer模型中为何需要PositionalEncoding,以及如何通过正弦和余弦函数生成位置编码,以提供序列中单词的相对位置信息。给出了一段Python代码示例以展示这一过程。

为什么需要Positional Encoding?

Transformer 模型没有像RNN那样的显式顺序信息(RNN是一个词一个词蹦出来的)。为了引入序列中单词的位置信息,位置编码被添加到输入嵌入中,以便模型能够理解单词在序列中的相对位置。

怎么做Positional Encoding?

在Transformer中,位置编码是通过一些特定的数学函数来实现的。

一种常见的位置编码方法是使用正弦和余弦函数。具体来说,位置编码为每个位置和每个维度生成一个值,然后将这些值添加到input embedding中。这样,每个位置的词向量就会有一个额外的位置信息。

下面是一个用于生成位置编码的公式,其中 `pos` 表示位置,`i` 表示维度:

PE(pos, 2i) = sin(pos / 10000^(2i / d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i / d_model))

在这个公式中,`d_model` 是词向量的维度。对于每个位置 `pos` 和维度 `i`,我们分别计算正弦和余弦值,并将它们添加到词向量中。

以下是一个简化的 Python 代码示例,用于生成位置编码:

python
import numpy as np

def positional_encoding(max_len, d_model):
    position_enc = np.zeros((max_len, d_model))
    for pos in range(max_len):
        for i in range(0, d_model, 2):
            position_enc[pos, i] = np.sin(pos / (10000 ** (i / d_model)))
     
原始数据: 6000 行, 清理后: 6000 行 船舶数量: 200, 时间点数量: 364 训练时间点: 291, 测试时间点: 73 训练序列数: 175, 测试序列数: 30 开始训练LSTM模型... 在单 CPU 上训练。 |============================================================| |  轮  |  迭代  |    经过的时间     |  小批量 RMSE  |  小批量损失  |  基础学习率  | |     |      |  (hh:mm:ss)  |            |         |         | |============================================================| |   1 |    1 |     00:00:01 |       1.41 |     1.0 |  0.0010 | |   5 |   50 |     00:00:02 |       1.40 |     1.0 |  0.0010 | |  10 |  100 |     00:00:04 |       1.45 |     1.1 |  0.0010 | |  15 |  150 |     00:00:05 |       1.37 |     0.9 |  0.0007 | |  20 |  200 |     00:00:05 |       1.34 |     0.9 |  0.0007 | |  25 |  250 |     00:00:06 |       1.42 |     1.0 |  0.0005 | |  30 |  300 |     00:00:07 |       1.42 |     1.0 |  0.0005 | |============================================================| 训练结束: 已完成最大轮数。 LSTM模型训练完成! 开始训练Transformer模型... 函数或变量 'selfAttentionLayer' 无法识别。 出错 untitled18 (第 196 行) selfAttentionLayer(1, 'NumHeads', 4) % 使用4个注意力头 >>
最新发布
08-27
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值