本周总结-----transfomer的原理理解以及代码解读

本文深入探讨Transformer架构,包括编码器和解码器的组成,重点解析位置嵌入、多头自注意力机制以及前馈神经网络。通过PyTorch实现位置编码、多头注意力层和前馈操作,并介绍了填充字符的掩码处理。此外,还详细阐述了编码器与解码器之间的关系。
摘要由CSDN通过智能技术生成

Transformer的理解与代码

首先将一些资料写在这:
b站博主:nlp从入门到放弃 的transfomer相关视频,以下的代码也于其讲述的大差不差,大家可以去他的视频找所有的代码

1 对transformer原理理解

整个transformer的架构可以分为:解码器(encoder)和编码器(decoder);其中又可以划分为多个模块:位置嵌入、多头自注意力模块、残差结构、layernorm层、前馈网络等。
在这里插入图片描述图一 transfomer整体架构

1.1位置编码以及词嵌入

1)词嵌入指的是将一个单词(字)映射成多维度,在transformer论文中将每个字映射成了512维,比如说:[‘我’ ,'是 ', ‘女’,‘生’](1*4的向量)映射成一个 4 * 512 的向量,每一个字都有512个维度;
使用 pytorch里的方法:

nn.Embedding('字的类别数', '映射维度')

2)位置编码
在这里插入图片描述
图二 位置编码公式

如上,在偶数位的字用sin,奇数位的字用cos;
代码编写如下:

# 位置编码层
class PositionEncoding(nn.Module):
    def __init__(self, d_model, dropout=0.1, max_len=1000):  # de_model 是映射维度,需要与字的维度一样(512);max_len 一句话最长有几个字
        super(PositionEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)  # 使用dropout 减少过拟合
        pe = torch.zeros(max_len, d_model)   # 生成  tensor[1000, 512] ,值为0
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)  # 生成tensor[1000, 1] ,值为0~999
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))  # 位置公式里的公因子
        pe[:, 0::2] = torch.sin(position * div_term)  # 位置公式的算法 postion * 公因子,偶数位置用sin
        pe[:, 1::2] = torch.cos(position * div_term)  # 奇数位置用cos
        pe = pe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值