400元网站建设wordpress安装 第二步
400元网站建设,wordpress安装 第二步,做网店有哪些网站,做业务需要知道哪些网站系列文章目录 文章目录系列文章目录前言一、RMSNorm1.1 核心概念1.2 数学公式拆解1.3 代码实践总结前言 一、RMSNorm
1.1 核心概念
在深度神经网络中#xff0c;数据在层层传递时#xff0c;数值可能会变得特别大#xff08;爆炸#xff09; 或者特别小#xff08;消失&…系列文章目录文章目录系列文章目录前言一、RMSNorm1.1 核心概念1.2 数学公式拆解1.3 代码实践总结前言一、RMSNorm1.1 核心概念在深度神经网络中数据在层层传递时数值可能会变得特别大爆炸或者特别小消失这会导致模型训练不稳定。Normalization归一化的作用就像是一个“自动音量调节器”。不管输入的声音数据是大是小它都把它调整到一个合适的音量范围让后面的模块听起来更舒服。传统的 LayerNorm先减去平均值让中心归零再除以标准差让方差归一。y x − mean std × γ β y \frac{x - \text{mean}}{\text{std}} \times \gamma \betaystdx−mean×γβLlama 用的 RMSNorm不减去平均值只除以均方根 (Root Mean Square)。y x RMS × γ y \frac{x}{\text{RMS}} \times \gammayRMSx×γ好处少了一步减法运算速度更快且在 LLM 中效果往往更好。1.2 数学公式拆解RMSNorm ( x ) x 1 n ∑ i 1 n x i 2 ϵ ⋅ γ \text{RMSNorm}(x) \frac{x}{\sqrt{\frac{1}{n}\sum_{i1}^{n} x_i^2 \epsilon}} \cdot \gammaRMSNorm(x)n1∑i1nxi2ϵx⋅γ符号含义x xx输入的数据向量。n nn向量的维度比如隐藏层大小 hidden_size。∑ x i 2 \sum x_i^2∑xi2把向量里每个数字平方后加起来。… \sqrt{\dots}…开根号这就是RMS (均方根)。ϵ \epsilonϵ(epsilon)一个极小的数比如1 e − 6 1e-61e−6防止分母为 0 导致程序崩溃。γ \gammaγ(gamma/weight)缩放参数可学习的权重。归一化后模型需要自己决定要不要把数据再放大或缩小一点这个γ \gammaγ就是用来学的。1.3 代码实践importtorchimporttorch.nnasnnclassRMSNorm(nn.Module):def__init__(self,dim,eps1e-6): dim: 归一化的维度通常是隐藏层的大小 (hidden_size) eps: 防止除以零的小数 super().__init__()# 1. 定义可学习的权重 g (gamma)# 初始化为 1形状是 (dim,)self.weightnn.Parameter(torch.ones(dim))# 2. 保存 epsilonself.epsepsdefforward(self,x): x: 输入张量形状通常是 (batch_size, seq_len, dim) # --- 核心逻辑开始 ---# 3. 计算平方和# x.pow(2) 把所有元素平方# .mean(-1, keepdimTrue) 在最后一个维度求平均keepdim 保证维度不变方便广播variancex.pow(2).mean(-1,keepdimTrue)# 4. 计算 RMS (均方根)# torch.rsqrt 是 1 / sqrt(x) 的优化版本比先 sqrt 再除法更快# 加上 self.eps 保证数值稳定rmstorch.rsqrt(varianceself.eps)# 5. 归一化并缩放# x * rms 相当于 x / sqrt(variance)# * self.weight 是乘以可学习参数outputx*rms*self.weight# --- 核心逻辑结束 ---returnoutputdeftest_rms_norm(): 我们需要验证三件事 1. **形状对不对** (输入输出维度一致) 2. **数值对不对** (RMS 是否接近 1) 3. **梯度能不能传** (确保能训练) print(--- 开始测试 RMSNorm ---)# 1. 准备数据batch_size2seq_len10dim512# 隐藏层大小# 创建一个随机输入模拟神经网络的中间层输出# 我们故意让数值大一点看看归一化效果xtorch.randn(batch_size,seq_len,dim)*10# 2. 实例化模型normRMSNorm(dimdim)# 3. 前向传播outputnorm(x)# --- 验证点 1: 形状检查 ---assertx.shapeoutput.shape,f形状错误输入{x.shape}, 输出{output.shape}print(f形状检查通过{x.shape})# --- 验证点 2: 统计特性检查 ---# RMSNorm 的特性是输出的均方根 (RMS) 应该接近 1 (在乘以 weight 之前)# 因为 output x / rms * weight# 所以 output / weight 的 rms 应该约等于 1# 为了简单验证我们暂时假设 weight 都是 1 (初始化就是 1)output_rmstorch.sqrt(output.pow(2).mean(-1))# 允许一点误差比如 0.99 到 1.01 之间asserttorch.allclose(output_rms,torch.ones_like(output_rms),atol1e-3),RMS 值偏离 1 太多print(f统计特性检查通过输出 RMS 均值约为{output_rms.mean().item():.4f})# --- 验证点 3: 梯度检查 (确保可训练) ---# 创建一个假损失lossoutput.sum()# 反向传播loss.backward()# 检查 weight 是否有梯度assertnorm.weight.gradisnotNone,权重没有梯度print(f梯度检查通过weight 梯度形状{norm.weight.grad.shape})print(--- 所有测试通过RMSNorm 构建成功 ---)# 运行测试if__name____main__:test_rms_norm()总结