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作为激活函数,取得了很好的效果。