RMSNorm原理及代码

RMSNorm原理及代码

在大模型中使用层归一化有如下几个因素:

  1. 改善网络稳定性
  2. 加速收敛速度
  3. 提高模型的泛化能力

批量归一化是对一个批次内的数据进行归一化
层归一化是对一个样本中的不同特征进行归一化

如下是LayerNorm与RMSNorm的公式
在这里插入图片描述
在LLaMA中使用RMSNorm替代LayerNorm,因为RMSNorm相比LayerNorm,不需要计算样本与均值的差(减少了计算量,加快了训练速度)
代码:

class LlamaRMSNorm(nn.Module):
    def __init__(self, hidden_size, eps=1e-6):
        """
        LlamaRMSNorm is equivalent to T5LayerNorm
        """
        super().__init__()
        self.weight = nn.Parameter(torch.ones(hidden_size))  # 以hidden_size大小的全1张量初始化
        self.variance_epsilon = eps  # 给定一个很小的数,防止分母为0

    def forward(self, hidden_states):
        input_dtype = hidden_states.dtype
        hidden_states = hidden_states.to(torch.float32)
        variance = hidden_states.pow(2).mean(-1, keepdim=True)
        hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
        return self.weight * hidden_states.to(input_dtype)  # to(input_dtype)是为了保持数据类型

代码来源于:https://github.com/huggingface/transformers/tree/main/src/transformers/models/llama/modeling_llama.py

相关推荐

  1. Eureka工作原理代码实例

    2024-02-15 00:02:01       38 阅读
  2. R-Tree原理实现代码

    2024-02-15 00:02:01       15 阅读
  3. R-Tree原理实现代码

    2024-02-15 00:02:01       10 阅读
  4. R-Tree原理实现代码

    2024-02-15 00:02:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-15 00:02:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-15 00:02:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-15 00:02:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-15 00:02:01       20 阅读

热门阅读

  1. 设计模式之观察者模式

    2024-02-15 00:02:01       28 阅读
  2. 大模型Tokenizer知识

    2024-02-15 00:02:01       32 阅读
  3. 寒假学习记录15:Node(网络)

    2024-02-15 00:02:01       28 阅读
  4. 时间序列预测——BiLSTM模型

    2024-02-15 00:02:01       26 阅读
  5. 动态线程池可以这样实现,便于上线及时调整!

    2024-02-15 00:02:01       23 阅读
  6. 利用Cloudfare worker反代github

    2024-02-15 00:02:01       30 阅读
  7. Python weather app tutorial

    2024-02-15 00:02:01       23 阅读
  8. 简单的手指控制机械臂

    2024-02-15 00:02:01       40 阅读