96SEO 2026-02-19 17:35 0
照读论文只读近两年的思路看那它无疑是过时的但可惜的是目前很多论文的核心依然是Transformer或者由其进行改进的故本文使用pytorch来搭建一下Transformer这个模型

首先我们要从整个模型架构入手从大的层面看这块内容然后再开始编写代码。
欧克这里默认大家掌握了一些基础知识Transformer是由Google于2017年的Attention
Need论文上所提出来的。
如下图则是论文中所提出的整个框架可以很清晰的看出具体所使用的组件
总的来看两个模块编码器、解码器特别有自编码器的思想(换句话说Transformer借鉴了seq2sqe而seq2sqe天然就是自编码器的思想)下面引用了论文当中的话.
个相同层的堆叠组成。
每一层有两个子层。
第一个是多头自注意机制第二个是一个简单的位置全连接前馈网络。
我们在两个子层中的每一个周围使用残差连接随后进行层归一化。
也就是说每个子层的输出是
是由子层本身实现的函数。
为了促进这些剩余连接模型中的所有子层以及嵌入层产生维度
个相同层的堆栈组成。
除了每个编码器层中的两个子层之外解码器还插入第三子层该第三子层对编码器堆栈的输出执行多头注意。
与编码器类似我们在每个子层周围使用残差连接然后进行层归一化。
我们还修改了解码器堆栈中的自注意子层以防止位置注意到后续位置。
该掩蔽与输出嵌入偏移一个位置的事实相结合确保了位置i的预测可以仅依赖于小于
好了我们了解了整个大的框架开始接触小的组件由上图我们可以进行拆分其整个框架是由嵌入层、位置编码层、掩码多头注意力层、前馈神经网络层、残差连接归一化层接下来我们分别实现这些神经网络块层并将其堆叠在一起其实就是Transformer了。
下面的就是位置编码。
在这里打个比方就比如机器翻译问题上我们需要将一句话翻译成另一句话即A
B那么A和B必然是长度随机的编码这里输入的就是想要翻译几句话几个单词每个单词的特征编码
PE(pos,2i)sin(pos/100002i/dmodel)
PE(pos,2i1)cos(pos/100002i/dmodel)
PositionalEncoding(nn.Module):num_hiddens:
max_len1000):super(PositionalEncoding,
dtypetorch.float32).reshape(-1,
欧克接下来我们先来看一下简单理解的层。
残差连接可以理解为防止梯度消失问题以及加快收敛的一个有效的方法。
而归一化就是防止梯度爆炸的问题
AddNorm(nn.Module):normalized_shape:
PostionWiseFFN(nn.Module):num_input:
num_ouput):super(PostionWiseFFN,
self.liner2(self.relu(self.liner1(X)))点积注意力机制
softmax(\frac{QK^T}{\sqrt{d}})V
DotProductAttention(nn.Module):dropout:
dropout):super(DotProductAttention,
dtypetorch.float32,deviceX.device)[None,
valid_lens.repeat_interleave(valid_lens,
nn.functional.softmax(X.reshape(shape),
点积获取注意力分数self.attention_weights
torch.bmm(self.dropout(self.attention_weights),
值V到这里我们由此便可以提出自注意力机制而自注意力机制对上面做出了一个很简单的改变就是
所谓多头注意力机制就是有多个自注意力机制并行然后将输出进行拼接送到线性层进一步整合
Attention(QW_i^Q,KW_i^K,VW_i^V)
MultiHead(Q,K,V)Concat(head1,...,headh)WOwhere
headiAttention(QWiQ,KWiK,VWiV)
MultiHeadAttention(nn.Module):key_size:
biasFalse):super(MultiHeadAttention,
torch.repeat_interleave(valid_lens,
self.W_o(output_concat)这里我们通过transpose_qkv和transpose_output函数来将数据进行改造以此来进行并行操作
输入X的形状:(batch_size查询或者“键值”对的个数num_hiddens)#
输出X的形状:(batch_size查询或者“键值”对的个数num_headsnum_hiddens/num_heads)X
num_heads):逆转transpose_qkv函数的操作X
EncoderBlock(nn.Module):K_size,
self.ffn(Y))接下来我们需要将位置编码层、嵌入层、残差连接归一化层、前馈神经网络、编码器等封装起来
TransformerEncoder(nn.Module):vocab_size:
biasFalse):super(TransformerEncoder,
self).__init__()self.num_hiddens
nn.Embedding(num_embeddingsvocab_size,
PositionalEncoding(num_hiddens,
range(num_layers):self.blks.add_module(block
self.pos_encoding(self.embedding(X)
math.sqrt(self.num_hiddens))self.attention_weights
valid_lens)self.attention_weights[i]
blk.attention.attention.attention_weightsreturn
[编码器输入编码器有效长度中间状态用于记录]enc_outputs,
deviceX.device)else:dec_valid_lens
TransformerDecoder(nn.Module):vocab_size:
dropout):super(TransformerDecoder,
self).__init__()self.num_hiddens
nn.Embedding(num_embeddingsvocab_size,
embedding_dimnum_hiddens)self.pos_encoding
PositionalEncoding(num_hiddens,
range(num_layers):self.blks.add_module(block
self.pos_encoding(self.embedding(X)
math.sqrt(self.num_hiddens))self._attention_weights
state)self._attention_weights[0][i]
blk.attention1.attention.attention_weightsself._attention_weights[1][i]
blk.attention2.attention.attention_weightsreturn
self._attention_weightspropertydef
self._attention_weightsTransformer
EncoderDecoder(nn.Module):编码器-解码器架构的基类def
**kwargs):super(EncoderDecoder,
self).__init__(**kwargs)self.encoder
self.decoder.init_state(enc_outputs,
dec_state)Transformer以三种不同的方式使用多头注意力(引自论文)
V来自编码器的输出。
这使得解码器中的每个位置都能处理输入序列中的所有位置。
这模拟了序列到序列模型中的典型编码器-解码器注意机制。
编码器包含自我注意层。
在自关注层中所有的键、值和查询都来自同一个地方在这种情况下是编码器中前一层的输出。
编码器中的每个位置都可以处理编码器的前一层中的所有位置。
类似地解码器中的自关注层允许解码器中的每个位置关注解码器中的直到并且包括该位置的所有位置。
我们需要防止解码器中的冗余信息流以保持自回归特性。
我们通过屏蔽设置为
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback