手撕Transformer
本专栏逐一讲解Transformer各模块的内容,用它来实现一个中英翻译任务。可以学到编码器层、解码器层、生成器层的实现。此外还可以学习动态学习率调整策略,多GPU并行训练。
木珊数据挖掘
喜欢数学建模,喜欢机器学习,具有丰富的数学建模竞赛经验,撰写过二十余篇竞赛论文。获得过“华为杯”第十九届中国研究生数学建模竞赛二等奖;“华为杯”第二十届中国研究生数学建模竞赛二等奖;一篇论文被评为浙江省优秀实践案例;第十一届“泰迪杯”数据挖掘挑战赛三等奖;2022年MathorCup高校数学建模挑战赛—大数据竞赛二等奖;获第六届“泰迪杯”数据分析技能赛一等奖。
展开
-
Transformer模型的整体实现
在这篇文章中,我们给出Transformer模型的整体代码实现,如果对每个模块代码不熟悉的同学可以查看专栏前面的文章。原创 2024-06-01 17:15:37 · 350 阅读 · 0 评论 -
Transformer生成器和整体结构
这个生成器的作用是将解码器的输出映射到词汇表的概率分布。生成器类继承自nn.Module,并包含一个线性层。在forward方法中,它将输入x通过线性层,并返回结果。我们定义一个函数make_model,用于创建Transformer模型。这个函数接收源词汇表大小src_vocab_size、目标词汇表大小tgt_vocab_size、模型维度d_model、注意力头数n_head、前馈网络维度d_ff、编码器和解码器层数N和dropout比例dropout。原创 2024-06-01 17:12:34 · 169 阅读 · 0 评论 -
Transformer解码器层实现
注:如果看不懂,建议从专栏第一篇文章开始看,每篇文章介绍一个模块。Transformer模型的解码器由多个相同的层(Layer)组成,每个层包括三个子层:掩码多头注意力机制、交叉多头注意力机制,和前馈神经网络。下面是这三个子层的具体实现方法。交叉多头注意力机制用于将编码器的输出与解码器的输入进行关联。它的实现方法与多头注意力机制类似,只不过它的查询(query)来自于解码器,而键(key)和值(value)来自于编码器。掩码多头注意力机制为了实现自回归地生成词。原创 2024-05-31 09:30:05 · 201 阅读 · 0 评论 -
Transformer编码器的实现
Transformer模型包括编码器(Encoder)和解码器(Decoder)两部分,其中编码器用于处理输入序列,将输入的词做Embeding,解码器用于生成输出序列。本文将详细介绍Transformer模型中的编码器部分。Transformer模型的编码器由多个相同的层(Layer)组成,每个层包括两个子层:多头注意力(Multi-Headed Attention)机制和前馈神经网络(Feed Forward Net)。下面是这两个子层的具体实现方法。原创 2024-05-31 09:12:09 · 351 阅读 · 0 评论 -
Transformer多头注意力层
多头注意力机制将输入序列分割成多个头,每个头使用不同的线性变换。具体来说,多头注意力机制包括以下几个步骤:将查询(query)、键(key)和值(value)矩阵分别通过三个线性变换WQ、WK和WV,得到新的查询、键和值矩阵。将新的查询、键和值矩阵分割成多个头,每个头使用不同的线性变换。具体地,将每个矩阵的最后一个维度分割成n个部分,其中n是头的数量。对每个头分别计算注意力,得到输出矩阵。将所有头的输出矩阵拼接起来,通过另一个线性变换得到最终的输出。原创 2024-05-31 09:03:57 · 225 阅读 · 0 评论 -
注意力机制的代码实现
注意力机制的核心思想是,在处理一个序列时,模型应该关注序列中的哪些部分。在自然语言处理中,这通常意味着在生成一个词时,模型应该关注输入序列中的哪些词。注意力机制通过计算一个权重矩阵来实现这一点,这个权重矩阵表示输入序列中每个词对当前位置的重要性。注意力机制的输入包括三个矩阵:query、key和value。这三个矩阵通常是通过嵌入层和神经网络层得到的。注意力机制的输出是一个加权后的value矩阵,这个矩阵表示了输入序列中每个词对当前位置的重要性。原创 2024-05-30 16:32:13 · 260 阅读 · 0 评论 -
Transformer位置编码层的实现
在这篇文章我们将实现位置编码层,跟传统的 LSTM序列模型不同,在 Transformer 编码结构中,均是基于全连接层实现,Linear层没有捕捉位置信息的能力,因此纯粹的 Attention 模块是无法捕捉输入顺序的,因此需要在 Embedding 层后加入位置编码器,将词汇位置不同,可能会产生不同语义信息,加入到词嵌入张量中。Transformer 采用的是正余弦的绝对位置编码,这种编码方式可以保证,不同位置在所有维度上不会被编码到完全一样的值,从而使每个位置都获得独一无二的编码。原创 2024-05-27 16:15:08 · 192 阅读 · 0 评论 -
Transformer文本嵌入层的实现
在本专栏我主要侧重于讲解Transformer的代码实现,对于原理部分不太了解的同学建议先去研读论文或者博客。这篇文章我们开始正式进入Transfomer的代码部分讲解了,首先就是文本向量化,需要把文字转化成向量,才能进行数学运算。完整的文本向量化过程,要分为两步,第一步是是把文字转化为一个索引,也就是找到这个字在词表中的索引位置;第二步,就是从随机生成的 lookup table 中,找这个索引对应的向量,作为这个词的表征。原创 2024-05-27 15:47:47 · 538 阅读 · 0 评论