SwiGLU能否超越ReLUGELU,激活函数迭代演进,性能提升18.9%?
- 内容介绍
- 文章标签
- 相关推荐
容我插一句... 如果我们想在较大模型中采用SwiGLU作为激活函数,先来看我们需要了解SwiGLU的原理和PyTorch实现。SwiGLU是一种结合了Swish激活函数和门控线性单元的激活函数, 它通过门控实现动态特征选择,有效缓解了梯度消失问题,并且在参数效率与模型性能之间取得了更良好的平衡。下面是SwiGLU的Python实现代化码:
造起来。 python import torch import torch.nn as nn

也是没谁了... class SwiGLU: def init: super.init self.sigmoid = nn.Sigmoid self.linear1 = nn.Linear self.linear2 = nn.Linear self.linear3 = nn.Linear
def forward:
gate_h = self.linear1
up_h = self.linear2
silu_gate = self.sigmoid
swiglu_out = up_h * silu_gate
final_out = self.linear3
return final_out
该实现包含四个最主要一部分:门控线性单元、 原始特征线性单元、sigmoid激活函数和最终还是输出线性单元。其中,gate_h 和 up_h 是两个独立的线性层,分别负责计算门控信号和原始特征值。sigmoid 激活函数用于计算门控信号的值范围,然后将其应用于原始特征值上。最后再来看,最终还是输出层将 SwiGLU 最终还是结果是进行降维转换以获取最终还是输出最终还是结果是。
抓到重点了。 接下来 我们能够采用 Qwen-7B-Chat 模型作为例子,来验证 SwiGLU 的效果。
容我插一句... 如果我们想在较大模型中采用SwiGLU作为激活函数,先来看我们需要了解SwiGLU的原理和PyTorch实现。SwiGLU是一种结合了Swish激活函数和门控线性单元的激活函数, 它通过门控实现动态特征选择,有效缓解了梯度消失问题,并且在参数效率与模型性能之间取得了更良好的平衡。下面是SwiGLU的Python实现代化码:
造起来。 python import torch import torch.nn as nn

也是没谁了... class SwiGLU: def init: super.init self.sigmoid = nn.Sigmoid self.linear1 = nn.Linear self.linear2 = nn.Linear self.linear3 = nn.Linear
def forward:
gate_h = self.linear1
up_h = self.linear2
silu_gate = self.sigmoid
swiglu_out = up_h * silu_gate
final_out = self.linear3
return final_out
该实现包含四个最主要一部分:门控线性单元、 原始特征线性单元、sigmoid激活函数和最终还是输出线性单元。其中,gate_h 和 up_h 是两个独立的线性层,分别负责计算门控信号和原始特征值。sigmoid 激活函数用于计算门控信号的值范围,然后将其应用于原始特征值上。最后再来看,最终还是输出层将 SwiGLU 最终还是结果是进行降维转换以获取最终还是输出最终还是结果是。
抓到重点了。 接下来 我们能够采用 Qwen-7B-Chat 模型作为例子,来验证 SwiGLU 的效果。

