苏州网站推广公司,福州网站建设的公司,南昌网站开发制作公司,赣州网上商城锋哥原创的Transformer 大语言模型#xff08;LLM#xff09;基石视频教程#xff1a;
https://www.bilibili.com/video/BV1X92pBqEhV
课程介绍 本课程主要讲解Transformer简介#xff0c;Transformer架构介绍#xff0c;Transformer架构详解#xff0c;包括输入层LLM基石视频教程https://www.bilibili.com/video/BV1X92pBqEhV课程介绍本课程主要讲解Transformer简介Transformer架构介绍Transformer架构详解包括输入层位置编码多头注意力机制前馈神经网络编码器层解码器层输出层以及Transformer Pytorch2内置实现Transformer基于PyTorch2手写实现等知识。Transformer 大语言模型LLM基石 - Transformer架构详解 - 自注意力机制Self-Attention算法实现自注意力机制的目标是计算输入序列中每个词语与其他词语的关系。通过这种机制模型能够自适应地选择与每个词语相关的信息以构建其上下文表示。核心组件QQuery查询向量表示当前关注的点KKey键向量表示被查询的点VValue值向量包含实际的信息注意力分数Q和K的相似度计算注意力权重接着通过计算 Query 和 Key 的相似度来确定每个词语对其他词语的关注程度。这个相似度通常通过计算点积来实现并对结果进行缩放以避免数值过大。具体地计算方式为其中dk是 Key 向量的维度。通过 softmax 操作得到的矩阵表示了每个词语对于其他词语的注意力权重。除以开根号dk主要目的是防止梯度消失和q,k的统计变量满足正太分布实现归一化。输出最后将这些注意力权重与对应的 Value 向量进行加权平均得到每个词语的上下文表示。自注意力机制Self-Attention算法实现def create_sequence_mask(seq_len): 创建序列掩码下三角矩阵 mask np.triu(np.ones((3, seq_len, seq_len), dtypenp.uint8), k1) return torch.from_numpy(1 - mask) # 实现自注意力机制层 def self_attention(query, key, value, maskNone, dropoutNone): 自注意力机制层 参数: query: 查询张量 [batch_size, seq_len, d_model] key: 关键张量 [batch_size, seq_len, d_model] value: 值张量 [batch_size, seq_len, d_model] mask: 掩码张量 [batch_size, seq_len, seq_len] dropout: Dropout概率 防止模型过拟合从而提升其泛化能力 返回: 注意力输出和注意力权重 # 获取词嵌入维度 512 dk query.size(-1) print(dk:, dk) # 计算注意力分数 [batch_size, seq_len, seq_len] attention_scores torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(dk) # 将掩码位置的注意力分数设置为负无穷 if mask is not None: attention_scores attention_scores.masked_fill(mask 0, -1e9) # softmax 函数将注意力分数进行归一化 attention_weights F.softmax(attention_scores, dim-1) # 对权重进行dropout随时失活 if dropout is not None: attention_weights dropout(attention_weights) return torch.matmul(attention_weights, value), attention_weights if __name__ __main__: vocab_size 2000 # 词表大小 embedding_dim 512 # 词嵌入维度的大小 embeddings Embeddings(vocab_size, embedding_dim) embed_result embeddings(torch.tensor([[1999, 2, 99, 4, 5], [66, 2, 3, 22, 5], [66, 2, 3, 4, 5]])) print(embed_result.shape:, embed_result.shape) print(embed_result, embed_result) positional_encoding PositionalEncoding(embedding_dim) result positional_encoding(embed_result) print(result:, result) print(result.shape:, result.shape) # 测试自注意力机制 query key value result mask create_sequence_mask(5) dropout nn.Dropout(0.1) attention_output, attention_weights self_attention(query, key, value, mask, dropout) print(attention_output.shape:, attention_output.shape) # [3, 5, 512] print(attention_weights.shape:, attention_weights.shape) # [3, 5, 5]