SwiGLU论文阅读

1. 论文

1.1 背景知识

SwiGLU是2019年提出的新的激活函数,它结合了SWISHGLU两者的特点。

1.1.1 SWISH: A SELF-GATED ACTIVATION FUNCTION

SWISH激活函数的定义如下,其中σ(x)是sigmoid函数

f(x) = x · σ(x)
σ(x) = (1 + exp(−x))^(-1)

SWISH激活函数是光滑且非单调,在x大于0时f(x)无上限,在x小于0时f(x)有下限,图如下:
在这里插入图片描述

其他激活函数对比如下:
在这里插入图片描述

SWISH激活函数的一次求导结果为:

f'(x) = σ(x) + x · σ(x)(1 − σ(x))
= σ(x) + x · σ(x) − x · σ(x)
= x · σ(x) + σ(x)(1 − x · σ(x))
= f(x) + σ(x)(1 − f(x))

在这里插入图片描述

1.1.2 GLU: Gated Linear Unit

GLU是Microsoft在2016年提出的,相比LSTM序列计算上有前后依赖不能很好并行,GLU是在conv基础上加上了gate的结构,可以实现stack堆叠,效果上比LSTM更好。

GLU的基础结构如下:
在这里插入图片描述

GLU的定义如下:
在这里插入图片描述

在PyTorch中也有内置的GLU函数torch.nn.GLU(dim=-1),对应GLU(a,b)=a⊗σ(b), 其中a表示传入矩阵的前一半,b表示传入矩阵的后一半, dim=-1表示从最后一维进行切分。跟论文中不同的是线性变换要用的话需要自己实现。

示例如下:

import torch.nn as nn
m = nn.GLU()
input = torch.randn(4, 2)
output = m(input) # shape:[4, 1]

等价于如下:

input_split = torch.split(input, 1, dim=-1)
sigmoid = nn.Sigmoid()
output = input_split[0] * sigmoid(input_split[1])

1.2 SwiGLU

SwiGLU主要是为了提升transformer中的FFN(feed-forward network)层的实现。FFN层的原始定义如下,其中使用了ReLU的激活:

FFN(x, W1, W2, b1, b2) = max(0, xW1 + b1)W2 + b2

FFN的一些变种会使用不同的激活来替换ReLU:

  • 使用不带GLU的激活变种FFN如下,例如在T5中使用了不带bias的ReLU,也有使用GELU和Swish代替ReLU的FFN实现。
FFN_ReLU(x, W1, W2) = max(xW1, 0)W2
FFN_GELU(x, W1, W2) = GELU(xW1)W2
FFN_Swish(x, W1, W2) = Swish1(xW1)W2
  • 使用带GLU的激活变种FFN如下:
GLU(x, W, V, b, c) = σ(xW + b) ⊗ (xV + c)
Bilinear(x, W, V, b, c) = (xW + b) ⊗ (xV + c)
ReGLU(x, W, V, b, c) = max(0, xW + b) ⊗ (xV + c)
GEGLU(x, W, V, b, c) = GELU(xW + b) ⊗ (xV + c)
SwiGLU(x, W, V, b, c, β) = Swishβ(xW + b) ⊗ (xV + c)

FFN_GLU(x, W, V, W2) = (σ(xW) ⊗ xV )W2
FFN_Bilinear(x, W, V, W2) = (xW ⊗ xV )W2
FFN_ReGLU(x, W, V, W2) = (max(0, xW) ⊗ xV )W2
FFN_GEGLU(x, W, V, W2) = (GELU(xW) ⊗ xV )W2
FFN_SwiGLU(x, W, V, W2) = (Swish1(xW) ⊗ xV )W2

2. 参考

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MLTalks

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值