从零开始理解Llama 3的SwiGLU激活函数:为什么它比ReLU更适合大模型?

从零构建Llama 3大模型:深入解析Transformer核心组件与训练实践 Transformer架构作为现代大语言模型的基础,其核心在于自注意力机制和前馈网络的组合。自注意力机制通过计算查询、键、值之间的关联度,使模型能够捕捉序列中任意位置间的依赖关系,而前馈网络则对每个位置的特征进行非线性变换。这一设计赋予了模型强大的序列建模能力,成为自然语言处理、代码生成等任务的关键技术。在工程实践中,为了提升训练效率和稳定性,研究者引入了诸如旋转位置编码(RoPE)和分组查询注意力(GQA)等优化技术。RoPE通过旋转操作将相对位置信息融入注意力计算,增强了模型对序列顺序的理解;GQA则在 阅读详情

从零开始理解Llama 3的SwiGLU激活函数:为什么它比ReLU更适合大模型?

如果你最近在关注开源大语言模型的进展,Meta发布的Llama 3系列绝对是一个绕不开的话题。无论是8B还是70B版本,它们都在多项基准测试中展现出了令人印象深刻的性能。但当你深入其架构细节时,会发现一个有趣的现象:Llama 3并没有使用Transformer中常见的ReLU或GELU激活函数,而是选择了一个相对陌生的名字——SwiGLU。

这不禁让人好奇:在模型参数动辄数十亿甚至上百亿的时代,为什么Meta的工程师们要放弃经典的ReLU,转而采用SwiGLU?这个看似微小的改动背后,究竟隐藏着怎样的设计哲学和性能考量?更重要的是,对于正在构建或微调大模型的开发者来说,理解这个选择意味着什么?

今天,我们就来彻底拆解SwiGLU这个“神秘”的激活函数。我不会仅仅停留在公式推导上,而是会结合大模型训练的实际挑战——梯度消失、训练稳定性、计算效率——来剖析SwiGLU如何在这些关键维度上超越ReLU。无论你是正在调参的工程师,还是对模型底层原理感兴趣的研究者,相信这篇文章都能给你带来新的启发。

1. 激活函数简史:从Sigmoid到ReLU,我们经历了什么?

要理解SwiGLU的价值,我们得先回顾一下激活函数的进化历程。在深度学习早期,Sigmoid和Tanh是绝对的主流。它们的数学形式优雅,输出范围有限,看起来非常适合作为神经元的“开关”。

import torch
import matplotlib.pyplot as plt
import numpy as np

# 经典激活函数对比
x = torch.linspace(-5, 5, 100)
sigmoid = torch.sigmoid(x)
tanh = torch.tanh(x)
relu = torch.relu(x)

# 绘制函数曲线
fig, axes = plt.subplots(1, 3, figsize=(12, 3))
axes[0].plot(x.numpy(), sigmoid.numpy())
axes[0].set_title('Sigmoid')
axes[1].plot(x.numpy(), tanh.numpy())
axes[1].set_title('Tanh')
axes[2].plot(x.numpy(), relu.numpy())
axes[2].set_title('ReLU')
plt.tight_layout()

但实际训练中,Sigmoid家族暴露出了致命缺陷:梯度消失。当输入值较大或较小时,这些函数的导数趋近于零,导致反向传播时梯度几乎无法更新早期层的权重。想象一下,一个上百层的深度网络,梯度信号传到第一层时已经微弱到可以忽略不计——这就是为什么早期的深度网络难以训练。

注意:梯度消失与“死亡神经元”是两个不同但相关的问题。梯度消失指的是梯度值过小导致权重更新缓慢;而ReLU的“死亡神经元”是指某些神经元一旦输出为0,就再也无法被激活。

2010年左右,ReLU(Rectified Linear Unit)的横空出世改变了这一切。它的公式简单到令人惊讶:f(x) = max(0, x)。正是这种简单性带来了几个关键优势:

  1. 计算高效:只需要比较和选择操作,没有指数运算
  2. 缓解梯度消失:在正区间导数为1,梯度可以无衰减地传播
  3. 稀疏激活:约50%的神经元在训练中处于非活跃状态,这被认为有助于特征选择

然而,ReLU并非完美。它的“硬零”特性导致了所谓的“死亡ReLU”问题:一旦某个神经元的加权输入为负,它的梯度就永远为零,这个神经元在后续训练中再也无法被激活。对于大模型来说,这意味着参数利用率下降,模型容量无法被充分利用。

为了解决这个问题,研究者们提出了各种ReLU变体:

激活函数公式特点缺点
Leaky ReLUf(x) = max(αx, x)负区间有小的斜率需要手动设置α
PReLUf(x) = max(αx, x)α可学习增加参数数量
ELUf(x) = x if x>0 else α(exp(x)-1)负区间平滑计算包含指数
GELUf(x) = x * Φ(x)基于高斯误差函数计算相对复杂

GELU(Gaussian Error Linear Unit)在BERT、GPT等模型中取得了成功,它通过概率视角让激活函数在零附近更加平滑。但即使是这样,当模型规模继续增大时,研究者们仍在寻找更优的解决方案。

2. SwiGLU深度解析:不仅仅是激活函数的升级

SwiGLU这个名字看起来有些复杂,但实际上它是三个概念的组合:Swish + GLU。要理解它,我们需要分别拆解这两个部分。

2.1 Swish激活函数:ReLU的平滑替代

Swish函数由Google Brain团队在2017年提出,公式为:f(x) = x * sigmoid(βx)。当β=1时,就是标准的Swish函数;当β→∞时,Swish趋近于ReLU。

def swish(x, beta=1.0):
    """Swish激活函数实现"""
    return x * torch.sigmoid(beta * x)

# 不同β值的Swish函数
x = torch.linspace(-4, 4, 100)
betas = [0.1, 1.0, 10.0]
swish_values = [swish(x, b) for b in betas]

# 与ReLU对比
relu = torch.relu(x)

Swish的关键特性在于它的平滑性和自门控机制:

  1. 处处可微:与ReLU在0点的不可导不同,Swish在整个实数域上都是光滑的
  2. 非单调性:在负半轴,Swish先下降后上升,这为模型提供了更丰富的表达能力
  3. 自门控:sigmoid部分可以看作一个自动学习的"门",控制有多少信息可以通过

实验表明,Swish在ImageNet等任务上 consistently优于ReLU。但为什么它没有立即取代ReLU呢?主要原因在于计算成本——sigmoid函数涉及指数运算,比ReLU的max操作要昂贵得多。

2.2 GLU:门控线性单元的革命性思想

GLU(Gated Linear Unit)的概念更早,可以追溯到2016年。它的核心思想是引入一个门控机制,让模型自己决定哪些信息应该被保留,哪些应该被抑制。

标准的GLU公式为:GLU(x) = (xW + b) ⊗ σ(xV + c),其中:

  • xW + b是线性变换
  • σ(xV + c)是门控信号(sigmoid函数)
  • ⊗表示逐元素乘法

这个结构的神奇之处在于,它让前馈网络(FFN)具备了类似注意力机制的选择性。模型可以学习到:对于不同的输入,应该强调哪些特征,抑制哪些特征。

然而,最初的GLU使用sigmoid作为门控函数,这带来了两个问题:

  1. sigmoid在两端饱和,梯度容易消失
  2. sigmoid的输出范围是(0,1),这意味着它只能衰减信息,不能增强信息

2.3 SwiGLU:强强联合的产物

SwiGLU就是将Swish作为GLU的门控函数:SwiGLU(x) = (xW) ⊗ Swish(xV)。在Llama 3的具体实现中,前馈网络(FFN)的公式为:

FFN_swiGLU(x, W, V, W2) = (Swish_1(xW) ⊗ xV) W2

这里有一个重要的设计细节:为了保持参数量与原始两层FFN(ReLU版本)大致相同,中间层的维度需要调整为原来的2/3。这是因为SwiGLU引入了额外的权重矩阵V。

让我们通过一个具体的代码示例来理解这个设计:

class SwiGLUFFN(nn.Module):
    """Llama 3中的SwiGLU前馈网络实现"""
    def __init__(self, dim, hidden_dim):
        super().__init__()
        # 传统FFN: dim -> 4*dim -> dim
        # SwiGLU FFN: dim -> 2/3*4*dim -> dim (保持参数量相近)
        hidden_dim = int(2 * hidden_dim / 3)
        
        self.w1 = nn.Linear(dim, hidden_dim, bias=False)  # 对应xW
        self.w2 = nn.Linear(hidden_dim, dim, bias=False)   # 对应W2
        self.v = nn.Linear(dim, hidden_dim, bias=False)    # 对应xV
    
    def forward(self, x):
        # Swish(xW) ⊗ (xV)
        swish_gate = F.silu(self.w1(x))  # SiLU就是Swish
        gate = self.v(x)
        activated = swish_gate * gate
        return self.w2(activated)

这个设计巧妙之处在于:

  1. 参数量平衡:通过调整中间层维度,SwiGLU FFN的三个矩阵(W, V, W2)的总参数量与原始两个矩阵的FFN大致相当
  2. 表达能力增强:门控机制让模型可以学习更复杂的特征交互
  3. 训练稳定性:Swish的平滑性有助于梯度流动

3. 为什么SwiGLU在大模型中表现更优?

理解了SwiGLU的数学形式后,我们来看看它在实际大模型训练中的优势。这些优势不是理论上的,而是Meta工程师们在训练千亿参数模型时实实在在观察到的。

3.1 梯度流动的改善

大模型训练最头疼的问题之一就是梯度问题。随着网络深度增加,梯度要么消失(变得极小),要么爆炸(变得极大)。SwiGLU通过两个机制缓解了这个问题:

首先,Swish函数的梯度特性更优。与ReLU在0点的梯度突变不同,Swish在整个定义域上都是平滑的。这意味着梯度变化更加连续,减少了训练中的不稳定性。

# 比较不同激活函数的梯度
x = torch.linspace(-3, 3, 100, requires_grad=True)

def get_gradient(func, x):
    y = func(x)
    y.sum().backward()
    return x.grad.clone()

# 计算梯度
relu_grad = get_gradient(torch.relu, x.clone())
swish_grad = get_gradient(lambda x: x * torch.sigmoid(x), x.clone())
gelu_grad = get_gradient(torch.nn.functional.gelu, x.clone())

其次,门控机制提供了额外的梯度路径。在SwiGLU中,梯度可以通过两条路径传播:一条经过Swish门控,另一条经过线性变换。这种多路径结构类似于ResNet的残差连接,有助于梯度在深层网络中的流动。

3.2 非线性表达能力的提升

大模型需要处理极其复杂的语言模式和知识表示。传统的ReLU只能提供简单的阈值操作——要么完全通过,要么完全阻断。而SwiGLU的门控机制允许更精细的控制。

考虑一个具体的例子:在理解"bank"这个词时,模型需要根据上下文决定是激活"金融机构"还是"河岸"的含义。ReLU只能做二值选择,而SwiGLU可以学习一个连续的门控信号,让模型同时保留两种含义的可能性,只是权重不同。

这种连续的门控特别适合处理自然语言中的歧义和多义性。模型不再需要"硬决策",而是可以学习在不同语境下如何混合不同的语义特征。

3.3 训练稳定性和收敛速度

在实际训练Llama 3时,工程师们观察到几个关键现象:

  1. 更平滑的损失曲线:使用SwiGLU的模型在训练初期损失下降更稳定,减少了需要调整学习率策略的麻烦
  2. 对初始化更不敏感:ReLU网络对权重初始化非常敏感,不当的初始化可能导致大量神经元"死亡"。SwiGLU的平滑性降低了这种敏感性
  3. 更好的泛化能力:在验证集上,SwiGLU模型通常表现出更小的过拟合倾向

这些优势在大规模分布式训练中尤其重要。当你在数千个GPU上训练模型时,任何训练不稳定都可能导致巨大的计算资源浪费。

3.4 与模型其他组件的协同效应

SwiGLU不是孤立工作的,它与Llama 3中的其他改进形成了良好的协同:

  • 与RMSNorm的配合:RMSNorm去除了LayerNorm中的均值中心化,只进行缩放。这种简化与SwiGLU的平滑性相得益彰,共同促进了训练稳定性
  • 与RoPE位置编码的协同:RoPE通过旋转注入位置信息,而SwiGLU的门控机制可以帮助模型更好地利用这些位置信息
  • 与GQA的互补:分组查询注意力减少了KV缓存的内存占用,而SwiGLU通过更高效的特征提取,可以在参数量不变的情况下获得更好的性能

下表总结了SwiGLU与常见激活函数在大模型场景下的对比:

特性ReLUGELUSwiGLU对大模型的意义
计算复杂度低中中高影响训练速度和推理延迟
梯度特性不连续连续连续且平滑影响训练稳定性和收敛速度
表达能力线性阈值平滑阈值连续门控影响模型容量和任务性能
参数效率高高中等(需调整维度)影响模型大小和内存占用
训练稳定性一般(有死亡神经元风险)好优秀减少调参成本和训练失败风险

4. 实战指南:在你的项目中应用SwiGLU

理解了理论优势后,你可能会想:我该在自己的模型中使用SwiGLU吗?答案是:看情况。下面是一些实用的建议。

4.1 何时应该考虑SwiGLU?

根据我的经验,以下场景特别适合尝试SwiGLU:

  1. 模型规模较大(>1B参数):小模型可能无法充分体现SwiGLU的优势,计算开销相对更大
  2. 训练数据充足:SwiGLU需要更多数据来学习复杂的门控机制
  3. 任务复杂度高:需要细粒度特征选择的任务(如代码生成、数学推理)更能受益
  4. 训练稳定性是首要考虑:如果你在训练大模型时经常遇到梯度问题

4.2 实现注意事项

如果你决定在自己的Transformer中实现SwiGLU FFN,有几个关键点需要注意:

class CustomTransformerBlock(nn.Module):
    """包含SwiGLU的Transformer块实现示例"""
    def __init__(self, dim, hidden_dim, num_heads):
        super().__init__()
        self.attention = MultiHeadAttention(dim, num_heads)
        self.attention_norm = RMSNorm(dim)  # Llama使用RMSNorm而非LayerNorm
        
        # SwiGLU FFN实现
        hidden_dim = int(2 * hidden_dim / 3)  # 关键:调整维度保持参数量
        self.w1 = nn.Linear(dim, hidden_dim, bias=False)
        self.w2 = nn.Linear(hidden_dim, dim, bias=False)
        self.v = nn.Linear(dim, hidden_dim, bias=False)
        
        self.ffn_norm = RMSNorm(dim)
    
    def forward(self, x):
        # 注意力部分
        h = x + self.attention(self.attention_norm(x))
        
        # SwiGLU前馈网络
        residual = h
        h = self.ffn_norm(h)
        swish_gate = F.silu(self.w1(h))
        gate = self.v(h)
        activated = swish_gate * gate
        h = self.w2(activated)
        
        return residual + h

提示:在实际部署时,可以考虑使用融合内核(fused kernel)来优化SwiGLU的计算。将Swish激活和矩阵乘法合并到单个CUDA内核中,可以显著减少内存访问和提升计算效率。

4.3 超参数调整策略

从ReLU切换到SwiGLU通常需要重新调整一些超参数:

  1. 学习率:由于SwiGLU的梯度特性不同,可能需要稍微降低学习率(约10-20%)
  2. 初始化方案:权重初始化可能需要调整,特别是W和V矩阵
  3. Dropout率:如果使用Dropout,可能需要略微调整比率
  4. 热身步数:训练初期可能需要更长的学习率热身(warmup)

一个实用的策略是:先用小规模实验确定最佳的超参数组合,再扩展到完整模型。

4.4 性能权衡与替代方案

虽然SwiGLU有很多优点,但它也不是银弹。你需要权衡:

计算开销:SwiGLU比ReLU多一个矩阵乘法(V矩阵),这增加了约33%的FFN计算量。对于推理延迟敏感的应用,这可能是个问题。

内存占用:虽然通过调整维度保持了参数量相近,但前向传播时需要同时存储W1和V的激活值,峰值内存可能更高。

如果你发现SwiGLU的计算成本太高,可以考虑这些替代方案:

  1. ReGLU:使用ReLU作为门控函数,计算更简单但性能稍差
  2. GEGLU:使用GELU作为门控函数,平衡了性能和计算成本
  3. 逐步迁移:只在模型的最后几层使用SwiGLU,前面仍用ReLU/GELU

5. 超越Llama 3:SwiGLU的未来演进

SwiGLU在Llama 3中的成功应用只是一个开始。随着模型规模的继续扩大和研究深入,我们可能会看到更多基于门控机制的创新。

5.1 动态门控机制

当前的SwiGLU使用固定的Swish函数作为门控。未来的变体可能会引入动态门控——根据输入特征自适应调整门控函数的形式或参数。这可以进一步增加模型的表达能力。

class DynamicSwiGLU(nn.Module):
    """动态β参数的SwiGLU变体"""
    def __init__(self, dim, hidden_dim):
        super().__init__()
        self.w1 = nn.Linear(dim, hidden_dim)
        self.w2 = nn.Linear(hidden_dim, dim)
        self.v = nn.Linear(dim, hidden_dim)
        
        # 学习每个特征维度的β参数
        self.beta = nn.Parameter(torch.ones(hidden_dim) * 0.5)
    
    def dynamic_swish(self, x):
        """每个维度有独立β的Swish"""
        return x * torch.sigmoid(self.beta * x)
    
    def forward(self, x):
        gate = self.dynamic_swish(self.w1(x))
        value = self.v(x)
        return self.w2(gate * value)

5.2 稀疏门控与专家混合

对于超大规模模型(如万亿参数),完全稠密的SwiGLU可能过于昂贵。一个有趣的方向是结合稀疏门控和专家混合(MoE)的思想。每个输入只激活一小部分"专家"FFN,每个专家内部使用SwiGLU。这样可以在保持模型容量的同时控制计算成本。

5.3 硬件感知优化

随着专用AI硬件的发展,未来的激活函数设计可能会更加硬件友好。例如,一些新的芯片架构可能对特定数学运算(如sigmoid)有硬件加速。SwiGLU的变体可能会被重新设计,以充分利用这些硬件特性。

5.4 理论理解的深化

尽管SwiGLU在实践中表现良好,但我们对其为何有效的理论理解仍然有限。一些开放性问题包括:

  • 门控机制如何影响梯度流和损失曲面?
  • SwiGLU与模型缩放定律的关系是什么?
  • 是否存在理论上的最优门控函数形式?

这些问题的答案不仅会加深我们对神经网络的理解,还可能催生下一代更高效的激活函数。

6. 实际案例:从ReLU迁移到SwiGLU的经验分享

最后,我想分享一个实际项目中的经验。我们团队最近将一个3B参数的对话模型从GELU迁移到了SwiGLU,整个过程大约花了三周时间。以下是我们的关键发现:

第一周:小规模实验 我们在一个100M参数的模型上进行了快速实验,比较了ReLU、GELU和SwiGLU。SwiGLU在困惑度(perplexity)上比GELU降低了约8%,但训练时间增加了15%。这个代价看起来是值得的。

第二周:全规模训练调优 将SwiGLU应用到完整3B模型时,我们遇到了梯度不稳定的问题。最终发现是学习率太高——SwiGLU对学习率比GELU更敏感。将学习率从2e-4降到1.5e-4后,训练变得稳定。

第三周:推理优化 SwiGLU在推理时的延迟比GELU高约12%。我们通过内核融合和量化将这部分开销降到了5%以内。最终的模型在多个对话基准上比原版提升了6-10%的性能。

经验教训:迁移到SwiGLU不是简单的替换,需要重新调整超参数,特别是学习率。同时要考虑推理成本,可能需要专门的优化。

如果你正在考虑在自己的模型中使用SwiGLU,我的建议是:从小规模实验开始,仔细监控训练动态,不要期望一蹴而就。成功的迁移需要耐心和系统的实验设计。但一旦调优得当,SwiGLU带来的性能提升通常是值得这些额外努力的。

从零手写Llama:PyTorch原语实现LLM核心模块 大型语言模型(LLM)的本质是张量运算与梯度流动的精密系统,其核心原理植根于Transformer架构的数学基础与工程实现。理解LLM不能止步于调用Hugging Face接口,而需深入词嵌入映射、RoPE位置编码、RMSNorm归一化、SwiGLU门控激活等底层机制——这些正是‘LLMs From Scratch’实践的关键支点。通过纯PyTorch原语手写MultiHeadAttention、TokenEmbedding等模块,开发者可精准掌控内存布局、梯度屏蔽逻辑与数值稳定性边界,从而支撑模型压缩、推 阅读详情

相关推荐

从零实现230万参数语言模型:LLaMA架构核心组件实践

Transformer架构作为现代大语言模型(LLM)的基石,其核心在于通过自注意力机制捕捉序列中的长距离依赖关系。这一原理催生了以ChatGPT、LLaMA为代表的生成式AI浪潮。从工程实践角度看,理解模型架构的细节对于优化性能和实现定制化需求至关重要。LLaMA作为高效开源模型,其采用的RMSNorm预归一化、RoPE旋转位置编码和SwiGLU激活函数等改进,在提升训练稳定性和模型表达能力方面展现了显著的技术价值。这些组件广泛应用于自然语言处理、代码生成等场景。本文聚焦于从零构建一个230万参数的微型语

weixin_42557537的博客 303

7天掌握LLM激活函数:从ReLU到SwiGLU的性能跃迁指南

大型语言模型(LLM)的性能提升离不开激活函数的持续优化。从早期的ReLU到现代LLM广泛采用的SwiGLU,激活函数的演进直接影响模型的表达能力和计算效率。本文将系统梳理主流激活函数的原理与实现,帮助开发者快速掌握LLM中激活函数的应用与优化技巧。 ## 激活函数:LLM的"神经引擎" 激活函数是神经网络的核心组件,负责引入非线性变换能力。在LLM中,激活函数的选择直接影响模型的训练稳定性、

gitblog_01154的博客 1000

大模型真的懂临床知识吗?医疗AI知识编码能力深度验证

临床知识编码是医疗大模型落地的核心能力,指模型对医学概念、指南证据、病理机制等结构化知识的理解、存储与推理能力,而非简单文本匹配。其技术原理涉及稀疏术语建模(如SwiGLU/GLU门控)、时序逻辑捕捉(如RoPE位置编码)及多粒度评估(医生+患者双轨制)。该能力直接决定模型在真实场景中的安全性与可用性,广泛应用于临床决策支持、患者问答系统、用药风险预警等关键环节。本文基于MultiMedQA基准与Flan-PaLM架构实证,系统解析临床知识编码的可测维度与工程落地路径。

chiman6219的博客 351

从零构建大语言模型:GPT、Llama、RWKV三大架构深度对比解析 [特殊字符]

你是否想深入了解大语言模型(LLM)的内部工作原理?Datawhale的"LLMs From Scratch"项目提供了一个绝佳的学习平台,让你仅需Python基础就能从零开始构建GPT、Llama和RWKV等主流大语言模型架构。本文将为你详细解析这三种主流大语言模型架构的核心差异,帮助你深入理解大模型原理,掌握从零构建大语言模型的关键技术。 ## 📊 三大架构概览:从Transformer到

gitblog_01110的博客 476

Llama-2-7B-Chat-HF:从架构原理到本地部署的完整实践指南

Transformer架构作为现代大语言模型的基础,通过自注意力机制实现了对序列数据的强大建模能力。其核心原理在于编码器-解码器结构对输入信息的并行处理与特征提取,这一设计带来了前所未有的上下文理解与生成能力。在工程实践中,为了平衡模型性能与部署成本,**量化**技术和**强化学习人类反馈**微调成为关键技术路径。量化通过降低模型权重的数值精度,大幅减少了存储与计算资源消耗,使得大模型能够在消费级硬件上运行;而RLHF则通过人类偏好数据对模型进行对齐微调,显著提升了模型输出的安全性、有用性和可控性。这些技术

tang_zongyun的博客 455

【AI应用开发工程师】第一章:AI 基础与神经网络入门

这是我从一个 AI 小白走向 AI 应用开发工程师的进阶之路——仍在途中(为问道者点灯,非为大匠者筑台)。从 Transformer 原理到 Agent 工程,从 Prompt 技巧到 RAG 架构,从模型评测到生产部署——这份指南覆盖了 AI 应用开发所需的核心知识体系。每一章都包含原理讲解、可视化图示、代码实战,确保你不仅能"听懂",更能"做出来"。

sjy8207380的专栏 360

从零构建230万参数语言模型:LLaMA架构核心组件实践解析

Transformer架构作为现代大语言模型(LLM)的基石,其核心原理是通过自注意力机制捕捉序列中的长程依赖关系。在工程实践中,为了提升训练稳定性和模型性能,研究者们引入了多项关键技术改进。其中,RMSNorm通过简化归一化计算加速训练收敛,RoPE旋转位置编码则能更有效地建模相对位置关系,这两项技术共同构成了LLaMA等先进模型的高效基础。这些优化不仅降低了模型对硬件的要求,也使其在消费级设备上部署成为可能。本文通过一个230万参数的微型语言模型实践,详细拆解了如何将RMSNorm、RoPE等核心组件集

weixin_42525482的博客 285

Qwen3.5-35B-A3B专用推理引擎:从vLLM失效到Triton内核重写

MoE大模型推理引擎是支撑稀疏专家混合架构高效服务的核心运行时系统,其本质是将动态路由、异构专家计算与自适应注意力等复杂逻辑转化为低延迟、高吞吐的GPU张量运算。传统框架如vLLM依赖静态拓扑假设,难以应对Qwen3.5-35B-A3B特有的动态Top-K路由和专家异构性,导致显存碎片率飙升、延迟抖动严重。Triton作为可编程GPU内核工具,通过细粒度内存布局控制与runtime-aware kernel设计,成为突破A3B架构工程瓶颈的关键路径。本文聚焦于在真实生产场景中构建高性能MoE推理引擎的技术实

weixin_33910137的博客 370

【建议收藏】从零开始掌握大模型:训练与推理完整学习路径,看完少走90%的弯路!

文章系统分享了大语言模型(LLM)的训练与推理学习方法。训练部分涵盖数据准备、模型架构、分布式训练及多阶段训练流程;推理部分聚焦模型压缩、引擎优化、部署实践和技巧提升。作者建议通过"理论+实践+社区"三维度学习,循序渐进打基础,动手实践验证认知,并紧跟社区获取新知。文末提供从入门到进阶的学习路线图和丰富资源,助力读者系统掌握大模型技术。 ---

2401_85154887的博客 790

GRPO+Unsloth+Qwen轻量化强化学习实战指南

强化学习微调是大语言模型对齐用户偏好的核心技术,其中策略优化算法与高效训练框架的协同尤为关键。GRPO(组相对策略优化)通过组内排序替代绝对打分,显著提升抗噪性与鲁棒性;Unsloth则通过CUDA内核级重构,实现LoRA融合、KV缓存复用与梯度显存优化,大幅降低Qwen等主流模型的训练门槛。该技术路径特别适用于本地化推理、低资源部署及快速风格定制等工程场景,支持单卡RTX 4090完成Qwen2.5-7B的端到端GRPO训练,并在AlpacaEval 2.0等基准上稳定提升胜率。本文聚焦grpo lora

weixin_34189116的博客 436

大语言模型工作原理:从tokenization到attention的全流程解析

大语言模型(LLM)本质是一个基于统计的自回归概率预测系统,其核心能力源于tokenization、attention机制与softmax输出的协同运作。tokenization将文本切分为子词单元,为后续数值化建模奠定基础;attention通过动态计算词间依赖关系,实现长程上下文理解;softmax则将隐藏层输出转化为可采样的token概率分布。这一技术路径不仅支撑了对话生成、代码补全等主流应用,更在RAG、Agent等工程架构中体现关键价值。本文聚焦Llama 3等Decoder-only模型的真实运

weixin_33894640的博客 323

从零实践大模型训练:数据、架构、分布式与评估全流程解析

Transformer架构作为现代自然语言处理的核心,其基于自注意力机制的编码器-解码器结构,实现了对序列数据的高效建模。其核心原理在于通过多头注意力机制,使模型能够并行关注输入序列的不同部分,从而捕获长距离依赖关系。这一技术价值在于奠定了大语言模型(LLM)的基础,使得模型能够处理海量文本数据并涌现出强大的理解和生成能力。其应用场景已从最初的机器翻译,扩展到代码生成、对话系统、内容创作等广泛领域。本文将以一个完整的实践项目为例,深入探讨如何基于Transformer架构,从数据工程、模型构建到分布式训练与

weixin_30736301的博客 382

linux下wayland协议修改键盘映射

linux下wayland协议,修改键盘映射,实验环境是Ubuntu24,其他wayland协议窗口应该也是可以的。

qq_15027967的博客 1069

Mistral 7B开源大模型:架构解析、部署实践与微调指南

Transformer架构作为现代大语言模型的核心,通过自注意力机制实现了对序列数据的强大建模能力。其核心原理在于利用注意力权重动态聚合上下文信息,这一机制的技术价值在于能够高效处理长距离依赖关系,从而在自然语言处理、代码生成等场景中表现出色。为了进一步提升效率,业界引入了分组查询注意力(GQA)和滑动窗口注意力(SWA)等优化技术。GQA通过共享键值投影显著降低了推理时的显存占用,而SWA则将长序列的计算复杂度从平方级降至线性级,使模型能够高效处理超长上下文。这些优化共同指向一个目标:在消费级硬件上实现高

weixin_30340617的博客 419

Comsol 超声空化气泡仿真

当液体中受到高能量的超声波作用时,液体中的压力会发生剧烈变化,形成局部的低压区域。当液体中的压力降低到饱和蒸汽压以下时,就会发生空化现象,即液体中形成微小气泡。这种空化常用于一些工业应用,如清洗、乳化、混合等。这种空化常用于一些医学和生物学应用,如碎石术、肿瘤治疗、细胞破碎等。超声空化的应用非常广泛。在医学领域,超声空化广泛应用于诊断和治疗,如超声造影、超声刀、超声碎石术等。在工业领域,超声空化可用于清洗、乳化、混合等工艺。此外,超声空化还在食品加工、化学合成、环境保护等领域有着重要应用。

声学黑洞仿真工作室 2558

mysql9.0windows安装

将这里的位置修改为你刚刚创建并复制data目录的地址即可,win11的系统使用vscode修改之后,会让你确认开启更高权限以进行保存,比较方便,window10不需要确认,修改后可以直接保存。:在修改之前,最好将下图文件进行备份,将原始的文件保存好一份,以防更改了配置之后,导致mysql服务报错,无法启动,备份好的话直接将有问题的配置文件给替换就可以,无需重新安装一次mySql。双击下载的msi文件进行安装。安装有问题的,可以直接进行卸载,新本的mySql会将注册表中的数据自动进行清除,还是很方便的。

m0_74824123的博客 6448

【必藏】从零开始:大语言模型(LLM)训练与推理完整学习指南

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。真诚无偿分享!!!vx扫描下方二维码即可加上后会一个个给大家发。

2401_84815887的博客 1494

Linux 命令之 localectl -- 控制系统的本地化与键盘布局

文章目录命令介绍常用选项参考示例(一)显示当前的本地化设置与键盘映射(二)设置系统的本地化字符集环境变量(三)列出本地所有字符集(四)列出所有可用的控制台键盘映射(五)设置控制台的键盘映射 命令介绍 localectl 命令可用于查询与修改系统的本地化(locale)与键盘布局的设置。 它通过与 systemd-localed.service 通信来修改例如 /etc/locale.conf 与 /etc/vconsole.conf 之类的配置文件。本地化设置控制着 用户界面的语言、字符类型与字符编码、 日

liaowenxiong的博客 5400

如何从零开始掌握大语言模型之训练与推理的系统化实践心得,大模型入门到精通,收藏这篇就足够了!

今天我想和大家聊聊如何系统地学习大语言模型(LLM)的训练与推理。记得2年前我刚开始接触这个领域时,面对海量的技术文档也曾感到迷茫,但通过实践摸索,逐渐理清了学习路径。

huang9604的博客 910

200SMART PLC时间不准?手把手教你用MCGS触摸屏实现自动校时(附完整代码)

本文针对西门子200SMART PLC时钟不准的常见问题,提供了一套基于MCGS触摸屏的自动校时解决方案。文章详细阐述了时钟偏差的根源、时间同步方案的技术选型,并手把手指导如何配置MCGS与PLC的通信,以及编写完整的PLC时间读取、转换与设置代码,最终实现稳定可靠的自动时间同步功能。

jupyter5notebook的博客 462

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法。

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法

weixin_42960380的博客 2500

如何从零开始掌握大语言模型之训练与推理的系统化实践心得

今天我想和大家聊聊如何系统地学习大语言模型(LLM)的训练与推理。记得2年前我刚开始接触这个领域时,面对海量的技术文档也曾感到迷茫,但通过实践摸索,逐渐理清了学习路径。写在前面:目前为止,我也可以基于Pytorch,并结合Transformer架构写出一个小型的LLM了(这个内容,后面有机会再分享)。下面我将结合个人经验,系统分享大模型在训练与推理两大核心阶段的学习方法。

qianggezhishen的专栏 635

机器学习之支持向量机SVM及代码示例

一、线性可分SVMSVM算法最初是用来处理二分类问题的,是一种有监督学习的分类算法。对于线性可分的二分类问题,我们可以找到无穷多个超平面,将两类样本进行区分。(超平面:一维中是一个点;二维中是一条线;三维中是一个面……)在上面的多个超平面中,它们都可以成功将样本集划分两边,但哪一个超平面更好?一般来说,当样本点离超平面越近,样本的标签为某类型的概率应该为0.5左右,确信度比较低,而样本点离超平面越远

cxmscb的博客 5万+

LLM架构七年演进:从Transformer到DeepSeek V4

自2017年Transformer架构提出以来,大语言模型的底层架构经历了一场静默而深刻的技术革命。从GPT-2时期朴实无华的多头注意力与LayerNorm,到2026年DeepSeek V4中融合了上下文稀疏注意力、混合超连接与状态空间对偶的复杂设计,七年时间里,几乎每一个模块都经历过被提出、被质疑、被改进、被替代的完整周期。本文尝试以架构演进为主线,梳理位置编码、注意力机制、归一化策略、稀疏化方法、状态空间模型、混合专家路由、激活函数与残差连接等八大技术方向的发展脉络,并在文末对后Transformer

ChesterXue的博客 353

【AI大模型应用开发】【LlamaIndex教程】2. 存储模块:如何在 LlamaIndex 中使用自定义的向量数据库?(附代码)

前面文章两行代码就实现了文档的切分和向量化存储以及持久化存储。如果我们想用自定义的向量化数据库呢?

同学小张的博客 2119

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

从零构建大语言模型:Transformer架构、训练策略与工程实践全解析

Transformer架构作为现代自然语言处理的核心基础,通过自注意力机制实现了对序列数据的高效建模。其核心原理在于利用多头注意力并行捕捉文本中的长程依赖关系,配合前馈网络与残差连接,构建了强大的特征提取能力。这一技术价值在于为大规模预训练模型提供了可扩展的架构基础,推动了生成式AI的快速发展。在应用场景上,Transformer已广泛应用于机器翻译、文本生成、代码补全等任务。本文聚焦于大语言模型(LLM)的实践构建,深入探讨了从数据预处理、模型实现到训练优化的完整流程,特别针对梯度累积、混合精度训练等工程

weixin_28725959的博客 275

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: Cisco Packet Tracer(思科模拟器)入门指南--从零开始搭建网络拓扑
下一篇: Node.js + NVM 环境搭建微信AI客服机器人保姆级教程(含免费API密钥获取)
人间清醒863
博客等级 码龄3年 33粉丝 1544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值