公司动态

Transformer手撕代码

📅 2026/7/18 9:55:24
Transformer手撕代码
目录学习内容一、词向量word2vec二、transformer1、self-attention——关注上下文2、词的向量编码embedding三、Transformer从0解读一encoder1、输入部分1embedding2位置嵌入2、注意力机制——关注重要的3、残差和LayNorm(二)、Decoder(1)masked multi-head attention(2)encoder和decoder的交互层二、代码解读1、三类应用2、解释3、encoder学习内容一、词向量word2vec二、transformer1、self-attention——关注上下文当对词进行编码的时候不仅仅考虑当前的考虑该词所处的上下文语境所有的。2、词的向量编码embedding三、Transformer从0解读https://www.bilibili.com/video/BV1Di4y1c7Zm/?spm_id_from333.999.0.0vd_sourcea402747bd6c153bdb2defee02a9cb617encoder的结构相同但是参数不同数量可以自己定decoder的结构不一定相同参数也不同。一encoder1、输入部分1embedding12个字按字切分每一个字定义一个512维度的向量2位置嵌入偶数位置使用sin,奇数位置使用con绝对位置中引入了相对位置信息但是相对位置信息会在注意力机制那里消失2、注意力机制——关注重要的使用矩阵多头注意力3、残差和LayNormLayerNormalization(LN)因为BatchNormalizationBN的效果差所以不用BN的重点在于重点在于整个batch中的数据针对同一维度特征在做处理缺点batch_size比较小的时候效果较差在RNN中的效果较差为什么使用layter-norm理解为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果(二)、Decoder(1)masked multi-head attention这里的掩膜指的是需要对当前单词和之后的单词做mask为什么需要mask呢如果不掩膜就会为you的生成都提供信息。预测时不应该有后面的单词需要mask掉(2)encoder和decoder的交互层encoder的最后的值和每一个decoder进行交互encoder生成的是K\V矩阵Decoder生成的是Q矩阵二、代码解读1、三类应用1机器翻译类应用——encoder和decoder共同使用2只是用Encoder端-文本分类BERT和图片分类VIT(3)只使用Decoder端-生成类模型2、解释这里的sentences是一个batch中的一条数据p指的是填充s指的是开始e指的是结束三个句子分别是编码段的输入、解码端的输入、最后的标签src_vocab编码端的词表tgt__vocab解码端的词表给一个编码端的输入部分设一个最大长度超过的删掉多余的填充self.projectionnn.linear(d_model,tgt_vocab_size,biasFalse)输出层的d_model是解码层每个token输出维度的大小之后会做一个tgt_vocal_size大小的softmax这里我们在decoder处的参数有三个输入其中编码端的输入指的是想看一下哪些被pad填充3、encodernn.ModelList()是前馈神经网络和自注意力机制的组合位置编码的公式是为了得到句子中的pad的位置信息给到模型后面在计算自注意力和交互注意力的时候去掉pad符号的影响多头注意力机制decoder