Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 层归一化(Layer Normalization)详解以及算法实现

锋哥原创的Transformer 大语言模型(LLM)基石视频教程:

https://www.bilibili.com/video/BV1X92pBqEhV

课程介绍

本课程主要讲解Transformer简介,Transformer架构介绍,Transformer架构详解,包括输入层,位置编码,多头注意力机制,前馈神经网络,编码器层,解码器层,输出层,以及Transformer Pytorch2内置实现,Transformer基于PyTorch2手写实现等知识。

Transformer 大语言模型(LLM)基石 - Transformer架构详解 - 层归一化(Layer Normalization)详解以及算法实现

层归一化(LayerNorm)是对输入的每一维特征进行归一化,使得网络在训练过程中保持稳定。

公式:

优点:

  1. 稳定性:层归一化可以防止输入值的范围过大或过小,使得训练过程更加稳定。

  2. 与批大小无关:不像批归一化依赖于批量大小,层归一化是针对每个样本单独进行归一化,非常适合序列模型。

代码实现:

复制代码
# 层归一化
class LayerNorm(nn.Module):

    # features 512 词嵌入维度 eps 极小值常数,防止零分母
    def __init__(self, features, eps=1e-6):
        super().__init__()
        self.gamma = nn.Parameter(torch.ones(features))  # 可学习的缩放参数
        self.beta = nn.Parameter(torch.zeros(features))  # 可学习的平移参数
        self.eps = eps

    def forward(self, x):
        """
        前向传播
        参数:
            x: 输入张量 [batch_size, seq_len, d_model] [3,5,512] 来自多头自注意力机制,或者来自前馈神经网络
        返回:
            归一化后的张量
        """
        mean = x.mean(-1, keepdim=True)  # 计算均值 [3,5,512]
        variance = x.var(-1, keepdim=True)  # 计算方差 [3,5,512]
        x = (x - mean) / torch.sqrt(variance + self.eps)  # 归一化 [3,5,512]
        return self.gamma * x + self.beta


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]
    mha = MultiHeadAttention(d_model=512, num_heads=8)
    print(mha)
    mask = create_sequence_mask(5)
    result = mha(result, result, result, mask)
    print("result.shape:", result.shape)  # [3, 5, 512]
    # 测试前馈神经网络
    # ffn = FeedForward(d_model=512, d_ff=2048)
    # ffn_result = ffn(result)
    # print('ffn_result:', ffn_result.shape)
    # 测试层归一化
    ln = LayerNorm(features=512)
    ln_result = ln(result)
    print("ln_result:", ln_result.shape)

运行结果:

相关推荐
MistaCloud15 小时前
Pytorch进阶训练技巧(二)之梯度层面的优化策略
人工智能·pytorch·python·深度学习
zP1nG15 小时前
Gemini 全能 QQ 机器人部署手册 (V1.0 Release)
语言模型·机器人
deephub15 小时前
RAG 检索模型如何学习:三种损失函数的机制解析
人工智能·深度学习·损失函数·信息检索·rag
得物技术16 小时前
入选AAAI-PerFM|得物社区推荐之基于大语言模型的新颖性推荐算法
人工智能·语言模型·推荐算法
Jack___Xue16 小时前
LLM知识随笔(二)--BERT
人工智能·深度学习·bert
啊阿狸不会拉杆16 小时前
《机器学习》第 8 章 - 常用深度网络模型
网络·人工智能·深度学习·机器学习·ai·cnn·ml
赋创小助手16 小时前
NVIDIA H100与GH200选型指南:AI与HPC负载的硬件适配方案
服务器·人工智能·深度学习·神经网络·语言模型·自然语言处理·tensorflow
OpenBayes16 小时前
Nemotron Speech ASR低延迟英文实时转写的语音识别服务;GLM-Image开源混合自回归与扩散解码架构的图像生成模型
人工智能·深度学习·机器学习·架构·数据集·语音识别·图像编辑
啊阿狸不会拉杆16 小时前
《机器学习》第 7 章 - 神经网络与深度学习
人工智能·python·深度学习·神经网络·机器学习·ai·ml
乌恩大侠16 小时前
【AI-RAN 调研】软银株式会社通过全新 Transformer AI 将 5G AI-RAN 吞吐量提升 30%
人工智能·深度学习·5g·fpga开发·transformer·usrp·mimo