神经网络的激活函数(五)门控系列 GLU、Swish和SwiGLU GLU函数 8 GLU(Gated Linear Unit,门控线性单元)是一种在深度学习中用于增强模型表现的激活函数。GLU通过引入门控机制,使得模型能够选择性地通过信息,从而提高模型的表达能力和性能。 1.1 数学定义 GLU函数的数学表达式为: $$\text{GLU}(x) = (X ∗ W + b) ⊗ σ(X ∗ V + c)$$ 其中 ⊗ 表示逐元素乘法,$X$ 是输入,$W$ 和 $V$ 是权重矩阵,$b$ 和 $c$ 是偏置项。 1.2 关键性质 门控机制:GLU通过引入门控机制,使得模型能够选择性地通过信息,从而提高模型的表达能力。 非线性:GLU结合了线性变换和非线性激活,使得模型能够学习复杂的模式。
神经网络的激活函数(五)门控系列 GLU、Swish和SwiGLU
GLU(Gated Linear Unit,门控线性单元)是一种在深度学习中用于增强模型表现的激活函数。GLU通过引入门控机制,使得模型能够选择性地通过信息,从而提高模型的表达能力和性能。
GLU函数的数学表达式为:
其中 ⊗ 表示逐元素乘法,X 是输入,W 和 V 是权重矩阵,b 和 c 是偏置项。
GLU激活函数是在2017年由Yann Dauphin等人在论文《Language Modeling with Gated Convolutional Networks》中提出的。
以下是一个简单的Python示例,展示如何计算GLU函数:
import numpy as np def glu(x): """GLU 激活函数 参数: x -- 输入数组,维度必须是偶数 返回: GLU 激活后的数组 """ assert x.shape[-1] % 2 == 0, "输入数组的最后一个维度必须是偶数" half_dim = x.shape[-1] // 2 return x[..., :half_dim] * sigmoid(x[..., half_dim:]) def sigmoid(x): """Sigmoid 函数 参数: x -- 输入值 返回: Sigmoid 函数的输出值 """ return 1 / (1 + np.exp(-x))
Swish激活函数是一种在深度学习中广泛应用的激活函数,由Google Brain团队提出。Swish函数通过引入一个可学习的参数,使得激活函数在训练过程中能够自适应地调整,从而提高模型的性能。
Swish函数的数学表达式为:
其中:
在大多数情况下,\beta 被设置为1,从而简化为:
[ \text{Swish}(x) = x \cdot \sigma(x) ]
Swish激活函数是在2017年由Google Brain团队在论文《Searching for Activation Functions》中提出的。
以下是一个简单的Python示例,展示如何计算Swish函数:
import numpy as np def swish(x,beta=1.0): """Swish 激活函数 参数: x -- 输入值 返回: Swish 激活后的值 """ return x * sigmoid(beta*x) def sigmoid(x): """Sigmoid 函数 参数: x -- 输入值 返回: Sigmoid 函数的输出值 """ return 1 / (1 + np.exp(-x))
SwiGLU(Swish-Gated Linear Unit)是一种结合了Swish和GLU(Gated Linear Unit)特点的激活函数,旨在提高深度学习模型的性能。SwiGLU通过引入门控机制和Swish激活函数,使得模型能够更有效地选择性通过信息,从而增强模型的表达能力和性能。
SwiGLU函数的数学表达式为:
其中:
SwiGLU激活函数是在2021年由DeepMind团队在论文《Scaling Vision Transformers》中提出的。
以下是一个简单的Python示例,展示如何计算SwiGLU函数:
import numpy as np def SwiGLU(x): """SwiGLU 激活函数 参数: x -- 输入数组,维度必须是偶数 返回: SwiGLU 激活后的数组 """ assert x.shape[-1] % 2 == 0, "输入数组的最后一个维度必须是偶数" half_dim = x.shape[-1] // 2 return x[..., :half_dim] * swish(x[..., half_dim:]) def swish(x,beta=1.0): """Swish 激活函数 参数: x -- 输入值 返回: Swish 激活后的值 """ return x * sigmoid(beta*x) def sigmoid(x): """Sigmoid 函数 参数: x -- 输入值 返回: Sigmoid 函数的输出值 """ return 1 / (1 + np.exp(-x))
SwiGLU激活函数结合了Swish和GLU的优点,通过引入门控机制和平滑非单调特性,解决了ReLU等激活函数的一些固有问题。SwiGLU在许多深度学习任务中表现出色,特别是在计算机视觉和自然语言处理任务中。它通过门控机制和平滑激活,使得模型能够更快地收敛并达到更高的性能。
[1] Language Modeling with Gated Convolutional Networks
[2] Searching for Activation Functions
[3] Scaling Vision Transformers
仓库上有原始的Markdown文件,完全开源,欢迎大家Star和Fork!