SwiGLU(Swish - gated linear unit)是一种激活函数,在深度学习模型特别是大型语言模型里得到了广泛运用。接下来为你详细介绍SwiGLU:
数学定义
GLU(Gated Linear Unit)是一种门控机制的激活函数,其公式为:
其中,$a$ 和 $b$ 是输入的两个部分,$\odot$ 代表逐元素相乘,$\sigma$ 是Sigmoid函数。
SwiGLU则是把Sigmoid函数替换成了Swish函数,Swish函数的定义为:
这里的 $\beta$ 是一个可学习的参数或者固定的标量。所以SwiGLU的公式为:
代码示例
下面是使用Python和PyTorch实现SwiGLU激活函数的代码:
import torch
import torch.nn as nn
class SwiGLU(nn.Module):
def __init__(self):
super(SwiGLU, self).__init__()
def forward(self, x):
x1, x2 = x.chunk(2, dim=-1)
return x1 * torch.sigmoid(1.702 * x2)
# 使用示例
input_tensor = torch.randn(10, 20)
swiglu = SwiGLU()
output = swiglu(input_tensor)
print(output.shape)
优势
-
提升模型表达能力:门控机制能够让模型动态地选择哪些信息需要通过,从而增强模型的表达能力。
-
改善训练稳定性:相较于其他激活函数,SwiGLU可以在一定程度上缓解梯度消失和梯度爆炸问题,进而提升训练的稳定性。
应用场景
SwiGLU在许多大型语言模型中都有应用,例如PaLM模型就采用了SwiGLU作为激活函数,取得了很好的效果。