探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(六)SwiGLU 激活函数

发布于:2024-04-28 ⋅ 阅读:(157) ⋅ 点赞:(0)

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(六)SwiGLU 激活函数

SwiGLU 激活函数

SwiGLU 是深度神经网络中使用的激活函数,是 GLU(门控线性单元)的变体。它用于通过获取输入的加权和并对其应用非线性函数来计算神经网络中神经元的输出。 SwiGLU 使用涉及 Swish 函数和张量乘法的数学表达式来定义。 SwiGLU 是 GLU 的变体,这意味着它基于与 GLU 相同的数学概念。然而,SwiGLU 具有与 GLU 不同的非线性函数。具体来说,SwiGLU 使用 Swish 函数,这是最近提出的激活函数,已被证明在某些应用中优于其他激活函数。

SwiGLU 具有多项优点,使其成为神经网络中有用的激活函数。首先,它基于 GLU 概念,该概念已被证明在许多应用中表现良好。其次,它使用 Swish 函数,该函数已被证明在某些情况下优于其他激活函数,特别是与残差连接结合使用时。第三,由于使用了逐元素乘法,它可以实现高效的计算。

在这里插入图片描述

作者通过在 Transformer 架构的 Feed-Forward 层中使用不同的激活函数来比较 Transformer 模型的性能

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

def forward(self, x: torch.Tensor):
        swish = F.silu(self.w1(x))  # Apply first transformation
        x_V = self.w3(x) 
        x = swish * x_V        # Apply contraction to original dimension
        x = self.w2(x)  # Apply optional additional transformation
        return x

系列博客

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)Llama3 模型 架构
https://duanzhihua.blog.csdn.net/article/details/138208650
探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(二)RoPE位置编码
https://duanzhihua.blog.csdn.net/article/details/138212328

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存
https://duanzhihua.blog.csdn.net/article/details/138213306

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力
https://duanzhihua.blog.csdn.net/article/details/138216050
探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(五)RMS 均方根归一化
https://duanzhihua.blog.csdn.net/article/details/138216630
在这里插入图片描述
在这里插入图片描述